blob: 7822125d7f2ef099ced4f1256b16409f5ca29c21 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
struct Scope {
~uint8 name,
utils.Vector
stack_vars,
reg_vars,
~Scope parent,
int
next_const,
next_bool
}
/; method Scope
/; init (~uint8 name)
self.name = name
Variable v
self.stack_vars.init(len v)
self.reg_vars.init(len v)
self.next_const = 0
self.next_bool = 0
;/
/; end
_delete(self.name)
~Variable v
/; loop (int i = 0; i < self.stack_vars.count) [i++]
v = self.stack_vars.get(i)
v`.end()
;/
/; loop (int i = 0; i < self.reg_vars.count) [i++]
v = self.reg_vars.get(i)
v`.end()
;/
;/
/; _name_rec (~utils.Vector out)
/; if (self.parent !== NULL)
self.parent`._name_rec(out)
out`.push_cstr("#")
;/
out`.push_cstr(self.name)
;/
/; _base_label [utils.Vector]
utils.Vector out
out.init(1)
~uint8 mod_str = self.current.label_prefix()
out.push_cstr(mod_str)
_delete(mod_str)
self._name_rec(~out)
return out
;/
/; label_start [~uint8]
utils.Vector base = self._base_label()
base.push_cstr("#start\0")
return base.as_cstr()
;/
/; label_rep [~uint8]
utils.Vector base = self._base_label()
base.push_cstr("#rep\0")
return base.as_cstr()
;/
/; label_end [~uint8]
utils.Vector base = self._base_label()
base.push_cstr("#end\0")
return base.as_cstr()
;/
/; label_next_const [~uint8]
utils.Vector base = self._base_label()
base.push_cstr("#const\0")
~uint8 str = utils.int_to_str(self.next_const)
base.push_cstr(str)
self.next_const++
_delete(str)
return base.as_cstr()
;/
/; label_bool [~uint8]
utils.Vector base = self._base_label()
base.push_cstr("#bool\0")
~uint8 str = utils.int_to_str(self.next_bool)
base.push_cstr(str)
self.next_bool++
_delete(str)
return base.as_cstr()
;/
/; label_bool_adv
self.next_bool++
;/
/; subscope (~uint8 name) [Scope]
Scope out
utils.Vector str
str.from_cstr(name)
_delete(name)
out.init(str.as_cstr(), self.current)
out.parent = ~self
return out
;/
;/
|