[Vm-dev] VM Maker: VMMaker.oscog-tty.750.mcz

gettimothy gettimothy at zoho.com
Mon Jun 2 19:51:22 UTC 2014


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 at gmx.de> wrote ---- 


 
On 02.06.2014, at 19:17, commits at 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 
> + 
> + ! 
> 
 


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20140602/edd6f47f/attachment-0001.htm


More information about the Vm-dev mailing list