Explorar el Código

add filters.ml

Simon Krajewski hace 12 años
padre
commit
b463fee5b5
Se han modificado 3 ficheros con 48 adiciones y 42 borrados
  1. 4 2
      Makefile
  2. 42 0
      filters.ml
  3. 2 40
      main.ml

+ 4 - 2
Makefile

@@ -34,7 +34,7 @@ EXPORT=../../../projects/motionTools/haxe
 
 MODULES=ast type lexer common genxml parser typecore optimizer typeload \
 codegen gencommon genas3 gencpp genjs genneko genphp genswf8 \
-	genswf9 genswf genjava gencs interp typer matcher dce version main
+	genswf9 genswf genjava gencs interp typer matcher dce filters version main
 
 ADD_REVISION=0
 
@@ -108,6 +108,8 @@ common.cmx: type.cmx ast.cmx
 
 dce.cmx: ast.cmx common.cmx codegen.cmx type.cmx
 
+filters.cmx: ast.cmx common.cmx type.cmx dce.cmx
+
 genas3.cmx: type.cmx common.cmx codegen.cmx ast.cmx
 
 gencommon.cmx: type.cmx common.cmx codegen.cmx ast.cmx
@@ -136,7 +138,7 @@ interp.cmx: typecore.cmx type.cmx lexer.cmx genneko.cmx common.cmx codegen.cmx a
 
 matcher.cmx: optimizer.cmx codegen.cmx typecore.cmx type.cmx typer.cmx common.cmx ast.cmx
 
-main.cmx: dce.cmx matcher.cmx typer.cmx typeload.cmx typecore.cmx type.cmx parser.cmx optimizer.cmx lexer.cmx interp.cmx genxml.cmx genswf.cmx genphp.cmx genneko.cmx genjs.cmx gencpp.cmx genas3.cmx common.cmx codegen.cmx ast.cmx gencommon.cmx genjava.cmx gencs.cmx version.cmx
+main.cmx: filters.cmx matcher.cmx typer.cmx typeload.cmx typecore.cmx type.cmx parser.cmx optimizer.cmx lexer.cmx interp.cmx genxml.cmx genswf.cmx genphp.cmx genneko.cmx genjs.cmx gencpp.cmx genas3.cmx common.cmx codegen.cmx ast.cmx gencommon.cmx genjava.cmx gencs.cmx version.cmx
 
 optimizer.cmx: typecore.cmx type.cmx parser.cmx common.cmx ast.cmx
 

+ 42 - 0
filters.ml

@@ -0,0 +1,42 @@
+open Ast
+open Common
+open Type
+
+let run com tctx main =
+	let filters = [
+		Codegen.Abstract.handle_abstract_casts tctx;
+		(match com.platform with Cpp -> Codegen.handle_side_effects com (Typecore.gen_local tctx) | _ -> fun e -> e);
+		Codegen.promote_complex_rhs com;
+		if com.foptimize then (fun e -> Optimizer.reduce_expression tctx (Optimizer.inline_constructors tctx e)) else Optimizer.sanitize tctx;
+		Codegen.check_local_vars_init;
+		Codegen.captured_vars com;
+		Codegen.rename_local_vars com;
+	] in
+	List.iter (Codegen.post_process tctx filters) com.types;
+	Codegen.post_process_end();
+	List.iter (fun f -> f()) (List.rev com.filters);
+	List.iter (Codegen.save_class_state tctx) com.types;
+	List.iter (fun t ->
+		Codegen.remove_generic_base tctx t;
+		Codegen.remove_extern_fields tctx t
+	) com.types;
+	if com.display = DMUsage then
+		Codegen.detect_usage com;
+	Codegen.update_cache_dependencies com;
+	let dce_mode = (try Common.defined_value com Define.Dce with _ -> "no") in
+	if not (Common.defined com Define.As3 || dce_mode = "no" || Common.defined com Define.DocGen) then Dce.run com main (dce_mode = "full" && not (Common.defined com Define.Interp));
+	(* always filter empty abstract implementation classes (issue #1885) *)
+	List.iter (fun mt -> match mt with
+		| TClassDecl({cl_kind = KAbstractImpl _} as c) when c.cl_ordered_statics = [] && c.cl_ordered_fields = [] -> c.cl_extern <- true
+		| _ -> ()
+	) com.types;
+	let type_filters = [
+		Codegen.check_private_path;
+		Codegen.apply_native_paths;
+		Codegen.add_rtti;
+		(match com.platform with | Java | Cs -> (fun _ _ -> ()) | _ -> Codegen.add_field_inits);
+		Codegen.add_meta_field;
+		Codegen.check_remove_metadata;
+		Codegen.check_void_field;
+	] in
+	List.iter (fun t -> List.iter (fun f -> f tctx t) type_filters) com.types;

+ 2 - 40
main.ml

@@ -917,7 +917,6 @@ try
 	let config_macros = ref [] in
 	let cp_libs = ref [] in
 	let added_libs = Hashtbl.create 0 in
-	let gen_as3 = ref false in
 	let no_output = ref false in
 	let did_something = ref false in
 	let force_typing = ref false in
@@ -978,7 +977,6 @@ try
 		("-swf",Arg.String (set_platform Flash),"<file> : compile code to Flash SWF file");
 		("-as3",Arg.String (fun dir ->
 			set_platform Flash dir;
-			gen_as3 := true;
 			Common.define com Define.As3;
 			Common.define com Define.NoInline;
 		),"<directory> : generate AS3 code into target directory");
@@ -1355,43 +1353,7 @@ try
 		com.main <- main;
 		com.types <- types;
 		com.modules <- modules;
-		let filters = [
-			Codegen.Abstract.handle_abstract_casts tctx;
-			(match com.platform with Cpp -> Codegen.handle_side_effects com (Typecore.gen_local tctx) | _ -> fun e -> e);
-			Codegen.promote_complex_rhs com;
-			if com.foptimize then (fun e -> Optimizer.reduce_expression tctx (Optimizer.inline_constructors tctx e)) else Optimizer.sanitize tctx;
-			Codegen.check_local_vars_init;
-			Codegen.captured_vars com;
-			Codegen.rename_local_vars com;
-		] in
-		List.iter (Codegen.post_process tctx filters) com.types;
-		Codegen.post_process_end();
-		List.iter (fun f -> f()) (List.rev com.filters);
-		List.iter (Codegen.save_class_state tctx) com.types;
-		List.iter (fun t ->
-			Codegen.remove_generic_base tctx t;
-			Codegen.remove_extern_fields tctx t
-		) com.types;
-		if com.display = DMUsage then
-			Codegen.detect_usage com;
-		Codegen.update_cache_dependencies com;
-		let dce_mode = (try Common.defined_value com Define.Dce with _ -> "no") in
-		if not (!gen_as3 || dce_mode = "no" || Common.defined com Define.DocGen) then Dce.run com main (dce_mode = "full" && not !interp);
-		(* always filter empty abstract implementation classes (issue #1885) *)
-		List.iter (fun mt -> match mt with
-			| TClassDecl({cl_kind = KAbstractImpl _} as c) when c.cl_ordered_statics = [] && c.cl_ordered_fields = [] -> c.cl_extern <- true
-			| _ -> ()
-		) com.types;
-		let type_filters = [
-			Codegen.check_private_path;
-			Codegen.apply_native_paths;
-			Codegen.add_rtti;
-			(match ctx.com.platform with | Java | Cs -> (fun _ _ -> ()) | _ -> Codegen.add_field_inits);
-			Codegen.add_meta_field;
-			Codegen.check_remove_metadata;
-			Codegen.check_void_field;
-		] in
-		List.iter (fun t -> List.iter (fun f -> f tctx t) type_filters) com.types;
+		Filters.run com tctx main;
 		if ctx.has_error then raise Abort;
 		(match !xml_out with
 		| None -> ()
@@ -1416,7 +1378,7 @@ try
 			end;
 		| Cross ->
 			()
-		| Flash8 | Flash when !gen_as3 ->
+		| Flash8 | Flash when Common.defined com Define.As3 ->
 			Common.log com ("Generating AS3 in : " ^ com.file);
 			Genas3.generate com;
 		| Flash8 | Flash ->