浏览代码

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,_)