Browse Source

Fixed generation of member var expression for interfaces. Fixes #428.

woollybah 6 năm trước cách đây
mục cha
commit
d0ec41e134
1 tập tin đã thay đổi với 8 bổ sung2 xóa
  1. 8 2
      ctranslator.bmx

+ 8 - 2
ctranslator.bmx

@@ -1184,8 +1184,14 @@ t:+"NULLNULLNULL"
 										lvarInit = TransDebugNullObjectError(lvarInit, cdecl)
 									End If
 		
-									Local class:String = Bra("(" + obj + lvarInit + ")->clas" + tSuper)
-									Return class + "->" + TransFuncPrefix(cdecl, decl) + FuncDeclMangleIdent(decl)+TransArgs( args,decl, lvar )
+									If cdecl.IsInterface() And Not equalsBuiltInFunc(cdecl, decl) Then
+										Local obj:String = Bra(TransObject(cdecl))
+										Local ifc:String = Bra("(struct " + cdecl.munged + "_methods*)" + Bra("bbObjectInterface(" + obj + lvarInit + ", " + "&" + cdecl.munged + "_ifc)"))
+										Return ifc + "->" + TransFuncPrefix(cdecl, decl) + FuncDeclMangleIdent(decl)+TransArgs( args,decl, lvar )
+									Else
+										Local class:String = Bra("(" + obj + lvarInit + ")->clas" + tSuper)
+										Return class + "->" + TransFuncPrefix(cdecl, decl) + FuncDeclMangleIdent(decl)+TransArgs( args,decl, lvar )
+									End If
 								End If
 							End If
 						End If