فهرست منبع

Treat object array sets as having gc references

Hugh 8 سال پیش
والد
کامیت
a01e2e3afc
1فایلهای تغییر یافته به همراه7 افزوده شده و 1 حذف شده
  1. 7 1
      src/generators/gencpp.ml

+ 7 - 1
src/generators/gencpp.ml

@@ -2388,7 +2388,13 @@ let retype_expression ctx request_type function_args function_type expression_tr
       | CppVar( VarInstance(obj,member,_,"->") as varloc) when is_gc_element ctx (cpp_type_of ctx member.cf_type) ->
            CppVarRef(varloc), true
       | CppVar varloc -> CppVarRef(varloc), false
-      | CppArray arrayloc -> CppArrayRef(arrayloc), false
+
+      | CppArray arrayloc ->
+         CppArrayRef(arrayloc), (match arrayloc with
+         | ArrayObject(arrayObj, index, _) when (is_gc_element ctx TCppDynamic) -> true
+         | ArrayTyped(arrayObj, index, t) when (is_gc_element ctx t) -> true
+         | _ -> false)
+
       | CppDynamicField(expr, name) -> CppDynamicRef(expr,name), false
       | CppTCast(cppExpr,_)
       | CppCast(cppExpr,_)