Explorar el Código

Respect 'extern' meta on abstract implementations, and avoid generating code for cpp.Object

Hugh hace 11 años
padre
commit
de31bcfa90
Se han modificado 2 ficheros con 9 adiciones y 4 borrados
  1. 7 3
      gencpp.ml
  2. 2 1
      std/cpp/Object.hx

+ 7 - 3
gencpp.ml

@@ -765,7 +765,10 @@ let is_internal_member member =
 
 
 let is_extern_class class_def =
-   class_def.cl_extern || (has_meta_key class_def.cl_meta Meta.Extern)
+   class_def.cl_extern || (has_meta_key class_def.cl_meta Meta.Extern) ||
+      (match class_def.cl_kind with
+       | KAbstractImpl abstract_def -> (has_meta_key abstract_def.a_meta Meta.Extern)
+       | _ -> false );
 ;;
 
 let is_extern_class_instance obj =
@@ -3318,8 +3321,9 @@ let generate_class_files common_ctx member_types super_deps constructor_deps cla
 
    output_cpp "#include <hxcpp.h>\n\n";
 
-   let field_integer_dynamic = scriptable || (has_field_integer_lookup class_def) in
-   let field_integer_numeric = scriptable || (has_field_integer_numeric_lookup class_def) in
+   let force_field = scriptable && (has_get_field class_def) in
+   let field_integer_dynamic = force_field || (has_field_integer_lookup class_def) in
+   let field_integer_numeric = force_field || (has_field_integer_numeric_lookup class_def) in
 
    let all_referenced = find_referenced_types ctx.ctx_common (TClassDecl class_def) super_deps constructor_deps false false scriptable in
    List.iter ( add_include cpp_file  ) all_referenced;

+ 2 - 1
std/cpp/Object.hx

@@ -9,7 +9,8 @@ extern class HxObjectPtr
    static function toDynamic(x:Object):Dynamic;
 }
 
+@:extern
 abstract Object(HxObjectPtr) {
 	@:from public inline static function from(x:Dynamic):Object return HxObjectPtr.fromDynamic(x);
-	@:to public inline function to():Dynamic return HxObjectPtr.toDynamic(this);
+	@:to public inline static function to(inVal:HxObjectPtr):Dynamic return HxObjectPtr.toDynamic(inVal);
 }