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
=============== 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