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 |
" |
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
14 |
"{ Package: 'jv:tea/compiler' }" |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
15 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
16 |
"{ NameSpace: Smalltalk }" |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
17 |
|
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
7
diff
changeset
|
18 |
TCompilerPass subclass:#TLLVMCodeGenerator |
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
19 |
instanceVariableNames:'function asm' |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
20 |
classVariableNames:'SelectorSpecialCharMappingTable' |
16
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
21 |
poolDictionaries:'LLVMAtomicOrdering LLVMAtomicRMWBinOp LLVMAttribute |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
22 |
LLVMByteOrdering LLVMCallConv LLVMDLLStorageClass |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
23 |
LLVMIntPredicate' |
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
7
diff
changeset
|
24 |
category:'Languages-Tea-Compiler-Internals' |
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
25 |
! |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
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 |
!TLLVMCodeGenerator class methodsFor:'documentation'! |
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 |
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 |
Copyright (C) 2015-now Jan Vrany |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
32 |
|
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
33 |
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
|
34 |
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
|
35 |
|
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
36 |
* 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
|
37 |
original author for inclusion in future releases |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
38 |
* 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
|
39 |
|
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
40 |
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
|
41 |
a future. |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
42 |
" |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
43 |
! ! |
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
44 |
|
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
7
diff
changeset
|
45 |
!TLLVMCodeGenerator class methodsFor:'initialization'! |
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
46 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
47 |
initialize |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
48 |
"Invoked at system start or when the class is dynamically loaded." |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
49 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
50 |
"/ please change as required (and remove this comment) |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
51 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
52 |
SelectorSpecialCharMappingTable := Dictionary withKeysAndValues: |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
53 |
#($+ 'pl' |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
54 |
$- 'mi' |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
55 |
$* 'mu' |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
56 |
$/ 'di' |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
57 |
$, 'co' |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
58 |
$@ 'at' |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
59 |
$< 'le' |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
60 |
$> 'gr' |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
61 |
$= 'eq' |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
62 |
$~ 'ne' |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
63 |
$| 'pi' |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
64 |
$\ 'mo' |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
65 |
$& 'am'). |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
66 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
67 |
"Modified: / 11-07-2015 / 09:24:06 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
68 |
! ! |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
69 |
|
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
7
diff
changeset
|
70 |
!TLLVMCodeGenerator class methodsFor:'utilities'! |
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
71 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
72 |
llvmFunctionNameForClass: class selector: selector |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
73 |
"For given class name and selector, returns the name |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
74 |
used by LLVM" |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
75 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
76 |
^ String streamContents:[ :s| |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
77 |
s nextPutAll: '__M_L_'. |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
78 |
s nextPutAll: (class theNonMetaclass name copyReplaceAll: $: with: $_). |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
79 |
class isMeta ifTrue:[ |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
80 |
s nextPutAll: '_class' |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
81 |
]. |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
82 |
s nextPut: $_. |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
83 |
selector isBinarySelector ifTrue:[ |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
84 |
selector do:[:c | |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
85 |
s nextPutAll: (SelectorSpecialCharMappingTable at: c) |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
86 |
]. |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
87 |
] ifFalse:[ |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
88 |
selector do:[:c | |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
89 |
c isAlphaNumeric ifTrue:[ |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
90 |
s nextPut: c |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
91 |
] ifFalse:[ |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
92 |
s nextPut: $_. |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
93 |
c == $: ifFalse:[ |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
94 |
c codePoint printOn: s. |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
95 |
] |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
96 |
]. |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
97 |
] |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
98 |
]. |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
99 |
]. |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
100 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
101 |
" |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
102 |
TLLVMIREmitPass llvmFunctionNameForClass: TLLVMIREmitPass class selector: #llvmFunctionNameForClass:selector: |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
103 |
TLLVMIREmitPass llvmFunctionNameForClass: SmallInteger selector: #+ |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
104 |
TLLVMIREmitPass llvmFunctionNameForClass: Object selector: #~= |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
105 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
106 |
" |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
107 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
108 |
"Created: / 30-08-2015 / 09:23:36 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
109 |
"Modified: / 31-08-2015 / 07:04:53 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
110 |
! ! |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
111 |
|
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
7
diff
changeset
|
112 |
!TLLVMCodeGenerator methodsFor:'visiting'! |
6
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
113 |
|
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
114 |
visitArgument: anRBVariableNode |
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
115 |
| binding value | |
6
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
116 |
|
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
117 |
binding := anRBVariableNode binding. |
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
118 |
binding isArgumentBinding ifTrue:[ |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
119 |
value := function parameterAt: binding index. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
120 |
value name: binding name. |
6
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
121 |
] ifFalse:[ |
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
122 |
| block allocas | |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
123 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
124 |
allocas := anRBVariableNode scope llvmAllocas. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
125 |
block := asm block. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
126 |
asm block: allocas. |
16
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
127 |
value := asm alloca: (binding type asLLVMTypeInModule: context llvmModule) as: binding name. |
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
128 |
asm block: block. |
6
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
129 |
]. |
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
130 |
binding llvmValue: value. |
6
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
131 |
|
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
132 |
"Created: / 02-09-2015 / 08:43:00 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
16
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
133 |
"Modified: / 24-09-2015 / 16:18:03 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
6
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
134 |
! ! |
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
135 |
|
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
7
diff
changeset
|
136 |
!TLLVMCodeGenerator methodsFor:'visitor-double dispatching'! |
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
137 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
138 |
acceptArrayNode: anArrayNode |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
139 |
self notYetImplemented |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
140 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
141 |
"Created: / 31-08-2015 / 10:14:19 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
142 |
! |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
143 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
144 |
acceptAssignmentNode: anAssignmentNode |
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
145 |
| value binding | |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
146 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
147 |
value := self visitNode: anAssignmentNode value. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
148 |
binding := anAssignmentNode variable binding. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
149 |
asm store: value _: binding llvmValue. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
150 |
^ value |
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
151 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
152 |
"Created: / 31-08-2015 / 10:14:13 / 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:
12
diff
changeset
|
153 |
"Modified: / 23-09-2015 / 21:52:41 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
154 |
! |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
155 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
156 |
acceptBlockNode: aBlockNode |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
157 |
self notYetImplemented |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
158 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
159 |
"Created: / 31-08-2015 / 10:14:08 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
160 |
! |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
161 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
162 |
acceptCascadeNode: aCascadeNode |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
163 |
self notYetImplemented |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
164 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
165 |
"Created: / 31-08-2015 / 10:14:02 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
166 |
! |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
167 |
|
11
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
168 |
acceptIfTrueIfFalseNode: node |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
169 |
| condition thenBody thenBlock thenResult elseBody elseBlock elseResult joinBlock result | |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
170 |
|
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
171 |
condition := self visitNode: node receiver. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
172 |
thenBody := node arguments first body. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
173 |
thenBlock := function addBasicBlock. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
174 |
|
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
175 |
elseBody := node arguments second body. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
176 |
elseBlock := function addBasicBlock. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
177 |
|
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
178 |
asm if: condition then: thenBlock else: elseBlock. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
179 |
"/ Code true-branch |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
180 |
asm block: thenBlock. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
181 |
thenResult := self visitNode: thenBody. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
182 |
thenResult isReturnInst ifFalse:[ |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
183 |
joinBlock notNil ifTrue:[ joinBlock function addBasicBlock ]. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
184 |
asm br: joinBlock. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
185 |
]. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
186 |
|
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
187 |
"/ Code false-branch |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
188 |
asm block: elseBlock. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
189 |
elseResult := self visitNode: elseBody. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
190 |
elseResult isReturnInst ifFalse:[ |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
191 |
joinBlock notNil ifTrue:[ joinBlock function addBasicBlock ]. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
192 |
asm br: joinBlock. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
193 |
]. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
194 |
joinBlock notNil ifTrue:[ |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
195 |
asm block: joinBlock. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
196 |
]. |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
197 |
|
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
198 |
"Created: / 15-09-2015 / 11:59:27 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
199 |
"Modified: / 16-09-2015 / 05:28:33 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
200 |
! |
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
201 |
|
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
202 |
acceptIfTrueNode: node |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
203 |
| condition thenBody thenBlock thenResult joinBlock result | |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
204 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
205 |
condition := self visitNode: node receiver. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
206 |
thenBody := node arguments first body. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
207 |
thenBlock := function addBasicBlock. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
208 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
209 |
joinBlock := function addBasicBlock. |
6
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
210 |
|
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
211 |
asm if: condition then: thenBlock else: joinBlock. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
212 |
"/ Code true-branch |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
213 |
asm block: thenBlock. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
214 |
thenResult := self visitNode: thenBody. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
215 |
thenResult isReturnInst ifFalse:[ |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
216 |
joinBlock notNil ifTrue:[ joinBlock function addBasicBlock ]. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
217 |
asm br: joinBlock. |
6
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
218 |
]. |
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
219 |
|
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
220 |
asm block: joinBlock. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
221 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
222 |
"Created: / 23-09-2015 / 21:57:31 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
6
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
223 |
! |
0c806a7f1888
Initial support for inline assembly
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
4
diff
changeset
|
224 |
|
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
225 |
acceptLiteralNode: aLiteralNode |
16
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
226 |
^ aLiteralNode binding asLLVMValueInModule: context llvmModule. |
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
227 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
228 |
"Created: / 31-08-2015 / 10:13:55 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
16
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
229 |
"Modified: / 24-09-2015 / 16:17:51 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
230 |
! |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
231 |
|
7
7556e3d41d80
Make 3 + 4 working, though the code is rather messy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
6
diff
changeset
|
232 |
acceptMessageNode: aMessageNode |
11
6d39860d0fdb
First shot on #ifTrie:ifFalse: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
10
diff
changeset
|
233 |
| receiver arguments methodFunction | |
7
7556e3d41d80
Make 3 + 4 working, though the code is rather messy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
6
diff
changeset
|
234 |
|
7556e3d41d80
Make 3 + 4 working, though the code is rather messy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
6
diff
changeset
|
235 |
receiver := self visitNode: aMessageNode receiver. |
7556e3d41d80
Make 3 + 4 working, though the code is rather messy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
6
diff
changeset
|
236 |
arguments := aMessageNode arguments collect: [:argument | self visitNode: argument ]. |
16
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
237 |
methodFunction := aMessageNode binding asLLVMValueInModule: context llvmModule. |
7
7556e3d41d80
Make 3 + 4 working, though the code is rather messy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
6
diff
changeset
|
238 |
|
7556e3d41d80
Make 3 + 4 working, though the code is rather messy
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
6
diff
changeset
|
239 |
^ asm call: methodFunction _: { receiver } , arguments |
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
240 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
241 |
"Created: / 31-08-2015 / 10:13:51 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
16
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
242 |
"Modified: / 24-09-2015 / 16:17:54 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
243 |
! |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
244 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
245 |
acceptMethodNode: aMethodNode |
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
246 |
| allocas entry | |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
247 |
|
16
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
248 |
function := aMethodNode binding asLLVMValueInModule: context llvmModule. |
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
249 |
allocas := function addBasicBlockNamed: 'allocas'. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
250 |
entry := function addBasicBlockNamed: 'entry'. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
251 |
aMethodNode scope llvmAllocas: allocas. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
252 |
asm := entry builder. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
253 |
super acceptMethodNode: aMethodNode. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
254 |
"/ Finally, link allocas to entry. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
255 |
asm block: allocas. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
256 |
asm br: entry. |
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
257 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
258 |
"Created: / 31-08-2015 / 09:42:58 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
16
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
259 |
"Modified: / 24-09-2015 / 16:17:59 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
260 |
! |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
261 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
262 |
acceptOptimizedNode: anOptimizedNode |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
263 |
self notYetImplemented |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
264 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
265 |
"Created: / 31-08-2015 / 10:13:46 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
266 |
! |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
267 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
268 |
acceptPragmaNode: aPragmaNode |
16
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
269 |
aPragmaNode selector = 'primitive:' ifTrue:[ |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
270 |
self acceptPrimitiveNode: aPragmaNode |
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
271 |
]. |
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
272 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
273 |
"Created: / 31-08-2015 / 10:13:41 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
16
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
274 |
"Modified: / 24-09-2015 / 18:53:54 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
275 |
! |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
276 |
|
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
277 |
acceptPrimitiveNode: aPragmaNode |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
278 |
| primitiveBlock methodIsForMeta emitMethodNode emitMethod | |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
279 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
280 |
primitiveBlock := aPragmaNode arguments first. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
281 |
methodIsForMeta := aPragmaNode parent binding mclass isMetaclass. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
282 |
emitMethodNode := RBMethodNode new. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
283 |
emitMethodNode arguments: |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
284 |
(primitiveBlock arguments collect:[ :e|e copy]) , |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
285 |
(methodIsForMeta ifFalse:[{ RBVariableNode named: 'zelf' }] ifTrue:[#()]) , |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
286 |
(primitiveBlock topNode arguments collect:[ :e|e copy]). |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
287 |
emitMethodNode body: primitiveBlock body copy. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
288 |
emitMethodNode variableNodesDo:[ :variableNode | |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
289 |
variableNode name = 'self' ifTrue:[ |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
290 |
variableNode name: 'zelf'. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
291 |
]. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
292 |
]. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
293 |
emitMethodNode selector:(String streamContents: [ :s | emitMethodNode arguments size timesRepeat:[s nextPutAll:'_:'] ]). |
16
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
294 |
emitMethod := Compiler compile: emitMethodNode formattedCode forClass: self class install: false. |
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
295 |
emitMethod |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
296 |
valueWithReceiver: nil |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
297 |
arguments: { asm } , ((1 to: function numArgs) collect: [ :i | function parameterAt: i ]) |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
298 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
299 |
"Created: / 22-09-2015 / 18:03:33 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
16
17a2d1d9f205
Added standalone Tea compiler - teak
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
15
diff
changeset
|
300 |
"Modified: / 24-09-2015 / 18:58:42 / 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:
12
diff
changeset
|
301 |
! |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
302 |
|
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
303 |
acceptReturnNode: aReturnNode |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
304 |
| value | |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
305 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
306 |
value := self visitNode: aReturnNode value. |
12
d716a8181fc1
Make TCompilerPass>>acceptSequenceNode: to return value of last statement.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
11
diff
changeset
|
307 |
^ asm ret: value. |
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
308 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
309 |
"Created: / 31-08-2015 / 10:13:36 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
12
d716a8181fc1
Make TCompilerPass>>acceptSequenceNode: to return value of last statement.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
11
diff
changeset
|
310 |
"Modified: / 18-09-2015 / 06:08:30 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
311 |
! |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
312 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
313 |
acceptSTXPrimitiveCCodeNode: aPrimitiveCCodeNode |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
314 |
self notYetImplemented |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
315 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
316 |
"Created: / 31-08-2015 / 10:13:31 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
317 |
! |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
318 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
319 |
acceptSTXPrimitiveValueCCodeNode: aPrimitiveValueCCodeNode |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
320 |
self notYetImplemented |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
321 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
322 |
"Created: / 31-08-2015 / 10:13:27 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
323 |
! |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
324 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
325 |
acceptVariableNode: aVariableNode |
15
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
326 |
| binding | |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
327 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
328 |
binding := aVariableNode binding. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
329 |
^ binding isArgumentBinding ifTrue:[ |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
330 |
binding llvmValue. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
331 |
] ifFalse:[ |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
332 |
asm load: binding llvmValue. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
333 |
]. |
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
334 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
335 |
"Created: / 31-08-2015 / 10:13:08 / 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:
12
diff
changeset
|
336 |
"Modified: / 23-09-2015 / 22:30:57 / 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:
12
diff
changeset
|
337 |
! |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
338 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
339 |
acceptWhileTrueNode: node |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
340 |
| loopConditionBlock loopConditionBody loopConditionResult loopBodyBody loopBodyBlock loopBodyResult joinBlock | |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
341 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
342 |
loopConditionBody := node receiver body. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
343 |
loopConditionBlock := function addBasicBlock. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
344 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
345 |
loopBodyBody := node arguments first body. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
346 |
loopBodyBlock := function addBasicBlock. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
347 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
348 |
joinBlock := function addBasicBlock. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
349 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
350 |
asm br: loopConditionBlock. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
351 |
asm block: loopConditionBlock. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
352 |
loopConditionResult := self visitNode: loopConditionBody. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
353 |
asm if: loopConditionResult then: loopBodyBlock else: joinBlock. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
354 |
asm block: loopBodyBlock. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
355 |
loopBodyResult := self visitNode: loopBodyBody. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
356 |
loopBodyResult isReturnInst ifFalse:[ |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
357 |
asm br: loopConditionBlock |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
358 |
]. |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
359 |
asm block: joinBlock |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
360 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
361 |
"Created: / 23-09-2015 / 22:02:39 / 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:
12
diff
changeset
|
362 |
! ! |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
363 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
364 |
!TLLVMCodeGenerator class methodsFor:'documentation'! |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
365 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
366 |
version_HG |
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
367 |
|
10a95d798b36
Added support for local variables and #whileTrue: special form
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
12
diff
changeset
|
368 |
^ '$Changeset: <not expanded> $' |
4
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
369 |
! ! |
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
370 |
|
3d80069ea3e2
More work on basic infrastructure - types, bindings & compilation.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
371 |
|
9
569bf5707c7e
Added support for special forms to parser and typechecker (somewhat)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
7
diff
changeset
|
372 |
TLLVMCodeGenerator initialize! |