Browse Source

[cpp] Look for class metadata in KAbstractImpl abstract_def too

Hugh 10 years ago
parent
commit
d42d6a83b7
1 changed files with 19 additions and 6 deletions
  1. 19 6
      gencpp.ml

+ 19 - 6
gencpp.ml

@@ -360,6 +360,19 @@ let get_code meta key =
    if (code<>"") then code ^ "\n" else code
 ;;
 
+(*
+let dump_meta meta = 
+   List.iter (fun m -> match m with | (k,_,_) -> print_endline ((fst (MetaInfo.to_string k)) ^ "=" ^ (get_meta_string meta k) ) | _ -> () ) meta;;
+*)
+
+let get_class_code class_def key = match class_def.cl_kind with
+    | KAbstractImpl abstract_def ->
+       let value = (get_code abstract_def.a_meta key) in
+       value
+    | _ -> get_code class_def.cl_meta key
+;;
+
+
 (* Add include to source code *)
 let add_include writer class_path =
    writer#add_include class_path;;
@@ -3368,12 +3381,12 @@ let generate_class_files common_ctx member_types super_deps constructor_deps cla
    if (scriptable) then
       output_cpp "#include <hx/Scriptable.h>\n";
 
-   output_cpp ( get_code class_def.cl_meta Meta.CppFileCode );
+   output_cpp ( get_class_code class_def Meta.CppFileCode );
 
    gen_open_namespace output_cpp class_path;
    output_cpp "\n";
 
-   output_cpp ( get_code class_def.cl_meta Meta.CppNamespaceCode );
+   output_cpp ( get_class_code class_def Meta.CppNamespaceCode );
 
    if (not class_def.cl_interface) then begin
       output_cpp ("Void " ^ class_name ^ "::__construct(" ^ constructor_type_args ^ ")\n{\n");
@@ -3935,11 +3948,11 @@ let generate_class_files common_ctx member_types super_deps constructor_deps cla
    let referenced = find_referenced_types ctx.ctx_common (TClassDecl class_def) super_deps (Hashtbl.create 0) true false scriptable in
    List.iter ( gen_forward_decl h_file ) referenced;
 
-   output_h ( get_code class_def.cl_meta Meta.HeaderCode );
+   output_h ( get_class_code class_def Meta.HeaderCode );
 
    gen_open_namespace output_h class_path;
    output_h "\n\n";
-   output_h ( get_code class_def.cl_meta Meta.HeaderNamespaceCode );
+   output_h ( get_class_code class_def Meta.HeaderNamespaceCode );
 
    let extern_class =  Common.defined common_ctx Define.DllExport in
    let attribs = "HXCPP_" ^ (if extern_class then "EXTERN_" else "") ^ "CLASS_ATTRIBUTES " in
@@ -4007,7 +4020,7 @@ let generate_class_files common_ctx member_types super_deps constructor_deps cla
    List.iter (gen_member_def ctx class_def false interface) (List.filter should_implement_field class_def.cl_ordered_fields);
    List.iter (gen_member_def ctx class_def true interface)  (List.filter should_implement_field class_def.cl_ordered_statics);
 
-   output_h ( get_code class_def.cl_meta Meta.HeaderClassCode );
+   output_h ( get_class_code class_def Meta.HeaderClassCode );
 
    output_h "};\n\n";
 
@@ -5291,7 +5304,7 @@ let generate_source common_ctx =
          if (is_internal || (is_macro class_def.cl_meta)) then
             ( if (debug>1) then print_endline (" internal class " ^ name ))
          else begin
-            build_xml := !build_xml ^ (get_code class_def.cl_meta Meta.BuildXml);
+            build_xml := !build_xml ^ (get_class_code class_def Meta.BuildXml);
             if (has_init_field class_def) then
                init_classes := class_def.cl_path ::  !init_classes;
             if (has_boot_field class_def) then