move tstate to dvec
This commit is contained in:
parent
9be612f7ee
commit
e8dfe179da
2 changed files with 26 additions and 26 deletions
|
@ -16,6 +16,7 @@ import tstate::ann::{pre_and_post, pre_and_post_state, empty_ann, prestate,
|
||||||
import tritv::*;
|
import tritv::*;
|
||||||
import bitvectors::promises_;
|
import bitvectors::promises_;
|
||||||
import driver::session::session;
|
import driver::session::session;
|
||||||
|
import dvec::{dvec, extensions};
|
||||||
|
|
||||||
import syntax::print::pprust::{constr_args_to_str, lit_to_str};
|
import syntax::print::pprust::{constr_args_to_str, lit_to_str};
|
||||||
|
|
||||||
|
@ -197,7 +198,7 @@ type constraint = {
|
||||||
path: @path,
|
path: @path,
|
||||||
// FIXME: really only want it to be mut during collect_locals.
|
// FIXME: really only want it to be mut during collect_locals.
|
||||||
// freeze it after that.
|
// freeze it after that.
|
||||||
descs: @mut [pred_args]
|
descs: @dvec<pred_args>
|
||||||
};
|
};
|
||||||
|
|
||||||
type tsconstr = {
|
type tsconstr = {
|
||||||
|
@ -473,8 +474,7 @@ fn node_id_to_def(ccx: crate_ctxt, id: node_id) -> option<def> {
|
||||||
|
|
||||||
fn norm_a_constraint(id: def_id, c: constraint) -> [norm_constraint] {
|
fn norm_a_constraint(id: def_id, c: constraint) -> [norm_constraint] {
|
||||||
let mut rslt: [norm_constraint] = [];
|
let mut rslt: [norm_constraint] = [];
|
||||||
let descs = *c.descs;
|
for (*c.descs).each {|pd|
|
||||||
for vec::each(descs) {|pd|
|
|
||||||
rslt +=
|
rslt +=
|
||||||
[{bit_num: pd.node.bit_num,
|
[{bit_num: pd.node.bit_num,
|
||||||
c: respan(pd.span, {path: c.path,
|
c: respan(pd.span, {path: c.path,
|
||||||
|
@ -498,11 +498,11 @@ fn constraints(fcx: fn_ctxt) -> [norm_constraint] {
|
||||||
// FIXME
|
// FIXME
|
||||||
// Would rather take an immutable vec as an argument,
|
// Would rather take an immutable vec as an argument,
|
||||||
// should freeze it at some earlier point.
|
// should freeze it at some earlier point.
|
||||||
fn match_args(fcx: fn_ctxt, occs: @mut [pred_args],
|
fn match_args(fcx: fn_ctxt, occs: @dvec<pred_args>,
|
||||||
occ: [@constr_arg_use]) -> uint {
|
occ: [@constr_arg_use]) -> uint {
|
||||||
#debug("match_args: looking at %s",
|
#debug("match_args: looking at %s",
|
||||||
constr_args_to_str(fn@(i: inst) -> str { ret i.ident; }, occ));
|
constr_args_to_str(fn@(i: inst) -> str { ret i.ident; }, occ));
|
||||||
for vec::each(*occs) {|pd|
|
for (*occs).each {|pd|
|
||||||
log(debug,
|
log(debug,
|
||||||
"match_args: candidate " + pred_args_to_str(pd));
|
"match_args: candidate " + pred_args_to_str(pd));
|
||||||
fn eq(p: inst, q: inst) -> bool { ret p.node == q.node; }
|
fn eq(p: inst, q: inst) -> bool { ret p.node == q.node; }
|
||||||
|
@ -613,7 +613,8 @@ fn substitute_arg(cx: ty::ctxt, actuals: [@expr], a: @constr_arg) ->
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn pred_args_matches(pattern: [constr_arg_general_<inst>], desc: pred_args) ->
|
fn pred_args_matches(pattern: [constr_arg_general_<inst>],
|
||||||
|
desc: pred_args) ->
|
||||||
bool {
|
bool {
|
||||||
let mut i = 0u;
|
let mut i = 0u;
|
||||||
for desc.node.args.each {|c|
|
for desc.node.args.each {|c|
|
||||||
|
@ -638,7 +639,8 @@ fn pred_args_matches(pattern: [constr_arg_general_<inst>], desc: pred_args) ->
|
||||||
ret true;
|
ret true;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn find_instance_(pattern: [constr_arg_general_<inst>], descs: [pred_args]) ->
|
fn find_instance_(pattern: [constr_arg_general_<inst>],
|
||||||
|
descs: [pred_args]) ->
|
||||||
option<uint> {
|
option<uint> {
|
||||||
for descs.each {|d|
|
for descs.each {|d|
|
||||||
if pred_args_matches(pattern, d) { ret some(d.node.bit_num); }
|
if pred_args_matches(pattern, d) { ret some(d.node.bit_num); }
|
||||||
|
@ -660,15 +662,19 @@ fn find_instances(_fcx: fn_ctxt, subst: subst,
|
||||||
|
|
||||||
if vec::len(subst) == 0u { ret []; }
|
if vec::len(subst) == 0u { ret []; }
|
||||||
let mut res = [];
|
let mut res = [];
|
||||||
for (*c.descs).each { |d|
|
(*c.descs).swap { |v|
|
||||||
if args_mention(d.node.args, find_in_subst_bool, subst) {
|
let v <- vec::from_mut(v);
|
||||||
let old_bit_num = d.node.bit_num;
|
for v.each { |d|
|
||||||
let newv = replace(subst, d);
|
if args_mention(d.node.args, find_in_subst_bool, subst) {
|
||||||
alt find_instance_(newv, *c.descs) {
|
let old_bit_num = d.node.bit_num;
|
||||||
some(d1) {res += [{from: old_bit_num, to: d1}]}
|
let newv = replace(subst, d);
|
||||||
_ {}
|
alt find_instance_(newv, v) {
|
||||||
}
|
some(d1) {res += [{from: old_bit_num, to: d1}]}
|
||||||
} else {}
|
_ {}
|
||||||
|
}
|
||||||
|
} else {}
|
||||||
|
}
|
||||||
|
vec::to_mut(v)
|
||||||
}
|
}
|
||||||
ret res;
|
ret res;
|
||||||
}
|
}
|
||||||
|
@ -897,12 +903,6 @@ fn args_mention<T>(args: [@constr_arg_use],
|
||||||
|
|
||||||
fn use_var(fcx: fn_ctxt, v: node_id) { *fcx.enclosing.used_vars += [v]; }
|
fn use_var(fcx: fn_ctxt, v: node_id) { *fcx.enclosing.used_vars += [v]; }
|
||||||
|
|
||||||
// FIXME: This should be a function in vec::.
|
|
||||||
fn vec_contains(v: @mut [node_id], i: node_id) -> bool {
|
|
||||||
for vec::each(*v) {|d| if d == i { ret true; } }
|
|
||||||
ret false;
|
|
||||||
}
|
|
||||||
|
|
||||||
fn op_to_oper_ty(io: init_op) -> oper_type {
|
fn op_to_oper_ty(io: init_op) -> oper_type {
|
||||||
alt io { init_move { oper_move } _ { oper_assign } }
|
alt io { init_move { oper_move } _ { oper_assign } }
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ import syntax::ast_util::respan;
|
||||||
import driver::session::session;
|
import driver::session::session;
|
||||||
import aux::*;
|
import aux::*;
|
||||||
import std::map::hashmap;
|
import std::map::hashmap;
|
||||||
|
import dvec::{dvec, extensions};
|
||||||
|
|
||||||
type ctxt = {cs: @mut [sp_constr], tcx: ty::ctxt};
|
type ctxt = {cs: @mut [sp_constr], tcx: ty::ctxt};
|
||||||
|
|
||||||
|
@ -57,12 +58,11 @@ fn add_constraint(tcx: ty::ctxt, c: sp_constr, next: uint, tbl: constr_map) ->
|
||||||
let {path: p, def_id: d_id, args: args} = c.node;
|
let {path: p, def_id: d_id, args: args} = c.node;
|
||||||
alt tbl.find(d_id) {
|
alt tbl.find(d_id) {
|
||||||
some(ct) {
|
some(ct) {
|
||||||
let {path: _, descs: pds} = ct;
|
(*ct.descs).push(respan(c.span, {args: args, bit_num: next}));
|
||||||
*pds += [respan(c.span, {args: args, bit_num: next})];
|
|
||||||
}
|
}
|
||||||
none {
|
none {
|
||||||
let rslt: @mut [pred_args] =
|
let rslt = @dvec();
|
||||||
@mut [respan(c.span, {args: args, bit_num: next})];
|
(*rslt).push(respan(c.span, {args: args, bit_num: next}));
|
||||||
tbl.insert(d_id, {path:p, descs:rslt});
|
tbl.insert(d_id, {path:p, descs:rslt});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue