about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorMichael Sullivan <sully@msully.net>2012-06-25 20:00:39 -0700
committerMichael Sullivan <sully@msully.net>2012-06-25 20:00:39 -0700
commitc087aaf56b1109163126fea4c2760f8414ffbe56 (patch)
treeeee16f0a8b1fe0f766c176180db481aba5482752 /src/libsyntax
parenta71a49faa83631bc7e74a25ac65ac711b28799d9 (diff)
downloadrust-c087aaf56b1109163126fea4c2760f8414ffbe56.tar.gz
rust-c087aaf56b1109163126fea4c2760f8414ffbe56.zip
When we cons up vector asts, generate evecs.
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/ext/build.rs10
-rw-r--r--src/libsyntax/ext/fmt.rs2
-rw-r--r--src/libsyntax/ext/qquote.rs2
3 files changed, 12 insertions, 2 deletions
diff --git a/src/libsyntax/ext/build.rs b/src/libsyntax/ext/build.rs
index 69f7f2b69cd..4e0c6889092 100644
--- a/src/libsyntax/ext/build.rs
+++ b/src/libsyntax/ext/build.rs
@@ -61,6 +61,16 @@ fn mk_vec_e(cx: ext_ctxt, sp: span, exprs: [@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};
+}
+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)
+}
+
 fn mk_rec_e(cx: ext_ctxt, sp: span,
             fields: [{ident: ast::ident, ex: @ast::expr}]) ->
     @ast::expr {
diff --git a/src/libsyntax/ext/fmt.rs b/src/libsyntax/ext/fmt.rs
index 0cc4ba0a570..24a5aed7d28 100644
--- a/src/libsyntax/ext/fmt.rs
+++ b/src/libsyntax/ext/fmt.rs
@@ -61,7 +61,7 @@ fn pieces_to_expr(cx: ext_ctxt, sp: span, pieces: [piece], args: [@ast::expr])
                 }
                 flagexprs += [make_rt_path_expr(cx, sp, @fstr)];
             }
-            ret mk_vec_e(cx, sp, flagexprs);
+            ret mk_uniq_vec_e(cx, sp, flagexprs);
         }
         fn make_count(cx: ext_ctxt, sp: span, cnt: count) -> @ast::expr {
             alt cnt {
diff --git a/src/libsyntax/ext/qquote.rs b/src/libsyntax/ext/qquote.rs
index 3f3eb001250..caef1841faf 100644
--- a/src/libsyntax/ext/qquote.rs
+++ b/src/libsyntax/ext/qquote.rs
@@ -258,7 +258,7 @@ fn finish<T: qq_helper>
         rcall = mk_call(cx,sp,
                         [@"syntax", @"ext", @"qquote", @"replace"],
                         [pcall,
-                         mk_vec_e(cx,sp, qcx.gather.map_to_vec {|g|
+                         mk_uniq_vec_e(cx,sp, qcx.gather.map_to_vec {|g|
                              mk_call(cx,sp,
                                      [@"syntax", @"ext",
                                       @"qquote", @g.constr],