summary refs log tree commit diff
path: root/src/comp/syntax
diff options
context:
space:
mode:
authorKevin Atkinson <kevina@cs.utah.edu>2012-02-10 03:03:21 -0700
committerNiko Matsakis <niko@alum.mit.edu>2012-02-14 19:37:33 -0800
commit74b4345a38412af92aa7a8bcfabcf143e407c79e (patch)
tree4b4031c911fd44315ee26d2ea320e585805114d1 /src/comp/syntax
parentff6b71f78bd00a93a91691bb297d6a379cdc50fa (diff)
downloadrust-74b4345a38412af92aa7a8bcfabcf143e407c79e.tar.gz
rust-74b4345a38412af92aa7a8bcfabcf143e407c79e.zip
Change file_substr to allow for external strings.
Diffstat (limited to 'src/comp/syntax')
-rw-r--r--src/comp/syntax/codemap.rs17
-rw-r--r--src/comp/syntax/ext/qquote.rs7
-rw-r--r--src/comp/syntax/parse/parser.rs6
3 files changed, 16 insertions, 14 deletions
diff --git a/src/comp/syntax/codemap.rs b/src/comp/syntax/codemap.rs
index d1b60916e19..d95d1cdecc0 100644
--- a/src/comp/syntax/codemap.rs
+++ b/src/comp/syntax/codemap.rs
@@ -8,8 +8,11 @@ type file_pos = {ch: uint, byte: uint};
  * compiler.
  */
 
-type file_substr_ = {lo: uint, hi: uint, col: uint, line: uint};
-type file_substr = option<file_substr_>;
+enum file_substr {
+    fss_none,
+    fss_internal(span),
+    fss_external({filename: str, line: uint, col: uint})
+}
 
 type filemap =
     @{name: filename, substr: file_substr, src: @str,
@@ -33,16 +36,16 @@ fn new_filemap_w_substr(filename: filename, substr: file_substr,
 fn new_filemap(filename: filename, src: @str,
                start_pos_ch: uint, start_pos_byte: uint)
     -> filemap {
-    ret new_filemap_w_substr(filename, none, src,
+    ret new_filemap_w_substr(filename, fss_none, src,
                              start_pos_ch, start_pos_byte);
 }
 
-fn get_substr_info(cm: codemap, lo: uint, hi: uint)
-    -> (filename, file_substr_)
+fn get_substr_info(cm: codemap, sp: span)
+    -> (filename, file_substr)
 {
-    let pos = lookup_char_pos(cm, lo);
+    let pos = lookup_char_pos(cm, sp.lo);
     let name = #fmt("<%s:%u:%u>", pos.file.name, pos.line, pos.col);
-    ret (name, {lo: lo, hi: hi, col: pos.col, line: pos.line});
+    ret (name, fss_internal(sp));
 }
 
 fn next_line(file: filemap, chpos: uint, byte_pos: uint) {
diff --git a/src/comp/syntax/ext/qquote.rs b/src/comp/syntax/ext/qquote.rs
index ba66cb78a15..0b02961a4fc 100644
--- a/src/comp/syntax/ext/qquote.rs
+++ b/src/comp/syntax/ext/qquote.rs
@@ -149,10 +149,9 @@ fn expand_ast(ecx: ext_ctxt, _sp: span,
     {
         let cm = ecx.session().parse_sess.cm;
         let str = @codemap::span_to_snippet(body.span, cm);
-        let (fname, ss) = codemap::get_substr_info
-            (cm, body.span.lo, body.span.hi);
+        let (fname, ss) = codemap::get_substr_info(cm, body.span);
         let node = parse_from_source_str
-            (f, fname, some(ss), str,
+            (f, fname, ss, str,
              ecx.session().opts.cfg, ecx.session().parse_sess);
         ret expand_qquote(ecx, node.span(), *str, node);
     }
@@ -229,7 +228,7 @@ fn expand_qquote<N: qq_helper>
                         "parse_from_source_str"],
                        [node.mk_parse_fn(cx,sp),
                         mk_str(cx,sp, "<anon>"),
-                        mk_path(cx,sp, ["option","none"]),
+                        mk_path(cx,sp, ["syntax", "codemap", "fss_none"]),
                         mk_unary(cx,sp, ast::box(ast::imm),
                                  mk_str(cx,sp, str2)),
                         mk_access_(cx,sp,
diff --git a/src/comp/syntax/parse/parser.rs b/src/comp/syntax/parse/parser.rs
index 4d8a9dc02ba..ed89fce2ed2 100644
--- a/src/comp/syntax/parse/parser.rs
+++ b/src/comp/syntax/parse/parser.rs
@@ -2,7 +2,7 @@ import std::{io, fs};
 import either::{left, right};
 import std::map::{hashmap, new_str_hash};
 import token::can_begin_expr;
-import codemap::span;
+import codemap::{span,fss_none};
 import util::interner;
 import ast::{node_id, spanned};
 import ast_util::{mk_sp, ident_to_path};
@@ -2618,7 +2618,7 @@ fn parse_crate_from_source_file(input: str, cfg: ast::crate_cfg,
 
 fn parse_expr_from_source_str(name: str, source: @str, cfg: ast::crate_cfg,
                               sess: parse_sess) -> @ast::expr {
-    let p = new_parser_from_source_str(sess, cfg, name, none, source);
+    let p = new_parser_from_source_str(sess, cfg, name, fss_none, source);
     let r = parse_expr(p);
     sess.chpos = p.reader.chpos;
     sess.byte_pos = sess.byte_pos + p.reader.pos;
@@ -2640,7 +2640,7 @@ fn parse_from_source_str<T>(f: fn (p: parser) -> T,
 
 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, none, source);
+    let p = new_parser_from_source_str(sess, cfg, name, fss_none, source);
     let r = parse_crate_mod(p, cfg);
     sess.chpos = p.reader.chpos;
     sess.byte_pos = sess.byte_pos + p.reader.pos;