瀏覽代碼

Dont infer string on concat (#11318)

* [typer] don't infer String when concatenating

see #11284

* dodge neko things very elegantly
Simon Krajewski 1 年之前
父節點
當前提交
c17e976524
共有 2 個文件被更改,包括 16 次插入4 次删除
  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
 			if unify_int ctx e1 KUnk then tint else tfloat
 		| KUnk , KFloat
 		| KUnk , KFloat
 		| KUnk , KString  ->
 		| 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 ->
 		| KInt , KUnk ->
 			if unify_int ctx e2 KUnk then tint else tfloat
 			if unify_int ctx e2 KUnk then tint else tfloat
 		| KFloat , KUnk
 		| KFloat , KUnk
 		| KString , 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
 		| KString , _ ->
 		| KString , _ ->
 			tstring
 			tstring

+ 4 - 0
std/neko/Boot.hx

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