about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2012-12-14 11:52:11 -0800
committerGraydon Hoare <graydon@mozilla.com>2012-12-18 17:22:27 -0800
commit8e28f23c60daae7042e2c279741fa90f623acac0 (patch)
treee332141f56606dda327961d21ec06af302e4f242 /src/libsyntax
parent263136d389ec72d8ab52d3ad8303a100fd1d4254 (diff)
downloadrust-8e28f23c60daae7042e2c279741fa90f623acac0.tar.gz
rust-8e28f23c60daae7042e2c279741fa90f623acac0.zip
core: add macro_rules! for "condition! { c: in -> out; }".
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/ext/expand.rs20
-rw-r--r--src/libsyntax/ext/source_util.rs10
2 files changed, 24 insertions, 6 deletions
diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs
index a65f5f33512..41d5c8ee0bb 100644
--- a/src/libsyntax/ext/expand.rs
+++ b/src/libsyntax/ext/expand.rs
@@ -286,12 +286,30 @@ fn core_macros() -> ~str {
 
     macro_rules! die(
         ($msg: expr) => (
-            core::sys::begin_unwind($msg, file!(), line!())
+            core::sys::begin_unwind($msg,
+                                    file!().to_owned(), line!())
         );
         () => (
             die!(~\"explicit failure\")
         )
     )
+
+    macro_rules! condition (
+
+        { $c:ident: $in:ty -> $out:ty; } => {
+
+            mod $c {
+                fn key(_x: @core::condition::Handler<$in,$out>) { }
+
+                pub const cond : core::condition::Condition<$in,$out> =
+                    core::condition::Condition {
+                    name: stringify!(c),
+                    key: key
+                };
+            }
+        }
+    )
+
 }";
 }
 
diff --git a/src/libsyntax/ext/source_util.rs b/src/libsyntax/ext/source_util.rs
index 099764a3278..e4074315689 100644
--- a/src/libsyntax/ext/source_util.rs
+++ b/src/libsyntax/ext/source_util.rs
@@ -11,7 +11,7 @@
 use ext::base::*;
 use codemap::{span, Loc, FileMap};
 use print::pprust;
-use ext::build::{mk_base_vec_e, mk_uint, mk_u8, mk_uniq_str};
+use ext::build::{mk_base_vec_e, mk_uint, mk_u8, mk_base_str};
 
 export expand_line;
 export expand_col;
@@ -46,19 +46,19 @@ fn expand_file(cx: ext_ctxt, sp: span, tts: ~[ast::token_tree])
     base::check_zero_tts(cx, sp, tts, "file!");
     let Loc { file: @FileMap { name: filename, _ }, _ } =
         cx.codemap().lookup_char_pos(sp.lo);
-    base::mr_expr(mk_uniq_str(cx, sp, filename))
+    base::mr_expr(mk_base_str(cx, sp, filename))
 }
 
 fn expand_stringify(cx: ext_ctxt, sp: span, tts: ~[ast::token_tree])
     -> base::mac_result {
     let s = pprust::tts_to_str(tts, cx.parse_sess().interner);
-    base::mr_expr(mk_uniq_str(cx, sp, s))
+    base::mr_expr(mk_base_str(cx, sp, s))
 }
 
 fn expand_mod(cx: ext_ctxt, sp: span, tts: ~[ast::token_tree])
     -> base::mac_result {
     base::check_zero_tts(cx, sp, tts, "module_path!");
-    base::mr_expr(mk_uniq_str(cx, sp,
+    base::mr_expr(mk_base_str(cx, sp,
                               str::connect(cx.mod_path().map(
                                   |x| cx.str_of(*x)), ~"::")))
 }
@@ -83,7 +83,7 @@ fn expand_include_str(cx: ext_ctxt, sp: span, tts: ~[ast::token_tree])
       }
     }
 
-    base::mr_expr(mk_uniq_str(cx, sp, result::unwrap(res)))
+    base::mr_expr(mk_base_str(cx, sp, result::unwrap(res)))
 }
 
 fn expand_include_bin(cx: ext_ctxt, sp: span, tts: ~[ast::token_tree])