author | Jan Vrany <jan.vrany@fit.cvut.cz> |
Fri, 25 Sep 2015 03:51:15 +0100 | |
changeset 16 | 17a2d1d9f205 |
parent 15 | 10a95d798b36 |
permissions | -rw-r--r-- |
16
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
1 |
" |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
2 |
Copyright (C) 2015-now Jan Vrany |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
3 |
|
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
4 |
This code is not an open-source (yet). You may use this code |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
5 |
for your own experiments and projects, given that: |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
6 |
|
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
7 |
* all modification to the code will be sent to the |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
8 |
original author for inclusion in future releases |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
9 |
* this is not used in any commercial software |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
10 |
|
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
11 |
This license is provisional and may (will) change in |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
12 |
a future. |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
13 |
" |
3
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
14 |
"{ Package: 'jv:tea/compiler' }" |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
15 |
|
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
16 |
"{ NameSpace: Smalltalk }" |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
17 |
|
6
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
18 |
TCompilerPass subclass:#TSemanticAnalyser |
3
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
19 |
instanceVariableNames:'' |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
20 |
classVariableNames:'' |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
21 |
poolDictionaries:'' |
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
22 |
category:'Languages-Tea-Compiler-Internals' |
3
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
23 |
! |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
24 |
|
6
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
25 |
!TSemanticAnalyser class methodsFor:'documentation'! |
3
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
26 |
|
16
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
27 |
copyright |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
28 |
" |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
29 |
Copyright (C) 2015-now Jan Vrany |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
30 |
|
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
31 |
This code is not an open-source (yet). You may use this code |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
32 |
for your own experiments and projects, given that: |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
33 |
|
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
34 |
* all modification to the code will be sent to the |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
35 |
original author for inclusion in future releases |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
36 |
* this is not used in any commercial software |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
37 |
|
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
38 |
This license is provisional and may (will) change in |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
39 |
a future. |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
40 |
" |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
41 |
! |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
42 |
|
3
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
43 |
documentation |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
44 |
" |
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
45 |
This is the very first pass on the code. Its responsibility is: |
13
97090c2baa33
Fixes/refactoring of scopes and bindings.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
11
diff
changeset
|
46 |
* initialize bindings |
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
47 |
* initialize scopes (i.e, assign scopes and populate them |
13
97090c2baa33
Fixes/refactoring of scopes and bindings.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
11
diff
changeset
|
48 |
with variable bindings) |
3
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
49 |
|
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
50 |
[author:] |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
51 |
Jan Vrany <jan.vrany@fit.cvut.cz> |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
52 |
|
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
53 |
[instance variables:] |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
54 |
|
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
55 |
[class variables:] |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
56 |
|
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
57 |
[see also:] |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
58 |
|
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
59 |
" |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
60 |
! ! |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
61 |
|
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
62 |
!TSemanticAnalyser methodsFor:'visiting'! |
6
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
63 |
|
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
64 |
visitArgument: anRBVariableNode |
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
65 |
| binding | |
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
66 |
|
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
67 |
anRBVariableNode parent isSequence ifTrue:[ |
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
68 |
binding := TLocalBinding name:anRBVariableNode name. |
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
69 |
] ifFalse:[ |
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
70 |
binding := TArgumentBinding name:anRBVariableNode name. |
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
71 |
binding index: (anRBVariableNode parent arguments indexOf: anRBVariableNode) |
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
72 |
+ (anRBVariableNode parent scope hasSelfArgument ifTrue:[1] ifFalse:[0]) |
6
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
73 |
]. |
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
74 |
anRBVariableNode parent scope addVariable: binding. |
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
75 |
super visitArgument: anRBVariableNode. |
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
76 |
|
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
77 |
"Created: / 25-08-2015 / 22:51:40 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
78 |
"Modified: / 23-09-2015 / 18:48:43 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
3
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
79 |
! ! |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
80 |
|
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
81 |
!TSemanticAnalyser methodsFor:'visitor-double dispatching'! |
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
82 |
|
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
83 |
acceptBlockNode: aBlockNode |
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
84 |
| scope binding | |
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
85 |
aBlockNode parent isSpecialFormNode ifTrue:[ |
13
97090c2baa33
Fixes/refactoring of scopes and bindings.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
11
diff
changeset
|
86 |
scope := TScope node: aBlockNode parent: aBlockNode parent scope |
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
87 |
] ifFalse:[ |
13
97090c2baa33
Fixes/refactoring of scopes and bindings.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
11
diff
changeset
|
88 |
scope := TScope node: aBlockNode |
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
89 |
]. |
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
90 |
aBlockNode scope: scope. |
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
91 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
92 |
binding := TBlockBinding new. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
93 |
binding parameterTypes: aBlockNode parameterTypes. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
94 |
binding returnType: aBlockNode returnType. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
95 |
aBlockNode binding: binding. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
96 |
|
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
97 |
super acceptBlockNode: aBlockNode |
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
98 |
|
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
99 |
"Created: / 25-08-2015 / 22:30:21 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
100 |
"Modified: / 23-09-2015 / 16:31:36 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
101 |
! |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
102 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
103 |
acceptIfTrueIfFalseNode: node |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
104 |
node arguments first isBlock ifFalse:[ |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
105 |
context reportSemanticError: 'First argument (true block) of ifTrue:ifFalse: special form is not a block'. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
106 |
] ifTrue:[ |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
107 |
node arguments first arguments notEmptyOrNil ifTrue:[ |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
108 |
context reportSemanticError: 'First argument (true block) of ifTrue::ifFalse: special form may not have any arguments'. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
109 |
] |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
110 |
]. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
111 |
node arguments second isBlock ifFalse:[ |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
112 |
context reportSemanticError: 'Second argument (false block) of ifTrue:ifFalse: special form is not a block'. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
113 |
] ifTrue:[ |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
114 |
node arguments second arguments notEmptyOrNil ifTrue:[ |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
115 |
context reportSemanticError: 'Second argument (false block) of ifTrue::ifFalse: special form may not have any arguments'. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
116 |
] |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
117 |
]. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
118 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
119 |
^ self acceptMessageNode: node. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
120 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
121 |
"Created: / 23-09-2015 / 14:20:00 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
122 |
! |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
123 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
124 |
acceptIfTrueNode: node |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
125 |
node arguments first isBlock ifFalse:[ |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
126 |
context reportSemanticError: 'Argument (true block) of ifTrue: special form is not a block'. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
127 |
] ifTrue:[ |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
128 |
node arguments first arguments notEmptyOrNil ifTrue:[ |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
129 |
context reportSemanticError: 'Argument (true block) of ifTrue: special form may not have any arguments'. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
130 |
] |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
131 |
]. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
132 |
self acceptMessageNode: node |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
133 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
134 |
"Created: / 23-09-2015 / 14:18:49 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
135 |
! |
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
136 |
|
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
137 |
acceptLiteralNode: aRBLiteralNode |
11
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
9
diff
changeset
|
138 |
| value | |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
9
diff
changeset
|
139 |
|
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
140 |
super acceptLiteralNode: aRBLiteralNode. |
11
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
9
diff
changeset
|
141 |
value := aRBLiteralNode value. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
9
diff
changeset
|
142 |
value isInteger ifTrue:[ |
13
97090c2baa33
Fixes/refactoring of scopes and bindings.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
11
diff
changeset
|
143 |
aRBLiteralNode binding: (TConstantBinding value: value). |
11
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
9
diff
changeset
|
144 |
^ self. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
9
diff
changeset
|
145 |
]. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
9
diff
changeset
|
146 |
value isBoolean ifTrue:[ |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
9
diff
changeset
|
147 |
aRBLiteralNode binding: (TConstantBinding value: (value ifTrue:[1] ifFalse:[0]) type: (context environment binding lookupClassBoolean) type). |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
9
diff
changeset
|
148 |
^ self. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
9
diff
changeset
|
149 |
]. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
9
diff
changeset
|
150 |
self erorr: 'Unsupported constant'. |
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
151 |
|
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
152 |
"Created: / 25-08-2015 / 23:17:30 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
13
97090c2baa33
Fixes/refactoring of scopes and bindings.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
11
diff
changeset
|
153 |
"Modified: / 20-09-2015 / 07:12:23 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
154 |
! |
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
155 |
|
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
156 |
acceptMethodNode: aMethodNode |
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
157 |
| scope bindingForSelf | |
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
158 |
|
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
159 |
scope := TScope node: aMethodNode. |
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
160 |
bindingForSelf := TArgumentBinding name:'self'. |
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
161 |
bindingForSelf index: 1. |
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
162 |
scope addVariable: bindingForSelf. |
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
163 |
|
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
164 |
aMethodNode scope: scope. |
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
165 |
|
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
166 |
super acceptMethodNode: aMethodNode |
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
167 |
|
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
168 |
"Created: / 25-08-2015 / 22:29:21 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
169 |
"Modified: / 23-09-2015 / 18:31:07 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
170 |
! |
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
171 |
|
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
172 |
acceptVariableNode: aVariableNode |
13
97090c2baa33
Fixes/refactoring of scopes and bindings.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
11
diff
changeset
|
173 |
| binding | |
97090c2baa33
Fixes/refactoring of scopes and bindings.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
11
diff
changeset
|
174 |
|
97090c2baa33
Fixes/refactoring of scopes and bindings.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
11
diff
changeset
|
175 |
binding := aVariableNode scope lookupVariable: aVariableNode name. |
97090c2baa33
Fixes/refactoring of scopes and bindings.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
11
diff
changeset
|
176 |
binding isNil ifTrue:[ |
97090c2baa33
Fixes/refactoring of scopes and bindings.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
11
diff
changeset
|
177 |
context reportSemanticError: ('Undeclared variable %1' bindWith: aVariableNode name). |
97090c2baa33
Fixes/refactoring of scopes and bindings.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
11
diff
changeset
|
178 |
^ self. |
97090c2baa33
Fixes/refactoring of scopes and bindings.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
11
diff
changeset
|
179 |
]. |
97090c2baa33
Fixes/refactoring of scopes and bindings.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
11
diff
changeset
|
180 |
aVariableNode binding: binding. |
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
181 |
super acceptVariableNode: aVariableNode |
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
182 |
|
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
183 |
"Created: / 25-08-2015 / 23:00:34 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
13
97090c2baa33
Fixes/refactoring of scopes and bindings.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
11
diff
changeset
|
184 |
"Modified: / 20-09-2015 / 06:14:37 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
185 |
! |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
186 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
187 |
acceptWhileTrueNode: node |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
188 |
node receiver isBlock ifFalse:[ |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
189 |
context reportSemanticError: 'Receiver (condition) of whileTrue: special form is not a block'. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
190 |
] ifTrue:[ |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
191 |
node receiver arguments notEmptyOrNil ifTrue:[ |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
192 |
context reportSemanticError: 'Receiver (condition) of whileTrue: special form may not have any arguments'. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
193 |
] |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
194 |
]. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
195 |
node arguments first isBlock ifFalse:[ |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
196 |
context reportSemanticError: 'Argument (loop body) of whileTrue: special form is not a block'. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
197 |
] ifTrue:[ |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
198 |
node arguments first arguments notEmptyOrNil ifTrue:[ |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
199 |
context reportSemanticError: 'Argument (loop body) of whileTrue: special form may not have any arguments'. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
200 |
] |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
201 |
]. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
202 |
super acceptWhileTrueNode: node |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
203 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
13
diff
changeset
|
204 |
"Created: / 23-09-2015 / 14:10:40 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
205 |
! ! |
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
8
diff
changeset
|
206 |
|
6
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
207 |
!TSemanticAnalyser class methodsFor:'documentation'! |
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3
diff
changeset
|
208 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3
diff
changeset
|
209 |
version |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3
diff
changeset
|
210 |
^ 'Path: jv/tea/compiler/TSemanticAnalyzer.st, Version: 1.0, User: jv, Time: 2015-08-31T13:47:58.729+01' |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3
diff
changeset
|
211 |
! |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3
diff
changeset
|
212 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3
diff
changeset
|
213 |
version_HG |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3
diff
changeset
|
214 |
^ 'Path: jv/tea/compiler/TSemanticAnalyzer.st, Version: 1.0, User: jv, Time: 2015-08-31T13:47:58.729+01' |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3
diff
changeset
|
215 |
! ! |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3
diff
changeset
|
216 |