Explorar o código

Treat object array sets as having gc references

Hugh %!s(int64=8) %!d(string=hai) anos
pai
achega
a01e2e3afc
Modificáronse 1 ficheiros con 7 adicións e 1 borrados
  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,_)