2
0
Эх сурвалжийг харах

parse and print anonymous fields as real class fields (fixed issue #1177)

Nicolas Cannasse 13 жил өмнө
parent
commit
785b7393a5

+ 2 - 4
std/haxe/rtti/CType.hx

@@ -34,7 +34,7 @@ enum CType {
 	CClass( name : Path, params : List<CType> );
 	CTypedef( name : Path, params : List<CType> );
 	CFunction( args : List<{ name : String, opt : Bool, t : CType }>, ret : CType );
-	CAnonymous( fields : List<{ name : String, t : CType  }> );
+	CAnonymous( fields : List<ClassField> );
 	CDynamic( ?t : CType );
 }
 
@@ -199,9 +199,7 @@ class TypeApi {
 		case CAnonymous(fields):
 			switch( t2 ) {
 			case CAnonymous(fields2):
-				return leq(function(a,b) {
-					return a.name == b.name && typeEq(a.t,b.t);
-				},fields,fields2);
+				return leq(function(a,b) return fieldEq(a,b),fields,fields2);
 			default:
 			}
 		case CDynamic(t):

+ 3 - 3
std/haxe/rtti/HtmlEditor.hx

@@ -127,7 +127,7 @@ class HtmlEditor {
 				buf.add("<tr><th>");
 				buf.add(f.name);
 				buf.add("</th><td>");
-				buildHTMLRec(Reflect.field(v,f.name),f.t,false);
+				buildHTMLRec(Reflect.field(v,f.name),f.type,false);
 				buf.add("</td></tr>");
 			}
 			close("table");
@@ -244,7 +244,7 @@ class HtmlEditor {
 		case CAnonymous(fl):
 			var o = {};
 			for( f in fl )
-				Reflect.setField(o,f.name,buildObjectRec(params,f.t,false));
+				Reflect.setField(o,f.name,buildObjectRec(params,f.type,false));
 			o;
 		case CClass(name,_):
 			var v = params.get(genFieldName());
@@ -312,7 +312,7 @@ class HtmlEditor {
 			skipObjectRec(followTypeDef(name,pl),nullable || name == "Null");
 		case CAnonymous(fl):
 			for( f in fl )
-				skipObjectRec(f.t,false);
+				skipObjectRec(f.type,false);
 		case CEnum(name,_):
 			if( name == "Bool" ) {
 				skipObjectRec(CClass("Bool",new List()),nullable);

+ 1 - 4
std/haxe/rtti/XmlParser.hx

@@ -505,10 +505,7 @@ class XmlParser {
 		case "a":
 			var fields = new List();
 			for( f in x.elements )
-				fields.add({
-					name : f.name,
-					t : xtype(new Fast(f.x.firstElement())),
-				});
+				fields.add(xclassfield(f));
 			CAnonymous(fields);
 		case "d":
 			var t = null;

+ 12 - 28
std/tools/haxedoc/HtmlPrinter.hx

@@ -279,15 +279,14 @@ class HtmlPrinter {
 				if( f.params != null )
 					print("&lt;"+f.params.join(", ")+"&gt;");
 				print("(");
-				var me = this;
 				display(args,function(a) {
 					if( a.opt )
-						me.print("?");
+						print("?");
 					if( a.name != null && a.name != "" ) {
-						me.print(a.name);
-						me.print(" : ");
+						print(a.name);
+						print(" : ");
 					}
-					me.processType(a.t);
+					processType(a.t);
 				},", ");
 				print(") : ");
 				processType(ret);
@@ -338,13 +337,12 @@ class HtmlPrinter {
 			print(c.name);
 			if( c.args != null ) {
 				print("(");
-				var me = this;
 				display(c.args,function(a) {
 					if( a.opt )
-						me.print("?");
-					me.print(a.name);
-					me.print(" : ");
-					me.processType(a.t);
+						print("?");
+					print(a.name);
+					print(" : ");
+					processType(a.t);
 				},",");
 				print(")");
 			}
@@ -394,21 +392,8 @@ class HtmlPrinter {
 		switch( t ) {
 		case CAnonymous(fields):
 			print('<dl>');
-			for( f in fields ) {
-				processClassField(all,{
-					name : f.name,
-					type : f.t,
-					isPublic : true,
-					isOverride : false,
-					doc : null,
-					get : RNormal,
-					set : RNormal,
-					params : null,
-					platforms : platforms,
-					meta : [],
-					line : null,
-				},false);
-			}
+			for( f in fields )
+				processClassField(all,f);
 			print('</dl>');
 		default:
 			if( all.length != platforms.length ) {
@@ -461,10 +446,9 @@ class HtmlPrinter {
 			processTypeFun(ret,false);
 		case CAnonymous(fields):
 			print("{ ");
-			var me = this;
 			display(fields,function(f) {
-				me.print(f.name+" : ");
-				me.processType(f.t);
+				print(f.name+" : ");
+				processType(f.type);
 			},", ");
 			print("}");
 		case CDynamic(t):