فهرست منبع

[php] check string type in TUnop too (closes #3263)

Simon Krajewski 11 سال پیش
والد
کامیت
456fe974e0
2فایلهای تغییر یافته به همراه57 افزوده شده و 1 حذف شده
  1. 1 1
      genphp.ml
  2. 56 0
      tests/unit/issues/Issue3263.hx

+ 1 - 1
genphp.ml

@@ -1456,7 +1456,7 @@ and gen_expr ctx e =
 			);
 		| TField (e1,s) ->
 			spr ctx (Ast.s_unop op);
-			gen_field_access ctx true e1 (field_name s)
+			gen_tfield ctx e e1 (field_name s)
 		| _ ->
 			spr ctx (Ast.s_unop op);
 			gen_value ctx e)

+ 56 - 0
tests/unit/issues/Issue3263.hx

@@ -0,0 +1,56 @@
+package unit.issues;
+
+class Issue3263 extends Test {
+	public static function teststrings1 () {
+		var str1 = 'Test';
+		var len = str1.length;
+		var str2 = str1.substr(0, -(len)-1);
+		return str2;
+	}
+
+	public static function teststrings2 () {
+		var str1 = 'Test';
+		var str2 = str1.substr(0, -(str1.length)-1);
+		return str2;
+	}
+
+	public static function teststrings3 () {
+		var str1 = 'Test';
+		var str2 = str1.substr(0, (str1.length)-1);
+		return str2;
+	}
+
+	public static function teststrings4 () {
+		var str1 = 'Test';
+		var str2 = str1.substr(0, (str1.length));
+		return str2;
+	}
+
+	public static function teststrings5 () {
+		var str1 = 'Test';
+		var str2 = str1.substr(0, str1.length);
+		return str2;
+	}
+
+	public static function teststrings6 () {
+		var str1 = 'Test';
+		var str2 = str1.substr(0, -str1.length - 1);
+		return str2;
+	}
+
+	public static function teststrings7 () {
+		var str1 = 'Test';
+		var str2 = str1.substr(0, -str1.length);
+		return str2;
+	}
+
+	function test() {
+		//eq("Tes", teststrings1());
+		eq("Tes", teststrings3());
+		eq("Test", teststrings4());
+		eq("Test", teststrings5());
+		//eq("Tes", teststrings2());
+		//eq("Tes", teststrings6());
+		eq("", teststrings7());
+	}
+}