Hi Clement and and Stef,

thanks for sharing. The video looks cool and it seems like a
high-performance approach. Unfortunately, it doesn't seem to be working in
Linux. I'm attaching the Pharo debug file, but it seems like the Handler
being OSNullWindowHandle indicates a problem. I'm also not sure that this
approach would allow me to do fullscreen apps. I noticed that your video
shows a title bar in MacOS.

Cheers,

Jeff





On Sun, Sep 24, 2017 at 7:53 AM Clément Bera <bera.clem...@gmail.com> wrote:

> Hi,
>
> I describe in the next paragraphs what I do to build application with
> Pharo at 50 fps. Now I am using a SDL2 window with OSWindow and not the
> default Pharo window for rendering. There is a fullscreen option with
> OSWindow, I don't use it but I've just tried it works fine.
>
> To use Athens/Cairo I start the VM headless and I open from the code a
> window using the SDL2 binding (OSWindow), then I extract the window surface
> as a cairo surface to draw on it using Athens and I use SDL2 to manage
> events (mouse, keyboard). That way I don't even start morphic/WorldMorph
> which wastes cpu ressources.
>
> I built this video game that way:
>
> https://clementbera.wordpress.com/2016/08/29/sdl2-cairo-headless-for-realtime-native-applications/
> https://www.youtube.com/watch?v=srPdFgbyS6s
>
> The game is running in Pharo 4 (pre-Spur). I configured it to run at 50
> fps but from time to time some frames are dropped for performance so I
> would say it is running at around 48-49 fps in practice. I think it should
> work on the latest Pharo but you need to ask on pharo-dev how to use
> OSWindow. Some APIs have changed since Pharo 4. Since the latest Pharo
> version is now using Spur I expect the performance to be way better and I
> think 50 fps is definitely manageable on a laptop.
>
> Note that this is still Pharo so if you want something which looks
> real-time you need to be careful about you object allocation rate
> in-between frame rendering.
>
> I hope this can help.
>
> Regards
>
>
>
> On Sun, Sep 24, 2017 at 9:43 AM, Stephane Ducasse <stepharo.s...@gmail.com
> > wrote:
>
>> Hi jeff
>>
>> let us know if this is working. the start.sh script is not working on
>> my machine. but clement made it worked on his machine and he should
>> publish a zip.
>>
>> Stef
>>
>>
>>
>> On Sun, Sep 24, 2017 at 9:39 AM, Stephane Ducasse
>> <stepharo.s...@gmail.com> wrote:
>> > Yes I will share a dropbox with you for now.
>> >
>> > On Sat, Sep 23, 2017 at 9:44 PM, J.F. Rick <s...@je77.com> wrote:
>> >> Hi Stef,
>> >>
>> >> since I'm only doing Athens rendering, it might be possible to do a
>> native
>> >> window implementation. That said, I don't know how to get started with
>> that.
>> >> Documentation seems to be hard to find. The last time I saw any work
>> on that
>> >> it was too early to be usable. I'm also not sure if it solves my "it
>> needs
>> >> to run in fullscreen at full speed" problem. If someone like Clement
>> could
>> >> get me started, that would be awesome.
>> >>
>> >> Cheers,
>> >>
>> >> Jeff
>> >>
>> >> On Fri, Sep 22, 2017 at 12:27 PM Stephane Ducasse <
>> stepharo.s...@gmail.com>
>> >> wrote:
>> >>>
>> >>> Hi Jeff
>> >>>
>> >>> Nice to see you. I do not know anybody running on X11. Esteban is
>> >>> working on better SDL20 integration.
>> >>> Did you try having a native window? I asked clement if he could
>> >>> release the Wizard Battle Arena because it was a game he did in a
>> >>> couple of days (yes he is good this guy) and that use cairo athens
>> >>> based for drawing on native window.
>> >>>
>> >>> stef
>> >>>
>> >>> On Fri, Sep 22, 2017 at 3:11 PM, J.F. Rick <s...@je77.com> wrote:
>> >>> > I'm running a fullscreen Pharo application on Ubuntu and I've
>> noticed
>> >>> > that
>> >>> > Athens rendering gets way worse (maybe 10 updates per second) when I
>> >>> > switch
>> >>> > to fullscreen mode from inside Pharo. Ideally, I'd love for that to
>> be
>> >>> > fixed.
>> >>> >
>> >>> > In lieu of that, it would be cool if I could just maximize Pharo to
>> the
>> >>> > size
>> >>> > of the screen to achieve good performance. Two things stop that: the
>> >>> > Unity
>> >>> > application bar and the title-bar. For the former, I can configure
>> Unity
>> >>> > to
>> >>> > hide it. I noticed a '-notitle' X11 option when I execute pharo
>> -help.
>> >>> > I've
>> >>> > tried using these X11 options and neither -notitle or -fullscreen
>> seem
>> >>> > to
>> >>> > have any effect. Here's the command I run:
>> >>> >
>> >>> > ./bin/pharo --encoding utf8 -vm-display-X11 -fullscreen
>> PATH_TO_IMAGE &
>> >>> >
>> >>> > Pharo starts fine but neither option seems to have any effect. I've
>> also
>> >>> > tried this in GNOME, thinking that Unity was the problem. Again, no
>> >>> > effect.
>> >>> >
>> >>> > Any suggestions?
>> >>> >
>> >>> > Jeff
>> >>> >
>> >>> >
>> >>>
>> >>
>>
>>
>
THERE_BE_DRAGONS_HERE
==== Startup Error: SubclassResponsibility: OSNullWindowHandle had the subclass responsibility to implement #title:
24 September 2017 8:08:59.17231 pm

VM: unix - i686 - linux-gnu - NBCoInterpreter NativeBoost-CogPlugin-EstebanLorenzano.21 uuid: 4d9b9bdf-2dfa-4c0b-99eb-5b110dadc697 Nov 12 2015
NBCogit NativeBoost-CogPlugin-EstebanLorenzano.21 uuid: 4d9b9bdf-2dfa-4c0b-99eb-5b110dadc697 Nov 12 2015
https://github.com/pharo-project/pharo-vm.git Commit: 28d077d8df494ce050ca42c97c892471e8b8740c Date: 2015-10-16 12:02:43 +0200 By: Esteban Lorenzano <esteba...@gmail.com> Jenkins build #15015

Image: Pharo5.0 [Latest update: #50155]

OSNullWindowHandle(Object)>>subclassResponsibility
	Receiver: an OSNullWindowHandle
	Arguments and temporary variables: 

	Receiver's instance variables: 
		osWindow: 	nil
		renderer: 	nil
		attributes: 	an OSWindowAttributes


OSNullWindowHandle(OSWindowHandle)>>title:
	Receiver: an OSNullWindowHandle
	Arguments and temporary variables: 
		aTitle: 	'Wizard Battle Arena'
	Receiver's instance variables: 
		osWindow: 	nil
		renderer: 	nil
		attributes: 	an OSWindowAttributes


OSWindow>>title:
	Receiver: an OSWindow
	Arguments and temporary variables: 
		aString: 	'Wizard Battle Arena'
	Receiver's instance variables: 
		handle: 	an OSNullWindowHandle
		initialAttributes: 	an OSWindowAttributes
		eventHandler: 	nil
		animated: 	false


WBAScreen>>openWindow
	Receiver: a WBAScreen
	Arguments and temporary variables: 

	Receiver's instance variables: 
		model: 	nil
		window: 	an OSWindow
		surface: 	nil
		scheduler: 	nil


WBAScreen>>initialize
	Receiver: a WBAScreen
	Arguments and temporary variables: 

	Receiver's instance variables: 
		model: 	nil
		window: 	an OSWindow
		surface: 	nil
		scheduler: 	nil


WBAScreen class(Behavior)>>new
	Receiver: WBAScreen
	Arguments and temporary variables: 

	Receiver's instance variables: 
		superclass: 	Object
		methodDict: 	a MethodDictionary(#createSurface->WBAScreen>>#createSurface #event...etc...
		format: 	138
		layout: 	a FixedLayout
		instanceVariables: 	#(#model #window #surface #scheduler)
		organization: 	a ClassOrganization
		subclasses: 	nil
		name: 	#WBAScreen
		classPool: 	a Dictionary()
		sharedPools: 	an OrderedCollection()
		environment: 	a SystemDictionary(lots of globals)
		category: 	#'Wizard-Battle-Arena-Game-Core'
		traitComposition: 	{}
		localSelectors: 	nil


WizardBattleArena class>>start
	Receiver: WizardBattleArena
	Arguments and temporary variables: 

	Receiver's instance variables: 
		superclass: 	Object
		methodDict: 	a MethodDictionary()
		format: 	2
		layout: 	a FixedLayout
		instanceVariables: 	#()
		organization: 	a ClassOrganization
		subclasses: 	nil
		name: 	#WizardBattleArena
		classPool: 	a Dictionary()
		sharedPools: 	an OrderedCollection()
		environment: 	a SystemDictionary(lots of globals)
		category: 	#'Wizard-Battle-Arena-Front-End'
		traitComposition: 	{}
		localSelectors: 	nil


UndefinedObject>>DoIt
	Receiver: nil
	Arguments and temporary variables: 

	Receiver's instance variables: 
nil

OpalCompiler>>evaluate
	Receiver: an OpalCompiler
	Arguments and temporary variables: 
		value: 	nil
		selectedSource: 	a ReadStream
		itsSelection: 	nil
		itsSelectionString: 	nil
	Receiver's instance variables: 
		ast: 	DoIt
	^ WizardBattleArena start
		source: 	a ReadStream
		context: 	nil
		receiver: 	nil
		compilationContext: 	a CompilationContext
		compilationContextClass: 	nil
		useFaultyForParsing: 	false


OpalCompiler(AbstractCompiler)>>evaluate:
	Receiver: an OpalCompiler
	Arguments and temporary variables: 
		textOrString: 	'WizardBattleArena start'
	Receiver's instance variables: 
		ast: 	DoIt
	^ WizardBattleArena start
		source: 	a ReadStream
		context: 	nil
		receiver: 	nil
		compilationContext: 	a CompilationContext
		compilationContextClass: 	nil
		useFaultyForParsing: 	false


SmalltalkImage>>evaluate:
	Receiver: Smalltalk
	Arguments and temporary variables: 
		aString: 	'WizardBattleArena start'
	Receiver's instance variables: 
		globals: 	a SystemDictionary(lots of globals)
		deferredStartupActions: 	an OrderedCollection()
		specialObjectsArray: 	an Array(nil false true #Processor->Processor Bitmap Small...etc...
		session: 	an Object
		vm: 	a VirtualMachine


[ 
result := Smalltalk evaluate: aStream.
self hasSessionChanged
	ifFalse: [ 
		self stdout
			print: result;
			lf ] ] in EvaluateCommandLineHandler>>evaluate:
	Receiver: an EvaluateCommandLineHandler
	Arguments and temporary variables: 
		aStream: 	'WizardBattleArena start'
		exceptionClassToUse: 	OCSemanticWarning
		result: 	nil
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver
		sourceFiles: 	nil


BlockClosure>>on:do:
	Receiver: [ 
result := Smalltalk evaluate: aStream.
self hasSessionChanged
	ifFalse: [ 
		self stdou...etc...
	Arguments and temporary variables: 
		exception: 	an ExceptionSet
		handlerAction: 	[ :error | self handleError: error ]
	Receiver's instance variables: 
		outerContext: 	EvaluateCommandLineHandler>>evaluate:
		startpc: 	106
		numArgs: 	0


EvaluateCommandLineHandler>>evaluate:
	Receiver: an EvaluateCommandLineHandler
	Arguments and temporary variables: 
		result: 	nil
		aStream: 	'WizardBattleArena start'
		exceptionClassToUse: 	OCSemanticWarning
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver
		sourceFiles: 	nil


EvaluateCommandLineHandler>>evaluateArguments
	Receiver: an EvaluateCommandLineHandler
	Arguments and temporary variables: 
		argumentString: 	'WizardBattleArena start'
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver
		sourceFiles: 	nil


EvaluateCommandLineHandler>>activate
	Receiver: an EvaluateCommandLineHandler
	Arguments and temporary variables: 

	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver
		sourceFiles: 	nil


EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:
	Receiver: EvaluateCommandLineHandler
	Arguments and temporary variables: 
		aCommandLine: 	a CommandLineArguments
	Receiver's instance variables: 
		superclass: 	STCommandLineHandler
		methodDict: 	a MethodDictionary(#activate->EvaluateCommandLineHandler>>#activate...etc...
		format: 	140
		layout: 	a FixedLayout
		instanceVariables: 	#()
		organization: 	a ClassOrganization
		subclasses: 	nil
		name: 	#EvaluateCommandLineHandler
		classPool: 	a Dictionary()
		sharedPools: 	an OrderedCollection()
		environment: 	a SystemDictionary(lots of globals)
		category: 	#'CodeImport-CommandLineHandlers'
		traitComposition: 	{}
		localSelectors: 	nil


[ aCommandLinehandler activateWith: commandLine ] in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
	Receiver: a PharoCommandLineHandler
	Arguments and temporary variables: 
		aCommandLinehandler: 	EvaluateCommandLineHandler
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


BlockClosure>>on:do:
	Receiver: [ aCommandLinehandler activateWith: commandLine ]
	Arguments and temporary variables: 
		exception: 	Exit
		handlerAction: 	[ :exit | ^ self handleExit: exit for: aCommandLinehandler ]
	Receiver's instance variables: 
		outerContext: 	PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubComm...etc...
		startpc: 	34
		numArgs: 	0


PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
	Receiver: a PharoCommandLineHandler
	Arguments and temporary variables: 
		aCommandLinehandler: 	EvaluateCommandLineHandler
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
	Receiver: a PharoCommandLineHandler
	Arguments and temporary variables: 
		handlers: 	an OrderedCollection(EvaluateCommandLineHandler)
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:
	Receiver: a PharoCommandLineHandler
	Arguments and temporary variables: 
		aString: 	'eval'
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


[ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | arguments first ]) ] in PharoCommandLineHandler(BasicCommandLineHandler)>>activate
	Receiver: a PharoCommandLineHandler
	Arguments and temporary variables: 

	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


BlockClosure>>on:do:
	Receiver: [ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | argument...etc...
	Arguments and temporary variables: 
		exception: 	Exit
		handlerAction: 	[ :exit | ^ self handleExit: exit ]
	Receiver's instance variables: 
		outerContext: 	PharoCommandLineHandler(BasicCommandLineHandler)>>activate
		startpc: 	49
		numArgs: 	0


PharoCommandLineHandler(BasicCommandLineHandler)>>activate
	Receiver: a PharoCommandLineHandler
	Arguments and temporary variables: 

	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


PharoCommandLineHandler>>activate
	Receiver: a PharoCommandLineHandler
	Arguments and temporary variables: 

	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:
	Receiver: PharoCommandLineHandler
	Arguments and temporary variables: 
		aCommandLine: 	a CommandLineArguments
	Receiver's instance variables: 
		superclass: 	BasicCommandLineHandler
		methodDict: 	a MethodDictionary(#activate->PharoCommandLineHandler>>#activate #c...etc...
		format: 	138
		layout: 	a FixedLayout
		instanceVariables: 	nil
		organization: 	a ClassOrganization
		subclasses: 	nil
		name: 	#PharoCommandLineHandler
		classPool: 	a Dictionary()
		sharedPools: 	an OrderedCollection()
		environment: 	a SystemDictionary(lots of globals)
		category: 	#'System-CommandLineHandler'
		traitComposition: 	{}
		localSelectors: 	nil


[ super activateWith: aCommandLine ] in PharoCommandLineHandler class>>activateWith:
	Receiver: PharoCommandLineHandler
	Arguments and temporary variables: 
		aCommandLine: 	a CommandLineArguments
	Receiver's instance variables: 
		superclass: 	BasicCommandLineHandler
		methodDict: 	a MethodDictionary(#activate->PharoCommandLineHandler>>#activate #c...etc...
		format: 	138
		layout: 	a FixedLayout
		instanceVariables: 	nil
		organization: 	a ClassOrganization
		subclasses: 	nil
		name: 	#PharoCommandLineHandler
		classPool: 	a Dictionary()
		sharedPools: 	an OrderedCollection()
		environment: 	a SystemDictionary(lots of globals)
		category: 	#'System-CommandLineHandler'
		traitComposition: 	{}
		localSelectors: 	nil


NonInteractiveUIManager(UIManager)>>defer:
	Receiver: a NonInteractiveUIManager
	Arguments and temporary variables: 
		aBlock: 	[ super activateWith: aCommandLine ]
	Receiver's instance variables: 
		doNotQuitOnRestart: 	false
		uiManager: 	a MorphicUIManager


PharoCommandLineHandler class>>activateWith:
	Receiver: PharoCommandLineHandler
	Arguments and temporary variables: 
		aCommandLine: 	a CommandLineArguments
	Receiver's instance variables: 
		superclass: 	BasicCommandLineHandler
		methodDict: 	a MethodDictionary(#activate->PharoCommandLineHandler>>#activate #c...etc...
		format: 	138
		layout: 	a FixedLayout
		instanceVariables: 	nil
		organization: 	a ClassOrganization
		subclasses: 	nil
		name: 	#PharoCommandLineHandler
		classPool: 	a Dictionary()
		sharedPools: 	an OrderedCollection()
		environment: 	a SystemDictionary(lots of globals)
		category: 	#'System-CommandLineHandler'
		traitComposition: 	{}
		localSelectors: 	nil


[ aCommandLinehandler activateWith: commandLine ] in BasicCommandLineHandler>>activateSubCommand:
	Receiver: a BasicCommandLineHandler
	Arguments and temporary variables: 
		aCommandLinehandler: 	PharoCommandLineHandler
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


BlockClosure>>on:do:
	Receiver: [ aCommandLinehandler activateWith: commandLine ]
	Arguments and temporary variables: 
		exception: 	Exit
		handlerAction: 	[ :exit | ^ self handleExit: exit for: aCommandLinehandler ]
	Receiver's instance variables: 
		outerContext: 	BasicCommandLineHandler>>activateSubCommand:
		startpc: 	34
		numArgs: 	0


BasicCommandLineHandler>>activateSubCommand:
	Receiver: a BasicCommandLineHandler
	Arguments and temporary variables: 
		aCommandLinehandler: 	PharoCommandLineHandler
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


BasicCommandLineHandler>>handleSubcommand
	Receiver: a BasicCommandLineHandler
	Arguments and temporary variables: 
		handlers: 	an OrderedCollection(PharoCommandLineHandler EvaluateCommandLineHandl...etc...
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


BasicCommandLineHandler>>handleArgument:
	Receiver: a BasicCommandLineHandler
	Arguments and temporary variables: 
		aString: 	'eval'
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


[ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | arguments first ]) ] in BasicCommandLineHandler>>activate
	Receiver: a BasicCommandLineHandler
	Arguments and temporary variables: 

	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


BlockClosure>>on:do:
	Receiver: [ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | argument...etc...
	Arguments and temporary variables: 
		exception: 	Exit
		handlerAction: 	[ :exit | ^ self handleExit: exit ]
	Receiver's instance variables: 
		outerContext: 	BasicCommandLineHandler>>activate
		startpc: 	49
		numArgs: 	0


BasicCommandLineHandler>>activate
	Receiver: a BasicCommandLineHandler
	Arguments and temporary variables: 

	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


[ self new activate ] in BasicCommandLineHandler class>>startUp:
	Receiver: BasicCommandLineHandler
	Arguments and temporary variables: 
		resuming: 	true
	Receiver's instance variables: 
		superclass: 	CommandLineHandler
		methodDict: 	a MethodDictionary(#activate->BasicCommandLineHandler>>#activate #a...etc...
		format: 	138
		layout: 	a FixedLayout
		instanceVariables: 	nil
		organization: 	a ClassOrganization
		subclasses: 	{PharoCommandLineHandler}
		name: 	#BasicCommandLineHandler
		classPool: 	a Dictionary()
		sharedPools: 	an OrderedCollection()
		environment: 	a SystemDictionary(lots of globals)
		category: 	#'System-CommandLineHandler'
		traitComposition: 	{}
		localSelectors: 	nil



--- The full stack ---
OSNullWindowHandle(Object)>>subclassResponsibility
OSNullWindowHandle(OSWindowHandle)>>title:
OSWindow>>title:
WBAScreen>>openWindow
WBAScreen>>initialize
WBAScreen class(Behavior)>>new
WizardBattleArena class>>start
UndefinedObject>>DoIt
OpalCompiler>>evaluate
OpalCompiler(AbstractCompiler)>>evaluate:
SmalltalkImage>>evaluate:
[ 
result := Smalltalk evaluate: aStream.
self hasSessionChanged
	ifFalse: [ 
		self stdout
			print: result;
			lf ] ] in EvaluateCommandLineHandler>>evaluate:
BlockClosure>>on:do:
EvaluateCommandLineHandler>>evaluate:
EvaluateCommandLineHandler>>evaluateArguments
EvaluateCommandLineHandler>>activate
EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:
[ aCommandLinehandler activateWith: commandLine ] in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:
[ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | arguments first ]) ] in PharoCommandLineHandler(BasicCommandLineHandler)>>activate
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activate
PharoCommandLineHandler>>activate
PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:
[ super activateWith: aCommandLine ] in PharoCommandLineHandler class>>activateWith:
NonInteractiveUIManager(UIManager)>>defer:
PharoCommandLineHandler class>>activateWith:
[ aCommandLinehandler activateWith: commandLine ] in BasicCommandLineHandler>>activateSubCommand:
BlockClosure>>on:do:
BasicCommandLineHandler>>activateSubCommand:
BasicCommandLineHandler>>handleSubcommand
BasicCommandLineHandler>>handleArgument:
[ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | arguments first ]) ] in BasicCommandLineHandler>>activate
BlockClosure>>on:do:
BasicCommandLineHandler>>activate
[ self new activate ] in BasicCommandLineHandler class>>startUp:
 - - - - - - - - - - - - - - -  
			- - - - - - - - - - - - - - - - - -
BlockClosure>>cull:
[ action cull: resuming ] in SmalltalkImage>>executeDeferredStartupActions:
BlockClosure>>on:do:
SmalltalkImage>>logStartUpErrorDuring:into:tryDebugger:
SmalltalkImage>>executeDeferredStartupActions:
SmalltalkImage>>startupImage:snapshotWorked:
SmalltalkImage>>snapshot:andQuit:
[ Smalltalk snapshot: true andQuit: true ] in WorldState class>>saveAndQuit
BlockClosure>>ensure:
CursorWithMask(Cursor)>>showWhile:
WorldState class>>saveAndQuit
[ 
| selArgCount |
"show cursor in case item opens a new MVC window"
(selArgCount := selector numArgs) = 0
	ifTrue: [ target perform: selector ]
	ifFalse: [ 
		selArgCount = arguments size
			ifTrue: [ target perform: selector withArguments: arguments ]
			ifFalse: [ target perform: selector withArguments: (arguments copyWith: evt) ] ].
self changed ] in ToggleMenuItemMorph(MenuItemMorph)>>invokeWithEvent:
BlockClosure>>ensure:
CursorWithMask(Cursor)>>showWhile:
ToggleMenuItemMorph(MenuItemMorph)>>invokeWithEvent:
ToggleMenuItemMorph(MenuItemMorph)>>mouseUp:
ToggleMenuItemMorph(MenuItemMorph)>>handleMouseUp:
MouseButtonEvent>>sentTo:
ToggleMenuItemMorph(Morph)>>handleEvent:
MorphicEventDispatcher>>dispatchDefault:with:
MorphicEventDispatcher>>handleMouseUp:
MouseButtonEvent>>sentTo:
[ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with:
BlockClosure>>ensure:
MorphicEventDispatcher>>dispatchEvent:with:
ToggleMenuItemMorph(Morph)>>processEvent:using:
MorphicEventDispatcher>>dispatchDefault:with:
MorphicEventDispatcher>>handleMouseUp:
MouseButtonEvent>>sentTo:
[ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with:
BlockClosure>>ensure:
MorphicEventDispatcher>>dispatchEvent:with:
MenuMorph(Morph)>>processEvent:using:
MenuMorph(Morph)>>processEvent:
MenuMorph>>handleFocusEvent:
[ 
ActiveHand := self.
ActiveEvent := anEvent.
result := focusHolder handleFocusEvent: (anEvent transformedBy: (focusHolder transformedFrom: self)) ] in HandMorph>>sendFocusEvent:to:clear:
BlockClosure>>on:do:
WorldMorph(PasteUpMorph)>>becomeActiveDuring:
HandMorph>>sendFocusEvent:to:clear:
HandMorph>>sendEvent:focus:clear:
HandMorph>>sendMouseEvent:
HandMorph>>handleEvent:
HandMorph>>processEvents
[ :h | 
ActiveHand := h.
h processEvents.
ActiveHand := nil ] in WorldState>>doOneCycleNowFor:
Array(SequenceableCollection)>>do:
WorldState>>handsDo:
WorldState>>doOneCycleNowFor:
WorldState>>doOneCycleFor:
WorldMorph>>doOneCycle
[ 
[ 
World doOneCycle.
Processor yield.
false ] whileFalse: [  ] ] in MorphicUIManager>>spawnNewProcess
[ 
self value.
Processor terminateActive ] in BlockClosure>>newProcess
-------------------------------------------------------------------------------

THERE_BE_DRAGONS_HERE
Got startup errors: 
-------------------------------------------------------------------------------

THERE_BE_DRAGONS_HERE
    SubclassResponsibility: OSNullWindowHandle had the subclass responsibility to implement #title:
-------------------------------------------------------------------------------

THERE_BE_DRAGONS_HERE
SubclassResponsibility: OSNullWindowHandle had the subclass responsibility to implement #title:
24 September 2017 8:09:51.909082 pm

VM: unix - i686 - linux-gnu - NBCoInterpreter NativeBoost-CogPlugin-EstebanLorenzano.21 uuid: 4d9b9bdf-2dfa-4c0b-99eb-5b110dadc697 Nov 12 2015
NBCogit NativeBoost-CogPlugin-EstebanLorenzano.21 uuid: 4d9b9bdf-2dfa-4c0b-99eb-5b110dadc697 Nov 12 2015
https://github.com/pharo-project/pharo-vm.git Commit: 28d077d8df494ce050ca42c97c892471e8b8740c Date: 2015-10-16 12:02:43 +0200 By: Esteban Lorenzano <esteba...@gmail.com> Jenkins build #15015

Image: Pharo5.0 [Latest update: #50155]

OSNullWindowHandle(Object)>>subclassResponsibility
	Receiver: an OSNullWindowHandle
	Arguments and temporary variables: 

	Receiver's instance variables: 
		osWindow: 	nil
		renderer: 	nil
		attributes: 	an OSWindowAttributes


OSNullWindowHandle(OSWindowHandle)>>title:
	Receiver: an OSNullWindowHandle
	Arguments and temporary variables: 
		aTitle: 	'Wizard Battle Arena'
	Receiver's instance variables: 
		osWindow: 	nil
		renderer: 	nil
		attributes: 	an OSWindowAttributes


OSWindow>>title:
	Receiver: an OSWindow
	Arguments and temporary variables: 
		aString: 	'Wizard Battle Arena'
	Receiver's instance variables: 
		handle: 	an OSNullWindowHandle
		initialAttributes: 	an OSWindowAttributes
		eventHandler: 	nil
		animated: 	false


WBAScreen>>openWindow
	Receiver: a WBAScreen
	Arguments and temporary variables: 

	Receiver's instance variables: 
		model: 	nil
		window: 	an OSWindow
		surface: 	nil
		scheduler: 	nil


WBAScreen>>initialize
	Receiver: a WBAScreen
	Arguments and temporary variables: 

	Receiver's instance variables: 
		model: 	nil
		window: 	an OSWindow
		surface: 	nil
		scheduler: 	nil


WBAScreen class(Behavior)>>new
	Receiver: WBAScreen
	Arguments and temporary variables: 

	Receiver's instance variables: 
		superclass: 	Object
		methodDict: 	a MethodDictionary(#createSurface->WBAScreen>>#createSurface #event...etc...
		format: 	138
		layout: 	a FixedLayout
		instanceVariables: 	#(#model #window #surface #scheduler)
		organization: 	a ClassOrganization
		subclasses: 	nil
		name: 	#WBAScreen
		classPool: 	a Dictionary()
		sharedPools: 	an OrderedCollection()
		environment: 	a SystemDictionary(lots of globals)
		category: 	#'Wizard-Battle-Arena-Game-Core'
		traitComposition: 	{}
		localSelectors: 	nil


WizardBattleArena class>>start
	Receiver: WizardBattleArena
	Arguments and temporary variables: 

	Receiver's instance variables: 
		superclass: 	Object
		methodDict: 	a MethodDictionary()
		format: 	2
		layout: 	a FixedLayout
		instanceVariables: 	#()
		organization: 	a ClassOrganization
		subclasses: 	nil
		name: 	#WizardBattleArena
		classPool: 	a Dictionary()
		sharedPools: 	an OrderedCollection()
		environment: 	a SystemDictionary(lots of globals)
		category: 	#'Wizard-Battle-Arena-Front-End'
		traitComposition: 	{}
		localSelectors: 	nil


UndefinedObject>>DoIt
	Receiver: nil
	Arguments and temporary variables: 

	Receiver's instance variables: 
nil

OpalCompiler>>evaluate
	Receiver: an OpalCompiler
	Arguments and temporary variables: 
		value: 	nil
		selectedSource: 	a ReadStream
		itsSelection: 	a Text for ''
		itsSelectionString: 	''
	Receiver's instance variables: 
		ast: 	DoIt
	^ WizardBattleArena start
		source: 	a ReadStream
		context: 	nil
		receiver: 	nil
		compilationContext: 	a CompilationContext
		compilationContextClass: 	nil
		useFaultyForParsing: 	false


RubSmalltalkEditor>>evaluate:andDo:
	Receiver: a RubSmalltalkEditor
	Arguments and temporary variables: 
		t1: 	a ReadStream
		t2: 	[ :result | aBlock value: result ]
		t3: 	nil
		t4: 	nil
		t5: 	nil
	Receiver's instance variables: 
		defaultKeymappingIndex: 	an IdentityDictionary(#command->#(#noop: #cursorHome: #...etc...
		textArea: 	a RubEditingArea(1015283712)
		selectorChooser: 	nil
		notificationStrategy: 	a GLMPopperNotificationStrategy


RubSmalltalkEditor>>highlightEvaluateAndDo:
	Receiver: a RubSmalltalkEditor
	Arguments and temporary variables: 
		aBlock: 	[ :result |  ]
	Receiver's instance variables: 
		defaultKeymappingIndex: 	an IdentityDictionary(#command->#(#noop: #cursorHome: #...etc...
		textArea: 	a RubEditingArea(1015283712)
		selectorChooser: 	nil
		notificationStrategy: 	a GLMPopperNotificationStrategy


[ 
textMorph textArea editor highlightEvaluateAndDo: ann action.
textMorph shoutStyler style: textMorph text ] in [ 
textMorph textArea
	handleEdit: [ 
		textMorph textArea editor highlightEvaluateAndDo: ann action.
		textMorph shoutStyler style: textMorph text ] ] in GLMMorphicPharoPlaygroundRenderer(GLMMorphicPharoCodeRenderer)>>actOnHighlightAndEvaluate:
	Receiver: a GLMMorphicPharoPlaygroundRenderer
	Arguments and temporary variables: 
		ann: 	a GLMHighlightAndEvaluate
	Receiver's instance variables: 
		renderer: 	a GLMMorphicRenderer
		textMorph: 	a RubScrolledTextMorph(343146496)
		textModel: 	a GLMRubricSmalltalkTextModel


RubEditingArea(RubAbstractTextArea)>>handleEdit:
	Receiver: a RubEditingArea(1015283712)
	Arguments and temporary variables: 
		editBlock: 	[ 
textMorph textArea editor highlightEvaluateAndDo: ann action.
tex...etc...
	Receiver's instance variables: 
		bounds: 	(0@0) corner: (580@50)
		owner: 	a TransformWithLayoutMorph(435159040)
		submorphs: 	an Array(a RubPrimarySelectionMorph(255590400) a RubCursor(414449664...etc...
		fullBounds: 	(0@0) corner: (580@50)
		color: 	Color transparent
		extension: 	a MorphExtension (440139776) [other:  (announcer -> an Announcer) (k...etc...
		model: 	a GLMRubricSmalltalkTextModel
		paragraph: 	a RubShoutStylerDecorator
		editor: 	a RubSmalltalkEditor
		scrollPane: 	a RubTextScrollPane(414711808)
		editingState: 	a RubEditingState
		textStyle: 	a TextStyle Source Code Pro
		textColor: 	Color black
		margins: 	(6@6) corner: (6@6)
		readOnly: 	false
		menuAllowed: 	true
		editingMode: 	a RubSmalltalkScriptingMode
		cursor: 	a RubCursor(414449664)
		segments: 	an OrderedCollection(a RubHighlightSegmentMorph(967049216))
		getMenuPolicy: 	a RubEditingArea(1015283712)
		wrapped: 	true
		editorClass: 	RubSmalltalkEditor


[ 
textMorph textArea
	handleEdit: [ 
		textMorph textArea editor highlightEvaluateAndDo: ann action.
		textMorph shoutStyler style: textMorph text ] ] in GLMMorphicPharoPlaygroundRenderer(GLMMorphicPharoCodeRenderer)>>actOnHighlightAndEvaluate:
	Receiver: a GLMMorphicPharoPlaygroundRenderer
	Arguments and temporary variables: 
		ann: 	a GLMHighlightAndEvaluate
	Receiver's instance variables: 
		renderer: 	a GLMMorphicRenderer
		textMorph: 	a RubScrolledTextMorph(343146496)
		textModel: 	a GLMRubricSmalltalkTextModel


WorldState>>runStepMethodsIn:
	Receiver: a WorldState
	Arguments and temporary variables: 
		aWorld: 	a WorldMorph(511705088) [world]
		queue: 	WaitfreeQueue with 0 items
		nextInQueue: 	[ 
textMorph textArea
	handleEdit: [ 
		textMorph textArea editor ...etc...
	Receiver's instance variables: 
		hands: 	an Array(a HandMorph(760479744))
		viewBox: 	(0@0) corner: (936@662)
		canvas: 	a FormCanvas on: DisplayScreen(936x662x32)
		damageRecorder: 	a DamageRecorder
		stepList: 	a Heap()
		lastStepTime: 	20448
		lastStepMessage: 	nil
		lastCycleTime: 	8402
		alarms: 	a Heap(MorphicAlarm(#hideShow -> a RubCursor(414449664)))
		lastAlarmTime: 	8402
		menuBuilder: 	a PragmaMenuBuilder ( nil ) 


WorldMorph>>runStepMethods
	Receiver: a WorldMorph(511705088) [world]
	Arguments and temporary variables: 

	Receiver's instance variables: 
		bounds: 	(0@0) corner: (936@662)
		owner: 	nil
		submorphs: 	an Array(a TaskbarMorph(984088576) a GLMSystemWindow(458752000) an I...etc...
		fullBounds: 	(0@0) corner: (936@662)
		color: 	(Color r: 0.937 g: 0.937 b: 0.937 alpha: 1.0)
		extension: 	a MorphExtension (552861696) [other:  (dragEnabled -> true) (dropEna...etc...
		borderWidth: 	0
		borderColor: 	(Color r: 0.063 g: 0.063 b: 0.063 alpha: 1.0)
		backgroundMorph: 	nil
		worldState: 	a WorldState
		griddingOn: 	nil
		osWindow: 	nil
		session: 	nil


WorldState>>doOneCycleNowFor:
	Receiver: a WorldState
	Arguments and temporary variables: 
		aWorld: 	a WorldMorph(511705088) [world]
	Receiver's instance variables: 
		hands: 	an Array(a HandMorph(760479744))
		viewBox: 	(0@0) corner: (936@662)
		canvas: 	a FormCanvas on: DisplayScreen(936x662x32)
		damageRecorder: 	a DamageRecorder
		stepList: 	a Heap()
		lastStepTime: 	20448
		lastStepMessage: 	nil
		lastCycleTime: 	8402
		alarms: 	a Heap(MorphicAlarm(#hideShow -> a RubCursor(414449664)))
		lastAlarmTime: 	8402
		menuBuilder: 	a PragmaMenuBuilder ( nil ) 


WorldState>>doOneCycleFor:
	Receiver: a WorldState
	Arguments and temporary variables: 
		aWorld: 	a WorldMorph(511705088) [world]
	Receiver's instance variables: 
		hands: 	an Array(a HandMorph(760479744))
		viewBox: 	(0@0) corner: (936@662)
		canvas: 	a FormCanvas on: DisplayScreen(936x662x32)
		damageRecorder: 	a DamageRecorder
		stepList: 	a Heap()
		lastStepTime: 	20448
		lastStepMessage: 	nil
		lastCycleTime: 	8402
		alarms: 	a Heap(MorphicAlarm(#hideShow -> a RubCursor(414449664)))
		lastAlarmTime: 	8402
		menuBuilder: 	a PragmaMenuBuilder ( nil ) 


WorldMorph>>doOneCycle
	Receiver: a WorldMorph(511705088) [world]
	Arguments and temporary variables: 

	Receiver's instance variables: 
		bounds: 	(0@0) corner: (936@662)
		owner: 	nil
		submorphs: 	an Array(a TaskbarMorph(984088576) a GLMSystemWindow(458752000) an I...etc...
		fullBounds: 	(0@0) corner: (936@662)
		color: 	(Color r: 0.937 g: 0.937 b: 0.937 alpha: 1.0)
		extension: 	a MorphExtension (552861696) [other:  (dragEnabled -> true) (dropEna...etc...
		borderWidth: 	0
		borderColor: 	(Color r: 0.063 g: 0.063 b: 0.063 alpha: 1.0)
		backgroundMorph: 	nil
		worldState: 	a WorldState
		griddingOn: 	nil
		osWindow: 	nil
		session: 	nil


[ 
[ 
World doOneCycle.
Processor yield.
false ] whileFalse: [  ] ] in MorphicUIManager>>spawnNewProcess
	Receiver: a MorphicUIManager
	Arguments and temporary variables: 

	Receiver's instance variables: 
		interactiveParser: 	nil
		activeTranscript: 	Transcript


[ 
self value.
Processor terminateActive ] in BlockClosure>>newProcess
	Receiver: [ 
[ 
World doOneCycle.
Processor yield.
false ] whileFalse: [  ] ]
	Arguments and temporary variables: 

	Receiver's instance variables: 
		outerContext: 	MorphicUIManager>>spawnNewProcess
		startpc: 	65
		numArgs: 	0



--- The full stack ---
OSNullWindowHandle(Object)>>subclassResponsibility
OSNullWindowHandle(OSWindowHandle)>>title:
OSWindow>>title:
WBAScreen>>openWindow
WBAScreen>>initialize
WBAScreen class(Behavior)>>new
WizardBattleArena class>>start
UndefinedObject>>DoIt
OpalCompiler>>evaluate
RubSmalltalkEditor>>evaluate:andDo:
RubSmalltalkEditor>>highlightEvaluateAndDo:
[ 
textMorph textArea editor highlightEvaluateAndDo: ann action.
textMorph shoutStyler style: textMorph text ] in [ 
textMorph textArea
	handleEdit: [ 
		textMorph textArea editor highlightEvaluateAndDo: ann action.
		textMorph shoutStyler style: textMorph text ] ] in GLMMorphicPharoPlaygroundRenderer(GLMMorphicPharoCodeRenderer)>>actOnHighlightAndEvaluate:
RubEditingArea(RubAbstractTextArea)>>handleEdit:
[ 
textMorph textArea
	handleEdit: [ 
		textMorph textArea editor highlightEvaluateAndDo: ann action.
		textMorph shoutStyler style: textMorph text ] ] in GLMMorphicPharoPlaygroundRenderer(GLMMorphicPharoCodeRenderer)>>actOnHighlightAndEvaluate:
WorldState>>runStepMethodsIn:
WorldMorph>>runStepMethods
WorldState>>doOneCycleNowFor:
WorldState>>doOneCycleFor:
WorldMorph>>doOneCycle
[ 
[ 
World doOneCycle.
Processor yield.
false ] whileFalse: [  ] ] in MorphicUIManager>>spawnNewProcess
[ 
self value.
Processor terminateActive ] in BlockClosure>>newProcess
-------------------------------------------------------------------------------

THERE_BE_DRAGONS_HERE
MessageNotUnderstood: OSNullWindowHandle>>handle
24 September 2017 8:13:02.996223 pm

VM: unix - i686 - linux-gnu - NBCoInterpreter NativeBoost-CogPlugin-EstebanLorenzano.21 uuid: 4d9b9bdf-2dfa-4c0b-99eb-5b110dadc697 Nov 12 2015
NBCogit NativeBoost-CogPlugin-EstebanLorenzano.21 uuid: 4d9b9bdf-2dfa-4c0b-99eb-5b110dadc697 Nov 12 2015
https://github.com/pharo-project/pharo-vm.git Commit: 28d077d8df494ce050ca42c97c892471e8b8740c Date: 2015-10-16 12:02:43 +0200 By: Esteban Lorenzano <esteba...@gmail.com> Jenkins build #15015

Image: Pharo5.0 [Latest update: #50155]

OSNullWindowHandle(Object)>>doesNotUnderstand: #handle
	Receiver: an OSNullWindowHandle
	Arguments and temporary variables: 
		aMessage: 	handle
		exception: 	MessageNotUnderstood: OSNullWindowHandle>>handle
		resumeValue: 	nil
	Receiver's instance variables: 
		osWindow: 	nil
		renderer: 	nil
		attributes: 	an OSWindowAttributes


WBAScreen>>createSurface
	Receiver: a WBAScreen
	Arguments and temporary variables: 

	Receiver's instance variables: 
		model: 	nil
		window: 	an OSWindow
		surface: 	nil
		scheduler: 	a WBARenderingScheduler


WBAScreen>>extent:
	Receiver: a WBAScreen
	Arguments and temporary variables: 
		extent: 	(760@480)
	Receiver's instance variables: 
		model: 	nil
		window: 	an OSWindow
		surface: 	nil
		scheduler: 	a WBARenderingScheduler


WBANumberPlayerSelectScreenModel(WBAMenuScreenModel)>>display
	Receiver: a WBANumberPlayerSelectScreenModel
	Arguments and temporary variables: 

	Receiver's instance variables: 
		screen: 	a WBAScreen
		startingGame: 	a WBAGame
		currentChoice: 	1
		arrowWidget: 	nil
		titleWidget: 	nil
		playersWidget: 	nil


WizardBattleArena class>>start
	Receiver: WizardBattleArena
	Arguments and temporary variables: 

	Receiver's instance variables: 
		superclass: 	Object
		methodDict: 	a MethodDictionary()
		format: 	2
		layout: 	a FixedLayout
		instanceVariables: 	#()
		organization: 	a ClassOrganization
		subclasses: 	nil
		name: 	#WizardBattleArena
		classPool: 	a Dictionary()
		sharedPools: 	an OrderedCollection()
		environment: 	a SystemDictionary(lots of globals)
		category: 	#'Wizard-Battle-Arena-Front-End'
		traitComposition: 	{}
		localSelectors: 	nil


UndefinedObject>>DoIt
	Receiver: nil
	Arguments and temporary variables: 

	Receiver's instance variables: 
nil

OpalCompiler>>evaluate
	Receiver: an OpalCompiler
	Arguments and temporary variables: 
		value: 	nil
		selectedSource: 	a ReadStream
		itsSelection: 	a Text for ''
		itsSelectionString: 	''
	Receiver's instance variables: 
		ast: 	DoIt
	^ WizardBattleArena start
		source: 	a ReadStream
		context: 	nil
		receiver: 	nil
		compilationContext: 	a CompilationContext
		compilationContextClass: 	nil
		useFaultyForParsing: 	false


RubSmalltalkEditor>>evaluate:andDo:
	Receiver: a RubSmalltalkEditor
	Arguments and temporary variables: 
		t1: 	a ReadStream
		t2: 	[ :result | aBlock value: result ]
		t3: 	nil
		t4: 	nil
		t5: 	nil
	Receiver's instance variables: 
		defaultKeymappingIndex: 	an IdentityDictionary(#command->#(#noop: #cursorHome: #...etc...
		textArea: 	a RubEditingArea(1015283712)
		selectorChooser: 	nil
		notificationStrategy: 	a GLMPopperNotificationStrategy


RubSmalltalkEditor>>highlightEvaluateAndDo:
	Receiver: a RubSmalltalkEditor
	Arguments and temporary variables: 
		aBlock: 	[ :result |  ]
	Receiver's instance variables: 
		defaultKeymappingIndex: 	an IdentityDictionary(#command->#(#noop: #cursorHome: #...etc...
		textArea: 	a RubEditingArea(1015283712)
		selectorChooser: 	nil
		notificationStrategy: 	a GLMPopperNotificationStrategy


[ 
textMorph textArea editor highlightEvaluateAndDo: ann action.
textMorph shoutStyler style: textMorph text ] in [ 
textMorph textArea
	handleEdit: [ 
		textMorph textArea editor highlightEvaluateAndDo: ann action.
		textMorph shoutStyler style: textMorph text ] ] in GLMMorphicPharoPlaygroundRenderer(GLMMorphicPharoCodeRenderer)>>actOnHighlightAndEvaluate:
	Receiver: a GLMMorphicPharoPlaygroundRenderer
	Arguments and temporary variables: 
		ann: 	a GLMHighlightAndEvaluate
	Receiver's instance variables: 
		renderer: 	a GLMMorphicRenderer
		textMorph: 	a RubScrolledTextMorph(343146496)
		textModel: 	a GLMRubricSmalltalkTextModel


RubEditingArea(RubAbstractTextArea)>>handleEdit:
	Receiver: a RubEditingArea(1015283712)
	Arguments and temporary variables: 
		editBlock: 	[ 
textMorph textArea editor highlightEvaluateAndDo: ann action.
tex...etc...
	Receiver's instance variables: 
		bounds: 	(0@0) corner: (580@50)
		owner: 	a TransformWithLayoutMorph(435159040)
		submorphs: 	an Array(a RubPrimarySelectionMorph(255590400) a RubCursor(414449664...etc...
		fullBounds: 	nil
		color: 	Color transparent
		extension: 	a MorphExtension (440139776) [other:  (announcer -> an Announcer) (k...etc...
		model: 	a GLMRubricSmalltalkTextModel
		paragraph: 	a RubShoutStylerDecorator
		editor: 	a RubSmalltalkEditor
		scrollPane: 	a RubTextScrollPane(414711808)
		editingState: 	a RubEditingState
		textStyle: 	a TextStyle Source Code Pro
		textColor: 	Color black
		margins: 	(6@6) corner: (6@6)
		readOnly: 	false
		menuAllowed: 	true
		editingMode: 	a RubSmalltalkScriptingMode
		cursor: 	a RubCursor(414449664)
		segments: 	an OrderedCollection(a RubHighlightSegmentMorph(918290432))
		getMenuPolicy: 	a RubEditingArea(1015283712)
		wrapped: 	true
		editorClass: 	RubSmalltalkEditor


[ 
textMorph textArea
	handleEdit: [ 
		textMorph textArea editor highlightEvaluateAndDo: ann action.
		textMorph shoutStyler style: textMorph text ] ] in GLMMorphicPharoPlaygroundRenderer(GLMMorphicPharoCodeRenderer)>>actOnHighlightAndEvaluate:
	Receiver: a GLMMorphicPharoPlaygroundRenderer
	Arguments and temporary variables: 
		ann: 	a GLMHighlightAndEvaluate
	Receiver's instance variables: 
		renderer: 	a GLMMorphicRenderer
		textMorph: 	a RubScrolledTextMorph(343146496)
		textModel: 	a GLMRubricSmalltalkTextModel


WorldState>>runStepMethodsIn:
	Receiver: a WorldState
	Arguments and temporary variables: 
		aWorld: 	a WorldMorph(511705088) [world]
		queue: 	WaitfreeQueue with 0 items
		nextInQueue: 	[ 
textMorph textArea
	handleEdit: [ 
		textMorph textArea editor ...etc...
	Receiver's instance variables: 
		hands: 	an Array(a HandMorph(760479744))
		viewBox: 	(0@0) corner: (936@662)
		canvas: 	a FormCanvas on: DisplayScreen(936x662x32)
		damageRecorder: 	a DamageRecorder
		stepList: 	a Heap()
		lastStepTime: 	193628
		lastStepMessage: 	nil
		lastCycleTime: 	199454
		alarms: 	a Heap(MorphicAlarm(#hideShow -> a RubCursor(414449664)))
		lastAlarmTime: 	199432
		menuBuilder: 	a PragmaMenuBuilder ( nil ) 


WorldMorph>>runStepMethods
	Receiver: a WorldMorph(511705088) [world]
	Arguments and temporary variables: 

	Receiver's instance variables: 
		bounds: 	(0@0) corner: (936@662)
		owner: 	nil
		submorphs: 	an Array(a TaskbarMorph(984088576) a GLMSystemWindow(458752000) an I...etc...
		fullBounds: 	(0@0) corner: (936@662)
		color: 	(Color r: 0.937 g: 0.937 b: 0.937 alpha: 1.0)
		extension: 	a MorphExtension (552861696) [other:  (dragEnabled -> true) (dropEna...etc...
		borderWidth: 	0
		borderColor: 	(Color r: 0.063 g: 0.063 b: 0.063 alpha: 1.0)
		backgroundMorph: 	nil
		worldState: 	a WorldState
		griddingOn: 	nil
		osWindow: 	nil
		session: 	nil


WorldState>>doOneCycleNowFor:
	Receiver: a WorldState
	Arguments and temporary variables: 
		aWorld: 	a WorldMorph(511705088) [world]
	Receiver's instance variables: 
		hands: 	an Array(a HandMorph(760479744))
		viewBox: 	(0@0) corner: (936@662)
		canvas: 	a FormCanvas on: DisplayScreen(936x662x32)
		damageRecorder: 	a DamageRecorder
		stepList: 	a Heap()
		lastStepTime: 	193628
		lastStepMessage: 	nil
		lastCycleTime: 	199454
		alarms: 	a Heap(MorphicAlarm(#hideShow -> a RubCursor(414449664)))
		lastAlarmTime: 	199432
		menuBuilder: 	a PragmaMenuBuilder ( nil ) 


WorldState>>doOneCycleFor:
	Receiver: a WorldState
	Arguments and temporary variables: 
		aWorld: 	a WorldMorph(511705088) [world]
	Receiver's instance variables: 
		hands: 	an Array(a HandMorph(760479744))
		viewBox: 	(0@0) corner: (936@662)
		canvas: 	a FormCanvas on: DisplayScreen(936x662x32)
		damageRecorder: 	a DamageRecorder
		stepList: 	a Heap()
		lastStepTime: 	193628
		lastStepMessage: 	nil
		lastCycleTime: 	199454
		alarms: 	a Heap(MorphicAlarm(#hideShow -> a RubCursor(414449664)))
		lastAlarmTime: 	199432
		menuBuilder: 	a PragmaMenuBuilder ( nil ) 


WorldMorph>>doOneCycle
	Receiver: a WorldMorph(511705088) [world]
	Arguments and temporary variables: 

	Receiver's instance variables: 
		bounds: 	(0@0) corner: (936@662)
		owner: 	nil
		submorphs: 	an Array(a TaskbarMorph(984088576) a GLMSystemWindow(458752000) an I...etc...
		fullBounds: 	(0@0) corner: (936@662)
		color: 	(Color r: 0.937 g: 0.937 b: 0.937 alpha: 1.0)
		extension: 	a MorphExtension (552861696) [other:  (dragEnabled -> true) (dropEna...etc...
		borderWidth: 	0
		borderColor: 	(Color r: 0.063 g: 0.063 b: 0.063 alpha: 1.0)
		backgroundMorph: 	nil
		worldState: 	a WorldState
		griddingOn: 	nil
		osWindow: 	nil
		session: 	nil


[ 
[ 
World doOneCycle.
Processor yield.
false ] whileFalse: [  ] ] in MorphicUIManager>>spawnNewProcess
	Receiver: a MorphicUIManager
	Arguments and temporary variables: 

	Receiver's instance variables: 
		interactiveParser: 	nil
		activeTranscript: 	Transcript


[ 
self value.
Processor terminateActive ] in BlockClosure>>newProcess
	Receiver: [ 
[ 
World doOneCycle.
Processor yield.
false ] whileFalse: [  ] ]
	Arguments and temporary variables: 

	Receiver's instance variables: 
		outerContext: 	MorphicUIManager>>spawnNewProcess
		startpc: 	65
		numArgs: 	0



--- The full stack ---
OSNullWindowHandle(Object)>>doesNotUnderstand: #handle
WBAScreen>>createSurface
WBAScreen>>extent:
WBANumberPlayerSelectScreenModel(WBAMenuScreenModel)>>display
WizardBattleArena class>>start
UndefinedObject>>DoIt
OpalCompiler>>evaluate
RubSmalltalkEditor>>evaluate:andDo:
RubSmalltalkEditor>>highlightEvaluateAndDo:
[ 
textMorph textArea editor highlightEvaluateAndDo: ann action.
textMorph shoutStyler style: textMorph text ] in [ 
textMorph textArea
	handleEdit: [ 
		textMorph textArea editor highlightEvaluateAndDo: ann action.
		textMorph shoutStyler style: textMorph text ] ] in GLMMorphicPharoPlaygroundRenderer(GLMMorphicPharoCodeRenderer)>>actOnHighlightAndEvaluate:
RubEditingArea(RubAbstractTextArea)>>handleEdit:
[ 
textMorph textArea
	handleEdit: [ 
		textMorph textArea editor highlightEvaluateAndDo: ann action.
		textMorph shoutStyler style: textMorph text ] ] in GLMMorphicPharoPlaygroundRenderer(GLMMorphicPharoCodeRenderer)>>actOnHighlightAndEvaluate:
WorldState>>runStepMethodsIn:
WorldMorph>>runStepMethods
WorldState>>doOneCycleNowFor:
WorldState>>doOneCycleFor:
WorldMorph>>doOneCycle
[ 
[ 
World doOneCycle.
Processor yield.
false ] whileFalse: [  ] ] in MorphicUIManager>>spawnNewProcess
[ 
self value.
Processor terminateActive ] in BlockClosure>>newProcess
-------------------------------------------------------------------------------

THERE_BE_DRAGONS_HERE
MessageNotUnderstood: receiver of "drawDuring:" is nil
24 September 2017 8:13:03.099865 pm

VM: unix - i686 - linux-gnu - NBCoInterpreter NativeBoost-CogPlugin-EstebanLorenzano.21 uuid: 4d9b9bdf-2dfa-4c0b-99eb-5b110dadc697 Nov 12 2015
NBCogit NativeBoost-CogPlugin-EstebanLorenzano.21 uuid: 4d9b9bdf-2dfa-4c0b-99eb-5b110dadc697 Nov 12 2015
https://github.com/pharo-project/pharo-vm.git Commit: 28d077d8df494ce050ca42c97c892471e8b8740c Date: 2015-10-16 12:02:43 +0200 By: Esteban Lorenzano <esteba...@gmail.com> Jenkins build #15015

Image: Pharo5.0 [Latest update: #50155]

UndefinedObject(Object)>>doesNotUnderstand: #drawDuring:
	Receiver: nil
	Arguments and temporary variables: 
		aMessage: 	drawDuring: [ :canvas | model renderOn: canvas ]
		exception: 	MessageNotUnderstood: receiver of "drawDuring:" is nil
		resumeValue: 	nil
	Receiver's instance variables: 
nil

WBAScreen>>render
	Receiver: a WBAScreen
	Arguments and temporary variables: 

	Receiver's instance variables: 
		model: 	nil
		window: 	an OSWindow
		surface: 	nil
		scheduler: 	a WBARenderingScheduler


[ screen render ] in WBARenderingScheduler>>initialize
	Receiver: a WBARenderingScheduler
	Arguments and temporary variables: 

	Receiver's instance variables: 
		process: 	a Process in nil
		screen: 	a WBAScreen


[ 
| time delay |
time := DateAndTime now.
aBlock value.
delay := duration - (DateAndTime now - time).
delay negative
	ifFalse: [ delay wait ]
	ifTrue: [ 
		"slowing process"
		 ] ] in [ 
[ 
| time delay |
time := DateAndTime now.
aBlock value.
delay := duration - (DateAndTime now - time).
delay negative
	ifFalse: [ delay wait ]
	ifTrue: [ 
		"slowing process"
		 ] ] repeat ] in WBARenderingScheduler(WBAAbstractScheduler)>>newProcessAt:do:every:
	Receiver: a WBARenderingScheduler
	Arguments and temporary variables: 
		priority: 	30
		aBlock: 	[ screen render ]
		duration: 	0:00:00:00.02
		time: 	2017-09-24T20:13:03.089621-04:00
		delay: 	nil
	Receiver's instance variables: 
		process: 	a Process in nil
		screen: 	a WBAScreen


BlockClosure>>repeat
	Receiver: [ 
| time delay |
time := DateAndTime now.
aBlock value.
delay := duration - (DateAndTime ...etc...
	Arguments and temporary variables: 

	Receiver's instance variables: 
		outerContext: 	[ 
[ 
| time delay |
time := DateAndTime now.
aBlock value.
delay...etc...
		startpc: 	53
		numArgs: 	0


[ 
[ 
| time delay |
time := DateAndTime now.
aBlock value.
delay := duration - (DateAndTime now - time).
delay negative
	ifFalse: [ delay wait ]
	ifTrue: [ 
		"slowing process"
		 ] ] repeat ] in WBARenderingScheduler(WBAAbstractScheduler)>>newProcessAt:do:every:
	Receiver: a WBARenderingScheduler
	Arguments and temporary variables: 
		priority: 	30
		aBlock: 	[ screen render ]
		duration: 	0:00:00:00.02
	Receiver's instance variables: 
		process: 	a Process in nil
		screen: 	a WBAScreen


[ 
self value.
Processor terminateActive ] in BlockClosure>>newProcess
	Receiver: [ 
[ 
| time delay |
time := DateAndTime now.
aBlock value.
delay := duration - (DateAndTi...etc...
	Arguments and temporary variables: 

	Receiver's instance variables: 
		outerContext: 	WBARenderingScheduler(WBAAbstractScheduler)>>newProcessAt:do:ever...etc...
		startpc: 	47
		numArgs: 	0



--- The full stack ---
UndefinedObject(Object)>>doesNotUnderstand: #drawDuring:
WBAScreen>>render
[ screen render ] in WBARenderingScheduler>>initialize
[ 
| time delay |
time := DateAndTime now.
aBlock value.
delay := duration - (DateAndTime now - time).
delay negative
	ifFalse: [ delay wait ]
	ifTrue: [ 
		"slowing process"
		 ] ] in [ 
[ 
| time delay |
time := DateAndTime now.
aBlock value.
delay := duration - (DateAndTime now - time).
delay negative
	ifFalse: [ delay wait ]
	ifTrue: [ 
		"slowing process"
		 ] ] repeat ] in WBARenderingScheduler(WBAAbstractScheduler)>>newProcessAt:do:every:
BlockClosure>>repeat
[ 
[ 
| time delay |
time := DateAndTime now.
aBlock value.
delay := duration - (DateAndTime now - time).
delay negative
	ifFalse: [ delay wait ]
	ifTrue: [ 
		"slowing process"
		 ] ] repeat ] in WBARenderingScheduler(WBAAbstractScheduler)>>newProcessAt:do:every:
[ 
self value.
Processor terminateActive ] in BlockClosure>>newProcess
-------------------------------------------------------------------------------

THERE_BE_DRAGONS_HERE
==== Startup Error: SubclassResponsibility: OSNullWindowHandle had the subclass responsibility to implement #title:
24 September 2017 8:30:01.620563 pm

VM: unix - i686 - linux-gnu - NBCoInterpreter NativeBoost-CogPlugin-EstebanLorenzano.21 uuid: 4d9b9bdf-2dfa-4c0b-99eb-5b110dadc697 Nov 12 2015
NBCogit NativeBoost-CogPlugin-EstebanLorenzano.21 uuid: 4d9b9bdf-2dfa-4c0b-99eb-5b110dadc697 Nov 12 2015
https://github.com/pharo-project/pharo-vm.git Commit: 28d077d8df494ce050ca42c97c892471e8b8740c Date: 2015-10-16 12:02:43 +0200 By: Esteban Lorenzano <esteba...@gmail.com> Jenkins build #15015

Image: Pharo5.0 [Latest update: #50155]

OSNullWindowHandle(Object)>>subclassResponsibility
	Receiver: an OSNullWindowHandle
	Arguments and temporary variables: 

	Receiver's instance variables: 
		osWindow: 	nil
		renderer: 	nil
		attributes: 	an OSWindowAttributes


OSNullWindowHandle(OSWindowHandle)>>title:
	Receiver: an OSNullWindowHandle
	Arguments and temporary variables: 
		aTitle: 	'Wizard Battle Arena'
	Receiver's instance variables: 
		osWindow: 	nil
		renderer: 	nil
		attributes: 	an OSWindowAttributes


OSWindow>>title:
	Receiver: an OSWindow
	Arguments and temporary variables: 
		aString: 	'Wizard Battle Arena'
	Receiver's instance variables: 
		handle: 	an OSNullWindowHandle
		initialAttributes: 	an OSWindowAttributes
		eventHandler: 	nil
		animated: 	false


WBAScreen>>openWindow
	Receiver: a WBAScreen
	Arguments and temporary variables: 

	Receiver's instance variables: 
		model: 	nil
		window: 	an OSWindow
		surface: 	nil
		scheduler: 	nil


WBAScreen>>initialize
	Receiver: a WBAScreen
	Arguments and temporary variables: 

	Receiver's instance variables: 
		model: 	nil
		window: 	an OSWindow
		surface: 	nil
		scheduler: 	nil


WBAScreen class(Behavior)>>new
	Receiver: WBAScreen
	Arguments and temporary variables: 

	Receiver's instance variables: 
		superclass: 	Object
		methodDict: 	a MethodDictionary(#createSurface->WBAScreen>>#createSurface #event...etc...
		format: 	138
		layout: 	a FixedLayout
		instanceVariables: 	#(#model #window #surface #scheduler)
		organization: 	a ClassOrganization
		subclasses: 	nil
		name: 	#WBAScreen
		classPool: 	a Dictionary()
		sharedPools: 	an OrderedCollection()
		environment: 	a SystemDictionary(lots of globals)
		category: 	#'Wizard-Battle-Arena-Game-Core'
		traitComposition: 	{}
		localSelectors: 	nil


WizardBattleArena class>>start
	Receiver: WizardBattleArena
	Arguments and temporary variables: 

	Receiver's instance variables: 
		superclass: 	Object
		methodDict: 	a MethodDictionary()
		format: 	2
		layout: 	a FixedLayout
		instanceVariables: 	#()
		organization: 	a ClassOrganization
		subclasses: 	nil
		name: 	#WizardBattleArena
		classPool: 	a Dictionary()
		sharedPools: 	an OrderedCollection()
		environment: 	a SystemDictionary(lots of globals)
		category: 	#'Wizard-Battle-Arena-Front-End'
		traitComposition: 	{}
		localSelectors: 	nil


UndefinedObject>>DoIt
	Receiver: nil
	Arguments and temporary variables: 

	Receiver's instance variables: 
nil

OpalCompiler>>evaluate
	Receiver: an OpalCompiler
	Arguments and temporary variables: 
		value: 	nil
		selectedSource: 	a ReadStream
		itsSelection: 	nil
		itsSelectionString: 	nil
	Receiver's instance variables: 
		ast: 	DoIt
	^ WizardBattleArena start
		source: 	a ReadStream
		context: 	nil
		receiver: 	nil
		compilationContext: 	a CompilationContext
		compilationContextClass: 	nil
		useFaultyForParsing: 	false


OpalCompiler(AbstractCompiler)>>evaluate:
	Receiver: an OpalCompiler
	Arguments and temporary variables: 
		textOrString: 	'WizardBattleArena start'
	Receiver's instance variables: 
		ast: 	DoIt
	^ WizardBattleArena start
		source: 	a ReadStream
		context: 	nil
		receiver: 	nil
		compilationContext: 	a CompilationContext
		compilationContextClass: 	nil
		useFaultyForParsing: 	false


SmalltalkImage>>evaluate:
	Receiver: Smalltalk
	Arguments and temporary variables: 
		aString: 	'WizardBattleArena start'
	Receiver's instance variables: 
		globals: 	a SystemDictionary(lots of globals)
		deferredStartupActions: 	an OrderedCollection()
		specialObjectsArray: 	an Array(nil false true #Processor->Processor Bitmap Small...etc...
		session: 	an Object
		vm: 	a VirtualMachine


[ 
result := Smalltalk evaluate: aStream.
self hasSessionChanged
	ifFalse: [ 
		self stdout
			print: result;
			lf ] ] in EvaluateCommandLineHandler>>evaluate:
	Receiver: an EvaluateCommandLineHandler
	Arguments and temporary variables: 
		aStream: 	'WizardBattleArena start'
		exceptionClassToUse: 	OCSemanticWarning
		result: 	nil
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver
		sourceFiles: 	nil


BlockClosure>>on:do:
	Receiver: [ 
result := Smalltalk evaluate: aStream.
self hasSessionChanged
	ifFalse: [ 
		self stdou...etc...
	Arguments and temporary variables: 
		exception: 	an ExceptionSet
		handlerAction: 	[ :error | self handleError: error ]
	Receiver's instance variables: 
		outerContext: 	EvaluateCommandLineHandler>>evaluate:
		startpc: 	106
		numArgs: 	0


EvaluateCommandLineHandler>>evaluate:
	Receiver: an EvaluateCommandLineHandler
	Arguments and temporary variables: 
		result: 	nil
		aStream: 	'WizardBattleArena start'
		exceptionClassToUse: 	OCSemanticWarning
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver
		sourceFiles: 	nil


EvaluateCommandLineHandler>>evaluateArguments
	Receiver: an EvaluateCommandLineHandler
	Arguments and temporary variables: 
		argumentString: 	'WizardBattleArena start'
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver
		sourceFiles: 	nil


EvaluateCommandLineHandler>>activate
	Receiver: an EvaluateCommandLineHandler
	Arguments and temporary variables: 

	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver
		sourceFiles: 	nil


EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:
	Receiver: EvaluateCommandLineHandler
	Arguments and temporary variables: 
		aCommandLine: 	a CommandLineArguments
	Receiver's instance variables: 
		superclass: 	STCommandLineHandler
		methodDict: 	a MethodDictionary(#activate->EvaluateCommandLineHandler>>#activate...etc...
		format: 	140
		layout: 	a FixedLayout
		instanceVariables: 	#()
		organization: 	a ClassOrganization
		subclasses: 	nil
		name: 	#EvaluateCommandLineHandler
		classPool: 	a Dictionary()
		sharedPools: 	an OrderedCollection()
		environment: 	a SystemDictionary(lots of globals)
		category: 	#'CodeImport-CommandLineHandlers'
		traitComposition: 	{}
		localSelectors: 	nil


[ aCommandLinehandler activateWith: commandLine ] in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
	Receiver: a PharoCommandLineHandler
	Arguments and temporary variables: 
		aCommandLinehandler: 	EvaluateCommandLineHandler
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


BlockClosure>>on:do:
	Receiver: [ aCommandLinehandler activateWith: commandLine ]
	Arguments and temporary variables: 
		exception: 	Exit
		handlerAction: 	[ :exit | ^ self handleExit: exit for: aCommandLinehandler ]
	Receiver's instance variables: 
		outerContext: 	PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubComm...etc...
		startpc: 	34
		numArgs: 	0


PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
	Receiver: a PharoCommandLineHandler
	Arguments and temporary variables: 
		aCommandLinehandler: 	EvaluateCommandLineHandler
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
	Receiver: a PharoCommandLineHandler
	Arguments and temporary variables: 
		handlers: 	an OrderedCollection(EvaluateCommandLineHandler)
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:
	Receiver: a PharoCommandLineHandler
	Arguments and temporary variables: 
		aString: 	'eval'
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


[ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | arguments first ]) ] in PharoCommandLineHandler(BasicCommandLineHandler)>>activate
	Receiver: a PharoCommandLineHandler
	Arguments and temporary variables: 

	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


BlockClosure>>on:do:
	Receiver: [ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | argument...etc...
	Arguments and temporary variables: 
		exception: 	Exit
		handlerAction: 	[ :exit | ^ self handleExit: exit ]
	Receiver's instance variables: 
		outerContext: 	PharoCommandLineHandler(BasicCommandLineHandler)>>activate
		startpc: 	49
		numArgs: 	0


PharoCommandLineHandler(BasicCommandLineHandler)>>activate
	Receiver: a PharoCommandLineHandler
	Arguments and temporary variables: 

	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


PharoCommandLineHandler>>activate
	Receiver: a PharoCommandLineHandler
	Arguments and temporary variables: 

	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:
	Receiver: PharoCommandLineHandler
	Arguments and temporary variables: 
		aCommandLine: 	a CommandLineArguments
	Receiver's instance variables: 
		superclass: 	BasicCommandLineHandler
		methodDict: 	a MethodDictionary(#activate->PharoCommandLineHandler>>#activate #c...etc...
		format: 	138
		layout: 	a FixedLayout
		instanceVariables: 	nil
		organization: 	a ClassOrganization
		subclasses: 	nil
		name: 	#PharoCommandLineHandler
		classPool: 	a Dictionary()
		sharedPools: 	an OrderedCollection()
		environment: 	a SystemDictionary(lots of globals)
		category: 	#'System-CommandLineHandler'
		traitComposition: 	{}
		localSelectors: 	nil


[ super activateWith: aCommandLine ] in PharoCommandLineHandler class>>activateWith:
	Receiver: PharoCommandLineHandler
	Arguments and temporary variables: 
		aCommandLine: 	a CommandLineArguments
	Receiver's instance variables: 
		superclass: 	BasicCommandLineHandler
		methodDict: 	a MethodDictionary(#activate->PharoCommandLineHandler>>#activate #c...etc...
		format: 	138
		layout: 	a FixedLayout
		instanceVariables: 	nil
		organization: 	a ClassOrganization
		subclasses: 	nil
		name: 	#PharoCommandLineHandler
		classPool: 	a Dictionary()
		sharedPools: 	an OrderedCollection()
		environment: 	a SystemDictionary(lots of globals)
		category: 	#'System-CommandLineHandler'
		traitComposition: 	{}
		localSelectors: 	nil


NonInteractiveUIManager(UIManager)>>defer:
	Receiver: a NonInteractiveUIManager
	Arguments and temporary variables: 
		aBlock: 	[ super activateWith: aCommandLine ]
	Receiver's instance variables: 
		doNotQuitOnRestart: 	false
		uiManager: 	a MorphicUIManager


PharoCommandLineHandler class>>activateWith:
	Receiver: PharoCommandLineHandler
	Arguments and temporary variables: 
		aCommandLine: 	a CommandLineArguments
	Receiver's instance variables: 
		superclass: 	BasicCommandLineHandler
		methodDict: 	a MethodDictionary(#activate->PharoCommandLineHandler>>#activate #c...etc...
		format: 	138
		layout: 	a FixedLayout
		instanceVariables: 	nil
		organization: 	a ClassOrganization
		subclasses: 	nil
		name: 	#PharoCommandLineHandler
		classPool: 	a Dictionary()
		sharedPools: 	an OrderedCollection()
		environment: 	a SystemDictionary(lots of globals)
		category: 	#'System-CommandLineHandler'
		traitComposition: 	{}
		localSelectors: 	nil


[ aCommandLinehandler activateWith: commandLine ] in BasicCommandLineHandler>>activateSubCommand:
	Receiver: a BasicCommandLineHandler
	Arguments and temporary variables: 
		aCommandLinehandler: 	PharoCommandLineHandler
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


BlockClosure>>on:do:
	Receiver: [ aCommandLinehandler activateWith: commandLine ]
	Arguments and temporary variables: 
		exception: 	Exit
		handlerAction: 	[ :exit | ^ self handleExit: exit for: aCommandLinehandler ]
	Receiver's instance variables: 
		outerContext: 	BasicCommandLineHandler>>activateSubCommand:
		startpc: 	34
		numArgs: 	0


BasicCommandLineHandler>>activateSubCommand:
	Receiver: a BasicCommandLineHandler
	Arguments and temporary variables: 
		aCommandLinehandler: 	PharoCommandLineHandler
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


BasicCommandLineHandler>>handleSubcommand
	Receiver: a BasicCommandLineHandler
	Arguments and temporary variables: 
		handlers: 	an OrderedCollection(PharoCommandLineHandler EvaluateCommandLineHandl...etc...
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


BasicCommandLineHandler>>handleArgument:
	Receiver: a BasicCommandLineHandler
	Arguments and temporary variables: 
		aString: 	'eval'
	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


[ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | arguments first ]) ] in BasicCommandLineHandler>>activate
	Receiver: a BasicCommandLineHandler
	Arguments and temporary variables: 

	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


BlockClosure>>on:do:
	Receiver: [ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | argument...etc...
	Arguments and temporary variables: 
		exception: 	Exit
		handlerAction: 	[ :exit | ^ self handleExit: exit ]
	Receiver's instance variables: 
		outerContext: 	BasicCommandLineHandler>>activate
		startpc: 	49
		numArgs: 	0


BasicCommandLineHandler>>activate
	Receiver: a BasicCommandLineHandler
	Arguments and temporary variables: 

	Receiver's instance variables: 
		commandLine: 	a CommandLineArguments
		session: 	a Session
		stdout: 	a VTermOutputDriver
		stderr: 	a VTermOutputDriver


[ self new activate ] in BasicCommandLineHandler class>>startUp:
	Receiver: BasicCommandLineHandler
	Arguments and temporary variables: 
		resuming: 	true
	Receiver's instance variables: 
		superclass: 	CommandLineHandler
		methodDict: 	a MethodDictionary(#activate->BasicCommandLineHandler>>#activate #a...etc...
		format: 	138
		layout: 	a FixedLayout
		instanceVariables: 	nil
		organization: 	a ClassOrganization
		subclasses: 	{PharoCommandLineHandler}
		name: 	#BasicCommandLineHandler
		classPool: 	a Dictionary()
		sharedPools: 	an OrderedCollection()
		environment: 	a SystemDictionary(lots of globals)
		category: 	#'System-CommandLineHandler'
		traitComposition: 	{}
		localSelectors: 	nil



--- The full stack ---
OSNullWindowHandle(Object)>>subclassResponsibility
OSNullWindowHandle(OSWindowHandle)>>title:
OSWindow>>title:
WBAScreen>>openWindow
WBAScreen>>initialize
WBAScreen class(Behavior)>>new
WizardBattleArena class>>start
UndefinedObject>>DoIt
OpalCompiler>>evaluate
OpalCompiler(AbstractCompiler)>>evaluate:
SmalltalkImage>>evaluate:
[ 
result := Smalltalk evaluate: aStream.
self hasSessionChanged
	ifFalse: [ 
		self stdout
			print: result;
			lf ] ] in EvaluateCommandLineHandler>>evaluate:
BlockClosure>>on:do:
EvaluateCommandLineHandler>>evaluate:
EvaluateCommandLineHandler>>evaluateArguments
EvaluateCommandLineHandler>>activate
EvaluateCommandLineHandler class(CommandLineHandler class)>>activateWith:
[ aCommandLinehandler activateWith: commandLine ] in PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activateSubCommand:
PharoCommandLineHandler(BasicCommandLineHandler)>>handleSubcommand
PharoCommandLineHandler(BasicCommandLineHandler)>>handleArgument:
[ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | arguments first ]) ] in PharoCommandLineHandler(BasicCommandLineHandler)>>activate
BlockClosure>>on:do:
PharoCommandLineHandler(BasicCommandLineHandler)>>activate
PharoCommandLineHandler>>activate
PharoCommandLineHandler class(CommandLineHandler class)>>activateWith:
[ super activateWith: aCommandLine ] in PharoCommandLineHandler class>>activateWith:
NonInteractiveUIManager(UIManager)>>defer:
PharoCommandLineHandler class>>activateWith:
[ aCommandLinehandler activateWith: commandLine ] in BasicCommandLineHandler>>activateSubCommand:
BlockClosure>>on:do:
BasicCommandLineHandler>>activateSubCommand:
BasicCommandLineHandler>>handleSubcommand
BasicCommandLineHandler>>handleArgument:
[ self handleArgument: (self arguments ifEmpty: [ '' ] ifNotEmpty: [ :arguments | arguments first ]) ] in BasicCommandLineHandler>>activate
BlockClosure>>on:do:
BasicCommandLineHandler>>activate
[ self new activate ] in BasicCommandLineHandler class>>startUp:
 - - - - - - - - - - - - - - -  
			- - - - - - - - - - - - - - - - - -
BlockClosure>>cull:
[ action cull: resuming ] in SmalltalkImage>>executeDeferredStartupActions:
BlockClosure>>on:do:
SmalltalkImage>>logStartUpErrorDuring:into:tryDebugger:
SmalltalkImage>>executeDeferredStartupActions:
SmalltalkImage>>startupImage:snapshotWorked:
SmalltalkImage>>snapshot:andQuit:
[ Smalltalk snapshot: true andQuit: true ] in WorldState class>>saveAndQuit
BlockClosure>>ensure:
CursorWithMask(Cursor)>>showWhile:
WorldState class>>saveAndQuit
[ 
| selArgCount |
"show cursor in case item opens a new MVC window"
(selArgCount := selector numArgs) = 0
	ifTrue: [ target perform: selector ]
	ifFalse: [ 
		selArgCount = arguments size
			ifTrue: [ target perform: selector withArguments: arguments ]
			ifFalse: [ target perform: selector withArguments: (arguments copyWith: evt) ] ].
self changed ] in ToggleMenuItemMorph(MenuItemMorph)>>invokeWithEvent:
BlockClosure>>ensure:
CursorWithMask(Cursor)>>showWhile:
ToggleMenuItemMorph(MenuItemMorph)>>invokeWithEvent:
ToggleMenuItemMorph(MenuItemMorph)>>mouseUp:
ToggleMenuItemMorph(MenuItemMorph)>>handleMouseUp:
MouseButtonEvent>>sentTo:
ToggleMenuItemMorph(Morph)>>handleEvent:
MorphicEventDispatcher>>dispatchDefault:with:
MorphicEventDispatcher>>handleMouseUp:
MouseButtonEvent>>sentTo:
[ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with:
BlockClosure>>ensure:
MorphicEventDispatcher>>dispatchEvent:with:
ToggleMenuItemMorph(Morph)>>processEvent:using:
MorphicEventDispatcher>>dispatchDefault:with:
MorphicEventDispatcher>>handleMouseUp:
MouseButtonEvent>>sentTo:
[ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with:
BlockClosure>>ensure:
MorphicEventDispatcher>>dispatchEvent:with:
MenuMorph(Morph)>>processEvent:using:
MenuMorph(Morph)>>processEvent:
MenuMorph>>handleFocusEvent:
[ 
ActiveHand := self.
ActiveEvent := anEvent.
result := focusHolder handleFocusEvent: (anEvent transformedBy: (focusHolder transformedFrom: self)) ] in HandMorph>>sendFocusEvent:to:clear:
BlockClosure>>on:do:
WorldMorph(PasteUpMorph)>>becomeActiveDuring:
HandMorph>>sendFocusEvent:to:clear:
HandMorph>>sendEvent:focus:clear:
HandMorph>>sendMouseEvent:
HandMorph>>handleEvent:
HandMorph>>processEvents
[ :h | 
ActiveHand := h.
h processEvents.
ActiveHand := nil ] in WorldState>>doOneCycleNowFor:
Array(SequenceableCollection)>>do:
WorldState>>handsDo:
WorldState>>doOneCycleNowFor:
WorldState>>doOneCycleFor:
WorldMorph>>doOneCycle
[ 
[ 
World doOneCycle.
Processor yield.
false ] whileFalse: [  ] ] in MorphicUIManager>>spawnNewProcess
[ 
self value.
Processor terminateActive ] in BlockClosure>>newProcess
-------------------------------------------------------------------------------

THERE_BE_DRAGONS_HERE
Got startup errors: 
-------------------------------------------------------------------------------

THERE_BE_DRAGONS_HERE
    SubclassResponsibility: OSNullWindowHandle had the subclass responsibility to implement #title:
-------------------------------------------------------------------------------

Reply via email to