@@ -85,7 +85,7 @@ static TokenResult tryField(TokenExecutor exec, Class<?> clazz, String member, b
8585			if  (isInst ) {
8686				exec .pop ();
8787			}
88- 			exec .push (convert (exec . interpreter , result ));
88+ 			exec .push (convert (exec , result ));
8989			return  TokenResult .PASS ;
9090		}
9191		catch  (Exception  e ) {
@@ -130,7 +130,7 @@ static TokenResult tryExecutable(TokenExecutor exec, Class<?> clazz, List<Execut
130130					}
131131					exec .pop (count );
132132					if  (result  != null ) {
133- 						exec .push (convert (exec . interpreter , result ));
133+ 						exec .push (convert (exec , result ));
134134					}
135135					return  TokenResult .PASS ;
136136				}
@@ -291,19 +291,19 @@ static <T> T[] newArray(Type componentType) {
291291		return  (T []) Array .newInstance (rawType (componentType ), 0 );
292292	}
293293
294- 	static  <T  extends  Collection <Object >> T  collection_nativize (Collection <@ NonNull  Element > collection , Type  type , Tracker  tracker , Collector <Object , ?, T > collector ) {
295- 		return  collection . stream () .map (x  -> trackedNativize (x , type , tracker )).collect (collector );
294+ 	static  <T  extends  Collection <Object >> T  collection_nativize (Stream <@ NonNull  Element > stream , Type  type , Tracker  tracker , Collector <Object , ?, T > collector ) {
295+ 		return  stream .map (x  -> trackedNativize (x , type , tracker )).collect (collector );
296296	}
297297
298298	static  Object  listNativize (@ NonNull  Element  elem , Type  type ) {
299299		Tracker  tracker  = new  Tracker ();
300- 		List <?> obj  = collection_nativize (((ListElement ) elem ).value , type , tracker , Collectors .toList ());
300+ 		List <?> obj  = collection_nativize (((ListElement ) elem ).value . stream () , type , tracker , Collectors .toList ());
301301		return  tracker .flag  ? null  : obj ;
302302	}
303303
304304	static  Object  arrayNativize (@ NonNull  Element  elem , Type  type ) {
305305		Tracker  tracker  = new  Tracker ();
306- 		List <?> obj  = collection_nativize (((ListElement ) elem ).value , type , tracker , Collectors .toList ());
306+ 		List <?> obj  = collection_nativize (((ListElement ) elem ).value . stream () , type , tracker , Collectors .toList ());
307307		if  (tracker .flag ) {
308308			return  null ;
309309		}
@@ -373,13 +373,13 @@ else if (type.equals(char.class)) {
373373
374374	static  Object  setNativize (@ NonNull  Element  elem , Type  type ) {
375375		Tracker  tracker  = new  Tracker ();
376- 		Set <?> obj  = collection_nativize (((SetElement ) elem ).value , type , tracker , Collectors .toSet ());
376+ 		Set <?> obj  = collection_nativize (((SetElement ) elem ).value . stream (). map ( x  ->  x . elem ) , type , tracker , Collectors .toSet ());
377377		return  tracker .flag  ? null  : obj ;
378378	}
379379
380380	static  Object  mapNativize (@ NonNull  Element  elem , Type  keyType , Type  valueType ) {
381381		Tracker  tracker  = new  Tracker ();
382- 		Map <?, ?> obj  = Helpers .map (((DictElement ) elem ).value , x  -> trackedNativize (x , keyType , tracker ), x  -> trackedNativize (x , valueType , tracker ));
382+ 		Map <?, ?> obj  = Helpers .map (((DictElement ) elem ).value , x  -> trackedNativize (x . elem , keyType , tracker ), x  -> trackedNativize (x , valueType , tracker ));
383383		return  tracker .flag  ? null  : obj ;
384384	}
385385
@@ -400,55 +400,54 @@ static Object trackedNativize(@NonNull Element elem, Type type, Tracker tracker)
400400		return  tracked (elem , y  -> nativize (y , type ), tracker );
401401	}
402402
403- 	static  @ NonNull  Element  convert (Interpreter   interpreter , Object  obj ) {
403+ 	static  @ NonNull  Element  convert (TokenExecutor   exec , Object  obj ) {
404404		if  (obj  == null ) {
405- 			return  interpreter .builtIn .nullElement ;
405+ 			return  exec . interpreter .builtIn .nullElement ;
406406		}
407407		else  if  (obj  instanceof  Byte ) {
408- 			return  new  IntElement (interpreter , (Byte ) obj );
408+ 			return  new  IntElement (exec . interpreter , (Byte ) obj );
409409		}
410410		else  if  (obj  instanceof  Short ) {
411- 			return  new  IntElement (interpreter , (Short ) obj );
411+ 			return  new  IntElement (exec . interpreter , (Short ) obj );
412412		}
413413		else  if  (obj  instanceof  Integer ) {
414- 			return  new  IntElement (interpreter , (Integer ) obj );
414+ 			return  new  IntElement (exec . interpreter , (Integer ) obj );
415415		}
416416		else  if  (obj  instanceof  Long ) {
417- 			return  new  IntElement (interpreter , (Long ) obj );
417+ 			return  new  IntElement (exec . interpreter , (Long ) obj );
418418		}
419419		else  if  (obj  instanceof  BigInteger ) {
420- 			return  new  IntElement (interpreter , (BigInteger ) obj );
420+ 			return  new  IntElement (exec . interpreter , (BigInteger ) obj );
421421		}
422422		else  if  (obj  instanceof  Boolean ) {
423- 			return  new  BoolElement (interpreter , (Boolean ) obj );
423+ 			return  new  BoolElement (exec . interpreter , (Boolean ) obj );
424424		}
425425		else  if  (obj  instanceof  Float ) {
426- 			return  new  FloatElement (interpreter , ((Float ) obj ).doubleValue ());
426+ 			return  new  FloatElement (exec . interpreter , ((Float ) obj ).doubleValue ());
427427		}
428428		else  if  (obj  instanceof  Double ) {
429- 			return  new  FloatElement (interpreter , (Double ) obj );
429+ 			return  new  FloatElement (exec . interpreter , (Double ) obj );
430430		}
431431		else  if  (obj  instanceof  Character ) {
432- 			return  new  CharElement (interpreter , (Character ) obj );
432+ 			return  new  CharElement (exec . interpreter , (Character ) obj );
433433		}
434434		else  if  (obj  instanceof  String ) {
435- 			return  new  StringElement (interpreter , (String ) obj );
435+ 			return  new  StringElement (exec . interpreter , (String ) obj );
436436		}
437437		else  if  (obj  instanceof  List ) {
438- 			return  new  ListElement (interpreter , ((List <?>) obj ).stream ().map (x  -> convert (interpreter , x )));
438+ 			return  new  ListElement (exec . interpreter , ((List <?>) obj ).stream ().map (x  -> convert (exec , x )));
439439		}
440440		else  if  (obj .getClass ().isArray ()) {
441- 			return  new  ListElement (interpreter , IntStream .range (0 , Array .getLength (obj )).mapToObj (x  -> NativeImpl .convert (interpreter , Array .get (obj , x ))));
441+ 			return  new  ListElement (exec . interpreter , IntStream .range (0 , Array .getLength (obj )).mapToObj (x  -> NativeImpl .convert (exec , Array .get (obj , x ))));
442442		}
443443		else  if  (obj  instanceof  Set ) {
444- 			return  new  SetElement (interpreter , Helpers .map ((Set <?>) obj , x  -> convert (interpreter , x )));
444+ 			return  new  SetElement (exec . interpreter , Helpers .map ((Set <?>) obj , x  -> convert (exec , x ). toKey ( exec )));
445445		}
446446		else  if  (obj  instanceof  Map ) {
447- 			Function <Object , @ NonNull  Element > convert  = x  -> convert (interpreter , x );
448- 			return  new  DictElement (interpreter , Helpers .map ((Map <?, ?>) obj , convert , convert ), false );
447+ 			return  new  DictElement (exec .interpreter , Helpers .map ((Map <?, ?>) obj , x  -> convert (exec , x ).toKey (exec ), x  -> convert (exec , x )));
449448		}
450449		else  {
451- 			return  new  NativeElement (interpreter , obj );
450+ 			return  new  NativeElement (exec . interpreter , obj );
452451		}
453452	}
454453}
0 commit comments