|
@@ -6078,10 +6078,11 @@ let generate_class_files baseCtx super_deps constructor_deps class_def inScripta
|
|
|
"0 /* sMemberFields */";
|
|
|
in
|
|
|
|
|
|
- if (not nativeGen) then begin
|
|
|
+ let hasMarkFunc = (not nativeGen) && not (List.exists is_data_member implemented_fields) in
|
|
|
+
|
|
|
+ if (hasMarkFunc) then begin
|
|
|
(* Mark static variables as used *)
|
|
|
output_cpp ("static void " ^ class_name ^ "_sMarkStatics(HX_MARK_PARAMS) {\n");
|
|
|
- output_cpp ("\tHX_MARK_MEMBER_NAME(" ^ class_name ^ "::__mClass,\"__mClass\");\n");
|
|
|
List.iter (fun field ->
|
|
|
if (is_data_member field) then
|
|
|
output_cpp ("\tHX_MARK_MEMBER_NAME(" ^ class_name ^ "::" ^ (keyword_remap field.cf_name) ^ ",\"" ^ field.cf_name ^ "\");\n") )
|
|
@@ -6091,7 +6092,6 @@ let generate_class_files baseCtx super_deps constructor_deps class_def inScripta
|
|
|
(* Visit static variables *)
|
|
|
output_cpp "#ifdef HXCPP_VISIT_ALLOCS\n";
|
|
|
output_cpp ("static void " ^ class_name ^ "_sVisitStatics(HX_VISIT_PARAMS) {\n");
|
|
|
- output_cpp ("\tHX_VISIT_MEMBER_NAME(" ^ class_name ^ "::__mClass,\"__mClass\");\n");
|
|
|
List.iter (fun field ->
|
|
|
if (is_data_member field) then
|
|
|
output_cpp ("\tHX_VISIT_MEMBER_NAME(" ^ class_name ^ "::" ^ (keyword_remap field.cf_name) ^ ",\"" ^ field.cf_name ^ "\");\n") )
|
|
@@ -6288,11 +6288,13 @@ let generate_class_files baseCtx super_deps constructor_deps class_def inScripta
|
|
|
if (has_get_static_field class_def) then class_name ^ "::__GetStatic;\n" else "hx::Class_obj::GetNoStaticField;\n" ));
|
|
|
output_cpp ("\t__mClass->mSetStaticField = &" ^ (
|
|
|
if (has_set_static_field class_def) then class_name ^ "::__SetStatic;\n" else "hx::Class_obj::SetNoStaticField;\n" ));
|
|
|
- output_cpp ("\t__mClass->mMarkFunc = " ^ class_name ^ "_sMarkStatics;\n");
|
|
|
+ if hasMarkFunc then
|
|
|
+ output_cpp ("\t__mClass->mMarkFunc = " ^ class_name ^ "_sMarkStatics;\n");
|
|
|
output_cpp ("\t__mClass->mStatics = hx::Class_obj::dupFunctions(" ^ sStaticFields ^ ");\n");
|
|
|
output_cpp ("\t__mClass->mMembers = hx::Class_obj::dupFunctions(" ^ sMemberFields ^ ");\n");
|
|
|
output_cpp ("\t__mClass->mCanCast = hx::TCanCast< " ^ class_name ^ " >;\n");
|
|
|
- output_cpp ("#ifdef HXCPP_VISIT_ALLOCS\n\t__mClass->mVisitFunc = " ^ class_name ^ "_sVisitStatics;\n#endif\n");
|
|
|
+ if hasMarkFunc then
|
|
|
+ output_cpp ("#ifdef HXCPP_VISIT_ALLOCS\n\t__mClass->mVisitFunc = " ^ class_name ^ "_sVisitStatics;\n#endif\n");
|
|
|
output_cpp ("#ifdef HXCPP_SCRIPTABLE\n\t__mClass->mMemberStorageInfo = " ^ class_name ^ "_sMemberStorageInfo;\n#endif\n");
|
|
|
output_cpp ("#ifdef HXCPP_SCRIPTABLE\n\t__mClass->mStaticStorageInfo = " ^ class_name ^ "_sStaticStorageInfo;\n#endif\n");
|
|
|
output_cpp ("\thx::_hx_RegisterClass(__mClass->mName, __mClass);\n");
|
|
@@ -6310,11 +6312,12 @@ let generate_class_files baseCtx super_deps constructor_deps class_def inScripta
|
|
|
output_cpp ("\thx::Static(__mClass) = new hx::Class_obj();\n");
|
|
|
output_cpp ("\t__mClass->mName = " ^ (str class_name_text) ^ ";\n");
|
|
|
output_cpp ("\t__mClass->mSuper = &super::__SGetClass();\n");
|
|
|
- output_cpp ("\t__mClass->mMarkFunc = " ^ class_name ^ "_sMarkStatics;\n");
|
|
|
- (*output_cpp ("\t__mClass->mStatics = hx::Class_obj::dupFunctions(" ^ sStaticFields ^ ");\n");*)
|
|
|
+ if hasMarkFunc then
|
|
|
+ output_cpp ("\t__mClass->mMarkFunc = " ^ class_name ^ "_sMarkStatics;\n");
|
|
|
output_cpp ("\t__mClass->mMembers = hx::Class_obj::dupFunctions(" ^ sMemberFields ^ ");\n");
|
|
|
output_cpp ("\t__mClass->mCanCast = hx::TIsInterface< (int)" ^ (cpp_class_hash class_def) ^ " >;\n");
|
|
|
- output_cpp ("#ifdef HXCPP_VISIT_ALLOCS\n\t__mClass->mVisitFunc = " ^ class_name ^ "_sVisitStatics;\n#endif\n");
|
|
|
+ if hasMarkFunc then
|
|
|
+ output_cpp ("#ifdef HXCPP_VISIT_ALLOCS\n\t__mClass->mVisitFunc = " ^ class_name ^ "_sVisitStatics;\n#endif\n");
|
|
|
output_cpp ("\thx::_hx_RegisterClass(__mClass->mName, __mClass);\n");
|
|
|
if (scriptable) then
|
|
|
output_cpp (" HX_SCRIPTABLE_REGISTER_INTERFACE(\""^class_name_text^"\"," ^ class_name ^ ");\n");
|