librustc: Remove "base types" from the language.

This commit is contained in:
Patrick Walton 2013-03-12 17:33:54 -07:00
parent b85158e23a
commit a410652bc9
8 changed files with 141 additions and 148 deletions

View File

@ -163,50 +163,50 @@ pub struct Session_ {
pub type Session = @Session_;
pub impl Session {
fn span_fatal(&self, sp: span, msg: ~str) -> ! {
pub impl Session_ {
fn span_fatal(@self, sp: span, msg: ~str) -> ! {
self.span_diagnostic.span_fatal(sp, msg)
}
fn fatal(&self, msg: ~str) -> ! {
fn fatal(@self, msg: ~str) -> ! {
self.span_diagnostic.handler().fatal(msg)
}
fn span_err(&self, sp: span, msg: ~str) {
fn span_err(@self, sp: span, msg: ~str) {
self.span_diagnostic.span_err(sp, msg)
}
fn err(&self, msg: ~str) {
fn err(@self, msg: ~str) {
self.span_diagnostic.handler().err(msg)
}
fn has_errors(&self) -> bool {
fn has_errors(@self) -> bool {
self.span_diagnostic.handler().has_errors()
}
fn abort_if_errors(&self) {
fn abort_if_errors(@self) {
self.span_diagnostic.handler().abort_if_errors()
}
fn span_warn(&self, sp: span, msg: ~str) {
fn span_warn(@self, sp: span, msg: ~str) {
self.span_diagnostic.span_warn(sp, msg)
}
fn warn(&self, msg: ~str) {
fn warn(@self, msg: ~str) {
self.span_diagnostic.handler().warn(msg)
}
fn span_note(&self, sp: span, msg: ~str) {
fn span_note(@self, sp: span, msg: ~str) {
self.span_diagnostic.span_note(sp, msg)
}
fn note(&self, msg: ~str) {
fn note(@self, msg: ~str) {
self.span_diagnostic.handler().note(msg)
}
fn span_bug(&self, sp: span, msg: ~str) -> ! {
fn span_bug(@self, sp: span, msg: ~str) -> ! {
self.span_diagnostic.span_bug(sp, msg)
}
fn bug(&self, msg: ~str) -> ! {
fn bug(@self, msg: ~str) -> ! {
self.span_diagnostic.handler().bug(msg)
}
fn span_unimpl(&self, sp: span, msg: ~str) -> ! {
fn span_unimpl(@self, sp: span, msg: ~str) -> ! {
self.span_diagnostic.span_unimpl(sp, msg)
}
fn unimpl(&self, msg: ~str) -> ! {
fn unimpl(@self, msg: ~str) -> ! {
self.span_diagnostic.handler().unimpl(msg)
}
fn span_lint_level(&self, level: lint::level, sp: span, +msg: ~str) {
fn span_lint_level(@self, level: lint::level, sp: span, +msg: ~str) {
match level {
lint::allow => { },
lint::warn => self.span_warn(sp, msg),
@ -215,7 +215,7 @@ pub impl Session {
}
}
}
fn span_lint(&self, lint_mode: lint::lint,
fn span_lint(@self, lint_mode: lint::lint,
expr_id: ast::node_id,
item_id: ast::node_id,
span: span,
@ -224,55 +224,55 @@ pub impl Session {
self.lint_settings, lint_mode, expr_id, item_id);
self.span_lint_level(level, span, msg);
}
fn next_node_id(&self) -> ast::node_id {
fn next_node_id(@self) -> ast::node_id {
return syntax::parse::next_node_id(self.parse_sess);
}
fn diagnostic(&self) -> @diagnostic::span_handler {
fn diagnostic(@self) -> @diagnostic::span_handler {
self.span_diagnostic
}
fn debugging_opt(&self, opt: uint) -> bool {
fn debugging_opt(@self, opt: uint) -> bool {
(self.opts.debugging_opts & opt) != 0u
}
// This exists to help with refactoring to eliminate impossible
// cases later on
fn impossible_case(&self, sp: span, msg: &str) -> ! {
fn impossible_case(@self, sp: span, msg: &str) -> ! {
self.span_bug(sp, fmt!("Impossible case reached: %s", msg));
}
fn verbose(&self) -> bool { self.debugging_opt(verbose) }
fn time_passes(&self) -> bool { self.debugging_opt(time_passes) }
fn count_llvm_insns(&self) -> bool {
fn verbose(@self) -> bool { self.debugging_opt(verbose) }
fn time_passes(@self) -> bool { self.debugging_opt(time_passes) }
fn count_llvm_insns(@self) -> bool {
self.debugging_opt(count_llvm_insns)
}
fn count_type_sizes(&self) -> bool {
fn count_type_sizes(@self) -> bool {
self.debugging_opt(count_type_sizes)
}
fn time_llvm_passes(&self) -> bool {
fn time_llvm_passes(@self) -> bool {
self.debugging_opt(time_llvm_passes)
}
fn trans_stats(&self) -> bool { self.debugging_opt(trans_stats) }
fn meta_stats(&self) -> bool { self.debugging_opt(meta_stats) }
fn no_asm_comments(&self) -> bool { self.debugging_opt(no_asm_comments) }
fn no_verify(&self) -> bool { self.debugging_opt(no_verify) }
fn trace(&self) -> bool { self.debugging_opt(trace) }
fn coherence(&self) -> bool { self.debugging_opt(coherence) }
fn borrowck_stats(&self) -> bool { self.debugging_opt(borrowck_stats) }
fn borrowck_note_pure(&self) -> bool {
fn trans_stats(@self) -> bool { self.debugging_opt(trans_stats) }
fn meta_stats(@self) -> bool { self.debugging_opt(meta_stats) }
fn no_asm_comments(@self) -> bool { self.debugging_opt(no_asm_comments) }
fn no_verify(@self) -> bool { self.debugging_opt(no_verify) }
fn trace(@self) -> bool { self.debugging_opt(trace) }
fn coherence(@self) -> bool { self.debugging_opt(coherence) }
fn borrowck_stats(@self) -> bool { self.debugging_opt(borrowck_stats) }
fn borrowck_note_pure(@self) -> bool {
self.debugging_opt(borrowck_note_pure)
}
fn borrowck_note_loan(&self) -> bool {
fn borrowck_note_loan(@self) -> bool {
self.debugging_opt(borrowck_note_loan)
}
fn no_monomorphic_collapse(&self) -> bool {
fn no_monomorphic_collapse(@self) -> bool {
self.debugging_opt(no_monomorphic_collapse)
}
fn str_of(&self, id: ast::ident) -> @~str {
fn str_of(@self, id: ast::ident) -> @~str {
self.parse_sess.interner.get(id)
}
fn ident_of(&self, +st: ~str) -> ast::ident {
fn ident_of(@self, +st: ~str) -> ast::ident {
self.parse_sess.interner.intern(@st)
}
fn intr(&self) -> @syntax::parse::token::ident_interner {
fn intr(@self) -> @syntax::parse::token::ident_interner {
self.parse_sess.interner
}
}

View File

@ -1640,8 +1640,8 @@ enum ReadKind {
PartiallyMovedValue
}
pub impl @Liveness {
fn check_ret(&self, id: node_id, sp: span, _fk: &visit::fn_kind,
pub impl Liveness {
fn check_ret(@self, id: node_id, sp: span, _fk: &visit::fn_kind,
entry_ln: LiveNode) {
if self.live_on_entry(entry_ln, self.s.no_ret_var).is_some() {
// if no_ret_var is live, then we fall off the end of the
@ -1661,10 +1661,9 @@ pub impl @Liveness {
}
}
fn check_move_from_var(&self, ln: LiveNode,
fn check_move_from_var(@self, ln: LiveNode,
var: Variable,
move_expr: @expr)
{
move_expr: @expr) {
/*!
*
* Checks whether `var` is live on entry to any of the
@ -1686,7 +1685,7 @@ pub impl @Liveness {
}
}
fn consider_last_use(&self, expr: @expr, ln: LiveNode, var: Variable) {
fn consider_last_use(@self, expr: @expr, ln: LiveNode, var: Variable) {
debug!("consider_last_use(expr.id=%?, ln=%s, var=%s)",
expr.id, ln.to_str(), var.to_str());
@ -1696,7 +1695,7 @@ pub impl @Liveness {
}
}
fn check_lvalue(&self, expr: @expr, vt: vt<@Liveness>) {
fn check_lvalue(@self, expr: @expr, vt: vt<@Liveness>) {
match expr.node {
expr_path(_) => {
match self.tcx.def_map.get(&expr.id) {
@ -1724,18 +1723,18 @@ pub impl @Liveness {
_ => {
// For other kinds of lvalues, no checks are required,
// and any embedded expressions are actually rvalues
visit::visit_expr(expr, *self, vt);
visit::visit_expr(expr, self, vt);
}
}
}
fn check_for_reassignments_in_pat(&self, pat: @pat) {
fn check_for_reassignments_in_pat(@self, pat: @pat) {
do self.pat_bindings(pat) |ln, var, sp| {
self.check_for_reassignment(ln, var, sp);
}
}
fn check_for_reassignment(&self, ln: LiveNode, var: Variable,
fn check_for_reassignment(@self, ln: LiveNode, var: Variable,
orig_span: span) {
match self.assigned_on_exit(ln, var) {
Some(ExprNode(span)) => {
@ -1756,10 +1755,9 @@ pub impl @Liveness {
}
}
fn report_illegal_move(&self, lnk: LiveNodeKind,
fn report_illegal_move(@self, lnk: LiveNodeKind,
var: Variable,
move_expr: @expr)
{
move_expr: @expr) {
// the only time that it is possible to have a moved variable
// used by ExitNode would be arguments or fields in a ctor.
// we give a slightly different error message in those cases.
@ -1822,11 +1820,10 @@ pub impl @Liveness {
};
}
fn report_move_location(&self, move_expr: @expr,
fn report_move_location(@self, move_expr: @expr,
var: Variable,
expr_descr: &str,
pronoun: &str)
{
pronoun: &str) {
let move_expr_ty = ty::expr_ty(self.tcx, move_expr);
let name = self.ir.variable_name(var);
self.tcx.sess.span_note(
@ -1837,7 +1834,7 @@ pub impl @Liveness {
ty_to_str(self.tcx, move_expr_ty)));
}
fn report_illegal_read(&self, chk_span: span,
fn report_illegal_read(@self, chk_span: span,
lnk: LiveNodeKind,
var: Variable,
rk: ReadKind) {
@ -1868,12 +1865,12 @@ pub impl @Liveness {
}
}
fn should_warn(&self, var: Variable) -> Option<@~str> {
fn should_warn(@self, var: Variable) -> Option<@~str> {
let name = self.ir.variable_name(var);
if name[0] == ('_' as u8) { None } else { Some(name) }
}
fn warn_about_unused_args(&self, decl: &fn_decl, entry_ln: LiveNode) {
fn warn_about_unused_args(@self, decl: &fn_decl, entry_ln: LiveNode) {
for decl.inputs.each |arg| {
do pat_util::pat_bindings(self.tcx.def_map, arg.pat)
|_bm, p_id, sp, _n| {
@ -1883,7 +1880,7 @@ pub impl @Liveness {
}
}
fn warn_about_unused_or_dead_vars_in_pat(&self, pat: @pat) {
fn warn_about_unused_or_dead_vars_in_pat(@self, pat: @pat) {
do self.pat_bindings(pat) |ln, var, sp| {
if !self.warn_about_unused(sp, ln, var) {
self.warn_about_dead_assign(sp, ln, var);
@ -1891,7 +1888,7 @@ pub impl @Liveness {
}
}
fn warn_about_unused(&self, sp: span, ln: LiveNode, var: Variable)
fn warn_about_unused(@self, sp: span, ln: LiveNode, var: Variable)
-> bool {
if !self.used_on_entry(ln, var) {
for self.should_warn(var).each |name| {
@ -1921,7 +1918,7 @@ pub impl @Liveness {
return false;
}
fn warn_about_dead_assign(&self, sp: span, ln: LiveNode, var: Variable) {
fn warn_about_dead_assign(@self, sp: span, ln: LiveNode, var: Variable) {
if self.live_on_exit(ln, var).is_none() {
for self.should_warn(var).each |name| {
// FIXME(#3266)--make liveness warnings lintable

View File

@ -677,28 +677,28 @@ pub fn block_parent(cx: block) -> block {
// Accessors
pub impl block {
pure fn ccx(&self) -> @CrateContext { *self.fcx.ccx }
pure fn tcx(&self) -> ty::ctxt { self.fcx.ccx.tcx }
pure fn sess(&self) -> Session { self.fcx.ccx.sess }
pub impl block_ {
pure fn ccx(@mut self) -> @CrateContext { *self.fcx.ccx }
pure fn tcx(@mut self) -> ty::ctxt { self.fcx.ccx.tcx }
pure fn sess(@mut self) -> Session { self.fcx.ccx.sess }
fn node_id_to_str(&self, id: ast::node_id) -> ~str {
fn node_id_to_str(@mut self, id: ast::node_id) -> ~str {
ast_map::node_id_to_str(self.tcx().items, id, self.sess().intr())
}
fn expr_to_str(&self, e: @ast::expr) -> ~str {
fn expr_to_str(@mut self, e: @ast::expr) -> ~str {
expr_repr(self.tcx(), e)
}
fn expr_is_lval(&self, e: @ast::expr) -> bool {
fn expr_is_lval(@mut self, e: @ast::expr) -> bool {
ty::expr_is_lval(self.tcx(), self.ccx().maps.method_map, e)
}
fn expr_kind(&self, e: @ast::expr) -> ty::ExprKind {
fn expr_kind(@mut self, e: @ast::expr) -> ty::ExprKind {
ty::expr_kind(self.tcx(), self.ccx().maps.method_map, e)
}
fn def(&self, nid: ast::node_id) -> ast::def {
fn def(@mut self, nid: ast::node_id) -> ast::def {
match self.tcx().def_map.find(&nid) {
Some(v) => v,
None => {
@ -708,18 +708,18 @@ pub impl block {
}
}
fn val_str(&self, val: ValueRef) -> @str {
fn val_str(@mut self, val: ValueRef) -> @str {
val_str(self.ccx().tn, val)
}
fn llty_str(&self, llty: TypeRef) -> @str {
fn llty_str(@mut self, llty: TypeRef) -> @str {
ty_str(self.ccx().tn, llty)
}
fn ty_to_str(&self, t: ty::t) -> ~str {
fn ty_to_str(@mut self, t: ty::t) -> ~str {
ty_to_str(self.tcx(), t)
}
fn to_str(&self) -> ~str {
fn to_str(@mut self) -> ~str {
match self.node_info {
Some(node_info) => {
fmt!("[block %d]", node_info.id)

View File

@ -72,8 +72,8 @@ pub fn get_base_type(inference_context: @mut InferCtxt,
-> Option<t> {
let resolved_type;
match resolve_type(inference_context,
original_type,
resolve_ivar) {
original_type,
resolve_ivar) {
Ok(resulting_type) if !type_is_ty_var(resulting_type) => {
resolved_type = resulting_type;
}
@ -87,15 +87,6 @@ pub fn get_base_type(inference_context: @mut InferCtxt,
}
match get(resolved_type).sty {
ty_box(base_mutability_and_type) |
ty_uniq(base_mutability_and_type) |
ty_ptr(base_mutability_and_type) |
ty_rptr(_, base_mutability_and_type) => {
debug!("(getting base type) recurring");
get_base_type(inference_context, span,
base_mutability_and_type.ty)
}
ty_enum(*) | ty_trait(*) | ty_struct(*) => {
debug!("(getting base type) found base type");
Some(resolved_type)
@ -104,7 +95,8 @@ pub fn get_base_type(inference_context: @mut InferCtxt,
ty_nil | ty_bot | ty_bool | ty_int(*) | ty_uint(*) | ty_float(*) |
ty_estr(*) | ty_evec(*) | ty_bare_fn(*) | ty_closure(*) | ty_tup(*) |
ty_infer(*) | ty_param(*) | ty_self | ty_type | ty_opaque_box |
ty_opaque_closure_ptr(*) | ty_unboxed_vec(*) | ty_err => {
ty_opaque_closure_ptr(*) | ty_unboxed_vec(*) | ty_err | ty_box(_) |
ty_uniq(_) | ty_ptr(_) | ty_rptr(_, _) => {
debug!("(getting base type) no base type; found %?",
get(original_type).sty);
None

View File

@ -542,23 +542,23 @@ struct Snapshot {
region_vars_snapshot: uint,
}
pub impl @mut InferCtxt {
fn combine_fields(&self, a_is_expected: bool,
pub impl InferCtxt {
fn combine_fields(@mut self, a_is_expected: bool,
span: span) -> CombineFields {
CombineFields {infcx: *self,
CombineFields {infcx: self,
a_is_expected: a_is_expected,
span: span}
}
fn sub(&self, a_is_expected: bool, span: span) -> Sub {
fn sub(@mut self, a_is_expected: bool, span: span) -> Sub {
Sub(self.combine_fields(a_is_expected, span))
}
fn in_snapshot(&self) -> bool {
fn in_snapshot(@mut self) -> bool {
self.region_vars.in_snapshot()
}
fn start_snapshot(&self) -> Snapshot {
fn start_snapshot(@mut self) -> Snapshot {
Snapshot {
ty_var_bindings_len:
self.ty_var_bindings.bindings.len(),
@ -571,7 +571,7 @@ pub impl @mut InferCtxt {
}
}
fn rollback_to(&self, snapshot: &Snapshot) {
fn rollback_to(@mut self, snapshot: &Snapshot) {
debug!("rollback!");
rollback_to(&mut self.ty_var_bindings, snapshot.ty_var_bindings_len);
@ -584,7 +584,7 @@ pub impl @mut InferCtxt {
}
/// Execute `f` and commit the bindings if successful
fn commit<T,E>(&self, f: &fn() -> Result<T,E>) -> Result<T,E> {
fn commit<T,E>(@mut self, f: &fn() -> Result<T,E>) -> Result<T,E> {
fail_unless!(!self.in_snapshot());
debug!("commit()");
@ -599,7 +599,7 @@ pub impl @mut InferCtxt {
}
/// Execute `f`, unroll bindings on failure
fn try<T,E>(&self, f: &fn() -> Result<T,E>) -> Result<T,E> {
fn try<T,E>(@mut self, f: &fn() -> Result<T,E>) -> Result<T,E> {
debug!("try()");
do indent {
let snapshot = self.start_snapshot();
@ -613,7 +613,7 @@ pub impl @mut InferCtxt {
}
/// Execute `f` then unroll any bindings it creates
fn probe<T,E>(&self, f: &fn() -> Result<T,E>) -> Result<T,E> {
fn probe<T,E>(@mut self, f: &fn() -> Result<T,E>) -> Result<T,E> {
debug!("probe()");
do indent {
let snapshot = self.start_snapshot();
@ -634,8 +634,8 @@ fn next_simple_var<V:Copy,T:Copy>(
return id;
}
pub impl @mut InferCtxt {
fn next_ty_var_id(&self) -> TyVid {
pub impl InferCtxt {
fn next_ty_var_id(@mut self) -> TyVid {
let id = self.ty_var_counter;
self.ty_var_counter += 1;
let vals = self.ty_var_bindings.vals;
@ -643,37 +643,37 @@ pub impl @mut InferCtxt {
return TyVid(id);
}
fn next_ty_var(&self) -> ty::t {
fn next_ty_var(@mut self) -> ty::t {
ty::mk_var(self.tcx, self.next_ty_var_id())
}
fn next_ty_vars(&self, n: uint) -> ~[ty::t] {
fn next_ty_vars(@mut self, n: uint) -> ~[ty::t] {
vec::from_fn(n, |_i| self.next_ty_var())
}
fn next_int_var_id(&self) -> IntVid {
fn next_int_var_id(@mut self) -> IntVid {
IntVid(next_simple_var(&mut self.int_var_counter,
&mut self.int_var_bindings))
}
fn next_int_var(&self) -> ty::t {
fn next_int_var(@mut self) -> ty::t {
ty::mk_int_var(self.tcx, self.next_int_var_id())
}
fn next_float_var_id(&self) -> FloatVid {
fn next_float_var_id(@mut self) -> FloatVid {
FloatVid(next_simple_var(&mut self.float_var_counter,
&mut self.float_var_bindings))
}
fn next_float_var(&self) -> ty::t {
fn next_float_var(@mut self) -> ty::t {
ty::mk_float_var(self.tcx, self.next_float_var_id())
}
fn next_region_var_nb(&self, span: span) -> ty::Region {
fn next_region_var_nb(@mut self, span: span) -> ty::Region {
ty::re_infer(ty::ReVar(self.region_vars.new_region_var(span)))
}
fn next_region_var_with_lb(&self, span: span,
fn next_region_var_with_lb(@mut self, span: span,
lb_region: ty::Region) -> ty::Region {
let region_var = self.next_region_var_nb(span);
@ -685,28 +685,28 @@ pub impl @mut InferCtxt {
return region_var;
}
fn next_region_var(&self, span: span, scope_id: ast::node_id)
fn next_region_var(@mut self, span: span, scope_id: ast::node_id)
-> ty::Region {
self.next_region_var_with_lb(span, ty::re_scope(scope_id))
}
fn resolve_regions(&self) {
fn resolve_regions(@mut self) {
self.region_vars.resolve_regions();
}
fn ty_to_str(&self, t: ty::t) -> ~str {
fn ty_to_str(@mut self, t: ty::t) -> ~str {
ty_to_str(self.tcx,
self.resolve_type_vars_if_possible(t))
}
fn resolve_type_vars_if_possible(&self, typ: ty::t) -> ty::t {
match resolve_type(*self, typ, resolve_nested_tvar | resolve_ivar) {
fn resolve_type_vars_if_possible(@mut self, typ: ty::t) -> ty::t {
match resolve_type(self, typ, resolve_nested_tvar | resolve_ivar) {
result::Ok(new_type) => new_type,
result::Err(_) => typ
}
}
fn type_error_message(&self, sp: span, mk_msg: &fn(~str) -> ~str,
fn type_error_message(@mut self, sp: span, mk_msg: &fn(~str) -> ~str,
actual_ty: ty::t, err: Option<&ty::type_err>) {
let actual_ty = self.resolve_type_vars_if_possible(actual_ty);
@ -725,7 +725,7 @@ pub impl @mut InferCtxt {
}
}
fn report_mismatched_types(&self, sp: span, e: ty::t, a: ty::t,
fn report_mismatched_types(@mut self, sp: span, e: ty::t, a: ty::t,
err: &ty::type_err) {
let resolved_expected =
self.resolve_type_vars_if_possible(e);
@ -743,7 +743,7 @@ pub impl @mut InferCtxt {
self.type_error_message(sp, mk_msg, a, Some(err));
}
fn replace_bound_regions_with_fresh_regions(&self,
fn replace_bound_regions_with_fresh_regions(@mut self,
span: span,
fsig: &ty::FnSig)
-> (ty::FnSig, isr_alist) {
@ -763,7 +763,7 @@ pub impl @mut InferCtxt {
}
fn fold_regions_in_sig(
&self,
@mut self,
fn_sig: &ty::FnSig,
fldr: &fn(r: ty::Region, in_fn: bool) -> ty::Region) -> ty::FnSig
{

View File

@ -73,7 +73,7 @@ pub mod chained {
FoundAfter(@Entry<K,V>, @Entry<K,V>)
}
priv impl<K:Eq + IterBytes + Hash,V> T<K, V> {
priv impl<K:Eq + IterBytes + Hash,V> HashMap_<K, V> {
pure fn search_rem(&self, k: &K, h: uint, idx: uint,
e_root: @Entry<K,V>) -> SearchResult<K,V> {
let mut e0 = e_root;
@ -120,7 +120,7 @@ pub mod chained {
}
}
fn rehash(&self) {
fn rehash(@self) {
let n_old_chains = self.chains.len();
let n_new_chains: uint = uint::next_power_of_two(n_old_chains+1u);
let mut new_chains = chains(n_new_chains);
@ -133,7 +133,7 @@ pub mod chained {
}
}
pub impl<K:Eq + IterBytes + Hash,V> T<K, V> {
pub impl<K:Eq + IterBytes + Hash,V> HashMap_<K, V> {
pure fn each_entry(&self, blk: &fn(@Entry<K,V>) -> bool) {
// n.b. we can't use vec::iter() here because self.chains
// is stored in a mutable location.
@ -153,22 +153,20 @@ pub mod chained {
i += 1u;
}
}
}
impl<K:Eq + IterBytes + Hash,V> Container for T<K, V> {
pure fn len(&self) -> uint { self.count }
pure fn is_empty(&self) -> bool { self.count == 0 }
}
impl<K:Eq + IterBytes + Hash,V> Mutable for T<K, V> {
fn clear(&mut self) {
fn clear(@self) {
self.count = 0u;
self.chains = chains(initial_capacity);
}
}
pub impl<K:Eq + IterBytes + Hash,V> T<K, V> {
pure fn contains_key(&self, k: &K) -> bool {
impl<K:Eq + IterBytes + Hash,V> Container for HashMap_<K, V> {
pure fn len(&self) -> uint { self.count }
pure fn is_empty(&self) -> bool { self.count == 0 }
}
pub impl<K:Eq + IterBytes + Hash,V> HashMap_<K, V> {
pure fn contains_key(@self, k: &K) -> bool {
let hash = k.hash_keyed(0,0) as uint;
match self.search_tbl(k, hash) {
NotFound => false,
@ -176,7 +174,7 @@ pub mod chained {
}
}
fn insert(&self, k: K, v: V) -> bool {
fn insert(@self, k: K, v: V) -> bool {
let hash = k.hash_keyed(0,0) as uint;
match self.search_tbl(&k, hash) {
NotFound => {
@ -220,7 +218,7 @@ pub mod chained {
}
}
fn remove(&self, k: &K) -> bool {
fn remove(@self, k: &K) -> bool {
match self.search_tbl(k, k.hash_keyed(0,0) as uint) {
NotFound => false,
FoundFirst(idx, entry) => {
@ -236,22 +234,22 @@ pub mod chained {
}
}
pure fn each(&self, blk: &fn(key: &K, value: &V) -> bool) {
pure fn each(@self, blk: &fn(key: &K, value: &V) -> bool) {
for self.each_entry |entry| {
if !blk(&entry.key, &entry.value) { break; }
}
}
pure fn each_key(&self, blk: &fn(key: &K) -> bool) {
pure fn each_key(@self, blk: &fn(key: &K) -> bool) {
self.each(|k, _v| blk(k))
}
pure fn each_value(&self, blk: &fn(value: &V) -> bool) {
pure fn each_value(@self, blk: &fn(value: &V) -> bool) {
self.each(|_k, v| blk(v))
}
}
pub impl<K:Eq + IterBytes + Hash + Copy,V:Copy> T<K, V> {
pub impl<K:Eq + IterBytes + Hash + Copy,V:Copy> HashMap_<K, V> {
pure fn find(&self, k: &K) -> Option<V> {
match self.search_tbl(k, k.hash_keyed(0,0) as uint) {
NotFound => None,
@ -260,7 +258,7 @@ pub mod chained {
}
}
fn update_with_key(&self, key: K, newval: V, ff: &fn(K, V, V) -> V)
fn update_with_key(@self, key: K, newval: V, ff: &fn(K, V, V) -> V)
-> bool {
/*
match self.find(key) {
@ -312,7 +310,7 @@ pub mod chained {
}
}
fn update(&self, key: K, newval: V, ff: &fn(V, V) -> V) -> bool {
fn update(@self, key: K, newval: V, ff: &fn(V, V) -> V) -> bool {
return self.update_with_key(key, newval, |_k, v, v1| ff(v,v1));
}
@ -325,7 +323,8 @@ pub mod chained {
}
}
pub impl<K:Eq + IterBytes + Hash + Copy + ToStr,V:ToStr + Copy> T<K, V> {
pub impl<K:Eq + IterBytes + Hash + Copy + ToStr,V:ToStr + Copy>
HashMap_<K, V> {
fn to_writer(&self, wr: @io::Writer) {
if self.count == 0u {
wr.write_str(~"{}");
@ -348,7 +347,7 @@ pub mod chained {
}
impl<K:Eq + IterBytes + Hash + Copy + ToStr,V:ToStr + Copy> ToStr
for T<K, V> {
for HashMap_<K, V> {
pure fn to_str(&self) -> ~str {
unsafe {
// Meh -- this should be safe
@ -357,7 +356,8 @@ pub mod chained {
}
}
impl<K:Eq + IterBytes + Hash + Copy,V:Copy> ops::Index<K, V> for T<K, V> {
impl<K:Eq + IterBytes + Hash + Copy,V:Copy> ops::Index<K, V>
for HashMap_<K, V> {
pure fn index(&self, k: K) -> V {
self.get(&k)
}

View File

@ -99,7 +99,7 @@ fn new_sem_and_signal(count: int, num_condvars: uint)
}
#[doc(hidden)]
pub impl<Q:Owned> &self/Sem<Q> {
pub impl<Q:Owned> Sem<Q> {
fn acquire(&self) {
let mut waiter_nobe = None;
unsafe {
@ -135,26 +135,26 @@ pub impl<Q:Owned> &self/Sem<Q> {
}
// FIXME(#3154) move both copies of this into Sem<Q>, and unify the 2 structs
#[doc(hidden)]
pub impl &self/Sem<()> {
pub impl Sem<()> {
fn access<U>(&self, blk: &fn() -> U) -> U {
let mut release = None;
unsafe {
do task::unkillable {
self.acquire();
release = Some(SemRelease(*self));
release = Some(SemRelease(self));
}
}
blk()
}
}
#[doc(hidden)]
pub impl &self/Sem<~[Waitqueue]> {
pub impl Sem<~[Waitqueue]> {
fn access<U>(&self, blk: &fn() -> U) -> U {
let mut release = None;
unsafe {
do task::unkillable {
self.acquire();
release = Some(SemAndSignalRelease(*self));
release = Some(SemAndSignalRelease(self));
}
}
blk()

View File

@ -172,9 +172,13 @@ pub impl protocol_ {
}
}
pub impl protocol {
fn add_state_poly(&self, +name: ~str, ident: ast::ident, dir: direction,
+generics: ast::Generics) -> state {
pub impl protocol_ {
fn add_state_poly(@mut self,
+name: ~str,
ident: ast::ident,
dir: direction,
+generics: ast::Generics)
-> state {
let messages = @mut ~[];
let state = @state_ {
@ -185,7 +189,7 @@ pub impl protocol {
dir: dir,
generics: generics,
messages: messages,
proto: *self
proto: self
};
self.states.push(state);