Sketch trans_vtbl.

This commit is contained in:
Graydon Hoare 2010-12-16 18:34:04 -08:00
parent bfdba2dbcc
commit a3f828f941
3 changed files with 14 additions and 4 deletions

View File

@ -199,10 +199,10 @@ type _fn = rec(effect effect,
block body);
type method_ = rec(ident ident, _fn meth, def_id id);
type method_ = rec(ident ident, _fn meth, def_id id, ann ann);
type method = spanned[method_];
type obj_field = rec(@ty ty, ident ident, def_id id);
type obj_field = rec(@ty ty, ident ident, def_id id, ann ann);
type _obj = rec(vec[obj_field] fields,
vec[@method] methods);

View File

@ -1285,7 +1285,7 @@ impure fn parse_item_fn(parser p, ast.effect eff) -> @ast.item {
impure fn parse_obj_field(parser p) -> ast.obj_field {
auto ty = parse_ty(p);
auto ident = parse_ident(p);
ret rec(ty=ty, ident=ident, id=p.next_def_id());
ret rec(ty=ty, ident=ident, id=p.next_def_id(), ann=ast.ann_none);
}
impure fn parse_method(parser p) -> @ast.method {
@ -1294,7 +1294,8 @@ impure fn parse_method(parser p) -> @ast.method {
expect(p, token.FN);
auto ident = parse_ident(p);
auto f = parse_fn(p, eff);
auto meth = rec(ident = ident, meth = f, id = p.next_def_id());
auto meth = rec(ident=ident, meth=f,
id=p.next_def_id(), ann=ast.ann_none);
ret @spanned(lo, f.body.span, meth);
}

View File

@ -2307,6 +2307,15 @@ impure fn trans_fn(@crate_ctxt cx, &ast._fn f, ast.def_id fid,
}
}
impure fn trans_vtbl(@crate_ctxt cx, &ast._obj ob) -> ValueRef {
let vec[ValueRef] methods = vec();
for (@ast.method m in ob.methods) {
trans_fn(cx, m.node.meth, m.node.id, m.node.ann);
methods += cx.item_ids.get(m.node.id);
}
ret C_struct(methods);
}
fn trans_obj(@crate_ctxt cx, &ast._obj ob, ast.def_id oid,
&ast.ann ann) {