From d993df74c39d7c0938194485d7c41ba94ed419ec Mon Sep 17 00:00:00 2001 From: Eric Holk Date: Thu, 24 May 2012 10:23:46 -0700 Subject: Teach parser and related things to understand const kind bounds. --- src/rustc/metadata/tydecode.rs | 1 + src/rustc/metadata/tyencode.rs | 1 + src/rustc/middle/ty.rs | 1 + src/rustc/middle/typeck/check/method.rs | 4 +++- src/rustc/middle/typeck/check/vtable.rs | 4 +++- src/rustc/middle/typeck/collect.rs | 1 + 6 files changed, 10 insertions(+), 2 deletions(-) (limited to 'src/rustc') diff --git a/src/rustc/metadata/tydecode.rs b/src/rustc/metadata/tydecode.rs index d5b149d4e36..7d242a7e9e0 100644 --- a/src/rustc/metadata/tydecode.rs +++ b/src/rustc/metadata/tydecode.rs @@ -501,6 +501,7 @@ fn parse_bounds(st: @pstate, conv: conv_did) -> @[ty::param_bound] { bounds += [alt check next(st) { 'S' { ty::bound_send } 'C' { ty::bound_copy } + 'K' { ty::bound_const } 'I' { ty::bound_iface(parse_ty(st, conv)) } '.' { break; } }]; diff --git a/src/rustc/metadata/tyencode.rs b/src/rustc/metadata/tyencode.rs index 67f9e5bc0af..cd2f86715e0 100644 --- a/src/rustc/metadata/tyencode.rs +++ b/src/rustc/metadata/tyencode.rs @@ -392,6 +392,7 @@ fn enc_bounds(w: io::writer, cx: @ctxt, bs: @[ty::param_bound]) { alt bound { ty::bound_send { w.write_char('S'); } ty::bound_copy { w.write_char('C'); } + ty::bound_const { w.write_char('K'); } ty::bound_iface(tp) { w.write_char('I'); enc_ty(w, cx, tp); diff --git a/src/rustc/middle/ty.rs b/src/rustc/middle/ty.rs index b3701bd74f4..f1371b42598 100644 --- a/src/rustc/middle/ty.rs +++ b/src/rustc/middle/ty.rs @@ -401,6 +401,7 @@ enum type_err { enum param_bound { bound_copy, bound_send, + bound_const, bound_iface(t), } diff --git a/src/rustc/middle/typeck/check/method.rs b/src/rustc/middle/typeck/check/method.rs index 0aa8b741d12..0d89e246e91 100644 --- a/src/rustc/middle/typeck/check/method.rs +++ b/src/rustc/middle/typeck/check/method.rs @@ -47,7 +47,9 @@ impl methods for lookup { let bounds = tcx.ty_param_bounds.get(did.node); for vec::each(*bounds) {|bound| let (iid, bound_substs) = alt bound { - ty::bound_copy | ty::bound_send { cont; /* ok */ } + ty::bound_copy | ty::bound_send | ty::bound_const { + cont; /* ok */ + } ty::bound_iface(bound_t) { alt check ty::get(bound_t).struct { ty::ty_iface(i, substs) { (i, substs) } diff --git a/src/rustc/middle/typeck/check/vtable.rs b/src/rustc/middle/typeck/check/vtable.rs index 5201ce1b558..f279cab012f 100644 --- a/src/rustc/middle/typeck/check/vtable.rs +++ b/src/rustc/middle/typeck/check/vtable.rs @@ -67,7 +67,9 @@ fn lookup_vtable(fcx: @fn_ctxt, isc: resolve::iscopes, sp: span, let mut n_bound = 0u; for vec::each(*tcx.ty_param_bounds.get(did.node)) { |bound| alt bound { - ty::bound_send | ty::bound_copy { /* ignore */ } + ty::bound_send | ty::bound_copy | ty::bound_const { + /* ignore */ + } ty::bound_iface(ity) { alt check ty::get(ity).struct { ty::ty_iface(idid, substs) { diff --git a/src/rustc/middle/typeck/collect.rs b/src/rustc/middle/typeck/collect.rs index 0674a5e79df..edaa25396a8 100644 --- a/src/rustc/middle/typeck/collect.rs +++ b/src/rustc/middle/typeck/collect.rs @@ -657,6 +657,7 @@ fn ty_param_bounds(ccx: @crate_ctxt, alt b { ast::bound_send { [ty::bound_send] } ast::bound_copy { [ty::bound_copy] } + ast::bound_const { [ty::bound_const] } ast::bound_iface(t) { let ity = ast_ty_to_ty(ccx, empty_rscope, t); alt ty::get(ity).struct { -- cgit 1.4.1-3-g733a5