Browse Source

move more code to texpr

loses eval-dependency on codegen
Simon Krajewski 8 years ago
parent
commit
dbe897e10d

+ 1 - 57
src/codegen/codegen.ml

@@ -74,47 +74,6 @@ let escape_res_name name allow_dirs =
 		else
 		else
 			"-x" ^ (string_of_int (Char.code chr))) name
 			"-x" ^ (string_of_int (Char.code chr))) name
 
 
-(* -------------------------------------------------------------------------- *)
-(* BUILD META DATA OBJECT *)
-
-let build_metadata api t =
-	let p, meta, fields, statics = (match t with
-		| TClassDecl c ->
-			let fields = List.map (fun f -> f.cf_name,f.cf_meta) (c.cl_ordered_fields @ (match c.cl_constructor with None -> [] | Some f -> [{ f with cf_name = "_" }])) in
-			let statics =  List.map (fun f -> f.cf_name,f.cf_meta) c.cl_ordered_statics in
-			(c.cl_pos, ["",c.cl_meta],fields,statics)
-		| TEnumDecl e ->
-			(e.e_pos, ["",e.e_meta],List.map (fun n -> n, (PMap.find n e.e_constrs).ef_meta) e.e_names, [])
-		| TTypeDecl t ->
-			(t.t_pos, ["",t.t_meta],(match follow t.t_type with TAnon a -> PMap.fold (fun f acc -> (f.cf_name,f.cf_meta) :: acc) a.a_fields [] | _ -> []),[])
-		| TAbstractDecl a ->
-			(a.a_pos, ["",a.a_meta],[],[])
-	) in
-	let filter l =
-		let l = List.map (fun (n,ml) -> n, ExtList.List.filter_map (fun (m,el,p) -> match m with Meta.Custom s when String.length s > 0 && s.[0] <> ':' -> Some (s,el,p) | _ -> None) ml) l in
-		List.filter (fun (_,ml) -> ml <> []) l
-	in
-	let meta, fields, statics = filter meta, filter fields, filter statics in
-	let make_meta_field ml =
-		let h = Hashtbl.create 0 in
-		mk (TObjectDecl (List.map (fun (f,el,p) ->
-			if Hashtbl.mem h f then error ("Duplicate metadata '" ^ f ^ "'") p;
-			Hashtbl.add h f ();
-			(f,null_pos,NoQuotes), mk (match el with [] -> TConst TNull | _ -> TArrayDecl (List.map (Texpr.type_constant_value api) el)) (api.tarray t_dynamic) p
-		) ml)) t_dynamic p
-	in
-	let make_meta l =
-		mk (TObjectDecl (List.map (fun (f,ml) -> (f,null_pos,NoQuotes),make_meta_field ml) l)) t_dynamic p
-	in
-	if meta = [] && fields = [] && statics = [] then
-		None
-	else
-		let meta_obj = [] in
-		let meta_obj = (if fields = [] then meta_obj else (("fields",null_pos,NoQuotes),make_meta fields) :: meta_obj) in
-		let meta_obj = (if statics = [] then meta_obj else (("statics",null_pos,NoQuotes),make_meta statics) :: meta_obj) in
-		let meta_obj = (try (("obj",null_pos,NoQuotes), make_meta_field (List.assoc "" meta)) :: meta_obj with Not_found -> meta_obj) in
-		Some (mk (TObjectDecl meta_obj) t_dynamic p)
-
 let update_cache_dependencies t =
 let update_cache_dependencies t =
 	let rec check_t m t = match t with
 	let rec check_t m t = match t with
 		| TInst(c,tl) ->
 		| TInst(c,tl) ->
@@ -636,19 +595,4 @@ module ExtClass = struct
 		let ef1 = mk (TField(ethis,FStatic(c,cf))) cf.cf_type p in
 		let ef1 = mk (TField(ethis,FStatic(c,cf))) cf.cf_type p in
 		let e_assign = mk (TBinop(OpAssign,ef1,e)) e.etype p in
 		let e_assign = mk (TBinop(OpAssign,ef1,e)) e.etype p in
 		add_cl_init c e_assign
 		add_cl_init c e_assign
-end
-
-let for_remap basic v e1 e2 p =
-	let v' = alloc_var v.v_name e1.etype e1.epos in
-	let ev' = mk (TLocal v') e1.etype e1.epos in
-	let t1 = (Abstract.follow_with_abstracts e1.etype) in
-	let ehasnext = mk (TField(ev',quick_field t1 "hasNext")) (tfun [] basic.tbool) e1.epos in
-	let ehasnext = mk (TCall(ehasnext,[])) basic.tbool ehasnext.epos in
-	let enext = mk (TField(ev',quick_field t1 "next")) (tfun [] v.v_type) e1.epos in
-	let enext = mk (TCall(enext,[])) v.v_type e1.epos in
-	let eassign = mk (TVar(v,Some enext)) basic.tvoid p in
-	let ebody = Type.concat eassign e2 in
-	mk (TBlock [
-		mk (TVar (v',Some e1)) basic.tvoid e1.epos;
-		mk (TWhile((mk (TParenthesis ehasnext) ehasnext.etype ehasnext.epos),ebody,NormalWhile)) basic.tvoid e1.epos;
-	]) basic.tvoid p
+end

+ 1 - 1
src/codegen/gencommon/enumToClass.ml

@@ -80,7 +80,7 @@ struct
 		let cl = mk_class en.e_module en.e_path pos in
 		let cl = mk_class en.e_module en.e_path pos in
 		Hashtbl.add t.ec_tbl en.e_path cl;
 		Hashtbl.add t.ec_tbl en.e_path cl;
 
 
-		(match Codegen.build_metadata gen.gcon.basic (TEnumDecl en) with
+		(match Texpr.build_metadata gen.gcon.basic (TEnumDecl en) with
 			| Some expr ->
 			| Some expr ->
 				let cf = mk_class_field "__meta__" expr.etype false expr.epos (Var { v_read = AccNormal; v_write = AccNormal }) [] in
 				let cf = mk_class_field "__meta__" expr.etype false expr.epos (Var { v_read = AccNormal; v_write = AccNormal }) [] in
 				cf.cf_expr <- Some expr;
 				cf.cf_expr <- Some expr;

+ 1 - 1
src/codegen/gencommon/enumToClass2.ml

@@ -37,7 +37,7 @@ let add_meta com en cl_enum =
 		let cf_meta = mk_field "__meta__" expr.etype expr.epos expr.epos in
 		let cf_meta = mk_field "__meta__" expr.etype expr.epos expr.epos in
 		cf_meta.cf_expr <- Some expr;
 		cf_meta.cf_expr <- Some expr;
 		add_static cl_enum cf_meta;
 		add_static cl_enum cf_meta;
-	) (Codegen.build_metadata com.basic (TEnumDecl en));
+	) (Texpr.build_metadata com.basic (TEnumDecl en));
 
 
 type enclasses = {
 type enclasses = {
 	base : tclass;
 	base : tclass;

+ 58 - 1
src/core/texpr.ml

@@ -1,3 +1,4 @@
+open Globals
 open Ast
 open Ast
 open Type
 open Type
 open Error
 open Error
@@ -328,4 +329,60 @@ let rec type_constant_value basic (e,p) =
 	| EArrayDecl el ->
 	| EArrayDecl el ->
 		mk (TArrayDecl (List.map (type_constant_value basic) el)) (basic.tarray t_dynamic) p
 		mk (TArrayDecl (List.map (type_constant_value basic) el)) (basic.tarray t_dynamic) p
 	| _ ->
 	| _ ->
-		error "Constant value expected" p
+		error "Constant value expected" p
+
+let for_remap basic v e1 e2 p =
+	let v' = alloc_var v.v_name e1.etype e1.epos in
+	let ev' = mk (TLocal v') e1.etype e1.epos in
+	let t1 = (Abstract.follow_with_abstracts e1.etype) in
+	let ehasnext = mk (TField(ev',quick_field t1 "hasNext")) (tfun [] basic.tbool) e1.epos in
+	let ehasnext = mk (TCall(ehasnext,[])) basic.tbool ehasnext.epos in
+	let enext = mk (TField(ev',quick_field t1 "next")) (tfun [] v.v_type) e1.epos in
+	let enext = mk (TCall(enext,[])) v.v_type e1.epos in
+	let eassign = mk (TVar(v,Some enext)) basic.tvoid p in
+	let ebody = Type.concat eassign e2 in
+	mk (TBlock [
+		mk (TVar (v',Some e1)) basic.tvoid e1.epos;
+		mk (TWhile((mk (TParenthesis ehasnext) ehasnext.etype ehasnext.epos),ebody,NormalWhile)) basic.tvoid e1.epos;
+	]) basic.tvoid p
+
+(* -------------------------------------------------------------------------- *)
+(* BUILD META DATA OBJECT *)
+
+let build_metadata api t =
+	let p, meta, fields, statics = (match t with
+		| TClassDecl c ->
+			let fields = List.map (fun f -> f.cf_name,f.cf_meta) (c.cl_ordered_fields @ (match c.cl_constructor with None -> [] | Some f -> [{ f with cf_name = "_" }])) in
+			let statics =  List.map (fun f -> f.cf_name,f.cf_meta) c.cl_ordered_statics in
+			(c.cl_pos, ["",c.cl_meta],fields,statics)
+		| TEnumDecl e ->
+			(e.e_pos, ["",e.e_meta],List.map (fun n -> n, (PMap.find n e.e_constrs).ef_meta) e.e_names, [])
+		| TTypeDecl t ->
+			(t.t_pos, ["",t.t_meta],(match follow t.t_type with TAnon a -> PMap.fold (fun f acc -> (f.cf_name,f.cf_meta) :: acc) a.a_fields [] | _ -> []),[])
+		| TAbstractDecl a ->
+			(a.a_pos, ["",a.a_meta],[],[])
+	) in
+	let filter l =
+		let l = List.map (fun (n,ml) -> n, ExtList.List.filter_map (fun (m,el,p) -> match m with Meta.Custom s when String.length s > 0 && s.[0] <> ':' -> Some (s,el,p) | _ -> None) ml) l in
+		List.filter (fun (_,ml) -> ml <> []) l
+	in
+	let meta, fields, statics = filter meta, filter fields, filter statics in
+	let make_meta_field ml =
+		let h = Hashtbl.create 0 in
+		mk (TObjectDecl (List.map (fun (f,el,p) ->
+			if Hashtbl.mem h f then error ("Duplicate metadata '" ^ f ^ "'") p;
+			Hashtbl.add h f ();
+			(f,null_pos,NoQuotes), mk (match el with [] -> TConst TNull | _ -> TArrayDecl (List.map (type_constant_value api) el)) (api.tarray t_dynamic) p
+		) ml)) t_dynamic p
+	in
+	let make_meta l =
+		mk (TObjectDecl (List.map (fun (f,ml) -> (f,null_pos,NoQuotes),make_meta_field ml) l)) t_dynamic p
+	in
+	if meta = [] && fields = [] && statics = [] then
+		None
+	else
+		let meta_obj = [] in
+		let meta_obj = (if fields = [] then meta_obj else (("fields",null_pos,NoQuotes),make_meta fields) :: meta_obj) in
+		let meta_obj = (if statics = [] then meta_obj else (("statics",null_pos,NoQuotes),make_meta statics) :: meta_obj) in
+		let meta_obj = (try (("obj",null_pos,NoQuotes), make_meta_field (List.assoc "" meta)) :: meta_obj with Not_found -> meta_obj) in
+		Some (mk (TObjectDecl meta_obj) t_dynamic p)

+ 1 - 1
src/filters/filters.ml

@@ -650,7 +650,7 @@ let add_field_inits reserved ctx t =
 (* Adds the __meta__ field if required *)
 (* Adds the __meta__ field if required *)
 let add_meta_field ctx t = match t with
 let add_meta_field ctx t = match t with
 	| TClassDecl c ->
 	| TClassDecl c ->
-		(match Codegen.build_metadata ctx.com.basic t with
+		(match Texpr.build_metadata ctx.com.basic t with
 		| None -> ()
 		| None -> ()
 		| Some e ->
 		| Some e ->
 			add_feature ctx.com "has_metadata";
 			add_feature ctx.com "has_metadata";

+ 1 - 1
src/generators/genas3.ml

@@ -1204,7 +1204,7 @@ let generate_enum ctx e =
 			print ctx "public static var %s : %s = new %s(\"%s\",%d)" c.ef_name ename ename c.ef_name c.ef_index;
 			print ctx "public static var %s : %s = new %s(\"%s\",%d)" c.ef_name ename ename c.ef_name c.ef_index;
 	) e.e_constrs;
 	) e.e_constrs;
 	newline ctx;
 	newline ctx;
-	(match Codegen.build_metadata ctx.inf.com.basic (TEnumDecl e) with
+	(match Texpr.build_metadata ctx.inf.com.basic (TEnumDecl e) with
 	| None -> ()
 	| None -> ()
 	| Some e ->
 	| Some e ->
 		print ctx "public static var __meta__ : * = ";
 		print ctx "public static var __meta__ : * = ";

+ 3 - 3
src/generators/gencpp.ml

@@ -4736,7 +4736,7 @@ let find_referenced_types_flags ctx obj field_name super_deps constructor_deps h
          | _ -> () );
          | _ -> () );
          ) enum_def.e_constrs;
          ) enum_def.e_constrs;
       if (not header_only) then begin
       if (not header_only) then begin
-         let meta = Codegen.build_metadata ctx.ctx_common.basic (TEnumDecl enum_def) in
+         let meta = Texpr.build_metadata ctx.ctx_common.basic (TEnumDecl enum_def) in
          match meta with Some expr -> visit_params expr | _ -> ();
          match meta with Some expr -> visit_params expr | _ -> ();
       end;
       end;
    in
    in
@@ -8076,7 +8076,7 @@ let generate_cppia ctx =
          if (is_internal) then
          if (is_internal) then
             (if (debug>=4) then print_endline (" internal enum " ^ (join_class_path enum_def.e_path ".") ))
             (if (debug>=4) then print_endline (" internal enum " ^ (join_class_path enum_def.e_path ".") ))
          else begin
          else begin
-            let meta = Codegen.build_metadata common_ctx.basic object_def in
+            let meta = Texpr.build_metadata common_ctx.basic object_def in
             if (enum_def.e_extern) then
             if (enum_def.e_extern) then
                (if (debug>=4) then print_endline ("external enum " ^  (join_class_path enum_def.e_path ".") ));
                (if (debug>=4) then print_endline ("external enum " ^  (join_class_path enum_def.e_path ".") ));
             generate_script_enum common_ctx script enum_def meta
             generate_script_enum common_ctx script enum_def meta
@@ -8171,7 +8171,7 @@ let generate_source ctx =
          if (is_internal) then
          if (is_internal) then
             (if (debug>1) then print_endline (" internal enum " ^ name ))
             (if (debug>1) then print_endline (" internal enum " ^ name ))
          else begin
          else begin
-            let meta = Codegen.build_metadata common_ctx.basic object_def in
+            let meta = Texpr.build_metadata common_ctx.basic object_def in
             if (enum_def.e_extern) then
             if (enum_def.e_extern) then
                (if (debug>1) then print_endline ("external enum " ^ name ));
                (if (debug>1) then print_endline ("external enum " ^ name ));
             boot_enums := enum_def.e_path :: !boot_enums;
             boot_enums := enum_def.e_path :: !boot_enums;

+ 3 - 3
src/generators/genhl.ml

@@ -2534,7 +2534,7 @@ and eval_expr ctx e =
 	| TMeta (_,e) ->
 	| TMeta (_,e) ->
 		eval_expr ctx e
 		eval_expr ctx e
 	| TFor (v,it,loop) ->
 	| TFor (v,it,loop) ->
-		eval_expr ctx (Codegen.for_remap ctx.com.basic v it loop e.epos)
+		eval_expr ctx (Texpr.for_remap ctx.com.basic v it loop e.epos)
 	| TSwitch (en,cases,def) ->
 	| TSwitch (en,cases,def) ->
 		let rt = to_type ctx e.etype in
 		let rt = to_type ctx e.etype in
 		let r = alloc_tmp ctx rt in
 		let r = alloc_tmp ctx rt in
@@ -3260,7 +3260,7 @@ let generate_static_init ctx types main =
 					op ctx (OSetGlobal (g, rt));
 					op ctx (OSetGlobal (g, rt));
 				end;
 				end;
 
 
-				(match Codegen.build_metadata ctx.com.basic (TClassDecl c) with
+				(match Texpr.build_metadata ctx.com.basic (TClassDecl c) with
 				| None -> ()
 				| None -> ()
 				| Some e ->
 				| Some e ->
 					let r = eval_to ctx e HDyn in
 					let r = eval_to ctx e HDyn in
@@ -3306,7 +3306,7 @@ let generate_static_init ctx types main =
 						op ctx (OSetGlobal (g,r));
 						op ctx (OSetGlobal (g,r));
 				) e.e_names;
 				) e.e_names;
 
 
-				(match Codegen.build_metadata ctx.com.basic (TEnumDecl e) with
+				(match Texpr.build_metadata ctx.com.basic (TEnumDecl e) with
 				| None -> ()
 				| None -> ()
 				| Some e -> op ctx (OSetField (r,index "__meta__",eval_to ctx e HDyn)));
 				| Some e -> op ctx (OSetField (r,index "__meta__",eval_to ctx e HDyn)));
 
 

+ 1 - 1
src/generators/genjs.ml

@@ -1240,7 +1240,7 @@ let generate_enum ctx e =
 		print ctx "%s.__empty_constructs__ = [%s]" p (String.concat "," (List.map (fun s -> Printf.sprintf "%s.%s" p s) ctors_without_args));
 		print ctx "%s.__empty_constructs__ = [%s]" p (String.concat "," (List.map (fun s -> Printf.sprintf "%s.%s" p s) ctors_without_args));
 		newline ctx
 		newline ctx
 	end;
 	end;
-	begin match Codegen.build_metadata ctx.com.basic (TEnumDecl e) with
+	begin match Texpr.build_metadata ctx.com.basic (TEnumDecl e) with
 	| None -> ()
 	| None -> ()
 	| Some e ->
 	| Some e ->
 		print ctx "%s.__meta__ = " p;
 		print ctx "%s.__meta__ = " p;

+ 1 - 1
src/generators/genlua.ml

@@ -1713,7 +1713,7 @@ let generate_static ctx (c,f,e) =
 let generate_enumMeta_fields ctx = function
 let generate_enumMeta_fields ctx = function
     | TEnumDecl e -> begin
     | TEnumDecl e -> begin
             let p = s_path ctx e.e_path in
             let p = s_path ctx e.e_path in
-            match Codegen.build_metadata ctx.com.basic (TEnumDecl e) with
+            match Texpr.build_metadata ctx.com.basic (TEnumDecl e) with
             | None -> ()
             | None -> ()
             | Some e ->
             | Some e ->
                 print ctx "%s.__meta__ = " p;
                 print ctx "%s.__meta__ = " p;

+ 1 - 1
src/generators/genneko.ml

@@ -630,7 +630,7 @@ let gen_name ctx acc t =
 		let setname = (EBinop ("=",field p path "__ename__",arr),p) in
 		let setname = (EBinop ("=",field p path "__ename__",arr),p) in
 		let arr = call p (field p (ident p "Array") "new1") [array p (List.map (fun n -> gen_constant ctx e.e_pos (TString n)) e.e_names); int p (List.length e.e_names)] in
 		let arr = call p (field p (ident p "Array") "new1") [array p (List.map (fun n -> gen_constant ctx e.e_pos (TString n)) e.e_names); int p (List.length e.e_names)] in
 		let setconstrs = (EBinop ("=", field p path "__constructs__", arr),p) in
 		let setconstrs = (EBinop ("=", field p path "__constructs__", arr),p) in
-		let meta = (match Codegen.build_metadata ctx.com.basic (TEnumDecl e) with
+		let meta = (match Texpr.build_metadata ctx.com.basic (TEnumDecl e) with
 			| None -> []
 			| None -> []
 			| Some e -> [EBinop ("=",field p path "__meta__", gen_expr ctx e),p]
 			| Some e -> [EBinop ("=",field p path "__meta__", gen_expr ctx e),p]
 		) in
 		) in

+ 2 - 2
src/generators/genphp7.ml

@@ -761,7 +761,7 @@ let unpack_single_expr_block expr =
 	Check if specified type has rtti meta
 	Check if specified type has rtti meta
 *)
 *)
 let has_rtti_meta ctx mtype =
 let has_rtti_meta ctx mtype =
-	match Codegen.build_metadata ctx.basic mtype with
+	match Texpr.build_metadata ctx.basic mtype with
 		| None -> false
 		| None -> false
 		| Some _ -> true
 		| Some _ -> true
 
 
@@ -2950,7 +2950,7 @@ class virtual type_builder ctx (wrapper:type_wrapper) =
 			Writes rtti meta to output buffer
 			Writes rtti meta to output buffer
 		*)
 		*)
 		method write_rtti_meta =
 		method write_rtti_meta =
-			match Codegen.build_metadata ctx.basic wrapper#get_module_type with
+			match Texpr.build_metadata ctx.basic wrapper#get_module_type with
 				| None -> ()
 				| None -> ()
 				| Some meta_expr ->
 				| Some meta_expr ->
 					let boot_class = writer#use boot_type_path in
 					let boot_class = writer#use boot_type_path in

+ 1 - 1
src/generators/genpy.ml

@@ -2153,7 +2153,7 @@ module Generator = struct
 		gen_class_init ctx c
 		gen_class_init ctx c
 
 
 	let gen_enum_metadata ctx en p =
 	let gen_enum_metadata ctx en p =
-		let meta = Codegen.build_metadata ctx.com.basic (TEnumDecl en) in
+		let meta = Texpr.build_metadata ctx.com.basic (TEnumDecl en) in
 		match meta with
 		match meta with
 			| None ->
 			| None ->
 				()
 				()

+ 1 - 1
src/generators/genswf9.ml

@@ -2327,7 +2327,7 @@ let rec generate_type ctx t =
 		if e.e_extern then
 		if e.e_extern then
 			None
 			None
 		else
 		else
-			let meta = Codegen.build_metadata ctx.com.basic t in
+			let meta = Texpr.build_metadata ctx.com.basic t in
 			let hlc = generate_enum ctx e meta in
 			let hlc = generate_enum ctx e meta in
 			let init = begin_fun ctx [] ctx.com.basic.tvoid [ethis] false e.e_pos in
 			let init = begin_fun ctx [] ctx.com.basic.tvoid [ethis] false e.e_pos in
 			generate_enum_init ctx e hlc meta;
 			generate_enum_init ctx e hlc meta;

+ 1 - 1
src/macro/eval/evalJit.ml

@@ -783,7 +783,7 @@ and jit_expr jit return e =
 		unop jit op flag v1 e.epos
 		unop jit op flag v1 e.epos
 	(* rewrites/skips *)
 	(* rewrites/skips *)
 	| TFor(v,e1,e2) ->
 	| TFor(v,e1,e2) ->
-		loop (Codegen.for_remap (ctx.curapi.MacroApi.get_com()).Common.basic v e1 e2 e.epos)
+		loop (Texpr.for_remap (ctx.curapi.MacroApi.get_com()).Common.basic v e1 e2 e.epos)
 	| TParenthesis e1 | TMeta(_,e1) | TCast(e1,None) ->
 	| TParenthesis e1 | TMeta(_,e1) | TCast(e1,None) ->
 		loop e1
 		loop e1
 	| TIdent s ->
 	| TIdent s ->

+ 1 - 1
src/macro/eval/evalPrototype.ml

@@ -175,7 +175,7 @@ let is_removable_field cf =
 let create_static_prototype ctx mt =
 let create_static_prototype ctx mt =
 	let key = path_hash (t_infos mt).mt_path in
 	let key = path_hash (t_infos mt).mt_path in
 	let com = ctx.curapi.MacroApi.get_com() in
 	let com = ctx.curapi.MacroApi.get_com() in
-	let meta = Codegen.build_metadata com.Common.basic mt in
+	let meta = Texpr.build_metadata com.Common.basic mt in
 	let o = match mt with
 	let o = match mt with
 	| TClassDecl c ->
 	| TClassDecl c ->
 		let pparent = match c.cl_super with
 		let pparent = match c.cl_super with

+ 1 - 1
src/macro/macroApi.ml

@@ -1665,7 +1665,7 @@ let macro_api ccom get_api =
 						encode_string ("\"" ^ Ast.s_escape (decode_string v) ^ "\"")
 						encode_string ("\"" ^ Ast.s_escape (decode_string v) ^ "\"")
 					);
 					);
 					"buildMetaData", vfun1 (fun t ->
 					"buildMetaData", vfun1 (fun t ->
-						match Codegen.build_metadata com.basic (decode_type_decl t) with
+						match Texpr.build_metadata com.basic (decode_type_decl t) with
 						| None -> vnull
 						| None -> vnull
 						| Some e -> encode_texpr e
 						| Some e -> encode_texpr e
 					);
 					);

+ 1 - 1
src/optimization/analyzerTexpr.ml

@@ -373,7 +373,7 @@ module TexprFilter = struct
 			let e = mk (TWhile(Texpr.Builder.mk_parent e_true,e_block,NormalWhile)) e.etype p in
 			let e = mk (TWhile(Texpr.Builder.mk_parent e_true,e_block,NormalWhile)) e.etype p in
 			loop e
 			loop e
 		| TFor(v,e1,e2) ->
 		| TFor(v,e1,e2) ->
-			let e = Codegen.for_remap com.basic v e1 e2 e.epos in
+			let e = Texpr.for_remap com.basic v e1 e2 e.epos in
 			loop e
 			loop e
 		| _ ->
 		| _ ->
 			Type.map_expr loop e
 			Type.map_expr loop e