Browse Source

Fixed interface return type generation. Fixes #235.

woollybah 8 years ago
parent
commit
f839ead82f
1 changed files with 9 additions and 5 deletions
  1. 9 5
      ctranslator.bmx

+ 9 - 5
ctranslator.bmx

@@ -1047,7 +1047,6 @@ t:+"NULLNULLNULL"
 									End If
 		
 									Local class:String = Bra("(" + obj + lvarInit + ")->clas" + tSuper)
-									'Local class:String = TransFuncClass(cdecl)
 									Return class + "->" + TransFuncPrefix(cdecl, decl) + FuncDeclMangleIdent(decl)+TransArgs( args,decl, lvar )
 								End If
 							End If
@@ -1104,14 +1103,19 @@ t:+"NULLNULLNULL"
 								Return "_" + decl.munged+TransArgs( args,decl, lvar )
 							End If
 						Else
+							Local cdecl:TClassDecl = TClassDecl(decl.scope)
 							' Null test
 							If opt_debug Then
-								Local cdecl:TClassDecl = TClassDecl(decl.scope)
 								lvarInit = TransDebugNullObjectError(lvarInit, cdecl)
 							End If
-		
-							Local obj:String = lvarInit + "->clas" + tSuper
-							Return obj + "->" + TransFuncPrefix(decl.scope, 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 obj:String = lvarInit + "->clas" + tSuper
+								Return obj + "->" + TransFuncPrefix(decl.scope, decl)+ FuncDeclMangleIdent(decl)+TransArgs( args,decl, lvar )
+							End If
 						End If
 					End If