On 02.06.2014, at 19:17, commits@source.squeak.org wrote:
Timothy M uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-tty.750.mcz
==================== Summary ====================
Name: VMMaker.oscog-tty.750 Author: tty Time: 2 June 2014, 3:15:09.27 pm UUID: 74f36217-bbce-4997-81fd-0944f9bb7f35 Ancestors: VMMaker.oscog-tty.749
Added ObjectiveCPlugin from pharo for use in CMakeVMMakerSqueak. While SVN Cog contains source code in:
/platforms/iOS/vm/src/vm/intplugins/ObjectiveCPlugin/ObjectiveCPlugin.c
There is no Smalltalk class in VMMaker until now
Well, sure. That is because the Plugin lives here: http://www.squeaksource.com/ObjectiveCBridge2.html
=============== Diff against VMMaker.oscog-tty.749 ===============
Item was added:
- SmartSyntaxInterpreterPlugin subclass: #ObjectiveCPlugin
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'VMMaker-Plugins'!
- !ObjectiveCPlugin commentStamp: '<historical>' prior: 0!
- Created by John M McIntosh on 9/17/08.
- Some of this code was funded via a grant from the European Smalltalk User Group (ESUG)
- Copyright (c) 2008 Corporate Smalltalk Consulting Ltd. All rights reserved.
- MIT License
- Permission is hereby granted, free of charge, to any person
- obtaining a copy of this software and associated documentation
- files (the "Software"), to deal in the Software without
- restriction, including without limitation the rights to use,
- copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following
- conditions:
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- OTHER DEALINGS IN THE SOFTWARE.
- The end-user documentation included with the redistribution, if any, must include the following acknowledgment:
- "This product includes software developed by Corporate Smalltalk Consulting Ltd (http://www.smalltalkconsulting.com)
- and its contributors", in the same place and form as other third-party acknowledgments.
- Alternately, this acknowledgment may appear in the software itself, in the same form and location as other
- such third-party acknowledgments.
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>initialiseModule (in category 'initialize-release') -----
- initialiseModule
- "Initialise the module"
- ^ true
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveCallbackLeave: (in category 'system primitives') -----
- primitiveCallbackLeave: aNumber
- self primitive: 'primitiveCallbackLeave'
parameters: #(SmallInteger).
- aNumber = 0 ifTrue: [^self].
- interpreterProxy callbackLeave: aNumber.!
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveGetAddressFromEntryPointString: (in category 'system primitives') -----
- primitiveGetAddressFromEntryPointString: aEntryPointName
- | entryPointNameLength fn entryPointName |
- self primitive: 'primitiveGetAddressFromEntryPointString'
parameters: #(String).
- self var: 'entryPointName' declareC: 'char entryPointName[256]'.
- self var: 'fn' declareC: 'void * fn'.
- entryPointNameLength := interpreterProxy slotSizeOf: aEntryPointName cPtrAsOop.
- entryPointNameLength > 255 ifTrue: [^interpreterProxy positive64BitIntegerFor: 0].
- self str: entryPointName l: aEntryPointName cpy: entryPointNameLength+1.
- fn := self dl: -2 sym: entryPointName.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: fn to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveGetAutoReleasePool (in category 'system primitives') -----
- primitiveGetAutoReleasePool
- | pool |
- self primitive: 'primitiveGetAutoReleasePool'.
- self var: 'pool' declareC: 'NSAutoreleasePool * pool'.
- pool := nil.
- self cCode: ' NS_DURING'.
- self cCode: 'pool = [NSAutoreleasePool new]'.
- self cCode: ' NS_HANDLER
pool = nil;'.
- self cCode: ' NS_ENDHANDLER'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: pool to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveGetClass: (in category 'system primitives') -----
- primitiveGetClass: aClassOrInstanceOop
- | classOrInstanceObject classObject |
- self primitive: 'primitiveGetClass'
parameters: #(Oop).
- self var: 'classOrInstanceObject' declareC: 'id classOrInstanceObject'.
- self var: 'classObject' declareC: 'Class classObject'.
- classOrInstanceObject := self cCoerce: (interpreterProxy positive64BitValueOf: aClassOrInstanceOop) to: 'id'.
- classObject := nil.
- interpreterProxy failed ifTrue: [^nil].
- self touch: classOrInstanceObject.
- self touch: classObject.
- self cCode: ' NS_DURING'.
- self cCode: 'classObject = [classOrInstanceObject class]'.
- self cCode: ' NS_HANDLER
classObject = nil;'.
- self cCode: ' NS_ENDHANDLER'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: classObject to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveGetDescription: (in category 'system primitives') -----
- primitiveGetDescription: aClassOrInstanceOop
- | classOrInstanceObject utf8String utf8StringOop nsStringObject |
- self primitive: 'primitiveGetDescription'
parameters: #(Oop).
- self var: 'classOrInstanceObject' declareC: 'id classOrInstanceObject'.
- self var: 'nsStringObject' declareC: 'NSString* nsStringObject'.
- self var: 'utf8String' declareC: 'const char * utf8String'.
- classOrInstanceObject := self cCoerce: (interpreterProxy positive64BitValueOf: aClassOrInstanceOop) to: 'id'.
- utf8String := nil.
- interpreterProxy failed ifTrue: [^nil].
- self touch: nsStringObject.
- self cCode: ' NS_DURING'.
- self cCode: 'nsStringObject = [classOrInstanceObject description];
utf8String = [nsStringObject UTF8String]'.
- self cCode: ' NS_HANDLER
utf8String = nil;'.
- self cCode: ' NS_ENDHANDLER'.
- utf8String
ifFalse: [interpreterProxy success: false.
^nil].
- utf8StringOop := self stringFromCString: utf8String.
- ^utf8StringOop
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveGetMethodSignatureForSelector:on: (in category 'system primitives') -----
- primitiveGetMethodSignatureForSelector: aSelectorOop on: aClassOrInstanceOop
- | selectorObject classOrInstanceObject messageSignatureObject |
- self primitive: 'primitiveGetMethodSignatureForSelector'
parameters: #(Oop Oop).
- self var: 'selectorObject' declareC: 'SEL selectorObject'.
- self var: 'classOrInstanceObject' declareC: 'id classOrInstanceObject'.
- self var: 'messageSignatureObject' declareC: 'NSMethodSignature * messageSignatureObject'.
- selectorObject := self cCoerce: (interpreterProxy positive64BitValueOf: aSelectorOop) to: 'SEL'.
- classOrInstanceObject := self cCoerce: (interpreterProxy positive64BitValueOf: aClassOrInstanceOop) to: 'id'.
- messageSignatureObject := nil.
- interpreterProxy failed ifTrue: [^nil].
- self touch: classOrInstanceObject.
- self touch: selectorObject.
- self cCode: ' NS_DURING'.
- self cCode: 'messageSignatureObject = [classOrInstanceObject methodSignatureForSelector: selectorObject]'.
- self cCode: ' NS_HANDLER
- messageSignatureObject = nil;'.
- self cCode: ' NS_ENDHANDLER'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: messageSignatureObject to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveGetNSStringForString:encoding: (in category 'system primitives') -----
- primitiveGetNSStringForString: aStringOop encoding: anEncoding
- | stringLength aStringAsNSString encoding aString |
- self primitive: 'primitiveGetNSStringForString'
parameters: #(Oop Oop).
- self var: 'aStringAsNSString' declareC: 'NSString* aStringAsNSString'.
- self var: 'encoding' declareC: 'NSUInteger encoding'.
- self var: 'aString' declareC: 'char* aString'.
- encoding := self cCoerce: (interpreterProxy positive64BitValueOf: anEncoding) to: 'NSUInteger'.
- aString := interpreterProxy firstIndexableField: aStringOop.
- stringLength := interpreterProxy byteSizeOf: aStringOop.
- self touch: stringLength.
- aStringAsNSString := 0.
- self cCode: ' NS_DURING'.
aStringAsNSString := self cCode: '[[NSString alloc] initWithBytes: aString length: stringLength encoding: encoding]'.
- self cCode: ' NS_HANDLER
aStringAsNSString = nil;'.
- self cCode: ' NS_ENDHANDLER'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: aStringAsNSString to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveGetObjCClassForString: (in category 'system primitives') -----
- primitiveGetObjCClassForString: aClassName
- | classNameLength classNameNSString classObject |
- self primitive: 'primitiveGetObjCClassForString'
parameters: #(Symbol).
- self var: 'classObject' declareC: 'Class classObject'.
- self var: 'classNameNSString' declareC: 'NSString* classNameNSString'.
- classNameLength := interpreterProxy slotSizeOf: aClassName cPtrAsOop.
- self touch: classNameLength.
- classNameNSString := self cCode: '[[NSString alloc] initWithBytes: aClassName length: classNameLength encoding: NSUTF8StringEncoding]'.
- self cCode: ' NS_DURING'.
- classObject := classNameNSString NSClassFromString.
- self cCode: ' NS_HANDLER
- classObject = nil;'.
- self cCode: ' NS_ENDHANDLER'.
- self cCode: '[classNameNSString release]'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: classObject to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveGetSelectorFromString: (in category 'system primitives') -----
- primitiveGetSelectorFromString: aSelectorName
- | selectorLength selectorNSString selectorObject |
- self primitive: 'primitiveGetSelectorForString'
parameters: #(Symbol).
- self var: 'selectorObject' declareC: 'SEL selectorObject'.
- self var: 'selectorNSString' declareC: 'NSString * selectorNSString'.
- selectorLength := interpreterProxy slotSizeOf: aSelectorName cPtrAsOop.
- self touch: selectorLength.
- selectorNSString := self cCode: '[[NSString alloc] initWithBytes: aSelectorName length: selectorLength encoding: NSUTF8StringEncoding]'.
- self cCode: ' NS_DURING'.
- selectorObject := selectorNSString NSSelectorFromString.
- self cCode: ' NS_HANDLER
- selectorObject = nil;'.
- self cCode: ' NS_ENDHANDLER'.
- self cCode: '[selectorNSString release]'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: selectorObject to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveGetSuperClass: (in category 'system primitives') -----
- primitiveGetSuperClass: aClassOrInstanceOop
- | classOrInstanceObject classObject |
- self primitive: 'primitiveGetSuperClass'
parameters: #(Oop).
- self var: 'classOrInstanceObject' declareC: 'id classOrInstanceObject'.
- self var: 'classObject' declareC: 'Class classObject'.
- classOrInstanceObject := self cCoerce: (interpreterProxy positive64BitValueOf: aClassOrInstanceOop) to: 'id'.
- classObject := nil.
- interpreterProxy failed ifTrue: [^nil].
- self touch: classOrInstanceObject.
- self touch: classObject.
- self cCode: ' NS_DURING'.
- self cCode: 'classObject = [classOrInstanceObject superclass]'.
- self cCode: ' NS_HANDLER
classObject = nil;'.
- self cCode: ' NS_ENDHANDLER'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: classObject to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveIsEqual:to: (in category 'system primitives') -----
- primitiveIsEqual: anOop1 to: anOop2
- | oop1 oop2 result |
- self primitive: 'primitiveIsEqual'
parameters: #(Oop Oop).
- self var: 'oop1' declareC: 'id oop1'.
- self var: 'oop2' declareC: 'id oop2'.
- self var: 'result' declareC: 'BOOL result'.
- oop1 := self cCoerce: (interpreterProxy positive64BitValueOf: anOop1) to: 'id'.
- oop2 := self cCoerce: (interpreterProxy positive64BitValueOf: anOop2) to: 'id'.
- interpreterProxy failed ifTrue: [^nil].
- self touch: oop1.
- self touch: oop2.
- result := 0.
- self cCode: ' NS_DURING'.
- self cCode: 'result = [oop1 isEqual: oop2]'.
- self cCode: ' NS_HANDLER'.
- interpreterProxy success: false.
- true ifTrue: [^nil].
- self cCode: ' NS_ENDHANDLER'.
- ^(result = 1) asBooleanObj
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveMethodSignatureGetArgumentType:atIndex: (in category 'system primitives') -----
- primitiveMethodSignatureGetArgumentType: aMethodSignatureOop atIndex: aIndexNumber
- | nsMethodSignatureObject string stringOop |
- self primitive: 'primitiveMethodSignatureGetArgumentType'
parameters: #(Oop SmallInteger).
- self var: 'nsMethodSignatureObject' declareC: 'NSMethodSignature* nsMethodSignatureObject'.
- self var: 'string' declareC: 'const char * string'.
- nsMethodSignatureObject := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSMethodSignature *'.
- string := nil.
- interpreterProxy failed ifTrue: [^nil].
- self touch: nsMethodSignatureObject.
- self cCode: ' NS_DURING'.
- self cCode: 'string = [nsMethodSignatureObject getArgumentTypeAtIndex: aIndexNumber]'.
- self cCode: ' NS_HANDLER
string = nil;'.
- self cCode: ' NS_ENDHANDLER'.
- string
ifFalse: [interpreterProxy success: false.
^nil].
- stringOop := self stringFromCString: string.
- ^stringOop
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveMethodSignatureGetMethodReturnLength: (in category 'system primitives') -----
- primitiveMethodSignatureGetMethodReturnLength: aMethodSignatureOop
- | nsMethodSignatureObject methodReturnLength |
- self primitive: 'primitiveMethodSignatureGetMethodReturnLength'
parameters: #(Oop).
- self var: 'nsMethodSignatureObject' declareC: 'NSMethodSignature* nsMethodSignatureObject'.
- self var: 'methodReturnLength' declareC: 'NSUInteger methodReturnLength'.
- nsMethodSignatureObject := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSMethodSignature *'.
- methodReturnLength := 0.
- interpreterProxy failed ifTrue: [^nil].
- self touch: nsMethodSignatureObject.
- self cCode: ' NS_DURING'.
- self cCode: 'methodReturnLength = [nsMethodSignatureObject methodReturnLength]'.
- self cCode: ' NS_HANDLER
methodReturnLength = 0xFFFFFFFF'.
- self cCode: ' NS_ENDHANDLER'.
- methodReturnLength = 16rFFFFFFFF
ifTrue: [interpreterProxy success: false.
^nil].
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: methodReturnLength to: 'usqInt')
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveMethodSignatureGetNumberOfArguments: (in category 'system primitives') -----
- primitiveMethodSignatureGetNumberOfArguments: aMethodSignatureOop
- | nsMethodSignatureObject numberOfArguments |
- self primitive: 'primitiveMethodSignatureGetNumberOfArguments'
parameters: #(Oop).
- self var: 'nsMethodSignatureObject' declareC: 'NSMethodSignature* nsMethodSignatureObject'.
- self var: 'numberOfArguments' declareC: 'NSUInteger numberOfArguments'.
- nsMethodSignatureObject := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSMethodSignature *'.
- numberOfArguments := 9999999.
- interpreterProxy failed ifTrue: [^nil].
- self touch: nsMethodSignatureObject.
- self cCode: ' NS_DURING'.
- self cCode: 'numberOfArguments = [nsMethodSignatureObject numberOfArguments]'.
- self cCode: ' NS_HANDLER
numberOfArguments = 9999999'.
- self cCode: ' NS_ENDHANDLER'.
- numberOfArguments = 9999999
ifTrue: [interpreterProxy success: false.
^nil].
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: numberOfArguments to: 'usqInt')
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveMethodSignatureGetReturnType: (in category 'system primitives') -----
- primitiveMethodSignatureGetReturnType: aMethodSignatureOop
- | nsMethodSignatureObject string stringOop |
- self primitive: 'primitiveMethodSignatureGetReturnType'
parameters: #(Oop).
- self var: 'nsMethodSignatureObject' declareC: 'NSMethodSignature* nsMethodSignatureObject'.
- self var: 'string' declareC: 'const char * string'.
- nsMethodSignatureObject := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSMethodSignature *'.
- string := nil.
- interpreterProxy failed ifTrue: [^nil].
- self touch: nsMethodSignatureObject.
- self cCode: ' NS_DURING'.
- self cCode: 'string = [nsMethodSignatureObject methodReturnType]'.
- self cCode: ' NS_HANDLER
string = nil;'.
- self cCode: ' NS_ENDHANDLER'.
- string
ifFalse: [interpreterProxy success: false.
^nil].
- stringOop := self stringFromCString: string.
- ^stringOop
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationCalloc: (in category 'system primitives') -----
- primitiveNSInvocationCalloc: size
- | pointer |
- self primitive: 'primitiveNSInvocationCalloc'
parameters: #(SmallInteger).
- self var: 'pointer' declareC: 'void* pointer'.
- self cCode: 'pointer = calloc(size,1)'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: pointer to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationFree: (in category 'system primitives') -----
- primitiveNSInvocationFree: pointer
- | pointerToFree |
- self primitive: 'primitiveNSInvocationFree'
parameters: #(Oop).
- self var: 'pointerToFree' declareC: 'void* pointerToFree'.
- pointerToFree := self cCoerce: (interpreterProxy positive64BitValueOf: pointer) to: 'void *'.
- interpreterProxy failed ifTrue: [^nil].
- self cCode: 'free((void*)pointerToFree)'.
- self touch: pointer.
- ^self!
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetArgument:buffer:atIndex: (in category 'system primitives') -----
- primitiveNSInvocationGetArgument: aMethodSignatureOop buffer: bufferOop atIndex: index
- | nsInvocationInstance buffer |
- self primitive: 'primitiveNSInvocationGetArgument'
parameters: #(Oop Oop SmallInteger).
- self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'.
- self var: 'buffer' declareC: 'void * buffer'.
- nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'.
- buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferOop) to: 'void *'.
- interpreterProxy failed ifTrue: [^nil].
- self touch: nsInvocationInstance.
- self touch: buffer.
- self cCode: ' NS_DURING'.
- self cCode: '[nsInvocationInstance getArgument: buffer atIndex: index]'.
- self cCode: ' NS_HANDLER'.
interpreterProxy success: false.
true ifTrue: [^nil].
- self cCode: ' NS_ENDHANDLER'.
- ^self!
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetCType:signed: (in category 'system primitives') -----
- primitiveNSInvocationGetCType: bufferAddressOop signed: signedBoolean
- | buffer newCharacterOop targetOopData |
- self primitive: 'primitiveNSInvocationGetCType'
parameters: #(Oop Boolean).
- self var: 'buffer' declareC: 'char * buffer'.
- self var: 'targetOopData' declareC: 'char targetOopData'.
- buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'char *'.
- interpreterProxy failed ifTrue: [^nil].
- self touch: buffer.
- newCharacterOop := interpreterProxy
instantiateClass: interpreterProxy classCharacter
indexableSize: 1.
- targetOopData := 0.
- self touch: targetOopData.
- signedBoolean
ifTrue: [self cCode: 'targetOopData = *(char*) buffer'.
interpreterProxy storeInteger: 0 ofObject: newCharacterOop withValue:
(self cCoerce: targetOopData to: 'sqInt').]
ifFalse: [self cCode: 'targetOopData = *(char*) buffer'.
interpreterProxy storeInteger: 0 ofObject: newCharacterOop withValue:
(self cCoerce: targetOopData to: 'usqInt').].
- ^newCharacterOop!
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetCharPointerType: (in category 'system primitives') -----
- primitiveNSInvocationGetCharPointerType: bufferAddressOop
- | buffer stringOop bufferPointer |
- self primitive: 'primitiveNSInvocationGetCharPointerType'
parameters: #(Oop).
- self var: 'bufferPointer' declareC: 'char ** bufferPointer'.
- self var: 'buffer' declareC: 'char * buffer'.
- bufferPointer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'char **'.
- interpreterProxy failed ifTrue: [^nil].
- self cCode: 'buffer = *bufferPointer'.
- stringOop := self stringFromCString: buffer.
- ^stringOop
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetClassType: (in category 'system primitives') -----
- primitiveNSInvocationGetClassType: bufferAddressOop
- | buffer data |
- self primitive: 'primitiveNSInvocationGetClassType'
parameters: #(Oop).
- self var: 'buffer' declareC: 'Class * buffer'.
- self var: 'data' declareC: 'Class data'.
- buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'Class *'.
- interpreterProxy failed ifTrue: [^nil].
- self touch: buffer.
- self cCode: 'data = *buffer'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: data to: 'usqInt')
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetDoubleType: (in category 'system primitives') -----
- primitiveNSInvocationGetDoubleType: bufferAddressOop
- | buffer data |
- self primitive: 'primitiveNSInvocationGetDoubleType'
parameters: #(Oop).
- self var: 'buffer' declareC: 'double * buffer'.
- self var: 'data' declareC: 'double data'.
- buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'double *'.
- interpreterProxy failed ifTrue: [^nil].
- self touch: buffer.
- self cCode: 'data = *buffer'.
- ^interpreterProxy floatObjectOf: data!
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetFloatType: (in category 'system primitives') -----
- primitiveNSInvocationGetFloatType: bufferAddressOop
- | buffer data |
- self primitive: 'primitiveNSInvocationGetFloatType'
parameters: #(Oop).
- self var: 'buffer' declareC: 'float * buffer'.
- self var: 'data' declareC: 'float data'.
- buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'float *'.
- interpreterProxy failed ifTrue: [^nil].
- self touch: buffer.
- self cCode: 'data = *buffer'.
- ^interpreterProxy floatObjectOf: data!
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetIntType:signed: (in category 'system primitives') -----
- primitiveNSInvocationGetIntType: bufferAddressOop signed: signedBoolean
- | buffer data unsignedData |
- self primitive: 'primitiveNSInvocationGetIntType'
parameters: #(Oop Boolean).
- self var: 'buffer' declareC: 'int * buffer'.
- self var: 'data' declareC: 'int data'.
- self var: 'unsignedData' declareC: 'unsigned int unsignedData'.
- buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'int *'.
- interpreterProxy failed ifTrue: [^nil].
- self touch: buffer.
- unsignedData := data := 0.
- signedBoolean
ifTrue: [self cCode: 'data = *buffer'.
^interpreterProxy signed32BitIntegerFor: (self cCoerce: data to: 'sqInt') ]
ifFalse: [self cCode: 'unsignedData = *(unsigned int *)buffer'.
^interpreterProxy positive32BitIntegerFor: (self cCoerce: unsignedData to: 'usqInt') ].
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetLongLongType:signed: (in category 'system primitives') -----
- primitiveNSInvocationGetLongLongType: bufferAddressOop signed: signedBoolean
- | buffer data unsignedData |
- self primitive: 'primitiveNSInvocationGetLongLongType'
parameters: #(Oop Boolean).
- self var: 'buffer' declareC: 'long long * buffer'.
- self var: 'data' declareC: 'long long data'.
- self var: 'unsignedData' declareC: 'unsigned long long unsignedData'.
- buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'long long *'.
- interpreterProxy failed ifTrue: [^nil].
- self touch: buffer.
- unsignedData := data := 0.
- signedBoolean
ifTrue: [self cCode: 'data = *buffer'.
^interpreterProxy signed64BitIntegerFor: (self cCoerce: data to: 'long long') ]
ifFalse: [self cCode: 'unsignedData = * (unsigned long long*) buffer'.
^interpreterProxy positive64BitIntegerFor: (self cCoerce: unsignedData to: 'unsigned long long') ].
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetLongType:signed: (in category 'system primitives') -----
- primitiveNSInvocationGetLongType: bufferAddressOop signed: signedBoolean
- | buffer data unsignedData |
- self primitive: 'primitiveNSInvocationGetLongType'
parameters: #(Oop Boolean).
- self var: 'buffer' declareC: 'long * buffer'.
- self var: 'data' declareC: 'long data'.
- self var: 'unsignedData' declareC: 'unsigned long unsignedData'.
- buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'long *'.
- interpreterProxy failed ifTrue: [^nil].
- self touch: buffer.
- unsignedData := data := 0.
- signedBoolean
ifTrue: [self cCode: 'data = *buffer'.
^interpreterProxy signed64BitIntegerFor: (self cCoerce: data to: 'sqInt') ]
ifFalse: [self cCode: 'unsignedData = *(unsigned long *) buffer'.
^interpreterProxy positive64BitIntegerFor: (self cCoerce: unsignedData to: 'usqInt') ].
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetObjectType: (in category 'system primitives') -----
- primitiveNSInvocationGetObjectType: bufferAddressOop
- | buffer data |
- self primitive: 'primitiveNSInvocationGetObjectType'
parameters: #(Oop).
- self var: 'buffer' declareC: 'id * buffer'.
- self var: 'data' declareC: 'id data'.
- buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'id *'.
- interpreterProxy failed ifTrue: [^nil].
- self touch: buffer.
- self cCode: 'data = *buffer'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: data to: 'usqInt')
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetReturnValue:on: (in category 'system primitives') -----
- primitiveNSInvocationGetReturnValue: bufferAddressOop on: aNSinvokeOops
- | buffer nsInvoke |
- self primitive: 'primitiveNSInvocationGetReturnValue'
parameters: #(Oop Oop).
- self var: 'buffer' declareC: 'void * buffer'.
- self var: 'nsInvoke' declareC: 'NSInvocation *nsInvoke'.
- buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'void *'.
- nsInvoke := self cCoerce: (interpreterProxy positive64BitValueOf: aNSinvokeOops) to: 'NSInvocation *'.
- interpreterProxy failed ifTrue: [^nil].
- self touch: buffer.
- self cCode: ' NS_DURING'.
- self cCode: '[nsInvoke getReturnValue: buffer]'.
- self cCode: ' NS_HANDLER'.
interpreterProxy success: false.
true ifTrue: [^nil].
- self cCode: ' NS_ENDHANDLER'.
- ^self!
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetSelectorType: (in category 'system primitives') -----
- primitiveNSInvocationGetSelectorType: bufferAddressOop
- | buffer data |
- self primitive: 'primitiveNSInvocationGetSelectorType'
parameters: #(Oop).
- self var: 'buffer' declareC: 'SEL * buffer'.
- self var: 'data' declareC: 'SEL data'.
- buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'SEL *'.
- interpreterProxy failed ifTrue: [^nil].
- self touch: buffer.
- self cCode: 'data = *buffer'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: data to: 'usqInt')
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetShortType:signed: (in category 'system primitives') -----
- primitiveNSInvocationGetShortType: bufferAddressOop signed: signedBoolean
- | buffer data unsignedData |
- self primitive: 'primitiveNSInvocationGetShortType'
parameters: #(Oop Boolean).
- self var: 'buffer' declareC: 'short * buffer'.
- self var: 'data' declareC: 'short data'.
- self var: 'unsignedData' declareC: 'unsigned short unsignedData'.
- buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'short *'.
- unsignedData := data := 0.
- interpreterProxy failed ifTrue: [^nil].
- self touch: buffer.
- signedBoolean
ifTrue: [self cCode: 'data = *buffer'.
^interpreterProxy signed32BitIntegerFor: (self cCoerce: data to: 'sqInt') ]
ifFalse: [self cCode: 'unsignedData = *(unsigned short *)buffer'.
^interpreterProxy positive32BitIntegerFor: (self cCoerce: unsignedData to: 'usqInt') ].
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetStructureType:length: (in category 'system primitives') -----
- primitiveNSInvocationGetStructureType: bufferAddressOop length: length
- | bufferPointer newByteArray |
- self primitive: 'primitiveNSInvocationGetStructureType'
parameters: #(Oop SmallInteger).
- self var: 'bufferPointer' declareC: 'char ** bufferPointer'.
- self var: 'buffer' declareC: 'char * buffer'.
- bufferPointer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'void *'.
- interpreterProxy failed ifTrue: [^nil].
- newByteArray := interpreterProxy
instantiateClass: interpreterProxy classByteArray
indexableSize: length.
- self me: (interpreterProxy arrayValueOf: newByteArray)
m: bufferPointer
cpy: length. "void * memcpy(void *restrict s1, const void *restrict s2, size_t n)"
- ^newByteArray
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationMalloc: (in category 'system primitives') -----
- primitiveNSInvocationMalloc: size
- | pointer |
- self primitive: 'primitiveNSInvocationMalloc'
parameters: #(SmallInteger).
- self var: 'pointer' declareC: 'void* pointer'.
- self cCode: 'pointer = malloc(size)'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: pointer to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetCType:signed:index:value: (in category 'system primitives') -----
- primitiveNSInvocationSetCType: aMethodSignatureOop signed: signedBoolean index: index value: newCharacterOop
- | nsInvocationInstance buffer aValue aUnsignedValue |
- self primitive: 'primitiveNSInvocationSetCType'
parameters: #(Oop Boolean SmallInteger Oop).
- self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'.
- self var: 'buffer' declareC: 'void * buffer'.
- self var: 'aValue' declareC: 'char aValue'.
- self var: 'aUnsignedValue' declareC: 'unsigned char aUnsignedValue'.
- nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'.
- interpreterProxy failed ifTrue: [^nil].
- aValue := interpreterProxy fetchInteger: 0 ofObject: newCharacterOop.
- aUnsignedValue := interpreterProxy fetchInteger: 0 ofObject: newCharacterOop.
- signedBoolean
ifTrue: [self cCode: 'buffer = malloc(sizeof(char));
*(char*) buffer = (char) aValue']
ifFalse: [self cCode: 'buffer = malloc(sizeof(unsigned char));
*(unsigned char*)buffer = (unsigned char) aUnsignedValue'].
- self touch: nsInvocationInstance.
- self touch: buffer.
- self cCode: ' NS_DURING'.
- self cCode: '[nsInvocationInstance setArgument: buffer atIndex: index]'.
- self cCode: ' NS_HANDLER'.
interpreterProxy success: false.
true ifTrue: [^nil].
- self cCode: ' NS_ENDHANDLER'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetDoubleType:index:value: (in category 'system primitives') -----
- primitiveNSInvocationSetDoubleType: aMethodSignatureOop index: index value: aValue
- | nsInvocationInstance buffer |
- self primitive: 'primitiveNSInvocationSetDoubleType'
parameters: #(Oop SmallInteger Float).
- self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'.
- self var: 'aValue' declareC: 'double aValue'.
- self var: 'buffer' declareC: 'void * buffer'.
- nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'.
- interpreterProxy failed ifTrue: [^nil].
- self cCode: 'buffer = malloc(sizeof(double));
*(double*) buffer = (double) aValue'.
- self touch: nsInvocationInstance.
- self touch: buffer.
- self cCode: ' NS_DURING'.
- self cCode: '[nsInvocationInstance setArgument: buffer atIndex: index]'.
- self cCode: ' NS_HANDLER'.
interpreterProxy success: false.
true ifTrue: [^nil].
- self cCode: ' NS_ENDHANDLER'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetFloatType:index:value: (in category 'system primitives') -----
- primitiveNSInvocationSetFloatType: aMethodSignatureOop index: index value: aValue
- | nsInvocationInstance buffer |
- self primitive: 'primitiveNSInvocationSetFloatType'
parameters: #(Oop SmallInteger Float).
- self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'.
- self var: 'aValue' declareC: 'float aValue'.
- self var: 'buffer' declareC: 'void * buffer'.
- nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'.
- interpreterProxy failed ifTrue: [^nil].
- self cCode: 'buffer = malloc(sizeof(float));
*(float*) buffer = (float) aValue'.
- self touch: nsInvocationInstance.
- self touch: buffer.
- self cCode: ' NS_DURING'.
- self cCode: '[nsInvocationInstance setArgument: buffer atIndex: index]'.
- self cCode: ' NS_HANDLER'.
interpreterProxy success: false.
true ifTrue: [^nil].
- self cCode: ' NS_ENDHANDLER'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetIntType:signed:index:value: (in category 'system primitives') -----
- primitiveNSInvocationSetIntType: aMethodSignatureOop signed: signedBoolean index: index value: intValue
- | nsInvocationInstance buffer aValue |
- self primitive: 'primitiveNSInvocationSetIntType'
parameters: #(Oop Boolean SmallInteger Oop).
- self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'.
- self var: 'aValue' declareC: 'int aValue'.
- self var: 'buffer' declareC: 'void * buffer'.
- nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'.
- interpreterProxy failed ifTrue: [^nil].
- signedBoolean
ifTrue: [aValue := self cCoerce: (interpreterProxy signed64BitValueOf: intValue) to: 'int'.
interpreterProxy failed ifTrue: [^nil].
self cCode: 'buffer = malloc(sizeof(int));
*(int*) buffer = (int) aValue']
ifFalse: [aValue := self cCoerce: (interpreterProxy positive64BitValueOf: intValue) to: 'unsigned int'.
interpreterProxy failed ifTrue: [^nil].
self cCode: 'buffer = malloc(sizeof(unsigned int));
*(unsigned int*)buffer = (unsigned int) aValue'].
- self touch: nsInvocationInstance.
- self touch: buffer.
- self cCode: ' NS_DURING'.
- self cCode: '[nsInvocationInstance setArgument: buffer atIndex: index]'.
- self cCode: ' NS_HANDLER'.
interpreterProxy success: false.
true ifTrue: [^nil].
- self cCode: ' NS_ENDHANDLER'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetLongLongType:signed:index:value: (in category 'system primitives') -----
- primitiveNSInvocationSetLongLongType: aMethodSignatureOop signed: signedBoolean index: index value: intValue
- | nsInvocationInstance buffer aValue |
- self primitive: 'primitiveNSInvocationSetLongLongType'
parameters: #(Oop Boolean SmallInteger Oop).
- self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'.
- self var: 'aValue' declareC: 'long long aValue'.
- self var: 'buffer' declareC: 'void * buffer'.
- nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'.
- interpreterProxy failed ifTrue: [^nil].
- signedBoolean
ifTrue: [aValue := self cCoerce: (interpreterProxy signed64BitValueOf: intValue) to: 'long long'.
interpreterProxy failed ifTrue: [^nil].
self cCode: 'buffer = malloc(sizeof(long long));
*(long long*) buffer = (long long) aValue']
ifFalse: [aValue := self cCoerce: (interpreterProxy positive64BitValueOf: intValue) to: 'unsigned long long'.
interpreterProxy failed ifTrue: [^nil].
self cCode: 'buffer = malloc(sizeof(unsigned long long));
*(unsigned long long*)buffer = (unsigned long long) aValue'].
- self touch: nsInvocationInstance.
- self touch: buffer.
- self cCode: ' NS_DURING'.
- self cCode: '[nsInvocationInstance setArgument: buffer atIndex: index]'.
- self cCode: ' NS_HANDLER'.
interpreterProxy success: false.
true ifTrue: [^nil].
- self cCode: ' NS_ENDHANDLER'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetLongType:signed:index:value: (in category 'system primitives') -----
- primitiveNSInvocationSetLongType: aMethodSignatureOop signed: signedBoolean index: index value: intValue
- | nsInvocationInstance buffer aValue |
- self primitive: 'primitiveNSInvocationSetLongType'
parameters: #(Oop Boolean SmallInteger Oop).
- self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'.
- self var: 'aValue' declareC: 'long aValue'.
- self var: 'buffer' declareC: 'void * buffer'.
- nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'.
- interpreterProxy failed ifTrue: [^nil].
- signedBoolean
ifTrue: [aValue := self cCoerce: (interpreterProxy signed64BitValueOf: intValue) to: 'long'.
interpreterProxy failed ifTrue: [^nil].
self cCode: 'buffer = malloc(sizeof(long));
*(long*) buffer = (long) aValue']
ifFalse: [aValue := self cCoerce: (interpreterProxy positive64BitValueOf: intValue) to: 'unsigned long'.
interpreterProxy failed ifTrue: [^nil].
self cCode: 'buffer = malloc(sizeof(unsigned long));
*(unsigned long*)buffer = (unsigned long) aValue'].
- self touch: nsInvocationInstance.
- self touch: buffer.
- self cCode: ' NS_DURING'.
- self cCode: '[nsInvocationInstance setArgument: buffer atIndex: index]'.
- self cCode: ' NS_HANDLER'.
interpreterProxy success: false.
true ifTrue: [^nil].
- self cCode: ' NS_ENDHANDLER'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetPointerType:index:value: (in category 'system primitives') -----
- primitiveNSInvocationSetPointerType: aMethodSignatureOop index: index value: pointerValue
- | nsInvocationInstance buffer aValue |
- self primitive: 'primitiveNSInvocationSetPointerType'
parameters: #(Oop SmallInteger Oop).
- self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'.
- self var: 'aValue' declareC: 'void * aValue'.
- self var: 'buffer' declareC: 'void ** buffer'.
- nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'.
- aValue := self cCoerce: (interpreterProxy positive64BitValueOf: pointerValue) to: 'char *'.
- interpreterProxy failed ifTrue: [^nil].
- self cCode: 'buffer = malloc(sizeof(void*));
*buffer = aValue'.
- self touch: nsInvocationInstance.
- self touch: buffer.
- self cCode: ' NS_DURING'.
- self cCode: '[nsInvocationInstance setArgument: buffer atIndex: index]'.
- self cCode: ' NS_HANDLER'.
interpreterProxy success: false.
true ifTrue: [^nil].
- self cCode: ' NS_ENDHANDLER'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetRetained: (in category 'system primitives') -----
- primitiveNSInvocationSetRetained: aMethodSignatureOop
- | nsInvocationInstance |
- self primitive: 'primitiveNSInvocationSetRetained'
parameters: #(Oop).
- self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'.
- nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'.
- interpreterProxy failed ifTrue: [^nil].
- self cCode: ' NS_DURING'.
- self cCode: '[nsInvocationInstance retainArguments]'.
- self cCode: ' NS_HANDLER'.
interpreterProxy success: false.
- self cCode: ' NS_ENDHANDLER'.
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetSelector:target:on: (in category 'system primitives') -----
- primitiveNSInvocationSetSelector: aSelectorOop target: object1Oops on: aNSinvokeOops
- | selectorObject object1 nsInvoke |
- self primitive: 'primitiveNSInvocationSetSelector'
parameters: #(Oop Oop Oop).
- self var: 'object1' declareC: 'id object1'.
- self var: 'selectorObject' declareC: 'SEL selectorObject'.
- self var: 'nsInvoke' declareC: 'NSInvocation *nsInvoke'.
- selectorObject := self cCoerce: (interpreterProxy positive64BitValueOf: aSelectorOop) to: 'SEL'.
- object1 := self cCoerce: (interpreterProxy positive64BitValueOf: object1Oops) to: 'id'.
- nsInvoke := self cCoerce: (interpreterProxy positive64BitValueOf: aNSinvokeOops) to: 'NSInvocation *'.
- interpreterProxy failed ifTrue: [^nil].
- self cCode: ' NS_DURING'.
- self cCode: '[nsInvoke setSelector: selectorObject]'.
- self cCode: '[nsInvoke setTarget: object1]'.
- self cCode: ' NS_HANDLER'.
interpreterProxy success: false.
true ifTrue: [^self].
- self cCode: ' NS_ENDHANDLER'.
- ^self!
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetShortType:signed:index:value: (in category 'system primitives') -----
- primitiveNSInvocationSetShortType: aMethodSignatureOop signed: signedBoolean index: index value: intValue
- | nsInvocationInstance buffer aValue |
- self primitive: 'primitiveNSInvocationSetShortType'
parameters: #(Oop Boolean SmallInteger Oop).
- self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'.
- self var: 'aValue' declareC: 'short aValue'.
- self var: 'buffer' declareC: 'void * buffer'.
- nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'.
- interpreterProxy failed ifTrue: [^nil].
- signedBoolean
ifTrue: [aValue := self cCoerce: (interpreterProxy signed64BitValueOf: intValue) to: 'short'.
interpreterProxy failed ifTrue: [^nil].
self cCode: 'buffer = malloc(sizeof(short));
*(short*) buffer = (short) aValue']
ifFalse: [aValue := self cCoerce: (interpreterProxy positive64BitValueOf: intValue) to: 'unsigned short'.
interpreterProxy failed ifTrue: [^nil].
self cCode: 'buffer = malloc(sizeof(unsigned short));
*(unsigned short*)buffer = (unsigned short) aValue'].
- self touch: nsInvocationInstance.
- self touch: buffer.
- self cCode: ' NS_DURING'.
- self cCode: '[nsInvocationInstance setArgument: buffer atIndex: index]'.
- self cCode: ' NS_HANDLER'.
interpreterProxy success: false.
true ifTrue: [^nil].
- self cCode: ' NS_ENDHANDLER'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetStringType:index:value: (in category 'system primitives') -----
- primitiveNSInvocationSetStringType: aMethodSignatureOop index: index value: aValue
- | nsInvocationInstance buffer stringSize |
- self primitive: 'primitiveNSInvocationSetStringType'
parameters: #(Oop SmallInteger String).
- self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'.
- self var: 'aValue' declareC: 'char * aValue'.
- self var: 'buffer' declareC: 'char * buffer'.
- nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'.
- interpreterProxy failed ifTrue: [^nil].
- stringSize := interpreterProxy slotSizeOf: aValue cPtrAsOop.
- self cCode: 'buffer = malloc(stringSize + 1);
memcpy(buffer,aValue,stringSize);
buffer[stringSize] = 0x00'.
- self touch: nsInvocationInstance.
- self touch: buffer.
- self cCode: ' NS_DURING'.
- self cCode: '[nsInvocationInstance setArgument: &buffer atIndex: index]'.
- self cCode: ' NS_HANDLER'.
interpreterProxy success: false.
true ifTrue: [^nil].
- self cCode: ' NS_ENDHANDLER'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetStructureType:index:value: (in category 'system primitives') -----
- primitiveNSInvocationSetStructureType: aMethodSignatureOop index: index value: aValue
- | nsInvocationInstance buffer byteArraySize |
- self primitive: 'primitiveNSInvocationSetStructureType'
parameters: #(Oop SmallInteger ByteArray).
- self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'.
- self var: 'buffer' declareC: 'void * buffer'.
- nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'.
- interpreterProxy failed ifTrue: [^nil].
- byteArraySize := interpreterProxy slotSizeOf: aValue cPtrAsOop.
- self cCode: 'buffer = malloc(byteArraySize);
memcpy(buffer,aValue,byteArraySize)'.
- self touch: nsInvocationInstance.
- self touch: buffer.
- self touch: byteArraySize.
- self cCode: ' NS_DURING'.
- self cCode: '[nsInvocationInstance setArgument: buffer atIndex: index]'.
- self cCode: ' NS_HANDLER'.
interpreterProxy success: false.
true ifTrue: [^nil].
- self cCode: ' NS_ENDHANDLER'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetVoidPointerType:index:value: (in category 'system primitives') -----
- primitiveNSInvocationSetVoidPointerType: aMethodSignatureOop index: index value: aValue
- | nsInvocationInstance buffer byteArraySize |
- self primitive: 'primitiveNSInvocationSetVoidPointerType'
parameters: #(Oop SmallInteger ByteArray).
- self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'.
- self var: 'buffer' declareC: 'void * buffer'.
- nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'.
- interpreterProxy failed ifTrue: [^nil].
- byteArraySize := interpreterProxy slotSizeOf: aValue cPtrAsOop.
- self cCode: 'buffer = malloc(byteArraySize);
memcpy(buffer,aValue,byteArraySize)'.
- self touch: nsInvocationInstance.
- self touch: buffer.
- self touch: byteArraySize.
- self cCode: ' NS_DURING'.
- self cCode: '[nsInvocationInstance setArgument: &buffer atIndex: index]'.
- self cCode: ' NS_HANDLER'.
interpreterProxy success: false.
true ifTrue: [^nil].
- self cCode: ' NS_ENDHANDLER'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSInvocationWithMethodSignature: (in category 'system primitives') -----
- primitiveNSInvocationWithMethodSignature: aMethodSignatureOop
- | methodSignatureOop nsInvocationOops |
- self primitive: 'primitiveNSInvocationWithMethodSignature'
parameters: #(Oop).
- self var: 'methodSignatureOop' declareC: 'NSMethodSignature * methodSignatureOop'.
- self var: 'nsInvocationOops' declareC: 'NSInvocation* nsInvocationOops'.
- methodSignatureOop := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSMethodSignature *'.
- interpreterProxy failed ifTrue: [^nil].
- nsInvocationOops := 0.
- self cCode: ' NS_DURING'.
- self cCode: 'nsInvocationOops = [NSInvocation invocationWithMethodSignature: methodSignatureOop]'.
- self cCode: ' NS_HANDLER'.
interpreterProxy success: false.
true ifTrue: [^nil].
- self cCode: ' NS_ENDHANDLER'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: nsInvocationOops to: 'usqInt')
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSLog: (in category 'system primitives') -----
- primitiveNSLog: aNSStringOOP
- | oop1 |
- self primitive: 'primitiveNSLog'
parameters: #(Oop).
- self var: 'oop1' declareC: 'id oop1'.
- oop1 := self cCoerce: (interpreterProxy positive64BitValueOf: aNSStringOOP) to: 'id'.
- interpreterProxy failed ifTrue: [^nil].
- self touch: oop1.
- self NSLog: oop1.
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveNSStringToUTF8: (in category 'system primitives') -----
- primitiveNSStringToUTF8: aNSStringOop
- | nsStringObject utf8String utf8StringOop |
- self primitive: 'primitiveNSStringToUTF8'
parameters: #(Oop).
- self var: 'nsStringObject' declareC: 'NSString* nsStringObject'.
- self var: 'utf8String' declareC: 'const char * utf8String'.
- nsStringObject := self cCoerce: (interpreterProxy positive64BitValueOf: aNSStringOop) to: 'NSString *'.
- interpreterProxy failed ifTrue: [^nil].
- utf8String := nil.
- self touch: nsStringObject.
- self cCode: ' NS_DURING'.
- self cCode: 'utf8String = [nsStringObject UTF8String]'.
- self cCode: ' NS_HANDLER
utf8String = nil;'.
- self cCode: ' NS_ENDHANDLER'.
- utf8String
ifFalse: [interpreterProxy success: false.
^nil].
- utf8StringOop := self stringFromCString: utf8String.
- ^utf8StringOop
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitivePerformSelector:on: (in category 'system primitives') -----
- primitivePerformSelector: aSelectorOop on: aClassOrInstanceOop
- | classOrInstanceObject selectorObject returnValue |
- "- (id)performSelector:(SEL)aSelector"
- self primitive: 'primitivePerformSelector'
parameters: #(Oop Oop).
- self var: 'classOrInstanceObject' declareC: 'id classOrInstanceObject'.
- self var: 'selectorObject' declareC: 'SEL selectorObject'.
- self var: 'returnValue' declareC: 'id returnValue'.
- classOrInstanceObject := self cCoerce: (interpreterProxy positive64BitValueOf: aClassOrInstanceOop) to: 'id'.
- selectorObject := self cCoerce: (interpreterProxy positive64BitValueOf: aSelectorOop) to: 'SEL'.
- interpreterProxy failed ifTrue: [^nil].
- returnValue := nil.
- self touch: classOrInstanceObject.
- self touch: selectorObject.
- self cCode: ' NS_DURING'.
- self cCode: 'returnValue = [classOrInstanceObject performSelector: selectorObject]'.
- self cCode: ' NS_HANDLER
returnValue = nil;'.
- self cCode: ' NS_ENDHANDLER'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: returnValue to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitivePerformSelectorOnMainThreadWithWaitTilDone:on:with:returnValue:waitTilDone: (in category 'system primitives') -----
- primitivePerformSelectorOnMainThreadWithWaitTilDone: aSelectorOop on: aClassOrInstanceOop with: anObject1 returnValue: aReturnValueAddress waitTilDone: doneFlag
- | classOrInstanceObject selectorObject object1 returnAddress |
- "- (id)performSelector:(SEL)aSelector"
- self primitive: 'primitivePerformSelectorOnMainThreadWithWaitTilDone'
parameters: #(Oop Oop Oop Oop Boolean).
- self var: 'classOrInstanceObject' declareC: 'id classOrInstanceObject'.
- self var: 'object1' declareC: 'id object1'.
- self var: 'selectorObject' declareC: 'SEL selectorObject'.
- self var: 'returnAddress' declareC: 'void *returnAddress'.
- classOrInstanceObject := self cCoerce: (interpreterProxy positive64BitValueOf: aClassOrInstanceOop) to: 'id'.
- selectorObject := self cCoerce: (interpreterProxy positive64BitValueOf: aSelectorOop) to: 'SEL'.
- object1 := self cCoerce: (interpreterProxy positive64BitValueOf: anObject1) to: 'id'.
- returnAddress := self cCoerce: (interpreterProxy positive64BitValueOf: aReturnValueAddress) to: 'void *'.
- interpreterProxy failed ifTrue: [^nil].
- self touch: classOrInstanceObject.
- self touch: selectorObject.
- self touch: object1.
- self touch: returnAddress.
- self cCode: ' NS_DURING'.
- self cCode: '[classOrInstanceObject performSelectorOnMainThread: selectorObject withObject: object1 waitUntilDone: doneFlag ]'.
- self cCode: ' NS_HANDLER'.
interpreterProxy success: false.
true ifTrue: [^nil].
- self cCode: ' NS_ENDHANDLER'.
- self cCode: ' NS_DURING'.
- returnAddress ~= 0 ifTrue:
[self cCode: '[classOrInstanceObject getReturnValue: returnAddress]'].
- self cCode: ' NS_HANDLER'.
interpreterProxy success: false.
true ifTrue: [^nil].
- self cCode: ' NS_ENDHANDLER'.
- ^self!
Item was added:
- ----- Method: ObjectiveCPlugin>>primitivePerformSelectorWith:on:with: (in category 'system primitives') -----
- primitivePerformSelectorWith: aSelectorOop on: aClassOrInstanceOop with: anObject1
- | classOrInstanceObject selectorObject returnValue object1 |
- "- (id)performSelector:(SEL)aSelector"
- self primitive: 'primitivePerformSelectorWith'
parameters: #(Oop Oop Oop).
- self var: 'classOrInstanceObject' declareC: 'id classOrInstanceObject'.
- self var: 'object1' declareC: 'id object1'.
- self var: 'selectorObject' declareC: 'SEL selectorObject'.
- self var: 'returnValue' declareC: 'id returnValue'.
- classOrInstanceObject := self cCoerce: (interpreterProxy positive64BitValueOf: aClassOrInstanceOop) to: 'id'.
- selectorObject := self cCoerce: (interpreterProxy positive64BitValueOf: aSelectorOop) to: 'SEL'.
- object1 := self cCoerce: (interpreterProxy positive64BitValueOf: anObject1) to: 'id'.
- interpreterProxy failed ifTrue: [^nil].
- returnValue := nil.
- self touch: classOrInstanceObject.
- self touch: selectorObject.
- self touch: object1.
- self cCode: ' NS_DURING'.
- self cCode: 'returnValue = [classOrInstanceObject performSelector: selectorObject withObject: object1]'.
- self cCode: ' NS_HANDLER
returnValue = nil;'.
- self cCode: ' NS_ENDHANDLER'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: returnValue to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitivePerformSelectorWithWith:on:with:with: (in category 'system primitives') -----
- primitivePerformSelectorWithWith: aSelectorOop on: aClassOrInstanceOop with: anObject1 with: anObject2
- | classOrInstanceObject selectorObject returnValue object1 object2 |
- "- (id)performSelector:(SEL)aSelector"
- self primitive: 'primitivePerformSelectorWithWith'
parameters: #(Oop Oop Oop Oop).
- self var: 'classOrInstanceObject' declareC: 'id classOrInstanceObject'.
- self var: 'object1' declareC: 'id object1'.
- self var: 'object2' declareC: 'id object2'.
- self var: 'selectorObject' declareC: 'SEL selectorObject'.
- self var: 'returnValue' declareC: 'id returnValue'.
- classOrInstanceObject := self cCoerce: (interpreterProxy positive64BitValueOf: aClassOrInstanceOop) to: 'id'.
- selectorObject := self cCoerce: (interpreterProxy positive64BitValueOf: aSelectorOop) to: 'SEL'.
- object1 := self cCoerce: (interpreterProxy positive64BitValueOf: anObject1) to: 'id'.
- object2 := self cCoerce: (interpreterProxy positive64BitValueOf: anObject2) to: 'id'.
- interpreterProxy failed ifTrue: [^nil].
- returnValue := nil.
- self touch: classOrInstanceObject.
- self touch: selectorObject.
- self touch: object1.
- self touch: object2.
- self cCode: ' NS_DURING'.
- self cCode: 'returnValue = [classOrInstanceObject performSelector: selectorObject withObject: object1 withObject: object2 ]'.
- self cCode: ' NS_HANDLER
returnValue = nil;'.
- self cCode: ' NS_ENDHANDLER'.
- ^interpreterProxy positive64BitIntegerFor: (self cCoerce: returnValue to: 'usqInt') !
Item was added:
- ----- Method: ObjectiveCPlugin>>primitiveSELGetName: (in category 'system primitives') -----
- primitiveSELGetName: aSEL
- | stringOop bufferPointer |
- self primitive: 'primitiveSELGetName'
parameters: #(Oop).
- self var: 'bufferPointer' declareC: 'SEL bufferPointer'.
- self cCode: '#define selgetName sel_getName
- '.
- bufferPointer := self cCoerce: (interpreterProxy positive64BitValueOf: aSEL) to: 'SEL'.
- interpreterProxy failed ifTrue: [^nil].
- stringOop := self stringFromCString: (self selgetName: bufferPointer).
- ^stringOop
- !
Item was added:
- ----- Method: ObjectiveCPlugin>>shutdownModule (in category 'initialize-release') -----
- shutdownModule
- ^true!
Item was added:
- ----- Method: ObjectiveCPlugin>>stringFromCString: (in category 'system primitives') -----
- stringFromCString: aCString
- "Answer a new String copied from a null-terminated C string.
- Caution: This may invoke the garbage collector."
- | len newString |
- self var: 'aCString' type: 'const char *'.
- len := self cCoerce: (self strlen: aCString) to: 'sqInt'.
- newString := interpreterProxy
instantiateClass: interpreterProxy classString
indexableSize: len.
- self st: (interpreterProxy arrayValueOf: newString)
rn: aCString
cpy: len. "(char *)strncpy()"
- ^ newString
- !
Tobias.
Thanks.
I will remove it from VMMaker and add that repository to the BuildSqueakXYZImage.st scripts instead.
Cordially,
tty
---- On Mon, 02 Jun 2014 12:23:48 -0700 Tobias Pape<Das.Linux@gmx.de> wrote ----
On 02.06.2014, at 19:17, commits@source.squeak.org wrote:
> > Timothy M uploaded a new version of VMMaker to project VM Maker: > http://source.squeak.org/VMMaker/VMMaker.oscog-tty.750.mcz > > ==================== Summary ==================== > > Name: VMMaker.oscog-tty.750 > Author: tty > Time: 2 June 2014, 3:15:09.27 pm > UUID: 74f36217-bbce-4997-81fd-0944f9bb7f35 > Ancestors: VMMaker.oscog-tty.749 > > Added ObjectiveCPlugin from pharo for use in CMakeVMMakerSqueak. While SVN Cog contains source code in: > > /platforms/iOS/vm/src/vm/intplugins/ObjectiveCPlugin/ObjectiveCPlugin.c > > There is no Smalltalk class in VMMaker until now
Well, sure. That is because the Plugin lives here: http://www.squeaksource.com/ObjectiveCBridge2.html
> > =============== Diff against VMMaker.oscog-tty.749 =============== > > Item was added: > + SmartSyntaxInterpreterPlugin subclass: #ObjectiveCPlugin > + instanceVariableNames: '' > + classVariableNames: '' > + poolDictionaries: '' > + category: 'VMMaker-Plugins'! > + > + !ObjectiveCPlugin commentStamp: '<historical>' prior: 0! > + * Created by John M McIntosh on 9/17/08. > + > + Some of this code was funded via a grant from the European Smalltalk User Group (ESUG) > + Copyright (c) 2008 Corporate Smalltalk Consulting Ltd. All rights reserved. > + MIT License > + Permission is hereby granted, free of charge, to any person > + obtaining a copy of this software and associated documentation > + files (the "Software"), to deal in the Software without > + restriction, including without limitation the rights to use, > + copy, modify, merge, publish, distribute, sublicense, and/or sell > + copies of the Software, and to permit persons to whom the > + Software is furnished to do so, subject to the following > + conditions: > + > + The above copyright notice and this permission notice shall be > + included in all copies or substantial portions of the Software. > + > + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, > + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES > + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND > + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT > + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, > + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING > + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR > + OTHER DEALINGS IN THE SOFTWARE. > + > + The end-user documentation included with the redistribution, if any, must include the following acknowledgment: > + "This product includes software developed by Corporate Smalltalk Consulting Ltd (http://www.smalltalkconsulting.com) > + and its contributors", in the same place and form as other third-party acknowledgments. > + Alternately, this acknowledgment may appear in the software itself, in the same form and location as other > + such third-party acknowledgments. > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>initialiseModule (in category 'initialize-release') ----- > + initialiseModule > + "Initialise the module" > + > + ^ true > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveCallbackLeave: (in category 'system primitives') ----- > + primitiveCallbackLeave: aNumber > + > + self primitive: 'primitiveCallbackLeave' > + parameters: #(SmallInteger). > + aNumber = 0 ifTrue: [^self]. > + interpreterProxy callbackLeave: aNumber.! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveGetAddressFromEntryPointString: (in category 'system primitives') ----- > + primitiveGetAddressFromEntryPointString: aEntryPointName > + | entryPointNameLength fn entryPointName | > + self primitive: 'primitiveGetAddressFromEntryPointString' > + parameters: #(String). > + > + self var: 'entryPointName' declareC: 'char entryPointName[256]'. > + self var: 'fn' declareC: 'void * fn'. > + entryPointNameLength := interpreterProxy slotSizeOf: aEntryPointName cPtrAsOop. > + entryPointNameLength > 255 ifTrue: [^interpreterProxy positive64BitIntegerFor: 0]. > + self str: entryPointName l: aEntryPointName cpy: entryPointNameLength+1. > + fn := self dl: -2 sym: entryPointName. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: fn to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveGetAutoReleasePool (in category 'system primitives') ----- > + primitiveGetAutoReleasePool > + | pool | > + self primitive: 'primitiveGetAutoReleasePool'. > + self var: 'pool' declareC: 'NSAutoreleasePool * pool'. > + pool := nil. > + self cCode: ' NS_DURING'. > + self cCode: 'pool = [NSAutoreleasePool new]'. > + self cCode: ' NS_HANDLER > + pool = nil;'. > + self cCode: ' NS_ENDHANDLER'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: pool to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveGetClass: (in category 'system primitives') ----- > + primitiveGetClass: aClassOrInstanceOop > + | classOrInstanceObject classObject | > + self primitive: 'primitiveGetClass' > + parameters: #(Oop). > + self var: 'classOrInstanceObject' declareC: 'id classOrInstanceObject'. > + self var: 'classObject' declareC: 'Class classObject'. > + > + classOrInstanceObject := self cCoerce: (interpreterProxy positive64BitValueOf: aClassOrInstanceOop) to: 'id'. > + classObject := nil. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: classOrInstanceObject. > + self touch: classObject. > + self cCode: ' NS_DURING'. > + self cCode: 'classObject = [classOrInstanceObject class]'. > + self cCode: ' NS_HANDLER > + classObject = nil;'. > + self cCode: ' NS_ENDHANDLER'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: classObject to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveGetDescription: (in category 'system primitives') ----- > + primitiveGetDescription: aClassOrInstanceOop > + | classOrInstanceObject utf8String utf8StringOop nsStringObject | > + self primitive: 'primitiveGetDescription' > + parameters: #(Oop). > + self var: 'classOrInstanceObject' declareC: 'id classOrInstanceObject'. > + self var: 'nsStringObject' declareC: 'NSString* nsStringObject'. > + self var: 'utf8String' declareC: 'const char * utf8String'. > + > + classOrInstanceObject := self cCoerce: (interpreterProxy positive64BitValueOf: aClassOrInstanceOop) to: 'id'. > + utf8String := nil. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: nsStringObject. > + self cCode: ' NS_DURING'. > + self cCode: 'nsStringObject = [classOrInstanceObject description]; > + utf8String = [nsStringObject UTF8String]'. > + self cCode: ' NS_HANDLER > + utf8String = nil;'. > + self cCode: ' NS_ENDHANDLER'. > + utf8String > + ifFalse: [interpreterProxy success: false. > + ^nil]. > + utf8StringOop := self stringFromCString: utf8String. > + ^utf8StringOop > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveGetMethodSignatureForSelector:on: (in category 'system primitives') ----- > + primitiveGetMethodSignatureForSelector: aSelectorOop on: aClassOrInstanceOop > + | selectorObject classOrInstanceObject messageSignatureObject | > + self primitive: 'primitiveGetMethodSignatureForSelector' > + parameters: #(Oop Oop). > + self var: 'selectorObject' declareC: 'SEL selectorObject'. > + self var: 'classOrInstanceObject' declareC: 'id classOrInstanceObject'. > + self var: 'messageSignatureObject' declareC: 'NSMethodSignature * messageSignatureObject'. > + > + selectorObject := self cCoerce: (interpreterProxy positive64BitValueOf: aSelectorOop) to: 'SEL'. > + classOrInstanceObject := self cCoerce: (interpreterProxy positive64BitValueOf: aClassOrInstanceOop) to: 'id'. > + messageSignatureObject := nil. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: classOrInstanceObject. > + self touch: selectorObject. > + self cCode: ' NS_DURING'. > + self cCode: 'messageSignatureObject = [classOrInstanceObject methodSignatureForSelector: selectorObject]'. > + self cCode: ' NS_HANDLER > + messageSignatureObject = nil;'. > + self cCode: ' NS_ENDHANDLER'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: messageSignatureObject to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveGetNSStringForString:encoding: (in category 'system primitives') ----- > + primitiveGetNSStringForString: aStringOop encoding: anEncoding > + | stringLength aStringAsNSString encoding aString | > + self primitive: 'primitiveGetNSStringForString' > + parameters: #(Oop Oop). > + self var: 'aStringAsNSString' declareC: 'NSString* aStringAsNSString'. > + self var: 'encoding' declareC: 'NSUInteger encoding'. > + self var: 'aString' declareC: 'char* aString'. > + encoding := self cCoerce: (interpreterProxy positive64BitValueOf: anEncoding) to: 'NSUInteger'. > + aString := interpreterProxy firstIndexableField: aStringOop. > + stringLength := interpreterProxy byteSizeOf: aStringOop. > + self touch: stringLength. > + aStringAsNSString := 0. > + self cCode: ' NS_DURING'. > + aStringAsNSString := self cCode: '[[NSString alloc] initWithBytes: aString length: stringLength encoding: encoding]'. > + self cCode: ' NS_HANDLER > + aStringAsNSString = nil;'. > + self cCode: ' NS_ENDHANDLER'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: aStringAsNSString to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveGetObjCClassForString: (in category 'system primitives') ----- > + primitiveGetObjCClassForString: aClassName > + | classNameLength classNameNSString classObject | > + self primitive: 'primitiveGetObjCClassForString' > + parameters: #(Symbol). > + self var: 'classObject' declareC: 'Class classObject'. > + self var: 'classNameNSString' declareC: 'NSString* classNameNSString'. > + > + classNameLength := interpreterProxy slotSizeOf: aClassName cPtrAsOop. > + self touch: classNameLength. > + classNameNSString := self cCode: '[[NSString alloc] initWithBytes: aClassName length: classNameLength encoding: NSUTF8StringEncoding]'. > + self cCode: ' NS_DURING'. > + classObject := classNameNSString NSClassFromString. > + self cCode: ' NS_HANDLER > + classObject = nil;'. > + self cCode: ' NS_ENDHANDLER'. > + self cCode: '[classNameNSString release]'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: classObject to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveGetSelectorFromString: (in category 'system primitives') ----- > + primitiveGetSelectorFromString: aSelectorName > + | selectorLength selectorNSString selectorObject | > + self primitive: 'primitiveGetSelectorForString' > + parameters: #(Symbol). > + self var: 'selectorObject' declareC: 'SEL selectorObject'. > + self var: 'selectorNSString' declareC: 'NSString * selectorNSString'. > + > + selectorLength := interpreterProxy slotSizeOf: aSelectorName cPtrAsOop. > + self touch: selectorLength. > + selectorNSString := self cCode: '[[NSString alloc] initWithBytes: aSelectorName length: selectorLength encoding: NSUTF8StringEncoding]'. > + self cCode: ' NS_DURING'. > + selectorObject := selectorNSString NSSelectorFromString. > + self cCode: ' NS_HANDLER > + selectorObject = nil;'. > + self cCode: ' NS_ENDHANDLER'. > + self cCode: '[selectorNSString release]'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: selectorObject to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveGetSuperClass: (in category 'system primitives') ----- > + primitiveGetSuperClass: aClassOrInstanceOop > + | classOrInstanceObject classObject | > + self primitive: 'primitiveGetSuperClass' > + parameters: #(Oop). > + self var: 'classOrInstanceObject' declareC: 'id classOrInstanceObject'. > + self var: 'classObject' declareC: 'Class classObject'. > + > + classOrInstanceObject := self cCoerce: (interpreterProxy positive64BitValueOf: aClassOrInstanceOop) to: 'id'. > + classObject := nil. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: classOrInstanceObject. > + self touch: classObject. > + self cCode: ' NS_DURING'. > + self cCode: 'classObject = [classOrInstanceObject superclass]'. > + self cCode: ' NS_HANDLER > + classObject = nil;'. > + self cCode: ' NS_ENDHANDLER'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: classObject to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveIsEqual:to: (in category 'system primitives') ----- > + primitiveIsEqual: anOop1 to: anOop2 > + | oop1 oop2 result | > + self primitive: 'primitiveIsEqual' > + parameters: #(Oop Oop). > + self var: 'oop1' declareC: 'id oop1'. > + self var: 'oop2' declareC: 'id oop2'. > + self var: 'result' declareC: 'BOOL result'. > + > + oop1 := self cCoerce: (interpreterProxy positive64BitValueOf: anOop1) to: 'id'. > + oop2 := self cCoerce: (interpreterProxy positive64BitValueOf: anOop2) to: 'id'. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: oop1. > + self touch: oop2. > + result := 0. > + self cCode: ' NS_DURING'. > + self cCode: 'result = [oop1 isEqual: oop2]'. > + self cCode: ' NS_HANDLER'. > + interpreterProxy success: false. > + true ifTrue: [^nil]. > + self cCode: ' NS_ENDHANDLER'. > + ^(result = 1) asBooleanObj > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveMethodSignatureGetArgumentType:atIndex: (in category 'system primitives') ----- > + primitiveMethodSignatureGetArgumentType: aMethodSignatureOop atIndex: aIndexNumber > + | nsMethodSignatureObject string stringOop | > + self primitive: 'primitiveMethodSignatureGetArgumentType' > + parameters: #(Oop SmallInteger). > + self var: 'nsMethodSignatureObject' declareC: 'NSMethodSignature* nsMethodSignatureObject'. > + self var: 'string' declareC: 'const char * string'. > + > + nsMethodSignatureObject := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSMethodSignature *'. > + string := nil. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: nsMethodSignatureObject. > + self cCode: ' NS_DURING'. > + self cCode: 'string = [nsMethodSignatureObject getArgumentTypeAtIndex: aIndexNumber]'. > + self cCode: ' NS_HANDLER > + string = nil;'. > + self cCode: ' NS_ENDHANDLER'. > + string > + ifFalse: [interpreterProxy success: false. > + ^nil]. > + stringOop := self stringFromCString: string. > + ^stringOop > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveMethodSignatureGetMethodReturnLength: (in category 'system primitives') ----- > + primitiveMethodSignatureGetMethodReturnLength: aMethodSignatureOop > + | nsMethodSignatureObject methodReturnLength | > + self primitive: 'primitiveMethodSignatureGetMethodReturnLength' > + parameters: #(Oop). > + self var: 'nsMethodSignatureObject' declareC: 'NSMethodSignature* nsMethodSignatureObject'. > + self var: 'methodReturnLength' declareC: 'NSUInteger methodReturnLength'. > + > + nsMethodSignatureObject := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSMethodSignature *'. > + methodReturnLength := 0. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: nsMethodSignatureObject. > + self cCode: ' NS_DURING'. > + self cCode: 'methodReturnLength = [nsMethodSignatureObject methodReturnLength]'. > + self cCode: ' NS_HANDLER > + methodReturnLength = 0xFFFFFFFF'. > + self cCode: ' NS_ENDHANDLER'. > + methodReturnLength = 16rFFFFFFFF > + ifTrue: [interpreterProxy success: false. > + ^nil]. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: methodReturnLength to: 'usqInt') > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveMethodSignatureGetNumberOfArguments: (in category 'system primitives') ----- > + primitiveMethodSignatureGetNumberOfArguments: aMethodSignatureOop > + | nsMethodSignatureObject numberOfArguments | > + self primitive: 'primitiveMethodSignatureGetNumberOfArguments' > + parameters: #(Oop). > + self var: 'nsMethodSignatureObject' declareC: 'NSMethodSignature* nsMethodSignatureObject'. > + self var: 'numberOfArguments' declareC: 'NSUInteger numberOfArguments'. > + > + nsMethodSignatureObject := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSMethodSignature *'. > + numberOfArguments := 9999999. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: nsMethodSignatureObject. > + self cCode: ' NS_DURING'. > + self cCode: 'numberOfArguments = [nsMethodSignatureObject numberOfArguments]'. > + self cCode: ' NS_HANDLER > + numberOfArguments = 9999999'. > + self cCode: ' NS_ENDHANDLER'. > + numberOfArguments = 9999999 > + ifTrue: [interpreterProxy success: false. > + ^nil]. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: numberOfArguments to: 'usqInt') > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveMethodSignatureGetReturnType: (in category 'system primitives') ----- > + primitiveMethodSignatureGetReturnType: aMethodSignatureOop > + | nsMethodSignatureObject string stringOop | > + self primitive: 'primitiveMethodSignatureGetReturnType' > + parameters: #(Oop). > + self var: 'nsMethodSignatureObject' declareC: 'NSMethodSignature* nsMethodSignatureObject'. > + self var: 'string' declareC: 'const char * string'. > + > + nsMethodSignatureObject := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSMethodSignature *'. > + string := nil. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: nsMethodSignatureObject. > + self cCode: ' NS_DURING'. > + self cCode: 'string = [nsMethodSignatureObject methodReturnType]'. > + self cCode: ' NS_HANDLER > + string = nil;'. > + self cCode: ' NS_ENDHANDLER'. > + string > + ifFalse: [interpreterProxy success: false. > + ^nil]. > + stringOop := self stringFromCString: string. > + ^stringOop > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationCalloc: (in category 'system primitives') ----- > + primitiveNSInvocationCalloc: size > + | pointer | > + self primitive: 'primitiveNSInvocationCalloc' > + parameters: #(SmallInteger). > + self var: 'pointer' declareC: 'void* pointer'. > + self cCode: 'pointer = calloc(size,1)'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: pointer to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationFree: (in category 'system primitives') ----- > + primitiveNSInvocationFree: pointer > + | pointerToFree | > + self primitive: 'primitiveNSInvocationFree' > + parameters: #(Oop). > + self var: 'pointerToFree' declareC: 'void* pointerToFree'. > + > + pointerToFree := self cCoerce: (interpreterProxy positive64BitValueOf: pointer) to: 'void *'. > + interpreterProxy failed ifTrue: [^nil]. > + self cCode: 'free((void*)pointerToFree)'. > + self touch: pointer. > + ^self! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetArgument:buffer:atIndex: (in category 'system primitives') ----- > + primitiveNSInvocationGetArgument: aMethodSignatureOop buffer: bufferOop atIndex: index > + | nsInvocationInstance buffer | > + self primitive: 'primitiveNSInvocationGetArgument' > + parameters: #(Oop Oop SmallInteger). > + self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'. > + self var: 'buffer' declareC: 'void * buffer'. > + > + nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'. > + buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferOop) to: 'void *'. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: nsInvocationInstance. > + self touch: buffer. > + self cCode: ' NS_DURING'. > + self cCode: '[nsInvocationInstance getArgument: buffer atIndex: index]'. > + self cCode: ' NS_HANDLER'. > + interpreterProxy success: false. > + true ifTrue: [^nil]. > + self cCode: ' NS_ENDHANDLER'. > + ^self! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetCType:signed: (in category 'system primitives') ----- > + primitiveNSInvocationGetCType: bufferAddressOop signed: signedBoolean > + | buffer newCharacterOop targetOopData | > + self primitive: 'primitiveNSInvocationGetCType' > + parameters: #(Oop Boolean). > + self var: 'buffer' declareC: 'char * buffer'. > + self var: 'targetOopData' declareC: 'char targetOopData'. > + > + buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'char *'. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: buffer. > + newCharacterOop := interpreterProxy > + instantiateClass: interpreterProxy classCharacter > + indexableSize: 1. > + targetOopData := 0. > + self touch: targetOopData. > + signedBoolean > + ifTrue: [self cCode: 'targetOopData = *(char*) buffer'. > + interpreterProxy storeInteger: 0 ofObject: newCharacterOop withValue: > + (self cCoerce: targetOopData to: 'sqInt').] > + ifFalse: [self cCode: 'targetOopData = *(char*) buffer'. > + interpreterProxy storeInteger: 0 ofObject: newCharacterOop withValue: > + (self cCoerce: targetOopData to: 'usqInt').]. > + > + ^newCharacterOop! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetCharPointerType: (in category 'system primitives') ----- > + primitiveNSInvocationGetCharPointerType: bufferAddressOop > + | buffer stringOop bufferPointer | > + self primitive: 'primitiveNSInvocationGetCharPointerType' > + parameters: #(Oop). > + self var: 'bufferPointer' declareC: 'char ** bufferPointer'. > + self var: 'buffer' declareC: 'char * buffer'. > + > + bufferPointer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'char **'. > + interpreterProxy failed ifTrue: [^nil]. > + self cCode: 'buffer = *bufferPointer'. > + stringOop := self stringFromCString: buffer. > + ^stringOop > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetClassType: (in category 'system primitives') ----- > + primitiveNSInvocationGetClassType: bufferAddressOop > + | buffer data | > + self primitive: 'primitiveNSInvocationGetClassType' > + parameters: #(Oop). > + self var: 'buffer' declareC: 'Class * buffer'. > + self var: 'data' declareC: 'Class data'. > + > + buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'Class *'. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: buffer. > + self cCode: 'data = *buffer'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: data to: 'usqInt') > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetDoubleType: (in category 'system primitives') ----- > + primitiveNSInvocationGetDoubleType: bufferAddressOop > + | buffer data | > + self primitive: 'primitiveNSInvocationGetDoubleType' > + parameters: #(Oop). > + self var: 'buffer' declareC: 'double * buffer'. > + self var: 'data' declareC: 'double data'. > + > + buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'double *'. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: buffer. > + self cCode: 'data = *buffer'. > + ^interpreterProxy floatObjectOf: data! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetFloatType: (in category 'system primitives') ----- > + primitiveNSInvocationGetFloatType: bufferAddressOop > + | buffer data | > + self primitive: 'primitiveNSInvocationGetFloatType' > + parameters: #(Oop). > + self var: 'buffer' declareC: 'float * buffer'. > + self var: 'data' declareC: 'float data'. > + > + buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'float *'. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: buffer. > + self cCode: 'data = *buffer'. > + ^interpreterProxy floatObjectOf: data! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetIntType:signed: (in category 'system primitives') ----- > + primitiveNSInvocationGetIntType: bufferAddressOop signed: signedBoolean > + | buffer data unsignedData | > + self primitive: 'primitiveNSInvocationGetIntType' > + parameters: #(Oop Boolean). > + self var: 'buffer' declareC: 'int * buffer'. > + self var: 'data' declareC: 'int data'. > + self var: 'unsignedData' declareC: 'unsigned int unsignedData'. > + > + buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'int *'. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: buffer. > + unsignedData := data := 0. > + signedBoolean > + ifTrue: [self cCode: 'data = *buffer'. > + ^interpreterProxy signed32BitIntegerFor: (self cCoerce: data to: 'sqInt') ] > + ifFalse: [self cCode: 'unsignedData = *(unsigned int *)buffer'. > + ^interpreterProxy positive32BitIntegerFor: (self cCoerce: unsignedData to: 'usqInt') ]. > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetLongLongType:signed: (in category 'system primitives') ----- > + primitiveNSInvocationGetLongLongType: bufferAddressOop signed: signedBoolean > + | buffer data unsignedData | > + self primitive: 'primitiveNSInvocationGetLongLongType' > + parameters: #(Oop Boolean). > + self var: 'buffer' declareC: 'long long * buffer'. > + self var: 'data' declareC: 'long long data'. > + self var: 'unsignedData' declareC: 'unsigned long long unsignedData'. > + > + buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'long long *'. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: buffer. > + unsignedData := data := 0. > + signedBoolean > + ifTrue: [self cCode: 'data = *buffer'. > + ^interpreterProxy signed64BitIntegerFor: (self cCoerce: data to: 'long long') ] > + ifFalse: [self cCode: 'unsignedData = * (unsigned long long*) buffer'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: unsignedData to: 'unsigned long long') ]. > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetLongType:signed: (in category 'system primitives') ----- > + primitiveNSInvocationGetLongType: bufferAddressOop signed: signedBoolean > + | buffer data unsignedData | > + self primitive: 'primitiveNSInvocationGetLongType' > + parameters: #(Oop Boolean). > + self var: 'buffer' declareC: 'long * buffer'. > + self var: 'data' declareC: 'long data'. > + self var: 'unsignedData' declareC: 'unsigned long unsignedData'. > + > + buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'long *'. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: buffer. > + unsignedData := data := 0. > + signedBoolean > + ifTrue: [self cCode: 'data = *buffer'. > + ^interpreterProxy signed64BitIntegerFor: (self cCoerce: data to: 'sqInt') ] > + ifFalse: [self cCode: 'unsignedData = *(unsigned long *) buffer'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: unsignedData to: 'usqInt') ]. > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetObjectType: (in category 'system primitives') ----- > + primitiveNSInvocationGetObjectType: bufferAddressOop > + | buffer data | > + self primitive: 'primitiveNSInvocationGetObjectType' > + parameters: #(Oop). > + self var: 'buffer' declareC: 'id * buffer'. > + self var: 'data' declareC: 'id data'. > + > + buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'id *'. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: buffer. > + self cCode: 'data = *buffer'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: data to: 'usqInt') > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetReturnValue:on: (in category 'system primitives') ----- > + primitiveNSInvocationGetReturnValue: bufferAddressOop on: aNSinvokeOops > + | buffer nsInvoke | > + self primitive: 'primitiveNSInvocationGetReturnValue' > + parameters: #(Oop Oop). > + self var: 'buffer' declareC: 'void * buffer'. > + self var: 'nsInvoke' declareC: 'NSInvocation *nsInvoke'. > + > + buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'void *'. > + nsInvoke := self cCoerce: (interpreterProxy positive64BitValueOf: aNSinvokeOops) to: 'NSInvocation *'. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: buffer. > + self cCode: ' NS_DURING'. > + self cCode: '[nsInvoke getReturnValue: buffer]'. > + self cCode: ' NS_HANDLER'. > + interpreterProxy success: false. > + true ifTrue: [^nil]. > + self cCode: ' NS_ENDHANDLER'. > + ^self! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetSelectorType: (in category 'system primitives') ----- > + primitiveNSInvocationGetSelectorType: bufferAddressOop > + | buffer data | > + self primitive: 'primitiveNSInvocationGetSelectorType' > + parameters: #(Oop). > + self var: 'buffer' declareC: 'SEL * buffer'. > + self var: 'data' declareC: 'SEL data'. > + > + buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'SEL *'. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: buffer. > + self cCode: 'data = *buffer'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: data to: 'usqInt') > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetShortType:signed: (in category 'system primitives') ----- > + primitiveNSInvocationGetShortType: bufferAddressOop signed: signedBoolean > + | buffer data unsignedData | > + self primitive: 'primitiveNSInvocationGetShortType' > + parameters: #(Oop Boolean). > + self var: 'buffer' declareC: 'short * buffer'. > + self var: 'data' declareC: 'short data'. > + self var: 'unsignedData' declareC: 'unsigned short unsignedData'. > + > + buffer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'short *'. > + unsignedData := data := 0. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: buffer. > + signedBoolean > + ifTrue: [self cCode: 'data = *buffer'. > + ^interpreterProxy signed32BitIntegerFor: (self cCoerce: data to: 'sqInt') ] > + ifFalse: [self cCode: 'unsignedData = *(unsigned short *)buffer'. > + ^interpreterProxy positive32BitIntegerFor: (self cCoerce: unsignedData to: 'usqInt') ]. > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationGetStructureType:length: (in category 'system primitives') ----- > + primitiveNSInvocationGetStructureType: bufferAddressOop length: length > + | bufferPointer newByteArray | > + self primitive: 'primitiveNSInvocationGetStructureType' > + parameters: #(Oop SmallInteger). > + self var: 'bufferPointer' declareC: 'char ** bufferPointer'. > + self var: 'buffer' declareC: 'char * buffer'. > + > + bufferPointer := self cCoerce: (interpreterProxy positive64BitValueOf: bufferAddressOop) to: 'void *'. > + interpreterProxy failed ifTrue: [^nil]. > + newByteArray := interpreterProxy > + instantiateClass: interpreterProxy classByteArray > + indexableSize: length. > + self me: (interpreterProxy arrayValueOf: newByteArray) > + m: bufferPointer > + cpy: length. "void * memcpy(void *restrict s1, const void *restrict s2, size_t n)" > + ^newByteArray > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationMalloc: (in category 'system primitives') ----- > + primitiveNSInvocationMalloc: size > + | pointer | > + self primitive: 'primitiveNSInvocationMalloc' > + parameters: #(SmallInteger). > + self var: 'pointer' declareC: 'void* pointer'. > + self cCode: 'pointer = malloc(size)'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: pointer to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetCType:signed:index:value: (in category 'system primitives') ----- > + primitiveNSInvocationSetCType: aMethodSignatureOop signed: signedBoolean index: index value: newCharacterOop > + | nsInvocationInstance buffer aValue aUnsignedValue | > + self primitive: 'primitiveNSInvocationSetCType' > + parameters: #(Oop Boolean SmallInteger Oop). > + self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'. > + self var: 'buffer' declareC: 'void * buffer'. > + self var: 'aValue' declareC: 'char aValue'. > + self var: 'aUnsignedValue' declareC: 'unsigned char aUnsignedValue'. > + > + nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'. > + interpreterProxy failed ifTrue: [^nil]. > + aValue := interpreterProxy fetchInteger: 0 ofObject: newCharacterOop. > + aUnsignedValue := interpreterProxy fetchInteger: 0 ofObject: newCharacterOop. > + signedBoolean > + ifTrue: [self cCode: 'buffer = malloc(sizeof(char)); > + *(char*) buffer = (char) aValue'] > + ifFalse: [self cCode: 'buffer = malloc(sizeof(unsigned char)); > + *(unsigned char*)buffer = (unsigned char) aUnsignedValue']. > + self touch: nsInvocationInstance. > + self touch: buffer. > + self cCode: ' NS_DURING'. > + self cCode: '[nsInvocationInstance setArgument: buffer atIndex: index]'. > + self cCode: ' NS_HANDLER'. > + interpreterProxy success: false. > + true ifTrue: [^nil]. > + self cCode: ' NS_ENDHANDLER'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetDoubleType:index:value: (in category 'system primitives') ----- > + primitiveNSInvocationSetDoubleType: aMethodSignatureOop index: index value: aValue > + | nsInvocationInstance buffer | > + self primitive: 'primitiveNSInvocationSetDoubleType' > + parameters: #(Oop SmallInteger Float). > + self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'. > + self var: 'aValue' declareC: 'double aValue'. > + self var: 'buffer' declareC: 'void * buffer'. > + > + nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'. > + interpreterProxy failed ifTrue: [^nil]. > + self cCode: 'buffer = malloc(sizeof(double)); > + *(double*) buffer = (double) aValue'. > + self touch: nsInvocationInstance. > + self touch: buffer. > + self cCode: ' NS_DURING'. > + self cCode: '[nsInvocationInstance setArgument: buffer atIndex: index]'. > + self cCode: ' NS_HANDLER'. > + interpreterProxy success: false. > + true ifTrue: [^nil]. > + self cCode: ' NS_ENDHANDLER'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetFloatType:index:value: (in category 'system primitives') ----- > + primitiveNSInvocationSetFloatType: aMethodSignatureOop index: index value: aValue > + | nsInvocationInstance buffer | > + self primitive: 'primitiveNSInvocationSetFloatType' > + parameters: #(Oop SmallInteger Float). > + self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'. > + self var: 'aValue' declareC: 'float aValue'. > + self var: 'buffer' declareC: 'void * buffer'. > + > + nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'. > + interpreterProxy failed ifTrue: [^nil]. > + self cCode: 'buffer = malloc(sizeof(float)); > + *(float*) buffer = (float) aValue'. > + self touch: nsInvocationInstance. > + self touch: buffer. > + self cCode: ' NS_DURING'. > + self cCode: '[nsInvocationInstance setArgument: buffer atIndex: index]'. > + self cCode: ' NS_HANDLER'. > + interpreterProxy success: false. > + true ifTrue: [^nil]. > + self cCode: ' NS_ENDHANDLER'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetIntType:signed:index:value: (in category 'system primitives') ----- > + primitiveNSInvocationSetIntType: aMethodSignatureOop signed: signedBoolean index: index value: intValue > + | nsInvocationInstance buffer aValue | > + self primitive: 'primitiveNSInvocationSetIntType' > + parameters: #(Oop Boolean SmallInteger Oop). > + self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'. > + self var: 'aValue' declareC: 'int aValue'. > + self var: 'buffer' declareC: 'void * buffer'. > + > + nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'. > + interpreterProxy failed ifTrue: [^nil]. > + signedBoolean > + ifTrue: [aValue := self cCoerce: (interpreterProxy signed64BitValueOf: intValue) to: 'int'. > + interpreterProxy failed ifTrue: [^nil]. > + self cCode: 'buffer = malloc(sizeof(int)); > + *(int*) buffer = (int) aValue'] > + ifFalse: [aValue := self cCoerce: (interpreterProxy positive64BitValueOf: intValue) to: 'unsigned int'. > + interpreterProxy failed ifTrue: [^nil]. > + self cCode: 'buffer = malloc(sizeof(unsigned int)); > + *(unsigned int*)buffer = (unsigned int) aValue']. > + self touch: nsInvocationInstance. > + self touch: buffer. > + self cCode: ' NS_DURING'. > + self cCode: '[nsInvocationInstance setArgument: buffer atIndex: index]'. > + self cCode: ' NS_HANDLER'. > + interpreterProxy success: false. > + true ifTrue: [^nil]. > + self cCode: ' NS_ENDHANDLER'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetLongLongType:signed:index:value: (in category 'system primitives') ----- > + primitiveNSInvocationSetLongLongType: aMethodSignatureOop signed: signedBoolean index: index value: intValue > + | nsInvocationInstance buffer aValue | > + self primitive: 'primitiveNSInvocationSetLongLongType' > + parameters: #(Oop Boolean SmallInteger Oop). > + self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'. > + self var: 'aValue' declareC: 'long long aValue'. > + self var: 'buffer' declareC: 'void * buffer'. > + > + nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'. > + interpreterProxy failed ifTrue: [^nil]. > + signedBoolean > + ifTrue: [aValue := self cCoerce: (interpreterProxy signed64BitValueOf: intValue) to: 'long long'. > + interpreterProxy failed ifTrue: [^nil]. > + self cCode: 'buffer = malloc(sizeof(long long)); > + *(long long*) buffer = (long long) aValue'] > + ifFalse: [aValue := self cCoerce: (interpreterProxy positive64BitValueOf: intValue) to: 'unsigned long long'. > + interpreterProxy failed ifTrue: [^nil]. > + self cCode: 'buffer = malloc(sizeof(unsigned long long)); > + *(unsigned long long*)buffer = (unsigned long long) aValue']. > + self touch: nsInvocationInstance. > + self touch: buffer. > + self cCode: ' NS_DURING'. > + self cCode: '[nsInvocationInstance setArgument: buffer atIndex: index]'. > + self cCode: ' NS_HANDLER'. > + interpreterProxy success: false. > + true ifTrue: [^nil]. > + self cCode: ' NS_ENDHANDLER'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetLongType:signed:index:value: (in category 'system primitives') ----- > + primitiveNSInvocationSetLongType: aMethodSignatureOop signed: signedBoolean index: index value: intValue > + | nsInvocationInstance buffer aValue | > + self primitive: 'primitiveNSInvocationSetLongType' > + parameters: #(Oop Boolean SmallInteger Oop). > + self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'. > + self var: 'aValue' declareC: 'long aValue'. > + self var: 'buffer' declareC: 'void * buffer'. > + > + nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'. > + interpreterProxy failed ifTrue: [^nil]. > + signedBoolean > + ifTrue: [aValue := self cCoerce: (interpreterProxy signed64BitValueOf: intValue) to: 'long'. > + interpreterProxy failed ifTrue: [^nil]. > + self cCode: 'buffer = malloc(sizeof(long)); > + *(long*) buffer = (long) aValue'] > + ifFalse: [aValue := self cCoerce: (interpreterProxy positive64BitValueOf: intValue) to: 'unsigned long'. > + interpreterProxy failed ifTrue: [^nil]. > + self cCode: 'buffer = malloc(sizeof(unsigned long)); > + *(unsigned long*)buffer = (unsigned long) aValue']. > + self touch: nsInvocationInstance. > + self touch: buffer. > + self cCode: ' NS_DURING'. > + self cCode: '[nsInvocationInstance setArgument: buffer atIndex: index]'. > + self cCode: ' NS_HANDLER'. > + interpreterProxy success: false. > + true ifTrue: [^nil]. > + self cCode: ' NS_ENDHANDLER'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetPointerType:index:value: (in category 'system primitives') ----- > + primitiveNSInvocationSetPointerType: aMethodSignatureOop index: index value: pointerValue > + | nsInvocationInstance buffer aValue | > + self primitive: 'primitiveNSInvocationSetPointerType' > + parameters: #(Oop SmallInteger Oop). > + self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'. > + self var: 'aValue' declareC: 'void * aValue'. > + self var: 'buffer' declareC: 'void ** buffer'. > + > + nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'. > + aValue := self cCoerce: (interpreterProxy positive64BitValueOf: pointerValue) to: 'char *'. > + interpreterProxy failed ifTrue: [^nil]. > + self cCode: 'buffer = malloc(sizeof(void*)); > + *buffer = aValue'. > + self touch: nsInvocationInstance. > + self touch: buffer. > + self cCode: ' NS_DURING'. > + self cCode: '[nsInvocationInstance setArgument: buffer atIndex: index]'. > + self cCode: ' NS_HANDLER'. > + interpreterProxy success: false. > + true ifTrue: [^nil]. > + self cCode: ' NS_ENDHANDLER'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetRetained: (in category 'system primitives') ----- > + primitiveNSInvocationSetRetained: aMethodSignatureOop > + | nsInvocationInstance | > + self primitive: 'primitiveNSInvocationSetRetained' > + parameters: #(Oop). > + self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'. > + > + nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'. > + interpreterProxy failed ifTrue: [^nil]. > + self cCode: ' NS_DURING'. > + self cCode: '[nsInvocationInstance retainArguments]'. > + self cCode: ' NS_HANDLER'. > + interpreterProxy success: false. > + self cCode: ' NS_ENDHANDLER'. > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetSelector:target:on: (in category 'system primitives') ----- > + primitiveNSInvocationSetSelector: aSelectorOop target: object1Oops on: aNSinvokeOops > + | selectorObject object1 nsInvoke | > + self primitive: 'primitiveNSInvocationSetSelector' > + parameters: #(Oop Oop Oop). > + > + self var: 'object1' declareC: 'id object1'. > + self var: 'selectorObject' declareC: 'SEL selectorObject'. > + self var: 'nsInvoke' declareC: 'NSInvocation *nsInvoke'. > + > + selectorObject := self cCoerce: (interpreterProxy positive64BitValueOf: aSelectorOop) to: 'SEL'. > + object1 := self cCoerce: (interpreterProxy positive64BitValueOf: object1Oops) to: 'id'. > + nsInvoke := self cCoerce: (interpreterProxy positive64BitValueOf: aNSinvokeOops) to: 'NSInvocation *'. > + interpreterProxy failed ifTrue: [^nil]. > + self cCode: ' NS_DURING'. > + self cCode: '[nsInvoke setSelector: selectorObject]'. > + self cCode: '[nsInvoke setTarget: object1]'. > + self cCode: ' NS_HANDLER'. > + interpreterProxy success: false. > + true ifTrue: [^self]. > + self cCode: ' NS_ENDHANDLER'. > + ^self! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetShortType:signed:index:value: (in category 'system primitives') ----- > + primitiveNSInvocationSetShortType: aMethodSignatureOop signed: signedBoolean index: index value: intValue > + | nsInvocationInstance buffer aValue | > + self primitive: 'primitiveNSInvocationSetShortType' > + parameters: #(Oop Boolean SmallInteger Oop). > + self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'. > + self var: 'aValue' declareC: 'short aValue'. > + self var: 'buffer' declareC: 'void * buffer'. > + > + nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'. > + interpreterProxy failed ifTrue: [^nil]. > + signedBoolean > + ifTrue: [aValue := self cCoerce: (interpreterProxy signed64BitValueOf: intValue) to: 'short'. > + interpreterProxy failed ifTrue: [^nil]. > + self cCode: 'buffer = malloc(sizeof(short)); > + *(short*) buffer = (short) aValue'] > + ifFalse: [aValue := self cCoerce: (interpreterProxy positive64BitValueOf: intValue) to: 'unsigned short'. > + interpreterProxy failed ifTrue: [^nil]. > + self cCode: 'buffer = malloc(sizeof(unsigned short)); > + *(unsigned short*)buffer = (unsigned short) aValue']. > + self touch: nsInvocationInstance. > + self touch: buffer. > + self cCode: ' NS_DURING'. > + self cCode: '[nsInvocationInstance setArgument: buffer atIndex: index]'. > + self cCode: ' NS_HANDLER'. > + interpreterProxy success: false. > + true ifTrue: [^nil]. > + self cCode: ' NS_ENDHANDLER'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetStringType:index:value: (in category 'system primitives') ----- > + primitiveNSInvocationSetStringType: aMethodSignatureOop index: index value: aValue > + | nsInvocationInstance buffer stringSize | > + self primitive: 'primitiveNSInvocationSetStringType' > + parameters: #(Oop SmallInteger String). > + self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'. > + self var: 'aValue' declareC: 'char * aValue'. > + self var: 'buffer' declareC: 'char * buffer'. > + > + nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'. > + interpreterProxy failed ifTrue: [^nil]. > + stringSize := interpreterProxy slotSizeOf: aValue cPtrAsOop. > + self cCode: 'buffer = malloc(stringSize + 1); > + memcpy(buffer,aValue,stringSize); > + buffer[stringSize] = 0x00'. > + self touch: nsInvocationInstance. > + self touch: buffer. > + self cCode: ' NS_DURING'. > + self cCode: '[nsInvocationInstance setArgument: &buffer atIndex: index]'. > + self cCode: ' NS_HANDLER'. > + interpreterProxy success: false. > + true ifTrue: [^nil]. > + self cCode: ' NS_ENDHANDLER'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetStructureType:index:value: (in category 'system primitives') ----- > + primitiveNSInvocationSetStructureType: aMethodSignatureOop index: index value: aValue > + | nsInvocationInstance buffer byteArraySize | > + self primitive: 'primitiveNSInvocationSetStructureType' > + parameters: #(Oop SmallInteger ByteArray). > + self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'. > + self var: 'buffer' declareC: 'void * buffer'. > + > + nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'. > + interpreterProxy failed ifTrue: [^nil]. > + byteArraySize := interpreterProxy slotSizeOf: aValue cPtrAsOop. > + self cCode: 'buffer = malloc(byteArraySize); > + memcpy(buffer,aValue,byteArraySize)'. > + self touch: nsInvocationInstance. > + self touch: buffer. > + self touch: byteArraySize. > + self cCode: ' NS_DURING'. > + self cCode: '[nsInvocationInstance setArgument: buffer atIndex: index]'. > + self cCode: ' NS_HANDLER'. > + interpreterProxy success: false. > + true ifTrue: [^nil]. > + self cCode: ' NS_ENDHANDLER'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationSetVoidPointerType:index:value: (in category 'system primitives') ----- > + primitiveNSInvocationSetVoidPointerType: aMethodSignatureOop index: index value: aValue > + | nsInvocationInstance buffer byteArraySize | > + self primitive: 'primitiveNSInvocationSetVoidPointerType' > + parameters: #(Oop SmallInteger ByteArray). > + self var: 'nsInvocationInstance' declareC: 'NSInvocation* nsInvocationInstance'. > + self var: 'buffer' declareC: 'void * buffer'. > + > + nsInvocationInstance := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSInvocation *'. > + interpreterProxy failed ifTrue: [^nil]. > + byteArraySize := interpreterProxy slotSizeOf: aValue cPtrAsOop. > + self cCode: 'buffer = malloc(byteArraySize); > + memcpy(buffer,aValue,byteArraySize)'. > + self touch: nsInvocationInstance. > + self touch: buffer. > + self touch: byteArraySize. > + self cCode: ' NS_DURING'. > + self cCode: '[nsInvocationInstance setArgument: &buffer atIndex: index]'. > + self cCode: ' NS_HANDLER'. > + interpreterProxy success: false. > + true ifTrue: [^nil]. > + self cCode: ' NS_ENDHANDLER'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: buffer to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSInvocationWithMethodSignature: (in category 'system primitives') ----- > + primitiveNSInvocationWithMethodSignature: aMethodSignatureOop > + | methodSignatureOop nsInvocationOops | > + self primitive: 'primitiveNSInvocationWithMethodSignature' > + parameters: #(Oop). > + self var: 'methodSignatureOop' declareC: 'NSMethodSignature * methodSignatureOop'. > + self var: 'nsInvocationOops' declareC: 'NSInvocation* nsInvocationOops'. > + > + methodSignatureOop := self cCoerce: (interpreterProxy positive64BitValueOf: aMethodSignatureOop) to: 'NSMethodSignature *'. > + interpreterProxy failed ifTrue: [^nil]. > + nsInvocationOops := 0. > + self cCode: ' NS_DURING'. > + self cCode: 'nsInvocationOops = [NSInvocation invocationWithMethodSignature: methodSignatureOop]'. > + self cCode: ' NS_HANDLER'. > + interpreterProxy success: false. > + true ifTrue: [^nil]. > + self cCode: ' NS_ENDHANDLER'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: nsInvocationOops to: 'usqInt') > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSLog: (in category 'system primitives') ----- > + primitiveNSLog: aNSStringOOP > + | oop1 | > + self primitive: 'primitiveNSLog' > + parameters: #(Oop). > + self var: 'oop1' declareC: 'id oop1'. > + > + oop1 := self cCoerce: (interpreterProxy positive64BitValueOf: aNSStringOOP) to: 'id'. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: oop1. > + self NSLog: oop1. > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveNSStringToUTF8: (in category 'system primitives') ----- > + primitiveNSStringToUTF8: aNSStringOop > + | nsStringObject utf8String utf8StringOop | > + self primitive: 'primitiveNSStringToUTF8' > + parameters: #(Oop). > + self var: 'nsStringObject' declareC: 'NSString* nsStringObject'. > + self var: 'utf8String' declareC: 'const char * utf8String'. > + > + nsStringObject := self cCoerce: (interpreterProxy positive64BitValueOf: aNSStringOop) to: 'NSString *'. > + interpreterProxy failed ifTrue: [^nil]. > + utf8String := nil. > + self touch: nsStringObject. > + self cCode: ' NS_DURING'. > + self cCode: 'utf8String = [nsStringObject UTF8String]'. > + self cCode: ' NS_HANDLER > + utf8String = nil;'. > + self cCode: ' NS_ENDHANDLER'. > + utf8String > + ifFalse: [interpreterProxy success: false. > + ^nil]. > + utf8StringOop := self stringFromCString: utf8String. > + ^utf8StringOop > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitivePerformSelector:on: (in category 'system primitives') ----- > + primitivePerformSelector: aSelectorOop on: aClassOrInstanceOop > + | classOrInstanceObject selectorObject returnValue | > + "- (id)performSelector:(SEL)aSelector" > + > + self primitive: 'primitivePerformSelector' > + parameters: #(Oop Oop). > + self var: 'classOrInstanceObject' declareC: 'id classOrInstanceObject'. > + self var: 'selectorObject' declareC: 'SEL selectorObject'. > + self var: 'returnValue' declareC: 'id returnValue'. > + > + classOrInstanceObject := self cCoerce: (interpreterProxy positive64BitValueOf: aClassOrInstanceOop) to: 'id'. > + selectorObject := self cCoerce: (interpreterProxy positive64BitValueOf: aSelectorOop) to: 'SEL'. > + interpreterProxy failed ifTrue: [^nil]. > + returnValue := nil. > + self touch: classOrInstanceObject. > + self touch: selectorObject. > + self cCode: ' NS_DURING'. > + self cCode: 'returnValue = [classOrInstanceObject performSelector: selectorObject]'. > + self cCode: ' NS_HANDLER > + returnValue = nil;'. > + self cCode: ' NS_ENDHANDLER'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: returnValue to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitivePerformSelectorOnMainThreadWithWaitTilDone:on:with:returnValue:waitTilDone: (in category 'system primitives') ----- > + primitivePerformSelectorOnMainThreadWithWaitTilDone: aSelectorOop on: aClassOrInstanceOop with: anObject1 returnValue: aReturnValueAddress waitTilDone: doneFlag > + | classOrInstanceObject selectorObject object1 returnAddress | > + "- (id)performSelector:(SEL)aSelector" > + > + self primitive: 'primitivePerformSelectorOnMainThreadWithWaitTilDone' > + parameters: #(Oop Oop Oop Oop Boolean). > + self var: 'classOrInstanceObject' declareC: 'id classOrInstanceObject'. > + self var: 'object1' declareC: 'id object1'. > + self var: 'selectorObject' declareC: 'SEL selectorObject'. > + self var: 'returnAddress' declareC: 'void *returnAddress'. > + > + classOrInstanceObject := self cCoerce: (interpreterProxy positive64BitValueOf: aClassOrInstanceOop) to: 'id'. > + selectorObject := self cCoerce: (interpreterProxy positive64BitValueOf: aSelectorOop) to: 'SEL'. > + object1 := self cCoerce: (interpreterProxy positive64BitValueOf: anObject1) to: 'id'. > + returnAddress := self cCoerce: (interpreterProxy positive64BitValueOf: aReturnValueAddress) to: 'void *'. > + interpreterProxy failed ifTrue: [^nil]. > + self touch: classOrInstanceObject. > + self touch: selectorObject. > + self touch: object1. > + self touch: returnAddress. > + self cCode: ' NS_DURING'. > + self cCode: '[classOrInstanceObject performSelectorOnMainThread: selectorObject withObject: object1 waitUntilDone: doneFlag ]'. > + self cCode: ' NS_HANDLER'. > + interpreterProxy success: false. > + true ifTrue: [^nil]. > + self cCode: ' NS_ENDHANDLER'. > + self cCode: ' NS_DURING'. > + returnAddress ~= 0 ifTrue: > + [self cCode: '[classOrInstanceObject getReturnValue: returnAddress]']. > + self cCode: ' NS_HANDLER'. > + interpreterProxy success: false. > + true ifTrue: [^nil]. > + self cCode: ' NS_ENDHANDLER'. > + ^self! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitivePerformSelectorWith:on:with: (in category 'system primitives') ----- > + primitivePerformSelectorWith: aSelectorOop on: aClassOrInstanceOop with: anObject1 > + | classOrInstanceObject selectorObject returnValue object1 | > + "- (id)performSelector:(SEL)aSelector" > + > + self primitive: 'primitivePerformSelectorWith' > + parameters: #(Oop Oop Oop). > + self var: 'classOrInstanceObject' declareC: 'id classOrInstanceObject'. > + self var: 'object1' declareC: 'id object1'. > + self var: 'selectorObject' declareC: 'SEL selectorObject'. > + self var: 'returnValue' declareC: 'id returnValue'. > + > + classOrInstanceObject := self cCoerce: (interpreterProxy positive64BitValueOf: aClassOrInstanceOop) to: 'id'. > + selectorObject := self cCoerce: (interpreterProxy positive64BitValueOf: aSelectorOop) to: 'SEL'. > + object1 := self cCoerce: (interpreterProxy positive64BitValueOf: anObject1) to: 'id'. > + interpreterProxy failed ifTrue: [^nil]. > + returnValue := nil. > + self touch: classOrInstanceObject. > + self touch: selectorObject. > + self touch: object1. > + self cCode: ' NS_DURING'. > + self cCode: 'returnValue = [classOrInstanceObject performSelector: selectorObject withObject: object1]'. > + self cCode: ' NS_HANDLER > + returnValue = nil;'. > + self cCode: ' NS_ENDHANDLER'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: returnValue to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitivePerformSelectorWithWith:on:with:with: (in category 'system primitives') ----- > + primitivePerformSelectorWithWith: aSelectorOop on: aClassOrInstanceOop with: anObject1 with: anObject2 > + | classOrInstanceObject selectorObject returnValue object1 object2 | > + "- (id)performSelector:(SEL)aSelector" > + > + self primitive: 'primitivePerformSelectorWithWith' > + parameters: #(Oop Oop Oop Oop). > + self var: 'classOrInstanceObject' declareC: 'id classOrInstanceObject'. > + self var: 'object1' declareC: 'id object1'. > + self var: 'object2' declareC: 'id object2'. > + self var: 'selectorObject' declareC: 'SEL selectorObject'. > + self var: 'returnValue' declareC: 'id returnValue'. > + > + classOrInstanceObject := self cCoerce: (interpreterProxy positive64BitValueOf: aClassOrInstanceOop) to: 'id'. > + selectorObject := self cCoerce: (interpreterProxy positive64BitValueOf: aSelectorOop) to: 'SEL'. > + object1 := self cCoerce: (interpreterProxy positive64BitValueOf: anObject1) to: 'id'. > + object2 := self cCoerce: (interpreterProxy positive64BitValueOf: anObject2) to: 'id'. > + interpreterProxy failed ifTrue: [^nil]. > + returnValue := nil. > + self touch: classOrInstanceObject. > + self touch: selectorObject. > + self touch: object1. > + self touch: object2. > + self cCode: ' NS_DURING'. > + self cCode: 'returnValue = [classOrInstanceObject performSelector: selectorObject withObject: object1 withObject: object2 ]'. > + self cCode: ' NS_HANDLER > + returnValue = nil;'. > + self cCode: ' NS_ENDHANDLER'. > + ^interpreterProxy positive64BitIntegerFor: (self cCoerce: returnValue to: 'usqInt') ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>primitiveSELGetName: (in category 'system primitives') ----- > + primitiveSELGetName: aSEL > + | stringOop bufferPointer | > + self primitive: 'primitiveSELGetName' > + parameters: #(Oop). > + self var: 'bufferPointer' declareC: 'SEL bufferPointer'. > + self cCode: '#define selgetName sel_getName > + '. > + bufferPointer := self cCoerce: (interpreterProxy positive64BitValueOf: aSEL) to: 'SEL'. > + interpreterProxy failed ifTrue: [^nil]. > + stringOop := self stringFromCString: (self selgetName: bufferPointer). > + ^stringOop > + ! > > Item was added: > + ----- Method: ObjectiveCPlugin>>shutdownModule (in category 'initialize-release') ----- > + shutdownModule > + ^true! > > Item was added: > + ----- Method: ObjectiveCPlugin>>stringFromCString: (in category 'system primitives') ----- > + stringFromCString: aCString > + "Answer a new String copied from a null-terminated C string. > + Caution: This may invoke the garbage collector." > + > + | len newString | > + self var: 'aCString' type: 'const char *'. > + len := self cCoerce: (self strlen: aCString) to: 'sqInt'. > + newString := interpreterProxy > + instantiateClass: interpreterProxy classString > + indexableSize: len. > + self st: (interpreterProxy arrayValueOf: newString) > + rn: aCString > + cpy: len. "(char *)strncpy()" > + ^ newString > + > + ! >
vm-dev@lists.squeakfoundation.org