فهرست منبع

make haxe.Template check Reflect.field != null when resolving (closes #4885)

Simon Krajewski 9 سال پیش
والد
کامیت
7f3af7a4bb
2فایلهای تغییر یافته به همراه26 افزوده شده و 2 حذف شده
  1. 3 2
      std/haxe/Template.hx
  2. 23 0
      tests/unit/src/unit/issues/Issue4885.hx

+ 3 - 2
std/haxe/Template.hx

@@ -112,8 +112,9 @@ class Template {
 	}
 
 	function resolve( v : String ) : Dynamic {
-		if( Reflect.hasField(context,v) )
-			return Reflect.field(context,v);
+		var value = Reflect.field(context, v);
+		if( value != null || Reflect.hasField(context,v) )
+			return value;
 		for( ctx in stack )
 			if( Reflect.hasField(ctx,v) )
 				return Reflect.field(ctx,v);

+ 23 - 0
tests/unit/src/unit/issues/Issue4885.hx

@@ -0,0 +1,23 @@
+package unit.issues;
+
+private class Context {
+
+	public var name:String;
+
+	public function new(n:String):Void {
+		name = n;
+	}
+
+}
+
+class Issue4885 extends Test {
+	function test() {
+        var
+            raw:String = "My name is ::name::.",
+            context:Context = new Context("Joan"),
+            template:haxe.Template = new haxe.Template(raw),
+            output:String = template.execute(context)
+        ;
+        eq("My name is Joan.", output);
+	}
+}