aboutsummaryrefslogtreecommitdiff
path: root/src/comp/driver/session.rs
diff options
context:
space:
mode:
authorMarijn Haverbeke <[email protected]>2011-04-08 18:44:20 +0200
committerMarijn Haverbeke <[email protected]>2011-04-09 01:05:18 +0200
commit1af3174fe3b565371a5978381f604ea9c01e86d3 (patch)
tree1690b133b0690fdf6a2c005528355c2d00313129 /src/comp/driver/session.rs
parentMake lexer buffer the whole file (diff)
downloadrust-1af3174fe3b565371a5978381f604ea9c01e86d3.tar.xz
rust-1af3174fe3b565371a5978381f604ea9c01e86d3.zip
Move to single-uint file-position representation.
This makes passing them around cheaper. There is now a table (see front/codemap.rs) that is needed to transform such an uint into an actual filename/line/col location. Also cleans up the span building in the parser a bit.
Diffstat (limited to 'src/comp/driver/session.rs')
-rw-r--r--src/comp/driver/session.rs36
1 files changed, 26 insertions, 10 deletions
diff --git a/src/comp/driver/session.rs b/src/comp/driver/session.rs
index 797fb7e2..dab02fbd 100644
--- a/src/comp/driver/session.rs
+++ b/src/comp/driver/session.rs
@@ -1,4 +1,5 @@
import front.ast;
+import front.codemap;
import util.common.span;
import util.common.ty_mach;
import std._uint;
@@ -25,7 +26,8 @@ type cfg = rec(os os,
type crate_metadata = vec[u8];
obj session(ast.crate_num cnum, cfg targ,
- map.hashmap[int, crate_metadata] crates) {
+ map.hashmap[int, crate_metadata] crates,
+ codemap.codemap cm) {
fn get_targ_cfg() -> cfg {
ret targ;
@@ -36,10 +38,12 @@ obj session(ast.crate_num cnum, cfg targ,
}
fn span_err(span sp, str msg) {
+ auto lo = codemap.lookup_pos(cm, sp.lo);
+ auto hi = codemap.lookup_pos(cm, sp.hi);
log #fmt("%s:%u:%u:%u:%u: error: %s",
- sp.filename,
- sp.lo.line, sp.lo.col,
- sp.hi.line, sp.hi.col,
+ lo.filename,
+ lo.line, lo.col,
+ hi.line, hi.col,
msg);
fail;
}
@@ -50,10 +54,12 @@ obj session(ast.crate_num cnum, cfg targ,
}
fn span_warn(span sp, str msg) {
+ auto lo = codemap.lookup_pos(cm, sp.lo);
+ auto hi = codemap.lookup_pos(cm, sp.hi);
log #fmt("%s:%u:%u:%u:%u: warning: %s",
- sp.filename,
- sp.lo.line, sp.lo.col,
- sp.hi.line, sp.hi.col,
+ lo.filename,
+ lo.line, lo.col,
+ hi.line, hi.col,
msg);
}
@@ -63,10 +69,12 @@ obj session(ast.crate_num cnum, cfg targ,
}
fn span_unimpl(span sp, str msg) {
+ auto lo = codemap.lookup_pos(cm, sp.lo);
+ auto hi = codemap.lookup_pos(cm, sp.hi);
log #fmt("%s:%u:%u:%u:%u: error: unimplemented %s",
- sp.filename,
- sp.lo.line, sp.lo.col,
- sp.hi.line, sp.hi.col,
+ lo.filename,
+ lo.line, lo.col,
+ hi.line, hi.col,
msg);
fail;
}
@@ -87,6 +95,14 @@ obj session(ast.crate_num cnum, cfg targ,
fn has_external_crate(int num) -> bool {
ret crates.contains_key(num);
}
+
+ fn get_codemap() -> codemap.codemap {
+ ret cm;
+ }
+
+ fn lookup_pos(uint pos) -> codemap.loc {
+ ret codemap.lookup_pos(cm, pos);
+ }
}