aboutsummaryrefslogtreecommitdiff
path: root/src/comp/front/eval.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/comp/front/eval.rs')
-rw-r--r--src/comp/front/eval.rs170
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)) {}
}
}