Răsfoiți Sursa

[cpp] Treat interfaces like dynamic where appropriate. Closes #5133. Closes #5132

Hugh 9 ani în urmă
părinte
comite
a6c85c1ead
1 a modificat fișierele cu 8 adăugiri și 5 ștergeri
  1. 8 5
      src/generators/gencpp.ml

+ 8 - 5
src/generators/gencpp.ml

@@ -1634,6 +1634,7 @@ let rec const_string_of expr =
 
 let cpp_is_dynamic_type = function
    | TCppDynamic | TCppObject | TCppVariant | TCppWrapped _ | TCppGlobal | TCppNull
+   | TCppInterface _
       -> true
    | _ -> false
 ;;
@@ -2146,13 +2147,10 @@ let retype_expression ctx request_type function_args expression_tree forInjectio
                      | TCppDynamicArray, "length" ->
                         CppCall(FuncInternal(retypedObj,"get_length","->"),[]), exprType
 
+                     | TCppInterface _,_
                      | TCppDynamic,_ ->
                         CppDynamicField(retypedObj, member.cf_name), TCppVariant
 
-                     | TCppInterface(klass),_  ->
-                        (*CppVar(VarInterface(retypedObj,member) ), exprType*)
-                        CppDynamicField(retypedObj, member.cf_name), TCppVariant
-
                      | _ ->
                         let operator = if is_struct_access obj.etype || retypedObj.cpptype=TCppString then "." else "->" in
                         CppVar(VarInstance(retypedObj,member,tcpp_to_string clazzType, operator) ), exprType
@@ -2578,7 +2576,9 @@ let retype_expression ctx request_type function_args expression_tree forInjectio
             else (match return_type with
             | TCppNativePointer(klass) -> CppCastNative(baseCpp), return_type
             | TCppVoid -> baseCpp.cppexpr, TCppVoid
-            | TCppDynamic -> baseCpp.cppexpr, baseCpp.cpptype
+            | TCppInterface _
+            | TCppDynamic ->
+                  baseCpp.cppexpr, baseCpp.cpptype
             | _ ->
                CppTCast(baseCpp, return_type), return_type
             )
@@ -2607,6 +2607,9 @@ let retype_expression ctx request_type function_args expression_tree forInjectio
          | TCppString
              -> mk_cppexpr (CppCastScalar(cppExpr,"::String")) return_type
 
+         | TCppInterface _ when cppExpr.cpptype=TCppVariant
+              -> mk_cppexpr (CppCastVariant(cppExpr)) return_type
+
          | TCppDynamic when cppExpr.cpptype=TCppVariant
               -> mk_cppexpr (CppCastVariant(cppExpr)) return_type