Bläddra i källkod

[gencommon] get rid of redundant Option wrapping for filters results (if we don't change expr/type, then we might as well just return it as is)

+ a couple of very minor changes
Dan Korostelev 8 år sedan
förälder
incheckning
27132e6c16
32 ändrade filer med 108 tillägg och 122 borttagningar
  1. 45 29
      src/generators/gencommon.ml
  2. 1 1
      src/generators/gencommon/abstractImplementationFix.ml
  3. 1 2
      src/generators/gencommon/arrayDeclSynf.ml
  4. 6 5
      src/generators/gencommon/castDetect.ml
  5. 1 2
      src/generators/gencommon/classInstance.ml
  6. 2 3
      src/generators/gencommon/closuresToClass.ml
  7. 1 1
      src/generators/gencommon/defaultArguments.ml
  8. 1 2
      src/generators/gencommon/dynamicFieldAccess.ml
  9. 1 2
      src/generators/gencommon/dynamicOperators.ml
  10. 2 4
      src/generators/gencommon/enumToClass.ml
  11. 2 5
      src/generators/gencommon/enumToClass2.ml
  12. 1 2
      src/generators/gencommon/expressionUnwrap.ml
  13. 1 2
      src/generators/gencommon/filterClosures.ml
  14. 1 2
      src/generators/gencommon/fixOverrides.ml
  15. 1 2
      src/generators/gencommon/hardNullableSynf.ml
  16. 7 7
      src/generators/gencommon/initFunction.ml
  17. 1 2
      src/generators/gencommon/intDivisionSynf.ml
  18. 1 1
      src/generators/gencommon/interfaceMetas.ml
  19. 1 1
      src/generators/gencommon/interfaceProps.ml
  20. 1 1
      src/generators/gencommon/interfaceVarsDeleteModf.ml
  21. 2 3
      src/generators/gencommon/normalize.ml
  22. 1 2
      src/generators/gencommon/objectDeclMap.ml
  23. 1 1
      src/generators/gencommon/overloadingConstructor.ml
  24. 2 4
      src/generators/gencommon/realTypeParams.ml
  25. 14 16
      src/generators/gencommon/reflectionCFs.ml
  26. 2 3
      src/generators/gencommon/switchToIf.ml
  27. 1 2
      src/generators/gencommon/tArrayTransform.ml
  28. 1 2
      src/generators/gencommon/tryCatchWrapper.ml
  29. 1 2
      src/generators/gencommon/unnecessaryCastsRemoval.ml
  30. 1 2
      src/generators/gencommon/unreachableCodeEliminationSynf.ml
  31. 2 4
      src/generators/gencs.ml
  32. 2 5
      src/generators/genjava.ml

+ 45 - 29
src/generators/gencommon.ml

@@ -341,32 +341,50 @@ class ['tp, 'ret] rule_dispatcher name =
 end;;
 end;;
 
 
 (* this is a special case where tp = tret and you stack their output as the next's input *)
 (* this is a special case where tp = tret and you stack their output as the next's input *)
-class ['tp] rule_map_dispatcher name =
-	object(self)
-	inherit ['tp, 'tp] rule_dispatcher name
+class ['tp] rule_map_dispatcher name = object(self)
+	val tbl = Hashtbl.create 16
+	val mutable keys = []
+	val names = Hashtbl.create 16
 
 
-	method run_f tp = get (self#run tp)
+	method add (name : string) (* name helps debugging *) (priority : priority) (rule : 'tp->'tp) =
+		let p = match priority with
+			| PFirst -> infinity
+			| PLast -> neg_infinity
+			| PZero -> 0.0
+			| PCustom i -> i
+		in
+		let q = if not (Hashtbl.mem tbl p) then begin
+			let q = Stack.create() in
+			Hashtbl.add tbl p q;
+			keys <- p :: keys;
+			keys <- List.sort (fun x y -> - (compare x y)) keys;
+			q
+		end else Hashtbl.find tbl p in
+		if Hashtbl.mem names name then raise (DuplicateName name);
+		Hashtbl.add names name q;
 
 
-	method run_from (priority:float) (tp:'tp) : 'ret option =
-		let cur = ref tp in
-		(try begin
-			List.iter (fun key ->
+		Stack.push (name, rule) q
 
 
-				if key < priority then begin
-					let q = Hashtbl.find tbl key in
-					Stack.iter (fun (n, rule) ->
-						trace ("running rule " ^ n);
-						let t = if !debug_mode then Common.timer [("rule map dispatcher rule: " ^ n)] else fun () -> () in
-						let r = rule(!cur) in
-						t();
-						Option.may (fun v -> cur := v) r
-					) q
-				end
-			) keys
+	method describe =
+		Hashtbl.iter (fun s _ -> (trace s)) names;
 
 
-		end with Exit -> ());
-		Some (!cur)
+	method run (tp:'tp) : 'tp =
+		self#run_from infinity tp
 
 
+	method run_from (priority:float) (tp:'tp) : 'tp =
+		let cur = ref tp in
+		List.iter (fun key ->
+			if key < priority then begin
+				let q = Hashtbl.find tbl key in
+				Stack.iter (fun (n, rule) ->
+					trace ("running rule " ^ n);
+					let t = if !debug_mode then Common.timer [("rule map dispatcher rule: " ^ n)] else fun () -> () in
+					cur := rule !cur;
+					t();
+				) q
+			end
+		) keys;
+		!cur
 end;;
 end;;
 
 
 
 
@@ -717,12 +735,12 @@ let run_filters gen =
 	(* first of all, we have to make sure that the filters won't trigger a major Gc collection *)
 	(* first of all, we have to make sure that the filters won't trigger a major Gc collection *)
 	let t = Common.timer ["gencommon_filters"] in
 	let t = Common.timer ["gencommon_filters"] in
 	(if Common.defined gen.gcon Define.GencommonDebug then debug_mode := true else debug_mode := false);
 	(if Common.defined gen.gcon Define.GencommonDebug then debug_mode := true else debug_mode := false);
-	let run_filters filter =
+	let run_filters (filter : texpr rule_map_dispatcher) =
 		let rec loop acc mds =
 		let rec loop acc mds =
 			match mds with
 			match mds with
 				| [] -> acc
 				| [] -> acc
 				| md :: tl ->
 				| md :: tl ->
-					let filters = [ filter#run_f ] in
+					let filters = [ filter#run ] in
 					let added_types = ref [] in
 					let added_types = ref [] in
 					gen.gadd_to_module <- (fun md_type priority ->
 					gen.gadd_to_module <- (fun md_type priority ->
 						gen.gtypes_list <- md_type :: gen.gtypes_list;
 						gen.gtypes_list <- md_type :: gen.gtypes_list;
@@ -732,7 +750,7 @@ let run_filters gen =
 					run_filters_from gen md filters;
 					run_filters_from gen md filters;
 
 
 					let added_types = List.map (fun (t,p) ->
 					let added_types = List.map (fun (t,p) ->
-						run_filters_from gen t [ fun e -> get (filter#run_from p e) ];
+						run_filters_from gen t [ fun e -> filter#run_from p e ];
 						if Hashtbl.mem gen.gtypes (t_path t) then begin
 						if Hashtbl.mem gen.gtypes (t_path t) then begin
 							let rec loop i =
 							let rec loop i =
 								let p = t_path t in
 								let p = t_path t in
@@ -756,7 +774,7 @@ let run_filters gen =
 		List.rev (loop [] gen.gtypes_list)
 		List.rev (loop [] gen.gtypes_list)
 	in
 	in
 
 
-	let run_mod_filter filter =
+	let run_mod_filter (filter : module_type rule_map_dispatcher) =
 		let last_add_to_module = gen.gadd_to_module in
 		let last_add_to_module = gen.gadd_to_module in
 		let added_types = ref [] in
 		let added_types = ref [] in
 		gen.gadd_to_module <- (fun md_type priority ->
 		gen.gadd_to_module <- (fun md_type priority ->
@@ -772,13 +790,11 @@ let run_filters gen =
 							gen.gcurrent_class <- Some c
 							gen.gcurrent_class <- Some c
 						| _ ->
 						| _ ->
 							gen.gcurrent_class <- None);
 							gen.gcurrent_class <- None);
-					let new_hd = filter#run_f hd in
+					let new_hd = filter#run hd in
 
 
 					let added_types_new = !added_types in
 					let added_types_new = !added_types in
 					added_types := [];
 					added_types := [];
-					let added_types = List.map (fun (t,p) ->
-						get (filter#run_from p t)
-					) added_types_new in
+					let added_types = List.map (fun (t,p) -> filter#run_from p t) added_types_new in
 
 
 					loop ( added_types @ (new_hd :: processed) ) tl
 					loop ( added_types @ (new_hd :: processed) ) tl
 				| [] ->
 				| [] ->

+ 1 - 1
src/generators/gencommon/abstractImplementationFix.ml

@@ -39,5 +39,5 @@ let name = "abstract_implementation_fix"
 let priority = solve_deps name []
 let priority = solve_deps name []
 
 
 let configure gen =
 let configure gen =
-	let run md = (add_abstract_params md; Some md) in
+	let run md = (add_abstract_params md; md) in
 	gen.gmodule_filters#add name (PCustom priority) run
 	gen.gmodule_filters#add name (PCustom priority) run

+ 1 - 2
src/generators/gencommon/arrayDeclSynf.ml

@@ -48,5 +48,4 @@ let priority = solve_deps name [DAfter ObjectDeclMap.priority]
 
 
 let configure gen native_array_cl change_type_params =
 let configure gen native_array_cl change_type_params =
 	let run = init native_array_cl change_type_params in
 	let run = init native_array_cl change_type_params in
-	let map e = Some (run e) in
-	gen.gsyntax_filters#add name (PCustom priority) map
+	gen.gsyntax_filters#add name (PCustom priority) run

+ 6 - 5
src/generators/gencommon/castDetect.ml

@@ -118,7 +118,7 @@ struct
 		run
 		run
 
 
 	let configure gen =
 	let configure gen =
-		let map e = Some(default_implementation gen e) in
+		let map = default_implementation gen in
 		gen.gsyntax_filters#add name (PCustom priority) map
 		gen.gsyntax_filters#add name (PCustom priority) map
 end;;
 end;;
 
 
@@ -1202,11 +1202,12 @@ let configure gen ?(overloads_cast_to_base = false) maybe_empty_t calls_paramete
 			| _ -> Type.map_expr run e
 			| _ -> Type.map_expr run e
 	in
 	in
 	gen.ghandle_cast <- (fun tto tfrom expr -> handle_cast gen expr (gen.greal_type tto) (gen.greal_type tfrom));
 	gen.ghandle_cast <- (fun tto tfrom expr -> handle_cast gen expr (gen.greal_type tto) (gen.greal_type tfrom));
-	let map e = match gen.gcurrent_classfield with
-		| Some(cf) when Meta.has (Meta.Custom ":skipCastDetect") cf.cf_meta ->
-			None
+	let map e =
+		match gen.gcurrent_classfield with
+		| Some cf when Meta.has (Meta.Custom ":skipCastDetect") cf.cf_meta ->
+			e
 		| _ ->
 		| _ ->
-			Some(run e)
+			run e
 	in
 	in
 	gen.gsyntax_filters#add name (PCustom priority) map;
 	gen.gsyntax_filters#add name (PCustom priority) map;
 	ReturnCast.configure gen
 	ReturnCast.configure gen

+ 1 - 2
src/generators/gencommon/classInstance.ml

@@ -55,5 +55,4 @@ let name = "class_instance"
 let priority = solve_deps name []
 let priority = solve_deps name []
 
 
 let configure gen =
 let configure gen =
-	let map e = Some(add_typeof e) in
-	gen.gsyntax_filters#add name (PCustom priority) map
+	gen.gsyntax_filters#add name (PCustom priority) add_typeof

+ 2 - 3
src/generators/gencommon/closuresToClass.ml

@@ -587,8 +587,7 @@ let configure gen ft =
 		ft.dynamic_fun_call
 		ft.dynamic_fun_call
 		(* (dynamic_func_call:texpr->texpr->texpr list->texpr) *)
 		(* (dynamic_func_call:texpr->texpr->texpr list->texpr) *)
 	in
 	in
-	let map e = Some(run e) in
-	gen.gexpr_filters#add name (PCustom priority) map
+	gen.gexpr_filters#add name (PCustom priority) run
 
 
 
 
 (*
 (*
@@ -760,7 +759,7 @@ struct
 
 
 				maybe a way to solve this would be to add an "until" field to run_from
 				maybe a way to solve this would be to add an "until" field to run_from
 			*)
 			*)
-			let real_get_args = gen.gexpr_filters#run_f { eexpr = TBlock(get_args); etype = basic.tvoid; epos = pos } in
+			let real_get_args = gen.gexpr_filters#run (mk (TBlock get_args) basic.tvoid pos) in
 
 
 			let func_expr = Type.concat real_get_args tf_expr in
 			let func_expr = Type.concat real_get_args tf_expr in
 
 

+ 1 - 1
src/generators/gencommon/defaultArguments.ml

@@ -165,6 +165,6 @@ let configure gen =
 			List.iter (change_func gen) cl.cl_ordered_statics;
 			List.iter (change_func gen) cl.cl_ordered_statics;
 			Option.may (change_func gen) cl.cl_constructor;
 			Option.may (change_func gen) cl.cl_constructor;
 		| _ -> ());
 		| _ -> ());
-		Some md;
+		md;
 	in
 	in
 	gen.gmodule_filters#add name (PCustom priority) run
 	gen.gmodule_filters#add name (PCustom priority) run

+ 1 - 2
src/generators/gencommon/dynamicFieldAccess.ml

@@ -116,5 +116,4 @@ let configure gen (is_dynamic:texpr->texpr->Type.tfield_access->bool) (change_ex
 		| _ ->
 		| _ ->
 			Type.map_expr run e
 			Type.map_expr run e
 	in
 	in
-	let map e = Some (run e) in
-	gen.gexpr_filters#add name (PCustom priority) map
+	gen.gexpr_filters#add name (PCustom priority) run

+ 1 - 2
src/generators/gencommon/dynamicOperators.ml

@@ -179,5 +179,4 @@ let priority = 0.0
 
 
 let configure gen ~handle_strings should_change equals_handler dyn_plus_handler compare_handler =
 let configure gen ~handle_strings should_change equals_handler dyn_plus_handler compare_handler =
 	let run = init gen.gcon handle_strings should_change equals_handler dyn_plus_handler compare_handler in
 	let run = init gen.gcon handle_strings should_change equals_handler dyn_plus_handler compare_handler in
-	let map e = Some (run e) in
-	gen.gexpr_filters#add name (PCustom priority) map
+	gen.gexpr_filters#add name (PCustom priority) run

+ 2 - 4
src/generators/gencommon/enumToClass.ml

@@ -236,8 +236,7 @@ struct
 			| _ ->
 			| _ ->
 				md
 				md
 		in
 		in
-		let map md = Some(run md) in
-		gen.gmodule_filters#add name (PCustom priority) map
+		gen.gmodule_filters#add name (PCustom priority) run
 end;;
 end;;
 
 
 (* ******************************************* *)
 (* ******************************************* *)
@@ -286,8 +285,7 @@ struct
 			| _ ->
 			| _ ->
 				Type.map_expr run e
 				Type.map_expr run e
 		in
 		in
-		let map e = Some(run e) in
-		gen.gexpr_filters#add name (PCustom priority) map
+		gen.gexpr_filters#add name (PCustom priority) run
 
 
 end;;
 end;;
 
 

+ 2 - 5
src/generators/gencommon/enumToClass2.ml

@@ -326,8 +326,7 @@ struct
 			| _ ->
 			| _ ->
 				md
 				md
 		in
 		in
-		let map md = Some(run md) in
-		gen.gmodule_filters#add name (PCustom priority) map
+		gen.gmodule_filters#add name (PCustom priority) run
 end;;
 end;;
 
 
 
 
@@ -374,9 +373,7 @@ struct
 			| _ ->
 			| _ ->
 				Type.map_expr run e
 				Type.map_expr run e
 		in
 		in
-		let map e = Some(run e) in
-		gen.gexpr_filters#add name (PCustom priority) map
-
+		gen.gexpr_filters#add name (PCustom priority) run
 end;;
 end;;
 
 
 let configure gen enum_base_class =
 let configure gen enum_base_class =

+ 1 - 2
src/generators/gencommon/expressionUnwrap.ml

@@ -630,5 +630,4 @@ let configure gen =
 			{ e with eexpr = TFunction({ tfunc with tf_expr = traverse (mk_block tfunc.tf_expr) }) }
 			{ e with eexpr = TFunction({ tfunc with tf_expr = traverse (mk_block tfunc.tf_expr) }) }
 		| _ -> e (* if expression doesn't have a block, we will exit *)
 		| _ -> e (* if expression doesn't have a block, we will exit *)
 	in
 	in
-	let map e = Some (traverse e) in
-	gen.gsyntax_filters#add "expression_unwrap" (PCustom priority) map
+	gen.gsyntax_filters#add "expression_unwrap" (PCustom priority) traverse

+ 1 - 2
src/generators/gencommon/filterClosures.ml

@@ -83,5 +83,4 @@ let configure gen (should_change:texpr->string->bool) (filter:texpr->texpr->stri
 						filter e (run e1) cf.cf_name false)
 						filter e (run e1) cf.cf_name false)
 				| _ -> Type.map_expr run e
 				| _ -> Type.map_expr run e
 	in
 	in
-	let map e = Some(run e) in
-	gen.gexpr_filters#add name (PCustom priority) map
+	gen.gexpr_filters#add name (PCustom priority) run

+ 1 - 2
src/generators/gencommon/fixOverrides.ml

@@ -249,5 +249,4 @@ let configure ?explicit_fn_name ~get_vmtype gen =
 	in
 	in
 	gen.gafter_mod_filters_ended <- delay :: gen.gafter_mod_filters_ended;
 	gen.gafter_mod_filters_ended <- delay :: gen.gafter_mod_filters_ended;
 	let run = run ~explicit_fn_name ~get_vmtype gen in
 	let run = run ~explicit_fn_name ~get_vmtype gen in
-	let map md = Some(run md) in
-	gen.gmodule_filters#add name (PCustom priority) map
+	gen.gmodule_filters#add name (PCustom priority) run

+ 1 - 2
src/generators/gencommon/hardNullableSynf.ml

@@ -277,5 +277,4 @@ let configure gen unwrap_null wrap_val null_to_dynamic has_value opeq_handler =
 			| { eexpr = TBlock([e]) } -> e
 			| { eexpr = TBlock([e]) } -> e
 			| e -> e
 			| e -> e
 	in
 	in
-	let map e = Some(run e) in
-	gen.gsyntax_filters#add name (PCustom priority) map
+	gen.gsyntax_filters#add name (PCustom priority) run

+ 7 - 7
src/generators/gencommon/initFunction.ml

@@ -224,11 +224,11 @@ let name = "init_funcs"
 let priority = solve_deps name [DBefore OverloadingConstructor.priority]
 let priority = solve_deps name [DBefore OverloadingConstructor.priority]
 
 
 let configure gen =
 let configure gen =
-	let mod_filter = function
-	| TClassDecl cl ->
-		if not cl.cl_extern then handle_class gen.gcon cl;
-		None
-	| _ ->
-		None
+	let mod_filter md =
+		(match md with
+		| TClassDecl cl when not cl.cl_extern ->
+			handle_class gen.gcon cl
+		| _ -> ());
+		md
 	in
 	in
-	gen.gmodule_filters#add "init_funcs" (PCustom priority) mod_filter
+	gen.gmodule_filters#add name (PCustom priority) mod_filter

+ 1 - 2
src/generators/gencommon/intDivisionSynf.ml

@@ -76,5 +76,4 @@ let priority = solve_deps name [ DAfter ExpressionUnwrap.priority; DAfter Object
 
 
 let configure gen =
 let configure gen =
 	let run = init gen.gcon in
 	let run = init gen.gcon in
-	let map e = Some (run e) in
-	gen.gsyntax_filters#add name (PCustom priority) map
+	gen.gsyntax_filters#add name (PCustom priority) run

+ 1 - 1
src/generators/gencommon/interfaceMetas.ml

@@ -48,5 +48,5 @@ let configure gen =
 			| _ -> ())
 			| _ -> ())
 		| _ -> ()
 		| _ -> ()
 	in
 	in
-	let map md = run md; Some(md) in
+	let map md = run md; md in
 	gen.gmodule_filters#add name (PCustom priority) map
 	gen.gmodule_filters#add name (PCustom priority) map

+ 1 - 1
src/generators/gencommon/interfaceProps.ml

@@ -47,5 +47,5 @@ let name = "interface_props"
 let priority = solve_deps name []
 let priority = solve_deps name []
 
 
 let configure gen =
 let configure gen =
-	let map md = run md; Some md in
+	let map md = run md; md in
 	gen.gmodule_filters#add name (PCustom priority) map
 	gen.gmodule_filters#add name (PCustom priority) map

+ 1 - 1
src/generators/gencommon/interfaceVarsDeleteModf.ml

@@ -80,5 +80,5 @@ let configure gen =
 			) !to_add
 			) !to_add
 		| _ -> ()
 		| _ -> ()
 	in
 	in
-	let map md = Some(run md; md) in
+	let map md = run md; md in
 	gen.gmodule_filters#add name (PCustom priority) map
 	gen.gmodule_filters#add name (PCustom priority) map

+ 2 - 3
src/generators/gencommon/normalize.ml

@@ -90,8 +90,7 @@ let priority = max_dep
 
 
 let configure gen ~allowed_metas =
 let configure gen ~allowed_metas =
 	let run = init_expr_filter allowed_metas in
 	let run = init_expr_filter allowed_metas in
-	let map e = Some (run e) in
-	gen.gexpr_filters#add name (PCustom priority) map;
+	gen.gexpr_filters#add name (PCustom priority) run;
 
 
-	let map md = Some (type_filter md; md) in
+	let map md = type_filter md; md in
 	gen.gmodule_filters#add name (PCustom priority) map
 	gen.gmodule_filters#add name (PCustom priority) map

+ 1 - 2
src/generators/gencommon/objectDeclMap.ml

@@ -34,5 +34,4 @@ let configure gen map_fn =
 		| _ ->
 		| _ ->
 			Type.map_expr run e
 			Type.map_expr run e
 	in
 	in
-	let map e = Some(run e) in
-	gen.gsyntax_filters#add name (PCustom priority) map
+	gen.gsyntax_filters#add name (PCustom priority) run

+ 1 - 1
src/generators/gencommon/overloadingConstructor.ml

@@ -418,6 +418,6 @@ let configure ~(empty_ctor_type : t) ~(empty_ctor_expr : texpr) gen =
 			change cl;
 			change cl;
 		| _ ->
 		| _ ->
 			());
 			());
-		None
+		md
 	in
 	in
 	gen.gmodule_filters#add name (PCustom priority) module_filter
 	gen.gmodule_filters#add name (PCustom priority) module_filter

+ 2 - 4
src/generators/gencommon/realTypeParams.ml

@@ -742,8 +742,7 @@ struct
 		run
 		run
 
 
 	let configure gen mapping_func =
 	let configure gen mapping_func =
-		let map e = Some(mapping_func e) in
-		gen.gmodule_filters#add name (PCustom priority) map
+		gen.gmodule_filters#add name (PCustom priority) mapping_func
 
 
 end;;
 end;;
 
 
@@ -786,6 +785,5 @@ let default_implementation gen (dyn_tparam_cast:texpr->t->texpr) ifaces =
 let configure gen (dyn_tparam_cast:texpr->t->texpr) ifaces base_generic =
 let configure gen (dyn_tparam_cast:texpr->t->texpr) ifaces base_generic =
 	gen.ghas_tparam_cast_handler <- true;
 	gen.ghas_tparam_cast_handler <- true;
 	let traverse = default_implementation gen dyn_tparam_cast ifaces in
 	let traverse = default_implementation gen dyn_tparam_cast ifaces in
-	let map e = Some(traverse e) in
-	gen.gsyntax_filters#add name (PCustom priority) map;
+	gen.gsyntax_filters#add name (PCustom priority) traverse;
 	RealTypeParamsModf.configure gen (RealTypeParamsModf.default_implementation gen ifaces base_generic)
 	RealTypeParamsModf.configure gen (RealTypeParamsModf.default_implementation gen ifaces base_generic)

+ 14 - 16
src/generators/gencommon/reflectionCFs.ml

@@ -1357,7 +1357,7 @@ let implement_invokeField ctx ~slow_invoke cl =
 			| [] -> cases
 			| [] -> cases
 			| _ ->
 			| _ ->
 				let ncases = List.map (fun cf -> switch_case ctx pos cf.cf_name) old in
 				let ncases = List.map (fun cf -> switch_case ctx pos cf.cf_name) old in
-				( ncases, mk_return ((get slow_invoke) this (mk_local (fst (List.hd field_args)) pos) (mk_local dynamic_arg pos)) ) :: cases
+				( ncases, mk_return (slow_invoke this (mk_local (fst (List.hd field_args)) pos) (mk_local dynamic_arg pos)) ) :: cases
 		in
 		in
 
 
 		let default = if !is_override then
 		let default = if !is_override then
@@ -1396,14 +1396,12 @@ let implement_invokeField ctx ~slow_invoke cl =
 
 
 		let old_nonstatics = ref [] in
 		let old_nonstatics = ref [] in
 
 
-		let nonstatics = match slow_invoke with
-			| None -> nonstatics
-			| Some _ ->
-				List.filter (fun (n,cf) ->
-					let is_old = not (PMap.mem cf.cf_name cl.cl_fields) || List.memq cf cl.cl_overrides in
-					(if is_old then old_nonstatics := cf :: !old_nonstatics);
-					not is_old
-				) nonstatics
+		let nonstatics =
+			List.filter (fun (n,cf) ->
+				let is_old = not (PMap.mem cf.cf_name cl.cl_fields) || List.memq cf cl.cl_overrides in
+				(if is_old then old_nonstatics := cf :: !old_nonstatics);
+				not is_old
+			) nonstatics
 		in
 		in
 
 
 		mk_switch_dyn nonstatics !old_nonstatics
 		mk_switch_dyn nonstatics !old_nonstatics
@@ -1652,7 +1650,7 @@ struct
 				| _ ->
 				| _ ->
 					()
 					()
 		in
 		in
-		let map md = Some(run md; md) in
+		let map md = run md; md in
 		gen.gmodule_filters#add name (PCustom priority) map
 		gen.gmodule_filters#add name (PCustom priority) map
 end;;
 end;;
 
 
@@ -1662,17 +1660,17 @@ end;;
 *)
 *)
 let priority = solve_deps name [DAfter UniversalBaseClass.priority]
 let priority = solve_deps name [DAfter UniversalBaseClass.priority]
 
 
-let configure ?slow_invoke ctx baseinterface =
+let configure ~slow_invoke ctx baseinterface =
 	let gen = ctx.rcf_gen in
 	let gen = ctx.rcf_gen in
-	let run = (fun md -> match md with
+	let run md =
+		(match md with
 		| TClassDecl cl when is_hxgen md && ( not cl.cl_interface || cl.cl_path = baseinterface.cl_path ) && (match cl.cl_kind with KAbstractImpl _ -> false | _ -> true) ->
 		| TClassDecl cl when is_hxgen md && ( not cl.cl_interface || cl.cl_path = baseinterface.cl_path ) && (match cl.cl_kind with KAbstractImpl _ -> false | _ -> true) ->
 			(implement_dynamics ctx cl);
 			(implement_dynamics ctx cl);
 			(if not (PMap.mem (mk_internal_name "hx" "lookupField") cl.cl_fields) then implement_final_lookup ctx cl);
 			(if not (PMap.mem (mk_internal_name "hx" "lookupField") cl.cl_fields) then implement_final_lookup ctx cl);
 			(if not (PMap.mem (mk_internal_name "hx" "getField") cl.cl_fields) then implement_get_set ctx cl);
 			(if not (PMap.mem (mk_internal_name "hx" "getField") cl.cl_fields) then implement_get_set ctx cl);
 			(if not (PMap.mem (mk_internal_name "hx" "invokeField") cl.cl_fields) then implement_invokeField ctx ~slow_invoke:slow_invoke cl);
 			(if not (PMap.mem (mk_internal_name "hx" "invokeField") cl.cl_fields) then implement_invokeField ctx ~slow_invoke:slow_invoke cl);
-			(if not (PMap.mem (mk_internal_name "hx" "getFields") cl.cl_fields) then implement_getFields ctx cl);
-			None
-		| _ -> None)
+			(if not (PMap.mem (mk_internal_name "hx" "getFields") cl.cl_fields) then implement_getFields ctx cl)
+		| _ -> ());
+		md
 	in
 	in
-
 	gen.gmodule_filters#add name (PCustom priority) run
 	gen.gmodule_filters#add name (PCustom priority) run

+ 2 - 3
src/generators/gencommon/switchToIf.ml

@@ -83,7 +83,7 @@ let configure gen (should_convert:texpr->bool) =
 							the condition is guaranteed to not have run twice, we can really run the
 							the condition is guaranteed to not have run twice, we can really run the
 							expr filters again for it (so to change e.g. OpEq accordingly
 							expr filters again for it (so to change e.g. OpEq accordingly
 						*)
 						*)
-						gen.gexpr_filters#run_f ret
+						gen.gexpr_filters#run ret
 					in
 					in
 
 
 					let rec loop cases = match cases with
 					let rec loop cases = match cases with
@@ -125,5 +125,4 @@ let configure gen (should_convert:texpr->bool) =
 				with Not_found -> Type.map_expr run e)
 				with Not_found -> Type.map_expr run e)
 			| _ -> Type.map_expr run e
 			| _ -> Type.map_expr run e
 	in
 	in
-	let map e = Some(run e) in
-	gen.gsyntax_filters#add name (PCustom priority) map
+	gen.gsyntax_filters#add name (PCustom priority) run

+ 1 - 2
src/generators/gencommon/tArrayTransform.ml

@@ -101,5 +101,4 @@ let configure gen (should_change:texpr->Ast.binop option->bool) (get_fun:string)
 					Type.map_expr run e
 					Type.map_expr run e
 			| _ -> Type.map_expr run e
 			| _ -> Type.map_expr run e
 	in
 	in
-	let map e = Some(run e) in
-	gen.gexpr_filters#add "dyn_tarray" (PCustom priority) map
+	gen.gexpr_filters#add "dyn_tarray" (PCustom priority) run

+ 1 - 2
src/generators/gencommon/tryCatchWrapper.ml

@@ -127,5 +127,4 @@ let configure gen should_wrap wrap_throw unwrap_expr rethrow_expr catchall_type
 		mk (TCall (std_is, [e; mk_mt_access (t_to_mt t) pos])) gen.gcon.basic.tbool pos
 		mk (TCall (std_is, [e; mk_mt_access (t_to_mt t) pos])) gen.gcon.basic.tbool pos
 	in
 	in
 	let run = init gen.gcon should_wrap wrap_throw unwrap_expr rethrow_expr catchall_type wrapper_type catch_map gen_typecheck in
 	let run = init gen.gcon should_wrap wrap_throw unwrap_expr rethrow_expr catchall_type wrapper_type catch_map gen_typecheck in
-	let map e = Some(run e) in
-	gen.gsyntax_filters#add name (PCustom priority) map
+	gen.gsyntax_filters#add name (PCustom priority) run

+ 1 - 2
src/generators/gencommon/unnecessaryCastsRemoval.ml

@@ -57,5 +57,4 @@ let name = "casts_removal"
 let priority = solve_deps name [DAfter CastDetect.priority; DBefore ExpressionUnwrap.priority]
 let priority = solve_deps name [DAfter CastDetect.priority; DBefore ExpressionUnwrap.priority]
 
 
 let configure gen =
 let configure gen =
-	let map e = Some (traverse e) in
-	gen.gsyntax_filters#add name (PCustom priority) map
+	gen.gsyntax_filters#add name (PCustom priority) traverse

+ 1 - 2
src/generators/gencommon/unreachableCodeEliminationSynf.ml

@@ -210,5 +210,4 @@ let priority = min_dep -. 100.0
 
 
 let configure gen java_mode =
 let configure gen java_mode =
 	let run = init gen.gcon java_mode in
 	let run = init gen.gcon java_mode in
-	let map e = Some(run e) in
-	gen.gsyntax_filters#add "unreachable_synf" (PCustom priority) map
+	gen.gsyntax_filters#add "unreachable_synf" (PCustom priority) run

+ 2 - 4
src/generators/gencs.ml

@@ -305,8 +305,7 @@ struct
 
 
 				| _ -> Type.map_expr run e
 				| _ -> Type.map_expr run e
 		in
 		in
-		let map e = Some(run e) in
-		gen.gsyntax_filters#add name (PCustom priority) map
+		gen.gsyntax_filters#add name (PCustom priority) run
 end;;
 end;;
 
 
 (* ******************************************* *)
 (* ******************************************* *)
@@ -490,8 +489,7 @@ struct
 
 
 				| _ -> Type.map_expr run e
 				| _ -> Type.map_expr run e
 		in
 		in
-		let map e = Some(run e) in
-		gen.gsyntax_filters#add name (PCustom priority) map
+		gen.gsyntax_filters#add name (PCustom priority) run
 end;;
 end;;
 
 
 let add_cast_handler gen =
 let add_cast_handler gen =

+ 2 - 5
src/generators/genjava.ml

@@ -263,8 +263,7 @@ struct
 				(* end Std.is() *)
 				(* end Std.is() *)
 				| _ -> Type.map_expr run e
 				| _ -> Type.map_expr run e
 		in
 		in
-		let map e = Some(run e) in
-		gen.gsyntax_filters#add name (PCustom priority) map
+		gen.gsyntax_filters#add name (PCustom priority) run
 
 
 end;;
 end;;
 
 
@@ -676,9 +675,7 @@ struct
 					{ e with eexpr = TBinop(op, mk_cast t_empty (run e1), mk_cast t_empty (run e2)) }
 					{ e with eexpr = TBinop(op, mk_cast t_empty (run e1), mk_cast t_empty (run e2)) }
 				| _ -> Type.map_expr run e
 				| _ -> Type.map_expr run e
 		in
 		in
-		let map e = Some(run e) in
-		gen.gsyntax_filters#add name (PCustom priority) map
-
+		gen.gsyntax_filters#add name (PCustom priority) run
 end;;
 end;;