浏览代码

[python] don't generate extern enums and support @:pythonImport for extern enums (closes #3925)

Dan Korostelev 10 年之前
父节点
当前提交
db5f623a40
共有 1 个文件被更改,包括 8 次插入7 次删除
  1. 8 7
      genpy.ml

+ 8 - 7
genpy.ml

@@ -1917,13 +1917,13 @@ module Generator = struct
 				in
 				ctx.class_inits <- f :: ctx.class_inits
 
-	let gen_import ctx c =
-		gen_pre_code_meta ctx c.cl_meta;
+	let gen_import ctx path meta =
+		gen_pre_code_meta ctx meta;
 
-		if Meta.has Meta.PythonImport c.cl_meta && is_directly_used ctx.com c.cl_meta then begin
-			let _, args, mp = Meta.get Meta.PythonImport c.cl_meta in
+		if Meta.has Meta.PythonImport meta && is_directly_used ctx.com meta then begin
+			let _, args, mp = Meta.get Meta.PythonImport meta in
 
-			let class_name = match c.cl_path with
+			let class_name = match path with
 				| [],name -> name
 				| path,name -> (ExtString.String.join "_" path) ^ "_" ^ name
 			in
@@ -2119,7 +2119,7 @@ module Generator = struct
 
 	let gen_type ctx mt = match mt with
 		| TClassDecl c -> gen_class ctx c
-		| TEnumDecl en -> gen_enum ctx en
+		| TEnumDecl en when not en.e_extern -> gen_enum ctx en
 		| TAbstractDecl {a_path = [],"UInt"} -> ()
 		| TAbstractDecl a when Meta.has Meta.CoreType a.a_meta -> gen_abstract ctx a
 		| _ -> ()
@@ -2146,7 +2146,8 @@ module Generator = struct
 	let gen_imports ctx =
 		List.iter (fun mt ->
 			match mt with
-			| TClassDecl c when c.cl_extern -> gen_import ctx c
+			| TClassDecl c when c.cl_extern -> gen_import ctx c.cl_path c.cl_meta
+			| TEnumDecl e when e.e_extern -> gen_import ctx e.e_path e.e_meta
 			| _ -> ()
 		) ctx.com.types;
 		newline ctx