about summary refs log tree commit diff
path: root/src/comp/syntax/parse
diff options
context:
space:
mode:
authorKevin Atkinson <kevina@cs.utah.edu>2012-02-01 02:58:28 -0700
committerKevin Atkinson <kevina@cs.utah.edu>2012-02-03 20:41:49 -0700
commit4d71285c933586f92497a5b5fb85368fd130f4e6 (patch)
tree3c1d4346bf2d8a04c3af346e02337875273d8649 /src/comp/syntax/parse
parent1c91fb4d91623bd50901ca4f4f215c928790e996 (diff)
downloadrust-4d71285c933586f92497a5b5fb85368fd130f4e6.tar.gz
rust-4d71285c933586f92497a5b5fb85368fd130f4e6.zip
Implement quasi-quotes in more macro form: #ast{...}.
The #(...) form is still supported for now.
Diffstat (limited to 'src/comp/syntax/parse')
-rw-r--r--src/comp/syntax/parse/parser.rs14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/comp/syntax/parse/parser.rs b/src/comp/syntax/parse/parser.rs
index 291f820df18..7bd354c3a0c 100644
--- a/src/comp/syntax/parse/parser.rs
+++ b/src/comp/syntax/parse/parser.rs
@@ -1013,7 +1013,7 @@ fn parse_syntax_ext_naked(p: parser, lo: uint) -> @ast::expr {
             }
             p.bump();
         }
-        let hi = p.last_span.hi;
+        let hi = p.last_span.lo;
         b = some({span: mk_sp(lo,hi)});
     }
     ret mk_mac_expr(p, lo, p.span.hi, ast::mac_invoc(pth, e, b));
@@ -2543,6 +2543,18 @@ fn parse_expr_from_source_str(name: str, source: @str, cfg: ast::crate_cfg,
     ret r;
 }
 
+fn parse_from_source_str<T>(f: fn (p: parser) -> T, 
+                            name: str, source: @str, cfg: ast::crate_cfg,
+                            sess: parse_sess) 
+    -> {node: T, fm: codemap::filemap}
+{
+    let p = new_parser_from_source_str(sess, cfg, name, source);
+    let r = f(p);
+    sess.chpos = p.reader.chpos;
+    sess.byte_pos = sess.byte_pos + p.reader.pos;
+    ret {node: r, fm: option::get(vec::last(sess.cm.files))};
+}
+
 fn parse_crate_from_source_str(name: str, source: @str, cfg: ast::crate_cfg,
                                sess: parse_sess) -> @ast::crate {
     let p = new_parser_from_source_str(sess, cfg, name, source);