diff --git a/rowan/components/scripts/defineGlobalsPostLoad.st b/rowan/components/scripts/defineGlobalsPostLoad.st index e769ad3..7370d73 100644 --- a/rowan/components/scripts/defineGlobalsPostLoad.st +++ b/rowan/components/scripts/defineGlobalsPostLoad.st @@ -1,39 +1,65 @@ -| symbolDictionary gregorianCalendar | -symbolDictionary := Rowan image - symbolDictNamed: 'Chalten' - ifAbsent: [Error signal: 'Chalten symbol dictionary missing' ]. + | symbolDictionary gregorianCalendar assignmentCommand | + symbolDictionary := Rowan image + symbolDictNamed: 'Chalten' + ifAbsent: [ Error signal: 'Chalten symbol dictionary missing' ]. + assignmentCommand := [ :key :contentBlock | + symbolDictionary + at: key + ifPresent: [ :current | + current ifNil: [ symbolDictionary at: key put: contentBlock value ] ] + ifAbsentPut: contentBlock + ]. -"Global variables definition" + "Global variables definition" -symbolDictionary at: #ChaltenEnvironment put: ChaltenEnvironmentBehavior initializeEnvironment new. -symbolDictionary at: #TimeUnits put: (TimeUnitsGlobals initializeUniqueInstance; new). -TimeOfDay initializeTimesOfDay. "Cannot be invoked from TimeOfDay class>>initialize because depends on TimeUnits global" -CalendarDefinition allSubclassesDo: [ :each | each subclasses ifEmpty: [ each initializeCalendar ] ]. -symbolDictionary at: #TheBeginningOfTime put: (TheBeginningOfTimeClass initializeUniqueInstance; new). -symbolDictionary at: #TheEndOfTime put: (TheEndOfTimeClass initializeUniqueInstance; new). -symbolDictionary at: #TimeZones put: (TimeZonesGlobals initializeUniqueInstance; new). + assignmentCommand + value: #ChaltenEnvironment + value: [ ChaltenEnvironmentBehavior initializeEnvironment new ]. + assignmentCommand value: #TimeUnits value: [ + TimeUnitsGlobals + initializeUniqueInstance; + new + ]. + TimeOfDay initializeTimesOfDay. "Cannot be invoked from TimeOfDay class>>initialize because depends on TimeUnits global" + CalendarDefinition allSubclassesDo: [ :each | + each subclasses ifEmpty: [ each initializeCalendar ] ]. + assignmentCommand value: #TheBeginningOfTime value: [ + TheBeginningOfTimeClass + initializeUniqueInstance; + new + ]. + assignmentCommand value: #TheEndOfTime value: [ + TheEndOfTimeClass + initializeUniqueInstance; + new + ]. + assignmentCommand value: #TimeZones value: [ + TimeZonesGlobals + initializeUniqueInstance; + new + ]. -"Gregorian calendar specific globals" + "Gregorian calendar specific globals" -gregorianCalendar := ChaltenEnvironment calendarNamed: #GregorianCalendar. -symbolDictionary at: #Monday put: gregorianCalendar monday. -symbolDictionary at: #Tuesday put: gregorianCalendar tuesday. -symbolDictionary at: #Wednesday put: gregorianCalendar wednesday. -symbolDictionary at: #Thursday put: gregorianCalendar thursday. -symbolDictionary at: #Friday put: gregorianCalendar friday. -symbolDictionary at: #Saturday put: gregorianCalendar saturday. -symbolDictionary at: #Sunday put: gregorianCalendar sunday. + gregorianCalendar := ChaltenEnvironment calendarNamed: #GregorianCalendar. + assignmentCommand value: #Monday value: [ gregorianCalendar monday ]. + assignmentCommand value: #Tuesday value: [ gregorianCalendar tuesday ]. + assignmentCommand value: #Wednesday value: [ gregorianCalendar wednesday ]. + assignmentCommand value: #Thursday value: [ gregorianCalendar thursday ]. + assignmentCommand value: #Friday value: [ gregorianCalendar friday ]. + assignmentCommand value: #Saturday value: [ gregorianCalendar saturday ]. + assignmentCommand value: #Sunday value: [ gregorianCalendar sunday ]. -symbolDictionary at: #January put: gregorianCalendar january. -symbolDictionary at: #February put: gregorianCalendar february. -symbolDictionary at: #March put: gregorianCalendar march. -symbolDictionary at: #April put: gregorianCalendar april. -symbolDictionary at: #May put: gregorianCalendar may. -symbolDictionary at: #June put: gregorianCalendar june. -symbolDictionary at: #July put: gregorianCalendar july. -symbolDictionary at: #August put: gregorianCalendar august. -symbolDictionary at: #September put: gregorianCalendar september. -symbolDictionary at: #October put: gregorianCalendar october. -symbolDictionary at: #November put: gregorianCalendar november. -symbolDictionary at: #December put: gregorianCalendar december. + assignmentCommand value: #January value: [ gregorianCalendar january ]. + assignmentCommand value: #February value: [ gregorianCalendar february ]. + assignmentCommand value: #March value: [ gregorianCalendar march ]. + assignmentCommand value: #April value: [ gregorianCalendar april ]. + assignmentCommand value: #May value: [ gregorianCalendar may ]. + assignmentCommand value: #June value: [ gregorianCalendar june ]. + assignmentCommand value: #July value: [ gregorianCalendar july ]. + assignmentCommand value: #August value: [ gregorianCalendar august ]. + assignmentCommand value: #September value: [ gregorianCalendar september ]. + assignmentCommand value: #October value: [ gregorianCalendar october ]. + assignmentCommand value: #November value: [ gregorianCalendar november ]. + assignmentCommand value: #December value: [ gregorianCalendar december ] \ No newline at end of file diff --git a/rowan/components/scripts/defineGlobalsPreLoad.st b/rowan/components/scripts/defineGlobalsPreLoad.st index ad4aa27..662846d 100644 --- a/rowan/components/scripts/defineGlobalsPreLoad.st +++ b/rowan/components/scripts/defineGlobalsPreLoad.st @@ -9,32 +9,32 @@ symbolDictionary := Rowan image "Preliminar definition of global variables for source code to compile. These will be properly replaced later in the post load script." -symbolDictionary at: #ChaltenEnvironment put: nil. -symbolDictionary at: #TimeUnits put: nil. -symbolDictionary at: #TimeZones put: nil. -symbolDictionary at: #TheBeginningOfTime put: nil. -symbolDictionary at: #TheEndOfTime put: nil. +symbolDictionary at: #ChaltenEnvironment ifAbsentPut: [ nil ]. +symbolDictionary at: #TimeUnits ifAbsentPut: [ nil ]. +symbolDictionary at: #TimeZones ifAbsentPut: [ nil ]. +symbolDictionary at: #TheBeginningOfTime ifAbsentPut: [ nil ]. +symbolDictionary at: #TheEndOfTime ifAbsentPut: [ nil ]. "Gregorian calendar specific globals" -symbolDictionary at: #Monday put: nil. -symbolDictionary at: #Tuesday put: nil. -symbolDictionary at: #Wednesday put: nil. -symbolDictionary at: #Thursday put: nil. -symbolDictionary at: #Friday put: nil. -symbolDictionary at: #Saturday put: nil. -symbolDictionary at: #Sunday put: nil. +symbolDictionary at: #Monday ifAbsentPut: [ nil ]. +symbolDictionary at: #Tuesday ifAbsentPut: [ nil ]. +symbolDictionary at: #Wednesday ifAbsentPut: [ nil ]. +symbolDictionary at: #Thursday ifAbsentPut: [ nil ]. +symbolDictionary at: #Friday ifAbsentPut: [ nil ]. +symbolDictionary at: #Saturday ifAbsentPut: [ nil ]. +symbolDictionary at: #Sunday ifAbsentPut: [ nil ]. "Gregorian calendar specifics - months" -symbolDictionary at: #January put: nil. -symbolDictionary at: #February put: nil. -symbolDictionary at: #March put: nil. -symbolDictionary at: #April put: nil. -symbolDictionary at: #May put: nil. -symbolDictionary at: #June put: nil. -symbolDictionary at: #July put: nil. -symbolDictionary at: #August put: nil. -symbolDictionary at: #September put: nil. -symbolDictionary at: #October put: nil. -symbolDictionary at: #November put: nil. -symbolDictionary at: #December put: nil. +symbolDictionary at: #January ifAbsentPut: [ nil ]. +symbolDictionary at: #February ifAbsentPut: [ nil ]. +symbolDictionary at: #March ifAbsentPut: [ nil ]. +symbolDictionary at: #April ifAbsentPut: [ nil ]. +symbolDictionary at: #May ifAbsentPut: [ nil ]. +symbolDictionary at: #June ifAbsentPut: [ nil ]. +symbolDictionary at: #July ifAbsentPut: [ nil ]. +symbolDictionary at: #August ifAbsentPut: [ nil ]. +symbolDictionary at: #September ifAbsentPut: [ nil ]. +symbolDictionary at: #October ifAbsentPut: [ nil ]. +symbolDictionary at: #November ifAbsentPut: [ nil ]. +symbolDictionary at: #December ifAbsentPut: [ nil ]. diff --git a/source/Chalten-Core/TimeOfDay.class.st b/source/Chalten-Core/TimeOfDay.class.st index db34d05..c663512 100644 --- a/source/Chalten-Core/TimeOfDay.class.st +++ b/source/Chalten-Core/TimeOfDay.class.st @@ -56,19 +56,19 @@ TimeOfDay class >> hours: anHours minutes: aMinutes seconds: aSeconds millisecon { #category : 'initialization' } TimeOfDay class >> initializeFirstTimeOfDay [ - firstTimeOfDay := self timeFromMidnight: 0 hoursMeasure + firstTimeOfDay ifNil: [ firstTimeOfDay := self timeFromMidnight: 0 hoursMeasure ] ] { #category : 'initialization' } TimeOfDay class >> initializeLastTimeOfDay [ - lastTimeOfDay := self timeFromMidnight: (24 hoursMeasure - 1 millisecondMeasure) + lastTimeOfDay ifNil: [ lastTimeOfDay := self timeFromMidnight: (24 hoursMeasure - 1 millisecondMeasure) ] ] { #category : 'initialization' } TimeOfDay class >> initializeNoon [ - noon := self hours: 12 + noon ifNil: [ noon := self hours: 12 ] ] { #category : 'initialization' }