Browse Source

Dont infer string on concat (#11318)

* [typer] don't infer String when concatenating

see #11284

* dodge neko things very elegantly
Simon Krajewski 1 year ago
parent
commit
c17e976524
2 changed files with 16 additions and 4 deletions
  1. 12 4
      src/typing/operators.ml
  2. 4 0
      std/neko/Boot.hx

+ 12 - 4
src/typing/operators.ml

@@ -237,14 +237,22 @@ let make_binop ctx op e1 e2 is_assign_op with_type p =
 			if unify_int ctx e1 KUnk then tint else tfloat
 		| KUnk , KFloat
 		| KUnk , KString  ->
-			unify ctx e1.etype e2.etype e1.epos;
-			e1.etype
+			if Define.defined ctx.com.defines Define.HaxeNext then
+				e2.etype
+			else begin
+				unify ctx e1.etype e2.etype e1.epos;
+				e1.etype
+			end
 		| KInt , KUnk ->
 			if unify_int ctx e2 KUnk then tint else tfloat
 		| KFloat , KUnk
 		| KString , KUnk ->
-			unify ctx e2.etype e1.etype e2.epos;
-			e2.etype
+			if Define.defined ctx.com.defines Define.HaxeNext then
+				e1.etype
+			else begin
+				unify ctx e2.etype e1.etype e2.epos;
+				e2.etype
+			end
 		| _ , KString
 		| KString , _ ->
 			tstring

+ 4 - 0
std/neko/Boot.hx

@@ -48,7 +48,11 @@ class Boot {
 			i += 1;
 		}
 		e.__string = old;
+		#if haxe_next
+		return NativeString.ofString(s + untyped ")".__s);
+		#else
 		return s + untyped ")".__s;
+		#end
 	}
 
 	private static function __interfLoop(cc:Dynamic, cl:Dynamic) {