Ver código fonte

fixes and minor changes.

Nicolas Cannasse 19 anos atrás
pai
commit
dbb5090773
1 arquivos alterados com 11 adições e 4 exclusões
  1. 11 4
      genswf9.ml

+ 11 - 4
genswf9.ml

@@ -611,7 +611,8 @@ let rec gen_expr_content ctx retval e =
 		let id = type_path ctx c.cl_path in
 		write ctx (A3GetInf id);
 		List.iter (gen_expr ctx true) pl;
-		write ctx (A3New (id,List.length pl))
+		write ctx (A3New (id,List.length pl));
+		write ctx A3ToObject
 	| TFunction f ->
 		write ctx (A3Function (generate_function ctx f true))
 	| TIf (e,e1,e2) ->
@@ -645,7 +646,7 @@ let rec gen_expr_content ctx retval e =
 		gen_unop ctx retval op flag e
 	| TTry (e,cases) ->
 		let p = ctx.infos.ipos in
-		gen_expr ctx retval e;
+		gen_expr_obj ctx retval e;
 		let pend = ctx.infos.ipos in
 		let jend = jump ctx J3Always in
 		let rec loop ncases = function
@@ -666,7 +667,7 @@ let rec gen_expr_content ctx retval e =
 				let acc = gen_local_access ctx ename e.epos Write in
 				if not isreg then write ctx (A3Reg r);
 				setvar ctx acc false;
-				gen_expr ctx retval e;
+				gen_expr_obj ctx retval e;
 				b();
 				if retval then ctx.infos.istack <- ctx.infos.istack - 1;
 				match l with
@@ -823,6 +824,10 @@ and gen_call ctx e el =
 	| TLocal "__typeof__", [e] ->
 		gen_expr ctx true e;
 		write ctx A3Typeof
+	| TLocal "__in__", [e; f] ->
+		gen_expr ctx true e;
+		gen_expr ctx true f;
+		write ctx (A3Op A3OIn)
 	| TConst TSuper , _ ->
 		write ctx A3This;
 		List.iter (gen_expr ctx true) el;
@@ -887,7 +892,7 @@ and gen_binop ctx retval op e1 e2 =
 	match op with
 	| OpAssign ->
 		let acc = gen_access ctx e1 Write in
-		gen_expr ctx true e2;
+		gen_expr_obj ctx true e2;
 		setvar ctx acc retval
 	| OpBoolAnd ->
 		gen_expr_obj ctx true e1;
@@ -906,6 +911,7 @@ and gen_binop ctx retval op e1 e2 =
 	| OpAssignOp op ->
 		let acc = gen_access ctx e1 Write in
 		gen_binop ctx true op e1 e2;
+		(match DynArray.last ctx.code with A3ToObject -> () | _ -> write ctx A3ToObject);
 		setvar ctx acc retval
 	| OpAdd ->
 		gen_op A3OAdd
@@ -1192,6 +1198,7 @@ let generate_enum ctx e =
 		cl3_fields = [|
 			{ f3_name = tag_id; f3_slot = 0; f3_kind = A3FVar { v3_type = None; v3_value = A3VNone; v3_const = false; }; f3_metas = None };
 			{ f3_name = params_id; f3_slot = 0; f3_kind = A3FVar { v3_type = None; v3_value = A3VNone; v3_const = false; }; f3_metas = None };
+			{ f3_name = ident ctx "__enum__"; f3_slot = 0; f3_kind = A3FVar { v3_type = None; v3_value = A3VBool true; v3_const = true }; f3_metas = None };
 			{
 				f3_name = ident ctx "toString";
 				f3_slot = 0;