compiler/TMethodBinding.st
changeset 11 6d39860d0fdb
parent 8 eec72263ed75
child 16 17a2d1d9f205
equal deleted inserted replaced
10:2b9beeac547e 11:6d39860d0fdb
    34 
    34 
    35 selector
    35 selector
    36     ^ selector
    36     ^ selector
    37 ! !
    37 ! !
    38 
    38 
       
    39 !TMethodBinding methodsFor:'converting'!
       
    40 
       
    41 asLLVMValueInModule: aLLVMModule
       
    42     | name function |
       
    43 
       
    44     name := TLLVMCodeGenerator llvmFunctionNameForClass: mclass clazz selector: selector.
       
    45     function := aLLVMModule getFunctionNamed: name.
       
    46     function isNil ifTrue:[ 
       
    47         | type |
       
    48 
       
    49         mclass isMetaclass ifTrue:[
       
    50             type := LLVMType 
       
    51                         function:  (parameterTypes collect:[:t|t asLLVMTypeInModule: aLLVMModule ])
       
    52                         returning: (returnType asLLVMTypeInModule: aLLVMModule).                 
       
    53         ] ifFalse:[ 
       
    54             type := LLVMType
       
    55                     function:  {mclass type asLLVMTypeInModule:  aLLVMModule } ,
       
    56                                (parameterTypes collect:[:t|t asLLVMTypeInModule: aLLVMModule])
       
    57                     returning: (returnType asLLVMTypeInModule: aLLVMModule).
       
    58         ].
       
    59         function := aLLVMModule addFunctionNamed: name type: type.
       
    60         mclass isMetaclass ifFalse:[
       
    61             (function parameterAt: 1) name: 'self'.
       
    62         ]
       
    63     ].
       
    64     ^ function
       
    65 
       
    66     "Created: / 15-09-2015 / 07:04:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    67 ! !
       
    68 
    39 !TMethodBinding methodsFor:'initialization'!
    69 !TMethodBinding methodsFor:'initialization'!
    40 
    70 
    41 initializeWithClass: aTClassBinding selector: aSymbol
    71 initializeWithClass: aTClassBinding selector: aSymbol
    42     mclass := aTClassBinding.
    72     mclass := aTClassBinding.
    43     selector := aSymbol
    73     selector := aSymbol