diff --git a/src/comp/front/ast.rs b/src/comp/front/ast.rs index 88b7fc78345..f4e5e5e1c80 100644 --- a/src/comp/front/ast.rs +++ b/src/comp/front/ast.rs @@ -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); diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs index 3eacb5f99ee..cd4ef3e171b 100644 --- a/src/comp/front/parser.rs +++ b/src/comp/front/parser.rs @@ -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); } diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index 8b094ffcca8..e822567777e 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -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) {