about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Sullivan <sully@msully.net>2012-06-29 14:38:33 -0700
committerMichael Sullivan <sully@msully.net>2012-06-29 14:38:33 -0700
commit3bf5fef0e59f205074f46934f0fe10cc7ef1c04a (patch)
treeb10b4572daa4a4ff10b72eb1788c7ffb221bd8ca
parent7aa43b2599b353dc3e26f5ecc2aef30bc1883145 (diff)
downloadrust-3bf5fef0e59f205074f46934f0fe10cc7ef1c04a.tar.gz
rust-3bf5fef0e59f205074f46934f0fe10cc7ef1c04a.zip
Refactor syntax exts some. Don't ever emit bare vectors.
-rw-r--r--src/libsyntax/ext/base.rs11
-rw-r--r--src/libsyntax/ext/build.rs30
-rw-r--r--src/libsyntax/ext/env.rs3
-rw-r--r--src/libsyntax/ext/ident_to_str.rs7
-rw-r--r--src/libsyntax/ext/source_util.rs17
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)