Quellcode durchsuchen

Lua: Misc cleanup and TODOS

I've been trying to get basic OOP working as a goal, but I'm writing
some code that I think will need to get updated to cover all edge cases.
I'm leaving some notes before I forget.  Also, cleaning a few things up.
Justin Donaldson vor 10 Jahren
Ursprung
Commit
77e8448deb
3 geänderte Dateien mit 24 neuen und 7 gelöschten Zeilen
  1. 21 4
      genlua.ml
  2. 2 2
      std/haxe/Log.hx
  3. 1 1
      std/lua/Boot.hx

+ 21 - 4
genlua.ml

@@ -263,12 +263,12 @@ let gen_constant ctx p = function
 	| TSuper -> assert false
 
 let rec gen_call ctx e el in_value =
-	match e.eexpr , el with
+	(match e.eexpr , el with
 	| TConst TSuper , params ->
 		(match ctx.current.cl_super with
 		| None -> error "Missing api.setCurrentClass" e.epos
 		| Some (c,_) ->
-			print ctx "self = %s:new(%s" (ctx.type_accessor (TClassDecl c)) (this ctx);
+			print ctx "self = %s.new(%s" (ctx.type_accessor (TClassDecl c)) (this ctx);
 			List.iter (fun p -> print ctx ","; gen_value ctx p) params;
 			spr ctx ")";
 		);
@@ -277,6 +277,7 @@ let rec gen_call ctx e el in_value =
 		| None -> error "Missing api.setCurrentClass" e.epos
 		| Some (c,_) ->
 			let name = field_name f in
+			(* TODO: use nonconflict var instead of mt *)
 			print ctx "%s.mt%s.call(%s" (ctx.type_accessor (TClassDecl c)) (field name) (this ctx);
 			List.iter (fun p -> print ctx ","; gen_value ctx p) params;
 			spr ctx ")";
@@ -339,15 +340,28 @@ let rec gen_call ctx e el in_value =
 			gen_value ctx e;
 			spr ctx ")";
 		end
-	| _ ->
+	| TCall ({eexpr = TField(e,((FInstance _ | FAnon _) as ef)) }, _), el ->
+		gen_value ctx e;
+		print ctx ":%s(" (field_name ef);
+		concat ctx "," (gen_value ctx) el;
+		spr ctx ")";
+	| TField (e, ((FInstance _ | FAnon _) as ef)), el ->
 		gen_value ctx e;
+		spr ctx ":";
+		print ctx "%s" (field_name ef);
 		spr ctx "(";
 		concat ctx "," (gen_value ctx) el;
 		spr ctx ")"
+	| _ ->
+		gen_value ctx e;
+		spr ctx "(";
+		concat ctx "," (gen_value ctx) el;
+		spr ctx ")");
 
 and gen_expr ctx e =
 	match e.eexpr with
-	| TConst c -> gen_constant ctx e.epos c
+	 TConst c ->
+		gen_constant ctx e.epos c;
 	| TLocal v when v.v_name = "this" ->
 	    spr ctx "self";
 	| TLocal v -> spr ctx (ident v.v_name)
@@ -1010,6 +1024,7 @@ let generate_class ctx c =
 					newline ctx;
 					List.iter (gen_block_element ctx) el;
 					newline ctx;
+					(* TODO: use nonconflict var instead of mt *)
 					print ctx "table.insert(self.__methods, %s.mt)" p;
 					newline ctx;
 					spr ctx "return self";
@@ -1056,12 +1071,14 @@ let generate_class ctx c =
 	if has_prototype then begin
 		(match c.cl_super with
 		| None ->
+			(* TODO: use nonconflict var instead of mt *)
 			print ctx "%s.mt = {" p;
 			newline ctx;
 		| Some (csup,_) ->
 			let psup = ctx.type_accessor (TClassDecl csup) in
 			print ctx "%s.__super__ = %s" p psup;
 			newline ctx;
+			(* TODO: use nonconflict var instead of mt *)
 			print ctx "%s.mt = {" p;
 			newline ctx;
 		);

+ 2 - 2
std/haxe/Log.hx

@@ -93,8 +93,8 @@ class Log {
 			cs.system.Console.WriteLine(str);
 			#elseif java
 			untyped __java__("java.lang.System.out.println(str)");
-            #elseif lua
-            untyped print(str);
+			#elseif lua
+			untyped print(lua.Boot.__string_rec(str));
 			#end
 		#elseif (python)
 			var str:String = null;

+ 1 - 1
std/lua/Boot.hx

@@ -103,7 +103,7 @@ class Boot {
 				result = result .. i .. ' => ' .. lua.Boot.__string_rec(v, s .. 'o');
 			end
 			result = result .. ' }';
-		end ");
+		end");
 				return result; }
 				default : throw "Unknown Lua type";
 		    }