Bläddra i källkod

[js] run es6 constructors filter before even allocating genjs context

this prevents creation of empty output js file
Dan Korostelev 6 år sedan
förälder
incheckning
016cf0456e
2 ändrade filer med 13 tillägg och 7 borttagningar
  1. 12 6
      src/generators/genjs.ml
  2. 1 1
      src/typing/macroContext.ml

+ 12 - 6
src/generators/genjs.ml

@@ -1464,7 +1464,7 @@ let generate_type ctx = function
 let set_current_class ctx c =
 let set_current_class ctx c =
 	ctx.current <- c
 	ctx.current <- c
 
 
-let alloc_ctx com =
+let alloc_ctx com es_version =
 	let smap =
 	let smap =
 		if com.debug || Common.defined com Define.JsSourceMap || Common.defined com Define.SourceMap then
 		if com.debug || Common.defined com Define.JsSourceMap || Common.defined com Define.SourceMap then
 			Some {
 			Some {
@@ -1489,7 +1489,7 @@ let alloc_ctx com =
 		js_modern = not (Common.defined com Define.JsClassic);
 		js_modern = not (Common.defined com Define.JsClassic);
 		js_flatten = not (Common.defined com Define.JsUnflatten);
 		js_flatten = not (Common.defined com Define.JsUnflatten);
 		has_resolveClass = Common.has_feature com "Type.resolveClass";
 		has_resolveClass = Common.has_feature com "Type.resolveClass";
-		es_version = (try int_of_string (Common.defined_value com Define.JsEs) with _ -> 0);
+		es_version = es_version;
 		statics = [];
 		statics = [];
 		inits = [];
 		inits = [];
 		current = null_class;
 		current = null_class;
@@ -1518,11 +1518,20 @@ let gen_single_expr ctx e expr =
 	ctx.id_counter <- 0;
 	ctx.id_counter <- 0;
 	str
 	str
 
 
+let get_es_version com = 
+	try int_of_string (Common.defined_value com Define.JsEs) with _ -> 0
+
 let generate com =
 let generate com =
 	(match com.js_gen with
 	(match com.js_gen with
 	| Some g -> g()
 	| Some g -> g()
 	| None ->
 	| None ->
-	let ctx = alloc_ctx com in
+
+	let es_version = get_es_version com in
+
+	if es_version >= 6 then
+		ES6Ctors.rewrite_ctors com;
+
+	let ctx = alloc_ctx com es_version in
 	Codegen.map_source_header com (fun s -> print ctx "// %s\n" s);
 	Codegen.map_source_header com (fun s -> print ctx "// %s\n" s);
 	if has_feature ctx "Class" || has_feature ctx "Type.getClassName" then add_feature ctx "js.Boot.isClass";
 	if has_feature ctx "Class" || has_feature ctx "Type.getClassName" then add_feature ctx "js.Boot.isClass";
 	if has_feature ctx "Enum" || has_feature ctx "Type.getEnumName" then add_feature ctx "js.Boot.isEnum";
 	if has_feature ctx "Enum" || has_feature ctx "Type.getEnumName" then add_feature ctx "js.Boot.isEnum";
@@ -1531,9 +1540,6 @@ let generate com =
 
 
 	setup_kwds (if ctx.es_version >= 5 then es5kwds else es3kwds);
 	setup_kwds (if ctx.es_version >= 5 then es5kwds else es3kwds);
 
 
-	if ctx.es_version >= 6 then
-		ES6Ctors.rewrite_ctors com;
-
 	let exposed = List.concat (List.map (fun t ->
 	let exposed = List.concat (List.map (fun t ->
 		match t with
 		match t with
 			| TClassDecl c ->
 			| TClassDecl c ->

+ 1 - 1
src/typing/macroContext.ml

@@ -239,7 +239,7 @@ let make_macro_api ctx p =
 		);
 		);
 		MacroApi.set_js_generator = (fun gen ->
 		MacroApi.set_js_generator = (fun gen ->
 			Path.mkdir_from_path ctx.com.file;
 			Path.mkdir_from_path ctx.com.file;
-			let js_ctx = Genjs.alloc_ctx ctx.com in
+			let js_ctx = Genjs.alloc_ctx ctx.com (Genjs.get_es_version ctx.com) in
 			ctx.com.js_gen <- Some (fun() ->
 			ctx.com.js_gen <- Some (fun() ->
 				let t = macro_timer ctx ["jsGenerator"] in
 				let t = macro_timer ctx ["jsGenerator"] in
 				gen js_ctx;
 				gen js_ctx;