File tree Expand file tree Collapse file tree 4 files changed +37
-5
lines changed Expand file tree Collapse file tree 4 files changed +37
-5
lines changed Original file line number Diff line number Diff line change 1
1
---
2
- refs/heads/master: 44e4b2d63aef1e6cb572acfa327ea2c3a36083e8
2
+ refs/heads/master: 19d0fa107aeb79e7d2e1e4222fad4be8addf679d
Original file line number Diff line number Diff line change @@ -8,6 +8,19 @@ import util.common.none;
8
8
9
9
type ident = str ;
10
10
11
+ type name = rec ( ident ident, vec[ ty] types ) ;
12
+ type path = vec[ name ] ;
13
+
14
+ type crate_id = int ;
15
+ type slot_id = int ;
16
+ type item_id = int ;
17
+
18
+ tag referent {
19
+ ref_slot( crate_id, slot_id) ;
20
+ ref_item ( crate_id, item_id) ;
21
+ }
22
+
23
+
11
24
type crate = rec ( _mod module ) ;
12
25
13
26
type block = vec [ @stmt] ;
@@ -62,7 +75,7 @@ tag expr {
62
75
expr_binary ( binop, @expr, @expr) ;
63
76
expr_unary ( unop, @expr) ;
64
77
expr_lit ( @lit) ;
65
- expr_ident ( ident ) ;
78
+ expr_name ( name , option [ referent ] ) ;
66
79
expr_field ( @expr, ident) ;
67
80
expr_index ( @expr, @expr) ;
68
81
expr_cast ( @expr, ty) ;
@@ -88,6 +101,7 @@ tag ty {
88
101
ty_char;
89
102
ty_str;
90
103
ty_box ( @ty) ;
104
+ ty_path ( path, option[ referent] ) ;
91
105
}
92
106
93
107
tag mode {
@@ -106,6 +120,7 @@ type _mod = hashmap[ident,item];
106
120
tag item {
107
121
item_fn( @_fn) ;
108
122
item_mod ( @_mod) ;
123
+ item_ty ( @ty) ;
109
124
}
110
125
111
126
Original file line number Diff line number Diff line change @@ -153,7 +153,24 @@ io fn parse_lit(parser p) -> @ast.lit {
153
153
fail;
154
154
}
155
155
156
+ io fn parse_name ( parser p, ast . ident id) -> ast. name {
157
+ p. bump ( ) ;
156
158
159
+ let vec[ ast. ty ] tys = vec ( ) ;
160
+
161
+ alt ( p. peek ( ) ) {
162
+ case ( token. LBRACKET ) {
163
+ auto pf = parse_ty;
164
+ tys = parse_seq[ ast. ty ] ( token. LBRACKET ,
165
+ token. RBRACKET ,
166
+ some ( token. COMMA ) ,
167
+ pf, p) ;
168
+ }
169
+ case ( _) {
170
+ }
171
+ }
172
+ ret rec( ident=id, types=tys) ;
173
+ }
157
174
158
175
io fn parse_bottom_expr ( parser p) -> @ast . expr {
159
176
alt ( p. peek ( ) ) {
@@ -203,8 +220,7 @@ io fn parse_bottom_expr(parser p) -> @ast.expr {
203
220
}
204
221
205
222
case ( token. IDENT ( ?i) ) {
206
- p. bump ( ) ;
207
- ret @ast. expr_ident ( i) ;
223
+ ret @ast. expr_name ( parse_name ( p, i) , none[ ast. referent ] ) ;
208
224
}
209
225
210
226
case ( _) {
Original file line number Diff line number Diff line change @@ -1006,7 +1006,8 @@ obj builder(BuilderRef B) {
1006
1006
1007
1007
1008
1008
/* Miscellaneous instructions */
1009
- fn Phi ( TypeRef Ty , vec[ ValueRef ] vals , vec[ BasicBlockRef ] bbs ) -> ValueRef {
1009
+ fn Phi ( TypeRef Ty , vec[ ValueRef ] vals ,
1010
+ vec[ BasicBlockRef ] bbs ) -> ValueRef {
1010
1011
auto phi = llvm. LLVMBuildPhi ( B , Ty , _str. buf ( "" ) ) ;
1011
1012
check ( _vec. len [ ValueRef ] ( vals) == _vec. len [ BasicBlockRef ] ( bbs) ) ;
1012
1013
llvm. LLVMAddIncoming ( phi,
You can’t perform that action at this time.
0 commit comments