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