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
<serge.stinckwich(a)gmail.com> wrote:
On Fri, May 25, 2012 at 4:57 PM, Tudor Girba
<tudor(a)tudorgirba.com> 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 <estebanlm(a)gmail.com>
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/