diff options
| author | Michael Sullivan <sully@msully.net> | 2012-06-29 14:38:33 -0700 |
|---|---|---|
| committer | Michael Sullivan <sully@msully.net> | 2012-06-29 14:38:33 -0700 |
| commit | 3bf5fef0e59f205074f46934f0fe10cc7ef1c04a (patch) | |
| tree | b10b4572daa4a4ff10b72eb1788c7ffb221bd8ca | |
| parent | 7aa43b2599b353dc3e26f5ecc2aef30bc1883145 (diff) | |
| download | rust-3bf5fef0e59f205074f46934f0fe10cc7ef1c04a.tar.gz rust-3bf5fef0e59f205074f46934f0fe10cc7ef1c04a.zip | |
Refactor syntax exts some. Don't ever emit bare vectors.
| -rw-r--r-- | src/libsyntax/ext/base.rs | 11 | ||||
| -rw-r--r-- | src/libsyntax/ext/build.rs | 30 | ||||
| -rw-r--r-- | src/libsyntax/ext/env.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/ext/ident_to_str.rs | 7 | ||||
| -rw-r--r-- | src/libsyntax/ext/source_util.rs | 17 |
5 files changed, 30 insertions, 38 deletions
diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs index 96a1efdfe7a..312de4959d0 100644 --- a/src/libsyntax/ext/base.rs +++ b/src/libsyntax/ext/base.rs @@ -173,17 +173,6 @@ fn expr_to_ident(cx: ext_ctxt, expr: @ast::expr, error: str) -> ast::ident { } } -fn make_new_lit(cx: ext_ctxt, sp: codemap::span, lit: ast::lit_) -> - @ast::expr { - let sp_lit = @{node: lit, span: sp}; - ret @{id: cx.next_id(), node: ast::expr_lit(sp_lit), span: sp}; -} - -fn make_new_expr(cx: ext_ctxt, sp: codemap::span, expr: ast::expr_) -> - @ast::expr { - ret @{id: cx.next_id(), node: expr, span: sp}; -} - fn get_mac_args_no_max(cx: ext_ctxt, sp: span, arg: ast::mac_arg, min: uint, name: str) -> [@ast::expr]/~ { ret get_mac_args(cx, sp, arg, min, none, name); diff --git a/src/libsyntax/ext/build.rs b/src/libsyntax/ext/build.rs index 63a4d3d4043..a497cede619 100644 --- a/src/libsyntax/ext/build.rs +++ b/src/libsyntax/ext/build.rs @@ -1,6 +1,11 @@ import codemap::span; import base::ext_ctxt; +fn mk_expr(cx: ext_ctxt, sp: codemap::span, expr: ast::expr_) -> + @ast::expr { + ret @{id: cx.next_id(), node: expr, span: sp}; +} + fn mk_lit(cx: ext_ctxt, sp: span, lit: ast::lit_) -> @ast::expr { let sp_lit = @{node: lit, span: sp}; ret @{id: cx.next_id(), node: ast::expr_lit(sp_lit), span: sp}; @@ -21,26 +26,23 @@ fn mk_binary(cx: ext_ctxt, sp: span, op: ast::binop, lhs: @ast::expr, rhs: @ast::expr) -> @ast::expr { cx.next_id(); // see ast_util::op_expr_callee_id - let binexpr = ast::expr_binary(op, lhs, rhs); - ret @{id: cx.next_id(), node: binexpr, span: sp}; + mk_expr(cx, sp, ast::expr_binary(op, lhs, rhs)) } fn mk_unary(cx: ext_ctxt, sp: span, op: ast::unop, e: @ast::expr) -> @ast::expr { cx.next_id(); // see ast_util::op_expr_callee_id - let expr = ast::expr_unary(op, e); - ret @{id: cx.next_id(), node: expr, span: sp}; + mk_expr(cx, sp, ast::expr_unary(op, e)) } fn mk_path(cx: ext_ctxt, sp: span, idents: [ast::ident]/~) -> @ast::expr { let path = @{span: sp, global: false, idents: idents, rp: none, types: []/~}; let pathexpr = ast::expr_path(path); - ret @{id: cx.next_id(), node: pathexpr, span: sp}; + mk_expr(cx, sp, pathexpr) } fn mk_access_(cx: ext_ctxt, sp: span, p: @ast::expr, m: ast::ident) -> @ast::expr { - let expr = ast::expr_field(p, m, []/~); - ret @{id: cx.next_id(), node: expr, span: sp}; + mk_expr(cx, sp, ast::expr_field(p, m, []/~)) } fn mk_access(cx: ext_ctxt, sp: span, p: [ast::ident]/~, m: ast::ident) -> @ast::expr { @@ -49,8 +51,7 @@ fn mk_access(cx: ext_ctxt, sp: span, p: [ast::ident]/~, m: ast::ident) } fn mk_call_(cx: ext_ctxt, sp: span, fn_expr: @ast::expr, args: [@ast::expr]/~) -> @ast::expr { - let callexpr = ast::expr_call(fn_expr, args, false); - ret @{id: cx.next_id(), node: callexpr, span: sp}; + mk_expr(cx, sp, ast::expr_call(fn_expr, args, false)) } fn mk_call(cx: ext_ctxt, sp: span, fn_path: [ast::ident]/~, args: [@ast::expr]/~) -> @ast::expr { @@ -58,23 +59,22 @@ fn mk_call(cx: ext_ctxt, sp: span, fn_path: [ast::ident]/~, ret mk_call_(cx, sp, pathexpr, args); } // e = expr, t = type -fn mk_vec_e(cx: ext_ctxt, sp: span, exprs: [@ast::expr]/~) -> +fn mk_base_vec_e(cx: ext_ctxt, sp: span, exprs: [@ast::expr]/~) -> @ast::expr { let vecexpr = ast::expr_vec(exprs, ast::m_imm); ret @{id: cx.next_id(), node: vecexpr, span: sp}; } fn mk_vstore_e(cx: ext_ctxt, sp: span, expr: @ast::expr, vst: ast::vstore) -> @ast::expr { - let vstoreexpr = ast::expr_vstore(expr, vst); - ret @{id: cx.next_id(), node: vstoreexpr, span: sp}; + mk_expr(cx, sp, ast::expr_vstore(expr, vst)) } fn mk_uniq_vec_e(cx: ext_ctxt, sp: span, exprs: [@ast::expr]/~) -> @ast::expr { - mk_vstore_e(cx, sp, mk_vec_e(cx, sp, exprs), ast::vstore_uniq) + mk_vstore_e(cx, sp, mk_base_vec_e(cx, sp, exprs), ast::vstore_uniq) } fn mk_fixed_vec_e(cx: ext_ctxt, sp: span, exprs: [@ast::expr]/~) -> @ast::expr { - mk_vstore_e(cx, sp, mk_vec_e(cx, sp, exprs), ast::vstore_fixed(none)) + mk_vstore_e(cx, sp, mk_base_vec_e(cx, sp, exprs), ast::vstore_fixed(none)) } fn mk_rec_e(cx: ext_ctxt, sp: span, @@ -89,6 +89,6 @@ fn mk_rec_e(cx: ext_ctxt, sp: span, vec::push(astfields, astfield); } let recexpr = ast::expr_rec(astfields, option::none::<@ast::expr>); - ret @{id: cx.next_id(), node: recexpr, span: sp}; + mk_expr(cx, sp, recexpr) } diff --git a/src/libsyntax/ext/env.rs b/src/libsyntax/ext/env.rs index 26a906f8cf0..b8aa69b7735 100644 --- a/src/libsyntax/ext/env.rs +++ b/src/libsyntax/ext/env.rs @@ -5,6 +5,7 @@ * interface. */ import base::*; +import build::mk_lit; export expand_syntax_ext; fn expand_syntax_ext(cx: ext_ctxt, sp: codemap::span, arg: ast::mac_arg, @@ -22,7 +23,7 @@ fn expand_syntax_ext(cx: ext_ctxt, sp: codemap::span, arg: ast::mac_arg, } fn make_new_str(cx: ext_ctxt, sp: codemap::span, +s: str) -> @ast::expr { - ret make_new_lit(cx, sp, ast::lit_str(@s)); + ret mk_lit(cx, sp, ast::lit_str(@s)); } // // Local Variables: diff --git a/src/libsyntax/ext/ident_to_str.rs b/src/libsyntax/ext/ident_to_str.rs index 7dfb70f1520..2cff86d98a7 100644 --- a/src/libsyntax/ext/ident_to_str.rs +++ b/src/libsyntax/ext/ident_to_str.rs @@ -1,11 +1,12 @@ import base::*; +import build::mk_lit; import option; fn expand_syntax_ext(cx: ext_ctxt, sp: codemap::span, arg: ast::mac_arg, _body: ast::mac_body) -> @ast::expr { let args = get_mac_args(cx,sp,arg,1u,option::some(1u),"ident_to_str"); - ret make_new_lit(cx, sp, - ast::lit_str(expr_to_ident(cx, args[0u], - "expected an ident"))); + ret mk_lit(cx, sp, + ast::lit_str(expr_to_ident(cx, args[0u], + "expected an ident"))); } diff --git a/src/libsyntax/ext/source_util.rs b/src/libsyntax/ext/source_util.rs index ae76cbafef7..d8afdb7534a 100644 --- a/src/libsyntax/ext/source_util.rs +++ b/src/libsyntax/ext/source_util.rs @@ -2,6 +2,7 @@ import base::*; import ast; import codemap::span; import print::pprust; +import build::{mk_lit,mk_uniq_vec_e}; export expand_line; export expand_col; @@ -17,7 +18,7 @@ fn expand_line(cx: ext_ctxt, sp: span, arg: ast::mac_arg, _body: ast::mac_body) -> @ast::expr { get_mac_args(cx, sp, arg, 0u, option::some(0u), "line"); let loc = codemap::lookup_char_pos(cx.codemap(), sp.lo); - ret make_new_lit(cx, sp, ast::lit_uint(loc.line as u64, ast::ty_u)); + ret mk_lit(cx, sp, ast::lit_uint(loc.line as u64, ast::ty_u)); } /* #col(): expands to the current column number */ @@ -25,7 +26,7 @@ fn expand_col(cx: ext_ctxt, sp: span, arg: ast::mac_arg, _body: ast::mac_body) -> @ast::expr { get_mac_args(cx, sp, arg, 0u, option::some(0u), "col"); let loc = codemap::lookup_char_pos(cx.codemap(), sp.lo); - ret make_new_lit(cx, sp, ast::lit_uint(loc.col as u64, ast::ty_u)); + ret mk_lit(cx, sp, ast::lit_uint(loc.col as u64, ast::ty_u)); } /* #file(): expands to the current filename */ @@ -36,19 +37,19 @@ fn expand_file(cx: ext_ctxt, sp: span, arg: ast::mac_arg, get_mac_args(cx, sp, arg, 0u, option::some(0u), "file"); let { file: @{ name: filename, _ }, _ } = codemap::lookup_char_pos(cx.codemap(), sp.lo); - ret make_new_lit(cx, sp, ast::lit_str(@filename)); + ret mk_lit(cx, sp, ast::lit_str(@filename)); } fn expand_stringify(cx: ext_ctxt, sp: span, arg: ast::mac_arg, _body: ast::mac_body) -> @ast::expr { let args = get_mac_args(cx, sp, arg, 1u, option::some(1u), "stringify"); - ret make_new_lit(cx, sp, ast::lit_str(@pprust::expr_to_str(args[0]))); + ret mk_lit(cx, sp, ast::lit_str(@pprust::expr_to_str(args[0]))); } fn expand_mod(cx: ext_ctxt, sp: span, arg: ast::mac_arg, _body: ast::mac_body) -> @ast::expr { get_mac_args(cx, sp, arg, 0u, option::some(0u), "file"); - ret make_new_lit(cx, sp, ast::lit_str( + ret mk_lit(cx, sp, ast::lit_str( @str::connect(cx.mod_path().map({|x|*x}), "::"))); } @@ -76,7 +77,7 @@ fn expand_include_str(cx: ext_ctxt, sp: codemap::span, arg: ast::mac_arg, } } - ret make_new_lit(cx, sp, ast::lit_str(@result::unwrap(res))); + ret mk_lit(cx, sp, ast::lit_str(@result::unwrap(res))); } fn expand_include_bin(cx: ext_ctxt, sp: codemap::span, arg: ast::mac_arg, @@ -88,9 +89,9 @@ fn expand_include_bin(cx: ext_ctxt, sp: codemap::span, arg: ast::mac_arg, alt io::read_whole_file(res_rel_file(cx, sp, file)) { result::ok(src) { let u8_exprs = vec::map(src) { |char: u8| - make_new_lit(cx, sp, ast::lit_uint(char as u64, ast::ty_u8)) + mk_lit(cx, sp, ast::lit_uint(char as u64, ast::ty_u8)) }; - ret make_new_expr(cx, sp, ast::expr_vec(u8_exprs, ast::m_imm)); + ret mk_uniq_vec_e(cx, sp, u8_exprs); } result::err(e) { cx.parse_sess().span_diagnostic.handler().fatal(e) |
