Skip to content

Commit 9e1faf6

Browse files
committed
Improved loading scripts in Rowan to avoid reinitialization
1 parent b6813da commit 9e1faf6

File tree

2 files changed

+83
-57
lines changed

2 files changed

+83
-57
lines changed
Lines changed: 59 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,65 @@
1-
| symbolDictionary gregorianCalendar |
21

3-
symbolDictionary := Rowan image
4-
symbolDictNamed: 'Chalten'
5-
ifAbsent: [Error signal: 'Chalten symbol dictionary missing' ].
2+
| symbolDictionary gregorianCalendar assignmentCommand |
3+
symbolDictionary := Rowan image
4+
symbolDictNamed: 'Chalten'
5+
ifAbsent: [ Error signal: 'Chalten symbol dictionary missing' ].
6+
assignmentCommand := [ :key :contentBlock |
7+
symbolDictionary
8+
at: key
9+
ifPresent: [ :current |
10+
current ifNil: [ symbolDictionary at: key put: contentBlock value ] ]
11+
ifAbsentPut: contentBlock
12+
].
613

7-
"Global variables definition"
14+
"Global variables definition"
815

9-
symbolDictionary at: #ChaltenEnvironment put: ChaltenEnvironmentBehavior initializeEnvironment new.
10-
symbolDictionary at: #TimeUnits put: (TimeUnitsGlobals initializeUniqueInstance; new).
11-
TimeOfDay initializeTimesOfDay. "Cannot be invoked from TimeOfDay class>>initialize because depends on TimeUnits global"
12-
CalendarDefinition allSubclassesDo: [ :each | each subclasses ifEmpty: [ each initializeCalendar ] ].
13-
symbolDictionary at: #TheBeginningOfTime put: (TheBeginningOfTimeClass initializeUniqueInstance; new).
14-
symbolDictionary at: #TheEndOfTime put: (TheEndOfTimeClass initializeUniqueInstance; new).
15-
symbolDictionary at: #TimeZones put: (TimeZonesGlobals initializeUniqueInstance; new).
16+
assignmentCommand
17+
value: #ChaltenEnvironment
18+
value: [ ChaltenEnvironmentBehavior initializeEnvironment new ].
19+
assignmentCommand value: #TimeUnits value: [
20+
TimeUnitsGlobals
21+
initializeUniqueInstance;
22+
new
23+
].
24+
TimeOfDay initializeTimesOfDay. "Cannot be invoked from TimeOfDay class>>initialize because depends on TimeUnits global"
25+
CalendarDefinition allSubclassesDo: [ :each |
26+
each subclasses ifEmpty: [ each initializeCalendar ] ].
27+
assignmentCommand value: #TheBeginningOfTime value: [
28+
TheBeginningOfTimeClass
29+
initializeUniqueInstance;
30+
new
31+
].
32+
assignmentCommand value: #TheEndOfTime value: [
33+
TheEndOfTimeClass
34+
initializeUniqueInstance;
35+
new
36+
].
37+
assignmentCommand value: #TimeZones value: [
38+
TimeZonesGlobals
39+
initializeUniqueInstance;
40+
new
41+
].
1642

17-
"Gregorian calendar specific globals"
43+
"Gregorian calendar specific globals"
1844

19-
gregorianCalendar := ChaltenEnvironment calendarNamed: #GregorianCalendar.
20-
symbolDictionary at: #Monday put: gregorianCalendar monday.
21-
symbolDictionary at: #Tuesday put: gregorianCalendar tuesday.
22-
symbolDictionary at: #Wednesday put: gregorianCalendar wednesday.
23-
symbolDictionary at: #Thursday put: gregorianCalendar thursday.
24-
symbolDictionary at: #Friday put: gregorianCalendar friday.
25-
symbolDictionary at: #Saturday put: gregorianCalendar saturday.
26-
symbolDictionary at: #Sunday put: gregorianCalendar sunday.
45+
gregorianCalendar := ChaltenEnvironment calendarNamed: #GregorianCalendar.
46+
assignmentCommand value: #Monday value: [ gregorianCalendar monday ].
47+
assignmentCommand value: #Tuesday value: [ gregorianCalendar tuesday ].
48+
assignmentCommand value: #Wednesday value: [ gregorianCalendar wednesday ].
49+
assignmentCommand value: #Thursday value: [ gregorianCalendar thursday ].
50+
assignmentCommand value: #Friday value: [ gregorianCalendar friday ].
51+
assignmentCommand value: #Saturday value: [ gregorianCalendar saturday ].
52+
assignmentCommand value: #Sunday value: [ gregorianCalendar sunday ].
2753

28-
symbolDictionary at: #January put: gregorianCalendar january.
29-
symbolDictionary at: #February put: gregorianCalendar february.
30-
symbolDictionary at: #March put: gregorianCalendar march.
31-
symbolDictionary at: #April put: gregorianCalendar april.
32-
symbolDictionary at: #May put: gregorianCalendar may.
33-
symbolDictionary at: #June put: gregorianCalendar june.
34-
symbolDictionary at: #July put: gregorianCalendar july.
35-
symbolDictionary at: #August put: gregorianCalendar august.
36-
symbolDictionary at: #September put: gregorianCalendar september.
37-
symbolDictionary at: #October put: gregorianCalendar october.
38-
symbolDictionary at: #November put: gregorianCalendar november.
39-
symbolDictionary at: #December put: gregorianCalendar december.
54+
assignmentCommand value: #January value: [ gregorianCalendar january ].
55+
assignmentCommand value: #February value: [ gregorianCalendar february ].
56+
assignmentCommand value: #March value: [ gregorianCalendar march ].
57+
assignmentCommand value: #April value: [ gregorianCalendar april ].
58+
assignmentCommand value: #May value: [ gregorianCalendar may ].
59+
assignmentCommand value: #June value: [ gregorianCalendar june ].
60+
assignmentCommand value: #July value: [ gregorianCalendar july ].
61+
assignmentCommand value: #August value: [ gregorianCalendar august ].
62+
assignmentCommand value: #September value: [ gregorianCalendar september ].
63+
assignmentCommand value: #October value: [ gregorianCalendar october ].
64+
assignmentCommand value: #November value: [ gregorianCalendar november ].
65+
assignmentCommand value: #December value: [ gregorianCalendar december ]

rowan/components/scripts/defineGlobalsPreLoad.st

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -9,32 +9,32 @@ symbolDictionary := Rowan image
99
"Preliminar definition of global variables for source code to compile.
1010
These will be properly replaced later in the post load script."
1111

12-
symbolDictionary at: #ChaltenEnvironment put: nil.
13-
symbolDictionary at: #TimeUnits put: nil.
14-
symbolDictionary at: #TimeZones put: nil.
15-
symbolDictionary at: #TheBeginningOfTime put: nil.
16-
symbolDictionary at: #TheEndOfTime put: nil.
12+
symbolDictionary at: #ChaltenEnvironment ifAbsentPut: [ nil ].
13+
symbolDictionary at: #TimeUnits ifAbsentPut: [ nil ].
14+
symbolDictionary at: #TimeZones ifAbsentPut: [ nil ].
15+
symbolDictionary at: #TheBeginningOfTime ifAbsentPut: [ nil ].
16+
symbolDictionary at: #TheEndOfTime ifAbsentPut: [ nil ].
1717

1818
"Gregorian calendar specific globals"
1919

20-
symbolDictionary at: #Monday put: nil.
21-
symbolDictionary at: #Tuesday put: nil.
22-
symbolDictionary at: #Wednesday put: nil.
23-
symbolDictionary at: #Thursday put: nil.
24-
symbolDictionary at: #Friday put: nil.
25-
symbolDictionary at: #Saturday put: nil.
26-
symbolDictionary at: #Sunday put: nil.
20+
symbolDictionary at: #Monday ifAbsentPut: [ nil ].
21+
symbolDictionary at: #Tuesday ifAbsentPut: [ nil ].
22+
symbolDictionary at: #Wednesday ifAbsentPut: [ nil ].
23+
symbolDictionary at: #Thursday ifAbsentPut: [ nil ].
24+
symbolDictionary at: #Friday ifAbsentPut: [ nil ].
25+
symbolDictionary at: #Saturday ifAbsentPut: [ nil ].
26+
symbolDictionary at: #Sunday ifAbsentPut: [ nil ].
2727

2828
"Gregorian calendar specifics - months"
29-
symbolDictionary at: #January put: nil.
30-
symbolDictionary at: #February put: nil.
31-
symbolDictionary at: #March put: nil.
32-
symbolDictionary at: #April put: nil.
33-
symbolDictionary at: #May put: nil.
34-
symbolDictionary at: #June put: nil.
35-
symbolDictionary at: #July put: nil.
36-
symbolDictionary at: #August put: nil.
37-
symbolDictionary at: #September put: nil.
38-
symbolDictionary at: #October put: nil.
39-
symbolDictionary at: #November put: nil.
40-
symbolDictionary at: #December put: nil.
29+
symbolDictionary at: #January ifAbsentPut: [ nil ].
30+
symbolDictionary at: #February ifAbsentPut: [ nil ].
31+
symbolDictionary at: #March ifAbsentPut: [ nil ].
32+
symbolDictionary at: #April ifAbsentPut: [ nil ].
33+
symbolDictionary at: #May ifAbsentPut: [ nil ].
34+
symbolDictionary at: #June ifAbsentPut: [ nil ].
35+
symbolDictionary at: #July ifAbsentPut: [ nil ].
36+
symbolDictionary at: #August ifAbsentPut: [ nil ].
37+
symbolDictionary at: #September ifAbsentPut: [ nil ].
38+
symbolDictionary at: #October ifAbsentPut: [ nil ].
39+
symbolDictionary at: #November ifAbsentPut: [ nil ].
40+
symbolDictionary at: #December ifAbsentPut: [ nil ].

0 commit comments

Comments
 (0)