Skip to content

Commit 860de53

Browse files
committed
---
yaml --- r: 739 b: refs/heads/master c: 19d0fa1 h: refs/heads/master i: 737: 7fa34a4 735: 2bfa588 v: v3
1 parent 265d056 commit 860de53

File tree

4 files changed

+37
-5
lines changed

4 files changed

+37
-5
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 44e4b2d63aef1e6cb572acfa327ea2c3a36083e8
2+
refs/heads/master: 19d0fa107aeb79e7d2e1e4222fad4be8addf679d

trunk/src/comp/front/ast.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,19 @@ import util.common.none;
88

99
type ident = str;
1010

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+
1124
type crate = rec(_mod module);
1225

1326
type block = vec[@stmt];
@@ -62,7 +75,7 @@ tag expr {
6275
expr_binary(binop, @expr, @expr);
6376
expr_unary(unop, @expr);
6477
expr_lit(@lit);
65-
expr_ident(ident);
78+
expr_name(name, option[referent]);
6679
expr_field(@expr, ident);
6780
expr_index(@expr, @expr);
6881
expr_cast(@expr, ty);
@@ -88,6 +101,7 @@ tag ty {
88101
ty_char;
89102
ty_str;
90103
ty_box(@ty);
104+
ty_path(path, option[referent]);
91105
}
92106

93107
tag mode {
@@ -106,6 +120,7 @@ type _mod = hashmap[ident,item];
106120
tag item {
107121
item_fn(@_fn);
108122
item_mod(@_mod);
123+
item_ty(@ty);
109124
}
110125

111126

trunk/src/comp/front/parser.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,24 @@ io fn parse_lit(parser p) -> @ast.lit {
153153
fail;
154154
}
155155

156+
io fn parse_name(parser p, ast.ident id) -> ast.name {
157+
p.bump();
156158

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+
}
157174

158175
io fn parse_bottom_expr(parser p) -> @ast.expr {
159176
alt (p.peek()) {
@@ -203,8 +220,7 @@ io fn parse_bottom_expr(parser p) -> @ast.expr {
203220
}
204221

205222
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]);
208224
}
209225

210226
case (_) {

trunk/src/comp/lib/llvm.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1006,7 +1006,8 @@ obj builder(BuilderRef B) {
10061006

10071007

10081008
/* 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 {
10101011
auto phi = llvm.LLVMBuildPhi(B, Ty, _str.buf(""));
10111012
check (_vec.len[ValueRef](vals) == _vec.len[BasicBlockRef](bbs));
10121013
llvm.LLVMAddIncoming(phi,

0 commit comments

Comments
 (0)