diff options
| author | Kevin Atkinson <kevina@cs.utah.edu> | 2012-02-01 02:58:28 -0700 |
|---|---|---|
| committer | Kevin Atkinson <kevina@cs.utah.edu> | 2012-02-03 20:41:49 -0700 |
| commit | 4d71285c933586f92497a5b5fb85368fd130f4e6 (patch) | |
| tree | 3c1d4346bf2d8a04c3af346e02337875273d8649 /src/comp/syntax/parse | |
| parent | 1c91fb4d91623bd50901ca4f4f215c928790e996 (diff) | |
| download | rust-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.rs | 14 |
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); |
