You shouldnt use Brew, because it cant compile universal binaries. Athens, with a cairo backend, uses NativeBoost which needs 32 bit libraries, because CogGM is targeted to 32 bits.
I also tried with Brew, that's why i found out is hard to instruct brew to compile universal binaries. Fernando On Fri, May 25, 2012 at 12:39 PM, Serge Stinckwich <[email protected]> wrote: > On Fri, May 25, 2012 at 4:57 PM, Tudor Girba <[email protected]> wrote: >> Hi, >> >> Here is how to install Athens (I also added this comment to the >> ConfigurationOfAthens): >> >> >> 1. Install Cairo on your machine >> For example, for Mac, you open the terminal and run: >> sudo port install -f cairo +universal >> >> More information can be found here: >> http://cairographics.org/download/ >> >> >> 2. Download the NativeBoost enabled Cog VM from: >> https://ci.lille.inria.fr/pharo/view/NativeBoost/ >> >> >> 3. Get a Pharo image and run: >> Gofer new >> squeaksource: 'Athens'; >> package: 'ConfigurationOfAthens'; >> load. >> (Smalltalk at: #ConfigurationOfAthens) loadDevelopment >> >> >> 4. Play with it. For example: >> VGTigerDemo runDemo > > I install Cairo with brew on mac os x: > brew install cairo > > And I got the following stack trace: > > > 25 May 2012 5:37:03 pm > > VM: Mac OS - intel - 1074 - NBCoInterpreter > NativeBoost-CogPlugin-IgorStasenko.9 uuid: > 801decd2-0b42-fa49-bcea-d7564d516a1b May 1 2012, > StackToRegisterMappingCogit VMMaker-oscog-EstebanLorenzano.158 uuid: > 82eded98-68af-4c80-a472-4f6de293adcf May 1 2012, > https://git.gitorious.org/cogvm/blessed.git Commit: > 6aa3fd0f1188078d3167dec1a53031a61b97b688 Date: Tue May 1 20:28:14 2012 > +0200 By: Esteban Lorenzano <[email protected]> > Image: Pharo1.4a [Latest update: #14418] > > NBFFICallout(Object)>>error: > Receiver: a NBFFICallout > Arguments and temporary variables: > aString: 'function unavailable' > Receiver's instance variables: > asm: an AJx86Assembler > proxy: a NBInterpreterProxy > options: a Set(#optCdecl #optAllowByteArraysPtr > #optUseStackPointer > #optReturnP...etc... > method: (AthensCairoSurface > class>>#primImage:width:height: "a > CompiledMethod(4...etc... > fnSpec: a NBFnSpec > requestor: AthensCairoSurface class > methodArgs: an OrderedCollection('aFormat' 'aWidth' > 'aHeight') > coercionMayFail: true > callInfo: an AJCdeclCallInfo > > [:gen | > fnAddress := requestor nbGetSymbolAddress: fnSpec functionName module: > aModuleNameOrHandle. > fnAddress > ifNil: [self error: 'function unavailable']. > self mayCallback > ifTrue: [asm push: fnAddress asUImm32; > mov: NativeBoost callgateFunctionAddress > asUImm32 to: EAX; > call: EAX] > ifFalse: [asm mov: fnAddress asUImm32 to: EAX; > call: EAX]] in > NBFFICallout>>generateCall:module: > Receiver: a NBFFICallout > Arguments and temporary variables: > aModuleNameOrHandle: a NBFFICallout > fnAddress: '/opt/local/lib/libcairo.2.dylib' > gen: #(nil) > Receiver's instance variables: > asm: an AJx86Assembler > proxy: a NBInterpreterProxy > options: a Set(#optCdecl #optAllowByteArraysPtr > #optUseStackPointer > #optReturnP...etc... > method: (AthensCairoSurface > class>>#primImage:width:height: "a > CompiledMethod(4...etc... > fnSpec: a NBFnSpec > requestor: AthensCairoSurface class > methodArgs: an OrderedCollection('aFormat' 'aWidth' > 'aHeight') > coercionMayFail: true > callInfo: an AJCdeclCallInfo > > BlockClosure>>valueWithPossibleArgs: > Receiver: [:gen | > fnAddress := requestor nbGetSymbolAddress: fnSpec functionName module: > aModuleNam...etc... > Arguments and temporary variables: > anArray: an Array(a NBFFICallout a NBInterpreterProxy > an AJx86Assembler) > Receiver's instance variables: > outerContext: NBFFICallout>>generateCall:module: > startpc: 91 > numArgs: 1 > > [aFunctionBodyBlock valueWithPossibleArgs: {self. proxy. asm}. > (self optEmitCall > or: [self optNoCleanup]) > ifTrue: [call disableCleanup]] in [:call | > self optNoAlignment > ifTrue: [call alignment: 1]. > self pushArguments. > coercionMayFail > ifTrue: [proxy ifFailedJumpTo: self failedLabel]. > asm > decorateWith: 'FFI: performing a call' > while: [aFunctionBodyBlock valueWithPossibleArgs: {self. > proxy. asm}. > (self optEmitCall > or: [self optNoCleanup]) > ifTrue: [call disableCleanup]]] in > NBFFICallout>>generateInstructions: > Receiver: a NBFFICallout > Arguments and temporary variables: > aFunctionBodyBlock: an AJCdeclCallInfo > call: [:gen | > fnAddress := requestor nbGetSymbolAddress: fnSpec functionName m...etc... > Receiver's instance variables: > asm: an AJx86Assembler > proxy: a NBInterpreterProxy > options: a Set(#optCdecl #optAllowByteArraysPtr > #optUseStackPointer > #optReturnP...etc... > method: (AthensCairoSurface > class>>#primImage:width:height: "a > CompiledMethod(4...etc... > fnSpec: a NBFnSpec > requestor: AthensCairoSurface class > methodArgs: an OrderedCollection('aFormat' 'aWidth' > 'aHeight') > coercionMayFail: true > callInfo: an AJCdeclCallInfo > > BlockClosure>>ensure: > Receiver: [aFunctionBodyBlock valueWithPossibleArgs: {self. proxy. > asm}. > (self optEmitCall > or: [...etc... > Arguments and temporary variables: > aBlock: [level := level - 1. > self > addInstruction: (AJInstructionDecoration n...etc... > complete: nil > returnValue: nil > Receiver's instance variables: > outerContext: [:call | > self optNoAlignment > ifTrue: [call alignment: 1]. > sel...etc... > startpc: 151 > numArgs: 0 > > AJx86Assembler>>decorateWith:while: > Receiver: an AJx86Assembler > Arguments and temporary variables: > annotation: 'FFI: performing a call' > aBlock: [aFunctionBodyBlock valueWithPossibleArgs: > {self. proxy. asm}. > (self o...etc... > Receiver's instance variables: > instructions: <<error during printing>> > > [:call | > self optNoAlignment > ifTrue: [call alignment: 1]. > self pushArguments. > coercionMayFail > ifTrue: [proxy ifFailedJumpTo: self failedLabel]. > asm > decorateWith: 'FFI: performing a call' > while: [aFunctionBodyBlock valueWithPossibleArgs: {self. > proxy. asm}. > (self optEmitCall > or: [self optNoCleanup]) > ifTrue: [call disableCleanup]]] in > NBFFICallout>>generateInstructions: > Receiver: a NBFFICallout > Arguments and temporary variables: > aFunctionBodyBlock: an AJCdeclCallInfo > call: [:gen | > fnAddress := requestor nbGetSymbolAddress: fnSpec functionName m...etc... > Receiver's instance variables: > asm: an AJx86Assembler > proxy: a NBInterpreterProxy > options: a Set(#optCdecl #optAllowByteArraysPtr > #optUseStackPointer > #optReturnP...etc... > method: (AthensCairoSurface > class>>#primImage:width:height: "a > CompiledMethod(4...etc... > fnSpec: a NBFnSpec > requestor: AthensCairoSurface class > methodArgs: an OrderedCollection('aFormat' 'aWidth' > 'aHeight') > coercionMayFail: true > callInfo: an AJCdeclCallInfo > > AJx86Assembler>>performingCall:in: > Receiver: an AJx86Assembler > Arguments and temporary variables: > ci: an AJCdeclCallInfo > aBlock: [:call | > self optNoAlignment > ifTrue: [call alignment: 1]. > self push...etc... > Receiver's instance variables: > instructions: <<error during printing>> > > NBFFICallout>>foreignCall: > Receiver: a NBFFICallout > Arguments and temporary variables: > aBlock: [:call | > self optNoAlignment > ifTrue: [call alignment: 1]. > self push...etc... > Receiver's instance variables: > asm: an AJx86Assembler > proxy: a NBInterpreterProxy > options: a Set(#optCdecl #optAllowByteArraysPtr > #optUseStackPointer > #optReturnP...etc... > method: (AthensCairoSurface > class>>#primImage:width:height: "a > CompiledMethod(4...etc... > fnSpec: a NBFnSpec > requestor: AthensCairoSurface class > methodArgs: an OrderedCollection('aFormat' 'aWidth' > 'aHeight') > coercionMayFail: true > callInfo: an AJCdeclCallInfo > > NBFFICallout>>generateInstructions: > Receiver: a NBFFICallout > Arguments and temporary variables: > aFunctionBodyBlock: [:gen | > fnAddress := requestor nbGetSymbolAddress: fnSpec ...etc... > instructions: nil > Receiver's instance variables: > asm: an AJx86Assembler > proxy: a NBInterpreterProxy > options: a Set(#optCdecl #optAllowByteArraysPtr > #optUseStackPointer > #optReturnP...etc... > method: (AthensCairoSurface > class>>#primImage:width:height: "a > CompiledMethod(4...etc... > fnSpec: a NBFnSpec > requestor: AthensCairoSurface class > methodArgs: an OrderedCollection('aFormat' 'aWidth' > 'aHeight') > coercionMayFail: true > callInfo: an AJCdeclCallInfo > > NBFFICallout>>generate: > Receiver: a NBFFICallout > Arguments and temporary variables: > aFunctionBodyBlock: [:gen | > fnAddress := requestor nbGetSymbolAddress: fnSpec ...etc... > generatedCode: nil > Receiver's instance variables: > asm: an AJx86Assembler > proxy: a NBInterpreterProxy > options: a Set(#optCdecl #optAllowByteArraysPtr > #optUseStackPointer > #optReturnP...etc... > method: (AthensCairoSurface > class>>#primImage:width:height: "a > CompiledMethod(4...etc... > fnSpec: a NBFnSpec > requestor: AthensCairoSurface class > methodArgs: an OrderedCollection('aFormat' 'aWidth' > 'aHeight') > coercionMayFail: true > callInfo: an AJCdeclCallInfo > > NBFFICallout>>generateCall:module: > Receiver: a NBFFICallout > Arguments and temporary variables: > functionSpec: #(#AthensCairoSurface > #cairo_image_surface_create > #(#int #aFormat...etc... > aModuleNameOrHandle: '/opt/local/lib/libcairo.2.dylib' > fnAddress: #(nil) > Receiver's instance variables: > asm: an AJx86Assembler > proxy: a NBInterpreterProxy > options: a Set(#optCdecl #optAllowByteArraysPtr > #optUseStackPointer > #optReturnP...etc... > method: (AthensCairoSurface > class>>#primImage:width:height: "a > CompiledMethod(4...etc... > fnSpec: a NBFnSpec > requestor: AthensCairoSurface class > methodArgs: an OrderedCollection('aFormat' 'aWidth' > 'aHeight') > coercionMayFail: true > callInfo: an AJCdeclCallInfo > > [:gen | gen sender: sender; > callType: self nbCallingConvention; > generateCall: fnSpec module: self nbLibraryNameOrHandle] in > AthensCairoSurface class(Object)>>nbCall: > Receiver: AthensCairoSurface > Arguments and temporary variables: > fnSpec: a NBFFICallout > sender: #(#AthensCairoSurface > #cairo_image_surface_create #(#int > #aFormat #, #i...etc... > gen: AthensCairoSurface class>>primImage:width:height: > Receiver's instance variables: > superclass: AthensSurface > methodDict: a > MethodDictionary(#asAthensPaintOn:->(AthensCairoSurface>>#asAthen...etc... > format: 140 > instanceVariables: #('handle' 'context' 'builder' 'id') > organization: ('converting' asAthensPaintOn: writeToPng:) > ('as yet unclassified...etc... > subclasses: {AthensCairoPDFSurface} > name: #AthensCairoSurface > classPool: nil > sharedPools: an OrderedCollection(AthensCairoDefs) > environment: a SystemDictionary(lots of globals) > category: #'Athens-Cairo' > traitComposition: TCairoLibrary > localSelectors: a Set(#asForm #createFormPaint: #stride > #setOperator: #writeToP...etc... > uniqueSession: nil > dispatch: nil > dispatchStruct: nil > > NBFFICallout class(NBNativeCodeGen class)>>generateCode:andRetry: > Receiver: NBFFICallout > Arguments and temporary variables: > aBlock: [:gen | gen sender: sender; > callType: self nbCallingConvention; > g...etc... > retryCtx: AthensCairoSurface > class>>primImage:width:height: > method: (AthensCairoSurface > class>>#primImage:width:height: "a > CompiledMethod(4...etc... > code: nil > newMethod: nil > args: nil > i: nil > iLimiT: nil > Receiver's instance variables: > superclass: NBNativeCodeGen > methodDict: a > MethodDictionary(#aliasForType:->(NBFFICallout>>#aliasForType: > "a...etc... > format: 148 > instanceVariables: #('fnSpec' 'requestor' 'methodArgs' > 'coercionMayFail' 'callI...etc... > organization: ('type aliases' aliasForType:) > ('accessing' anonSpec: callType: c...etc... > subclasses: {NBNativeFunctionGen} > name: #NBFFICallout > classPool: a Dictionary(#CustomErrorCodes->nil > #CustomErrorMessages->nil #TypeA...etc... > sharedPools: nil > environment: a SystemDictionary(lots of globals) > category: #'NativeBoost-Core' > traitComposition: {} > localSelectors: nil > > NBFFICallout class(NBNativeCodeGen class)>>handleFailureIn:nativeCode: > Receiver: NBFFICallout > Arguments and temporary variables: > aContext: AthensCairoSurface > class>>primImage:width:height: > aBlock: [:gen | gen sender: sender; > callType: self nbCallingConvention; > g...etc... > method: (AthensCairoSurface > class>>#primImage:width:height: "a > CompiledMethod(4...etc... > lastError: 502 > Receiver's instance variables: > superclass: NBNativeCodeGen > methodDict: a > MethodDictionary(#aliasForType:->(NBFFICallout>>#aliasForType: > "a...etc... > format: 148 > instanceVariables: #('fnSpec' 'requestor' 'methodArgs' > 'coercionMayFail' 'callI...etc... > organization: ('type aliases' aliasForType:) > ('accessing' anonSpec: callType: c...etc... > subclasses: {NBNativeFunctionGen} > name: #NBFFICallout > classPool: a Dictionary(#CustomErrorCodes->nil > #CustomErrorMessages->nil #TypeA...etc... > sharedPools: nil > environment: a SystemDictionary(lots of globals) > category: #'NativeBoost-Core' > traitComposition: {} > localSelectors: nil > > AthensCairoSurface class(Object)>>nbCall: > Receiver: AthensCairoSurface > Arguments and temporary variables: > fnSpec: #(#AthensCairoSurface > #cairo_image_surface_create #(#int > #aFormat #, #i...etc... > sender: AthensCairoSurface > class>>primImage:width:height: > Receiver's instance variables: > superclass: AthensSurface > methodDict: a > MethodDictionary(#asAthensPaintOn:->(AthensCairoSurface>>#asAthen...etc... > format: 140 > instanceVariables: #('handle' 'context' 'builder' 'id') > organization: ('converting' asAthensPaintOn: writeToPng:) > ('as yet unclassified...etc... > subclasses: {AthensCairoPDFSurface} > name: #AthensCairoSurface > classPool: nil > sharedPools: an OrderedCollection(AthensCairoDefs) > environment: a SystemDictionary(lots of globals) > category: #'Athens-Cairo' > traitComposition: TCairoLibrary > localSelectors: a Set(#asForm #createFormPaint: #stride > #setOperator: #writeToP...etc... > uniqueSession: nil > dispatch: nil > dispatchStruct: nil > > AthensCairoSurface class>>primImage:width:height: > Receiver: AthensCairoSurface > Arguments and temporary variables: > aFormat: 0 > aWidth: 800 > aHeight: 800 > Receiver's instance variables: > superclass: AthensSurface > methodDict: a > MethodDictionary(#asAthensPaintOn:->(AthensCairoSurface>>#asAthen...etc... > format: 140 > instanceVariables: #('handle' 'context' 'builder' 'id') > organization: ('converting' asAthensPaintOn: writeToPng:) > ('as yet unclassified...etc... > subclasses: {AthensCairoPDFSurface} > name: #AthensCairoSurface > classPool: nil > sharedPools: an OrderedCollection(AthensCairoDefs) > environment: a SystemDictionary(lots of globals) > category: #'Athens-Cairo' > traitComposition: TCairoLibrary > localSelectors: a Set(#asForm #createFormPaint: #stride > #setOperator: #writeToP...etc... > uniqueSession: nil > dispatch: nil > dispatchStruct: nil > > AthensCairoSurface class>>extent:format: > Receiver: AthensCairoSurface > Arguments and temporary variables: > anExtent: (800@800) > aFormat: 0 > Receiver's instance variables: > superclass: AthensSurface > methodDict: a > MethodDictionary(#asAthensPaintOn:->(AthensCairoSurface>>#asAthen...etc... > format: 140 > instanceVariables: #('handle' 'context' 'builder' 'id') > organization: ('converting' asAthensPaintOn: writeToPng:) > ('as yet unclassified...etc... > subclasses: {AthensCairoPDFSurface} > name: #AthensCairoSurface > classPool: nil > sharedPools: an OrderedCollection(AthensCairoDefs) > environment: a SystemDictionary(lots of globals) > category: #'Athens-Cairo' > traitComposition: TCairoLibrary > localSelectors: a Set(#asForm #createFormPaint: #stride > #setOperator: #writeToP...etc... > uniqueSession: nil > dispatch: nil > dispatchStruct: nil > > AthensCairoSurface class>>extent: > Receiver: AthensCairoSurface > Arguments and temporary variables: > anExtent: (800@800) > Receiver's instance variables: > superclass: AthensSurface > methodDict: a > MethodDictionary(#asAthensPaintOn:->(AthensCairoSurface>>#asAthen...etc... > format: 140 > instanceVariables: #('handle' 'context' 'builder' 'id') > organization: ('converting' asAthensPaintOn: writeToPng:) > ('as yet unclassified...etc... > subclasses: {AthensCairoPDFSurface} > name: #AthensCairoSurface > classPool: nil > sharedPools: an OrderedCollection(AthensCairoDefs) > environment: a SystemDictionary(lots of globals) > category: #'Athens-Cairo' > traitComposition: TCairoLibrary > localSelectors: a Set(#asForm #createFormPaint: #stride > #setOperator: #writeToP...etc... > uniqueSession: nil > dispatch: nil > dispatchStruct: nil > > VGTigerDemo>>initialize > Receiver: a VGTigerDemo > Arguments and temporary variables: > > Receiver's instance variables: > surface: nil > > VGTigerDemo class(Behavior)>>new > Receiver: VGTigerDemo > Arguments and temporary variables: > > Receiver's instance variables: > superclass: Object > methodDict: a > MethodDictionary(#convertPathData2->(VGTigerDemo>>#convertPathDat...etc... > format: 132 > instanceVariables: #('surface') > organization: ('as yet unclassified' convertPathData2 > initialize runDemo) > > subclasses: nil > name: #VGTigerDemo > classPool: nil > sharedPools: nil > environment: a SystemDictionary(lots of globals) > category: #'Athens-Examples' > traitComposition: {} > localSelectors: nil > > VGTigerDemo class>>runDemo > Receiver: VGTigerDemo > Arguments and temporary variables: > > Receiver's instance variables: > superclass: Object > methodDict: a > MethodDictionary(#convertPathData2->(VGTigerDemo>>#convertPathDat...etc... > format: 132 > instanceVariables: #('surface') > organization: ('as yet unclassified' convertPathData2 > initialize runDemo) > > subclasses: nil > name: #VGTigerDemo > classPool: nil > sharedPools: nil > environment: a SystemDictionary(lots of globals) > category: #'Athens-Examples' > traitComposition: {} > localSelectors: nil > > UndefinedObject>>DoIt > Receiver: nil > Arguments and temporary variables: > > Receiver's instance variables: > nil > > Compiler>>evaluate:in:to:notifying:ifFail:logged: > Receiver: a Compiler > Arguments and temporary variables: > textOrStream: a ReadWriteStream > aContext: nil > receiver: nil > aRequestor: a TextMorphForEditView(741605376) > failBlock: [self morph flash. > ^ nil] > logFlag: true > methodNode: DoIt > ^ VGTigerDemo runDemo > method: (UndefinedObject>>#DoIt "a > CompiledMethod(926679040)") > value: nil > toLog: nil > itsSelection: nil > itsSelectionString: nil > Receiver's instance variables: > sourceStream: a ReadWriteStream > requestor: a TextMorphForEditView(741605376) > class: UndefinedObject > category: nil > context: nil > parser: a Parser > > [rcvr class evaluatorClass new > evaluate: self selectionForDoitAsStream > in: ctxt > to: rcvr > notifying: self morph > ifFail: [self morph flash. > ^ nil] > logged: true] in SmalltalkEditor>>evaluateSelectionAndDo: > Receiver: a SmalltalkEditor > Arguments and temporary variables: > rcvr: nil > ctxt: nil > Receiver's instance variables: > morph: a TextMorphForEditView(741605376) > selectionShowing: true > model: a Workspace > editingState: a SmalltalkEditingState > > BlockClosure>>on:do: > Receiver: [rcvr class evaluatorClass new > evaluate: self selectionForDoitAsStream > in: ctxt > to: ...etc... > Arguments and temporary variables: > exception: OutOfScopeNotification > handlerAction: [:ex | ex resume: true] > handlerActive: true > Receiver's instance variables: > outerContext: SmalltalkEditor>>evaluateSelectionAndDo: > startpc: 110 > numArgs: 0 > > SmalltalkEditor>>evaluateSelectionAndDo: > Receiver: a SmalltalkEditor > Arguments and temporary variables: > aBlock: [:result | result] > result: nil > rcvr: nil > ctxt: nil > Receiver's instance variables: > morph: a TextMorphForEditView(741605376) > selectionShowing: true > model: a Workspace > editingState: a SmalltalkEditingState > > SmalltalkEditor>>evaluateSelection > Receiver: a SmalltalkEditor > Arguments and temporary variables: > > Receiver's instance variables: > morph: a TextMorphForEditView(741605376) > selectionShowing: true > model: a Workspace > editingState: a SmalltalkEditingState > > SmalltalkEditor>>doIt > Receiver: a SmalltalkEditor > Arguments and temporary variables: > > Receiver's instance variables: > morph: a TextMorphForEditView(741605376) > selectionShowing: true > model: a Workspace > editingState: a SmalltalkEditingState > > SmalltalkEditor>>doIt: > Receiver: a SmalltalkEditor > Arguments and temporary variables: > aKeyboardEvent: [keystroke '<Cmd-d>'] > Receiver's instance variables: > morph: a TextMorphForEditView(741605376) > selectionShowing: true > model: a Workspace > editingState: a SmalltalkEditingState > > SmalltalkEditor(TextEditor)>>performCmdActionsWith:shifted:return: > Receiver: a SmalltalkEditor > Arguments and temporary variables: > aKeyboardEvent: [keystroke '<Cmd-d>'] > aBoolean: false > return: [:val | ^ val] > asciiValue: 101 > actions: #(#noop: #cursorHome: #noop: #noop: > #cursorEnd: #noop: > #noop: #noop: #...etc... > action: #doIt: > Receiver's instance variables: > morph: a TextMorphForEditView(741605376) > selectionShowing: true > model: a Workspace > editingState: a SmalltalkEditingState > > SmalltalkEditor(TextEditor)>>dispatchCommandOn:return: > Receiver: a SmalltalkEditor > Arguments and temporary variables: > aKeyboardEvent: [keystroke '<Cmd-d>'] > return: [:val | ^ val] > asciiValue: 100 > honorCommandKeys: true > char: nil > Receiver's instance variables: > morph: a TextMorphForEditView(741605376) > selectionShowing: true > model: a Workspace > editingState: a SmalltalkEditingState > > SmalltalkEditor(TextEditor)>>dispatchOn: > Receiver: a SmalltalkEditor > Arguments and temporary variables: > aKeyboardEvent: [keystroke '<Cmd-d>'] > char: nil > return: [:val | ^ val] > keyEvents: nil > Receiver's instance variables: > morph: a TextMorphForEditView(741605376) > selectionShowing: true > model: a Workspace > editingState: a SmalltalkEditingState > > [self dispatchOn: aKeyboardEvent] in SmalltalkEditor(TextEditor)>>keystroke: > Receiver: a SmalltalkEditor > Arguments and temporary variables: > aKeyboardEvent: [keystroke '<Cmd-d>'] > Receiver's instance variables: > morph: a TextMorphForEditView(741605376) > selectionShowing: true > model: a Workspace > editingState: a SmalltalkEditingState > > SmalltalkEditor(TextEditor)>>handleKeystrokeAction: > Receiver: a SmalltalkEditor > Arguments and temporary variables: > aBlock: [self dispatchOn: aKeyboardEvent] > Receiver's instance variables: > morph: a TextMorphForEditView(741605376) > selectionShowing: true > model: a Workspace > editingState: a SmalltalkEditingState > > SmalltalkEditor(TextEditor)>>handleEditionAction:fromKeyboardEvent: > Receiver: a SmalltalkEditor > Arguments and temporary variables: > anAction: [self dispatchOn: aKeyboardEvent] > aKeyboardEvent: [keystroke '<Cmd-d>'] > Receiver's instance variables: > morph: a TextMorphForEditView(741605376) > selectionShowing: true > model: a Workspace > editingState: a SmalltalkEditingState > > SmalltalkEditor(TextEditor)>>keystroke: > Receiver: a SmalltalkEditor > Arguments and temporary variables: > aKeyboardEvent: [keystroke '<Cmd-d>'] > Receiver's instance variables: > morph: a TextMorphForEditView(741605376) > selectionShowing: true > model: a Workspace > editingState: a SmalltalkEditingState > > [editor keystroke: evt] in [| action | > evt keyValue = 13 > ifTrue: [action := self crAction. > action > ifNotNil: [evt hand newKeyboardFocus: nil. > ^ action value]]. > self > handleInteraction: [editor keystroke: evt]. > self updateFromParagraph. > super keyStroke: evt] in TextMorphForEditView(TextMorph)>>keyStroke: > Receiver: a TextMorphForEditView(741605376) > Arguments and temporary variables: > evt: [keystroke '<Cmd-d>'] > Receiver's instance variables: > bounds: (0@0) corner: (473@18) > owner: a TransformMorph(38535168) > submorphs: #() > fullBounds: (0@0) corner: (473@18) > color: Color black > extension: a MorphExtension (824180736) [other: > (blinkStart -> > 1085881) (myDep...etc... > borderWidth: 0 > borderColor: Color black > textStyle: a TextStyle Bitmap DejaVu Sans 9 > text: a Text for 'VGTigerDemo runDemo' > wrapFlag: true > paragraph: a Paragraph > editor: a SmalltalkEditor > container: nil > predecessor: nil > successor: nil > backgroundColor: nil > margins: (0@0) corner: (0@0) > editView: a PluggableTextMorph(838860800) > acceptOnCR: false > autoAccept: false > acceptOnFocusChange: false > selectionColor: nil > > TextMorphForEditView(TextMorph)>>handleInteraction: > Receiver: a TextMorphForEditView(741605376) > Arguments and temporary variables: > interactionBlock: [editor keystroke: evt] > oldEditor: a SmalltalkEditor > oldParagraph: a Paragraph > oldText: a Text for 'VGTigerDemo runDemo' > Receiver's instance variables: > bounds: (0@0) corner: (473@18) > owner: a TransformMorph(38535168) > submorphs: #() > fullBounds: (0@0) corner: (473@18) > color: Color black > extension: a MorphExtension (824180736) [other: > (blinkStart -> > 1085881) (myDep...etc... > borderWidth: 0 > borderColor: Color black > textStyle: a TextStyle Bitmap DejaVu Sans 9 > text: a Text for 'VGTigerDemo runDemo' > wrapFlag: true > paragraph: a Paragraph > editor: a SmalltalkEditor > container: nil > predecessor: nil > successor: nil > backgroundColor: nil > margins: (0@0) corner: (0@0) > editView: a PluggableTextMorph(838860800) > acceptOnCR: false > autoAccept: false > acceptOnFocusChange: false > selectionColor: nil > > > --- The full stack --- > NBFFICallout(Object)>>error: > [:gen | > fnAddress := requestor nbGetSymbolAddress: fnSpec functionName module: > aModuleNameOrHandle. > fnAddress > ifNil: [self error: 'function unavailable']. > self mayCallback > ifTrue: [asm push: fnAddress asUImm32; > mov: NativeBoost callgateFunctionAddress > asUImm32 to: EAX; > call: EAX] > ifFalse: [asm mov: fnAddress asUImm32 to: EAX; > call: EAX]] in > NBFFICallout>>generateCall:module: > BlockClosure>>valueWithPossibleArgs: > [aFunctionBodyBlock valueWithPossibleArgs: {self. proxy. asm}. > (self optEmitCall > or: [self optNoCleanup]) > ifTrue: [call disableCleanup]] in [:call | > self optNoAlignment > ifTrue: [call alignment: 1]. > self pushArguments. > coercionMayFail > ifTrue: [proxy ifFailedJumpTo: self failedLabel]. > asm > decorateWith: 'FFI: performing a call' > while: [aFunctionBodyBlock valueWithPossibleArgs: {self. > proxy. asm}. > (self optEmitCall > or: [self optNoCleanup]) > ifTrue: [call disableCleanup]]] in > NBFFICallout>>generateInstructions: > BlockClosure>>ensure: > AJx86Assembler>>decorateWith:while: > [:call | > self optNoAlignment > ifTrue: [call alignment: 1]. > self pushArguments. > coercionMayFail > ifTrue: [proxy ifFailedJumpTo: self failedLabel]. > asm > decorateWith: 'FFI: performing a call' > while: [aFunctionBodyBlock valueWithPossibleArgs: {self. > proxy. asm}. > (self optEmitCall > or: [self optNoCleanup]) > ifTrue: [call disableCleanup]]] in > NBFFICallout>>generateInstructions: > AJx86Assembler>>performingCall:in: > NBFFICallout>>foreignCall: > NBFFICallout>>generateInstructions: > NBFFICallout>>generate: > NBFFICallout>>generateCall:module: > [:gen | gen sender: sender; > callType: self nbCallingConvention; > generateCall: fnSpec module: self nbLibraryNameOrHandle] in > AthensCairoSurface class(Object)>>nbCall: > NBFFICallout class(NBNativeCodeGen class)>>generateCode:andRetry: > NBFFICallout class(NBNativeCodeGen class)>>handleFailureIn:nativeCode: > AthensCairoSurface class(Object)>>nbCall: > AthensCairoSurface class>>primImage:width:height: > AthensCairoSurface class>>extent:format: > AthensCairoSurface class>>extent: > VGTigerDemo>>initialize > VGTigerDemo class(Behavior)>>new > VGTigerDemo class>>runDemo > UndefinedObject>>DoIt > Compiler>>evaluate:in:to:notifying:ifFail:logged: > [rcvr class evaluatorClass new > evaluate: self selectionForDoitAsStream > in: ctxt > to: rcvr > notifying: self morph > ifFail: [self morph flash. > ^ nil] > logged: true] in SmalltalkEditor>>evaluateSelectionAndDo: > BlockClosure>>on:do: > SmalltalkEditor>>evaluateSelectionAndDo: > SmalltalkEditor>>evaluateSelection > SmalltalkEditor>>doIt > SmalltalkEditor>>doIt: > SmalltalkEditor(TextEditor)>>performCmdActionsWith:shifted:return: > SmalltalkEditor(TextEditor)>>dispatchCommandOn:return: > SmalltalkEditor(TextEditor)>>dispatchOn: > [self dispatchOn: aKeyboardEvent] in SmalltalkEditor(TextEditor)>>keystroke: > SmalltalkEditor(TextEditor)>>handleKeystrokeAction: > SmalltalkEditor(TextEditor)>>handleEditionAction:fromKeyboardEvent: > SmalltalkEditor(TextEditor)>>keystroke: > [editor keystroke: evt] in [| action | > evt keyValue = 13 > ifTrue: [action := self crAction. > action > ifNotNil: [evt hand newKeyboardFocus: nil. > ^ action value]]. > self > handleInteraction: [editor keystroke: evt]. > self updateFromParagraph. > super keyStroke: evt] in TextMorphForEditView(TextMorph)>>keyStroke: > TextMorphForEditView(TextMorph)>>handleInteraction: > - - - - - - - - - - - - - - - > - - - - - - - - - - - - - - - - - - > TextMorphForEditView>>handleInteraction: > [| action | > evt keyValue = 13 > ifTrue: [action := self crAction. > action > ifNotNil: [evt hand newKeyboardFocus: nil. > ^ action value]]. > self > handleInteraction: [editor keystroke: evt]. > self updateFromParagraph. > super keyStroke: evt] in TextMorphForEditView(TextMorph)>>keyStroke: > ECToolSet class>>codeCompletionAround:textMorph:keyStroke: > ToolRegistry>>codeCompletionAround:textMorph:keyStroke: > SmalltalkEditor>>codeCompletionAround:textMorph:keyStroke: > TextMorphForEditView(TextMorph)>>keyStroke: > TextMorphForEditView>>keyStroke: > TextMorphForEditView(TextMorph)>>handleKeystroke: > KeyboardEvent>>sentTo: > TextMorphForEditView(Morph)>>handleEvent: > TextMorphForEditView(Morph)>>handleFocusEvent: > [ActiveHand := self. > ActiveEvent := anEvent. > result := focusHolder > handleFocusEvent: (anEvent > transformedBy: (focusHolder > transformedFrom: self))] in > HandMorph>>sendFocusEvent:to:clear: > [aBlock value] in PasteUpMorph>>becomeActiveDuring: > BlockClosure>>on:do: > PasteUpMorph>>becomeActiveDuring: > HandMorph>>sendFocusEvent:to:clear: > HandMorph>>sendEvent:focus:clear: > HandMorph>>sendKeyboardEvent: > HandMorph>>handleEvent: > HandMorph>>processEvents > [:h | > ActiveHand := h. > h processEvents. > ActiveHand := nil] in WorldState>>doOneCycleNowFor: > Array(SequenceableCollection)>>do: > WorldState>>handsDo: > WorldState>>doOneCycleNowFor: > WorldState>>doOneCycleFor: > PasteUpMorph>>doOneCycle > [[World doOneCycle. > Processor yield. > false] whileFalse. > nil] in MorphicUIManager>>spawnNewProcess > [self value. > Processor terminateActive] in BlockClosure>>newProcess > > > > -- > Serge Stinckwich > UMI UMMISCO 209 (IRD/UPMC), Hanoi, Vietnam > Every DSL ends up being Smalltalk > http://doesnotunderstand.org/ >
