diff options
Diffstat (limited to 'src/comp/front/eval.rs')
| -rw-r--r-- | src/comp/front/eval.rs | 170 |
1 files changed, 85 insertions, 85 deletions
diff --git a/src/comp/front/eval.rs b/src/comp/front/eval.rs index c03e313d..0416611c 100644 --- a/src/comp/front/eval.rs +++ b/src/comp/front/eval.rs @@ -1,20 +1,20 @@ -import std.Vec; -import std.Str; -import std.Option; -import std.Option.some; -import std.Option.none; -import std.Map.hashmap; - -import driver.session; -import ast.ident; -import front.parser.parser; -import front.parser.spanned; -import front.parser.new_parser; -import front.parser.parse_mod_items; -import util.common; -import util.common.filename; -import util.common.span; -import util.common.new_str_hash; +import std::_vec; +import std::_str; +import std::option; +import std::option::some; +import std::option::none; +import std::map::hashmap; + +import driver::session; +import ast::ident; +import front::parser::parser; +import front::parser::spanned; +import front::parser::new_parser; +import front::parser::parse_mod_items; +import util::common; +import util::common::filename; +import util::common::span; +import util::common::new_str_hash; // Simple dynamic-typed value type for eval_expr. @@ -33,7 +33,7 @@ type env = vec[tup(ident, val)]; type ctx = @rec(parser p, eval_mode mode, mutable vec[str] deps, - session.session sess, + session::session sess, mutable uint chpos, mutable uint next_ann); @@ -90,9 +90,9 @@ fn val_as_str(val v) -> str { fail; } -fn lookup(session.session sess, env e, span sp, ident i) -> val { +fn lookup(session::session sess, env e, span sp, ident i) -> val { for (tup(ident, val) pair in e) { - if (Str.eq(i, pair._0)) { + if (_str::eq(i, pair._0)) { ret pair._1; } } @@ -100,11 +100,11 @@ fn lookup(session.session sess, env e, span sp, ident i) -> val { fail; } -fn eval_lit(ctx cx, span sp, @ast.lit lit) -> val { +fn eval_lit(ctx cx, span sp, @ast::lit lit) -> val { alt (lit.node) { - case (ast.lit_bool(?b)) { ret val_bool(b); } - case (ast.lit_int(?i)) { ret val_int(i); } - case (ast.lit_str(?s)) { ret val_str(s); } + case (ast::lit_bool(?b)) { ret val_bool(b); } + case (ast::lit_int(?i)) { ret val_int(i); } + case (ast::lit_str(?s)) { ret val_str(s); } case (_) { cx.sess.span_err(sp, "evaluating unsupported literal"); } @@ -112,24 +112,24 @@ fn eval_lit(ctx cx, span sp, @ast.lit lit) -> val { fail; } -fn eval_expr(ctx cx, env e, @ast.expr x) -> val { +fn eval_expr(ctx cx, env e, @ast::expr x) -> val { alt (x.node) { - case (ast.expr_path(?pth, _)) { - if (Vec.len[ident](pth.node.idents) == 1u && - Vec.len[@ast.ty](pth.node.types) == 0u) { + case (ast::expr_path(?pth, _)) { + if (_vec::len[ident](pth.node.idents) == 1u && + _vec::len[@ast::ty](pth.node.types) == 0u) { ret lookup(cx.sess, e, x.span, pth.node.idents.(0)); } cx.sess.span_err(x.span, "evaluating structured path-name"); } - case (ast.expr_lit(?lit, _)) { + case (ast::expr_lit(?lit, _)) { ret eval_lit(cx, x.span, lit); } - case (ast.expr_unary(?op, ?a, _)) { + case (ast::expr_unary(?op, ?a, _)) { auto av = eval_expr(cx, e, a); alt (op) { - case (ast.not) { + case (ast::not) { if (val_is_bool(av)) { ret val_bool(!val_as_bool(av)); } @@ -141,11 +141,11 @@ fn eval_expr(ctx cx, env e, @ast.expr x) -> val { } } - case (ast.expr_binary(?op, ?a, ?b, _)) { + case (ast::expr_binary(?op, ?a, ?b, _)) { auto av = eval_expr(cx, e, a); auto bv = eval_expr(cx, e, b); alt (op) { - case (ast.add) { + case (ast::add) { if (val_is_int(av) && val_is_int(bv)) { ret val_int(val_as_int(av) + val_as_int(bv)); } @@ -155,53 +155,53 @@ fn eval_expr(ctx cx, env e, @ast.expr x) -> val { cx.sess.span_err(x.span, "bad types in '+' expression"); } - case (ast.sub) { + case (ast::sub) { if (val_is_int(av) && val_is_int(bv)) { ret val_int(val_as_int(av) - val_as_int(bv)); } cx.sess.span_err(x.span, "bad types in '-' expression"); } - case (ast.mul) { + case (ast::mul) { if (val_is_int(av) && val_is_int(bv)) { ret val_int(val_as_int(av) * val_as_int(bv)); } cx.sess.span_err(x.span, "bad types in '*' expression"); } - case (ast.div) { + case (ast::div) { if (val_is_int(av) && val_is_int(bv)) { ret val_int(val_as_int(av) / val_as_int(bv)); } cx.sess.span_err(x.span, "bad types in '/' expression"); } - case (ast.rem) { + case (ast::rem) { if (val_is_int(av) && val_is_int(bv)) { ret val_int(val_as_int(av) % val_as_int(bv)); } cx.sess.span_err(x.span, "bad types in '%' expression"); } - case (ast.and) { + case (ast::and) { if (val_is_bool(av) && val_is_bool(bv)) { ret val_bool(val_as_bool(av) && val_as_bool(bv)); } cx.sess.span_err(x.span, "bad types in '&&' expression"); } - case (ast.or) { + case (ast::or) { if (val_is_bool(av) && val_is_bool(bv)) { ret val_bool(val_as_bool(av) || val_as_bool(bv)); } cx.sess.span_err(x.span, "bad types in '||' expression"); } - case (ast.eq) { + case (ast::eq) { ret val_bool(val_eq(cx.sess, x.span, av, bv)); } - case (ast.ne) { + case (ast::ne) { ret val_bool(! val_eq(cx.sess, x.span, av, bv)); } @@ -217,7 +217,7 @@ fn eval_expr(ctx cx, env e, @ast.expr x) -> val { fail; } -fn val_eq(session.session sess, span sp, val av, val bv) -> bool { +fn val_eq(session::session sess, span sp, val av, val bv) -> bool { if (val_is_bool(av) && val_is_bool(bv)) { ret val_as_bool(av) == val_as_bool(bv); } @@ -225,7 +225,7 @@ fn val_eq(session.session sess, span sp, val av, val bv) -> bool { ret val_as_int(av) == val_as_int(bv); } if (val_is_str(av) && val_is_str(bv)) { - ret Str.eq(val_as_str(av), + ret _str::eq(val_as_str(av), val_as_str(bv)); } sess.span_err(sp, "bad types in comparison"); @@ -234,12 +234,12 @@ fn val_eq(session.session sess, span sp, val av, val bv) -> bool { fn eval_crate_directives(ctx cx, env e, - vec[@ast.crate_directive] cdirs, + vec[@ast::crate_directive] cdirs, str prefix, - &mutable vec[@ast.view_item] view_items, - &mutable vec[@ast.item] items) { + &mutable vec[@ast::view_item] view_items, + &mutable vec[@ast::item] items) { - for (@ast.crate_directive sub_cdir in cdirs) { + for (@ast::crate_directive sub_cdir in cdirs) { eval_crate_directive(cx, e, sub_cdir, prefix, view_items, items); } @@ -247,10 +247,10 @@ fn eval_crate_directives(ctx cx, fn eval_crate_directives_to_mod(ctx cx, env e, - vec[@ast.crate_directive] cdirs, - str prefix) -> ast._mod { - let vec[@ast.view_item] view_items = vec(); - let vec[@ast.item] items = vec(); + vec[@ast::crate_directive] cdirs, + str prefix) -> ast::_mod { + let vec[@ast::view_item] view_items = vec(); + let vec[@ast::item] items = vec(); eval_crate_directives(cx, e, cdirs, prefix, view_items, items); @@ -261,14 +261,14 @@ fn eval_crate_directives_to_mod(ctx cx, env e, fn eval_crate_directive_block(ctx cx, env e, - &ast.block blk, + &ast::block blk, str prefix, - &mutable vec[@ast.view_item] view_items, - &mutable vec[@ast.item] items) { + &mutable vec[@ast::view_item] view_items, + &mutable vec[@ast::item] items) { - for (@ast.stmt s in blk.node.stmts) { + for (@ast::stmt s in blk.node.stmts) { alt (s.node) { - case (ast.stmt_crate_directive(?cdir)) { + case (ast::stmt_crate_directive(?cdir)) { eval_crate_directive(cx, e, cdir, prefix, view_items, items); } @@ -282,13 +282,13 @@ fn eval_crate_directive_block(ctx cx, fn eval_crate_directive_expr(ctx cx, env e, - @ast.expr x, + @ast::expr x, str prefix, - &mutable vec[@ast.view_item] view_items, - &mutable vec[@ast.item] items) { + &mutable vec[@ast::view_item] view_items, + &mutable vec[@ast::item] items) { alt (x.node) { - case (ast.expr_if(?cond, ?thn, ?elopt, _)) { + case (ast::expr_if(?cond, ?thn, ?elopt, _)) { auto cv = eval_expr(cx, e, cond); if (!val_is_bool(cv)) { cx.sess.span_err(x.span, "bad cond type in 'if'"); @@ -300,7 +300,7 @@ fn eval_crate_directive_expr(ctx cx, } alt (elopt) { - case (some[@ast.expr](?els)) { + case (some[@ast::expr](?els)) { ret eval_crate_directive_expr(cx, e, els, prefix, view_items, items); } @@ -310,18 +310,18 @@ fn eval_crate_directive_expr(ctx cx, } } - case (ast.expr_alt(?v, ?arms, _)) { + case (ast::expr_alt(?v, ?arms, _)) { auto vv = eval_expr(cx, e, v); - for (ast.arm arm in arms) { + for (ast::arm arm in arms) { alt (arm.pat.node) { - case (ast.pat_lit(?lit, _)) { + case (ast::pat_lit(?lit, _)) { auto pv = eval_lit(cx, arm.pat.span, lit); if (val_eq(cx.sess, arm.pat.span, vv, pv)) { ret eval_crate_directive_block (cx, e, arm.block, prefix, view_items, items); } } - case (ast.pat_wild(_)) { + case (ast::pat_wild(_)) { ret eval_crate_directive_block (cx, e, arm.block, prefix, view_items, items); @@ -335,7 +335,7 @@ fn eval_crate_directive_expr(ctx cx, cx.sess.span_err(x.span, "no cases matched in 'alt'"); } - case (ast.expr_block(?block, _)) { + case (ast::expr_block(?block, _)) { ret eval_crate_directive_block(cx, e, block, prefix, view_items, items); } @@ -348,25 +348,25 @@ fn eval_crate_directive_expr(ctx cx, fn eval_crate_directive(ctx cx, env e, - @ast.crate_directive cdir, + @ast::crate_directive cdir, str prefix, - &mutable vec[@ast.view_item] view_items, - &mutable vec[@ast.item] items) { + &mutable vec[@ast::view_item] view_items, + &mutable vec[@ast::item] items) { alt (cdir.node) { - case (ast.cdir_let(?id, ?x, ?cdirs)) { + case (ast::cdir_let(?id, ?x, ?cdirs)) { auto v = eval_expr(cx, e, x); auto e0 = vec(tup(id, v)) + e; eval_crate_directives(cx, e0, cdirs, prefix, view_items, items); } - case (ast.cdir_expr(?x)) { + case (ast::cdir_expr(?x)) { eval_crate_directive_expr(cx, e, x, prefix, view_items, items); } - case (ast.cdir_src_mod(?id, ?file_opt)) { + case (ast::cdir_src_mod(?id, ?file_opt)) { auto file_path = id + ".rs"; alt (file_opt) { @@ -376,7 +376,7 @@ fn eval_crate_directive(ctx cx, case (none[filename]) {} } - auto full_path = prefix + std.FS.path_sep() + file_path; + auto full_path = prefix + std::fs::path_sep() + file_path; if (cx.mode == mode_depend) { cx.deps += vec(full_path); @@ -386,18 +386,18 @@ fn eval_crate_directive(ctx cx, auto start_id = cx.p.next_def_id(); auto p0 = new_parser(cx.sess, e, start_id, full_path, cx.chpos, cx.next_ann); - auto m0 = parse_mod_items(p0, token.EOF); + auto m0 = parse_mod_items(p0, token::EOF); auto next_id = p0.next_def_id(); // Thread defids and chpos through the parsers cx.p.set_def(next_id._1); cx.chpos = p0.get_chpos(); cx.next_ann = p0.next_ann_num(); - auto im = ast.item_mod(id, m0, next_id); + auto im = ast::item_mod(id, m0, next_id); auto i = @spanned(cdir.span.lo, cdir.span.hi, im); - Vec.push[@ast.item](items, i); + _vec::push[@ast::item](items, i); } - case (ast.cdir_dir_mod(?id, ?dir_opt, ?cdirs)) { + case (ast::cdir_dir_mod(?id, ?dir_opt, ?cdirs)) { auto path = id; alt (dir_opt) { @@ -407,23 +407,23 @@ fn eval_crate_directive(ctx cx, case (none[filename]) {} } - auto full_path = prefix + std.FS.path_sep() + path; + auto full_path = prefix + std::fs::path_sep() + path; auto m0 = eval_crate_directives_to_mod(cx, e, cdirs, full_path); - auto im = ast.item_mod(id, m0, cx.p.next_def_id()); + auto im = ast::item_mod(id, m0, cx.p.next_def_id()); auto i = @spanned(cdir.span.lo, cdir.span.hi, im); - Vec.push[@ast.item](items, i); + _vec::push[@ast::item](items, i); } - case (ast.cdir_view_item(?vi)) { - Vec.push[@ast.view_item](view_items, vi); + case (ast::cdir_view_item(?vi)) { + _vec::push[@ast::view_item](view_items, vi); } - case (ast.cdir_meta(?mi)) { + case (ast::cdir_meta(?mi)) { cx.sess.add_metadata(mi); } - case (ast.cdir_syntax(?pth)) {} - case (ast.cdir_auth(?pth, ?eff)) {} + case (ast::cdir_syntax(?pth)) {} + case (ast::cdir_auth(?pth, ?eff)) {} } } |