Explorar el Código

Lua : Type/Reflect fixes

Type/Reflect is still a work in progress, but this should avoid some lua
syntax errors as I work out the details.
Justin Donaldson hace 10 años
padre
commit
e127aab400
Se han modificado 2 ficheros con 18 adiciones y 15 borrados
  1. 6 4
      genlua.ml
  2. 12 11
      std/lua/_std/Std.hx

+ 6 - 4
genlua.ml

@@ -1211,7 +1211,7 @@ let generate_class ctx c =
 			| Some (csup,_) when Codegen.has_properties csup ->
 				newprop ctx;
 				let psup = s_path ctx csup.cl_path in
-				print ctx "__properties__ =  _extend(%s.prototype.__properties__,{%s})" psup (gen_props props)
+				print ctx "__properties__ =  {__index = %s.mt.__properties__,{%s}}" psup (gen_props props)
 			| _ ->
 				newprop ctx;
 				print ctx "__properties__ =  {%s}" (gen_props props));
@@ -1224,17 +1224,19 @@ let generate_class ctx c =
 let generate_enum ctx e =
 	let p = s_path ctx e.e_path in
 	let ename = List.map (fun s -> Printf.sprintf "\"%s\"" (Ast.s_escape s)) (fst e.e_path @ [snd e.e_path]) in
-	print ctx "%s = " p;
-	if has_feature ctx "Type.resolveEnum" then
-	    spr ctx "_hxClasses[\"%s\"]";
+	if has_feature ctx "Type.resolveEnum" then begin
 	    newline ctx;
 	    print ctx "_hxClasses[\"%s\"] = " (dot_path e.e_path);
+	end;
 
 	print ctx "{";
 	if has_feature ctx "lua.Boot.isEnum" then print ctx " __ename__ = %s," (if has_feature ctx "Type.getEnumName" then "{" ^ String.concat "," ename ^ "}" else "true");
 	print ctx " __constructs__ = {%s} }" (String.concat "," (List.map (fun s -> Printf.sprintf "\"%s\"" s) e.e_names));
 	ctx.separator <- true;
 	newline ctx;
+	print ctx "%s = " p;
+	print ctx "_hxClasses[\"%s\"]" (dot_path e.e_path);
+	newline ctx;
 	List.iter (fun n ->
 		let f = PMap.find n e.e_constrs in
 		print ctx "%s%s = " p (field f.ef_name);

+ 12 - 11
std/lua/_std/Std.hx

@@ -37,21 +37,21 @@ import lua.Boot;
 	}
 
 	public static inline function int( x : Float ) : Int {
-		return cast(x, Int) | 0;
+		return Math.floor(x + .5); 
 	}
 
 	public static function parseInt( x : String ) : Null<Int> {
-		var v = untyped __js__("parseInt")(x, 10);
-		// parse again if hexadecimal
+		var v = null;
 		if( v == 0 && (x.charCodeAt(1) == 'x'.code || x.charCodeAt(1) == 'X'.code) )
-			v = untyped __js__("parseInt")(x);
-		if( untyped __js__("isNaN")(v) )
-			return null;
+			v = Std.int(untyped tonumber(x,16)); 
+		else 
+			v = Std.int(untyped tonumber(x)); 
+		if(Math.isNaN(v)) return null;
 		return cast v;
 	}
 
 	public static inline function parseFloat( x : String ) : Float {
-		return untyped __js__("parseFloat")(x);
+		return untyped tonumber(x); 
 	}
 
 	public static function random( x : Int ) : Int {
@@ -64,8 +64,9 @@ import lua.Boot;
 		__feature__("Type.resolveClass",_hxClasses["Array"] = Array);
 		__feature__("js.Boot.isClass",Array.__name__ = __feature__("Type.getClassName",["Array"],true));
 		__feature__("Date.*", {
-			__feature__("js.Boot.getClass",__js__('Date').prototype.__class__ = __feature__("Type.resolveClass",_hxClasses["Date"] = __js__('Date'),__js__('Date')));
-			__feature__("js.Boot.isClass",__js__('Date').__name__ = ["Date"]);
+			var Date = {};
+			__feature__("js.Boot.getClass", _hxClasses["Date"] = {}, {});
+			__feature__("js.Boot.isClass", Date.__name__ = ["Date"]);
 		});
 		__feature__("Int.*",{
 			var Int = __feature__("Type.resolveClass", _hxClasses["Int"] = { __name__ : ["Int"] }, { __name__ : ["Int"] });
@@ -74,11 +75,11 @@ import lua.Boot;
 			var Dynamic = __feature__("Type.resolveClass", _hxClasses["Dynamic"] = { __name__ : ["Dynamic"] }, { __name__ : ["Dynamic"] });
 		});
 		__feature__("Float.*",{
-			var Float = __feature__("Type.resolveClass", _hxClasses["Float"] = __js__("Number"), __js__("Number"));
+			var Float = __feature__("Type.resolveClass", _hxClasses["Float"]={}, {});
 			Float.__name__ = ["Float"];
 		});
 		__feature__("Bool.*",{
-			var Bool = __feature__("Type.resolveEnum",_hxClasses["Bool"] = __js__("Boolean"), __js__("Boolean"));
+			var Bool = __feature__("Type.resolveEnum",_hxClasses["Bool"] = {}, {});
 			Bool.__ename__ = ["Bool"];
 		});
 		__feature__("Class.*",{