Skip to content

Commit 6768c0d

Browse files
marijnhgraydon
authored andcommitted
---
yaml --- r: 1931 b: refs/heads/master c: e7e6f39 h: refs/heads/master i: 1929: e00fc6e 1927: c3609c1 v: v3
1 parent f777f0f commit 6768c0d

File tree

6 files changed

+1061
-789
lines changed

6 files changed

+1061
-789
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: ffc188a4dd9262750b3f95bb3b582577836740f2
2+
refs/heads/master: e7e6f396d888574e7184119818ac3300f10aacbf

trunk/src/comp/driver/rustc.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ impure fn pretty_print_input(session.session sess,
7777
auto def = tup(0, 0);
7878
auto p = front.parser.new_parser(sess, env, def, input);
7979
auto crate = front.parser.parse_crate_from_source_file(p);
80-
pretty.pprust.print_ast(crate.node.module, std.io.stdout());
80+
pretty.pprust.print_file(crate.node.module, input, std.io.stdout());
8181
}
8282

8383
fn warn_wrong_compiler() {

trunk/src/comp/front/lexer.rs

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import std.io;
22
import std._str;
3+
import std._vec;
34
import std._int;
45
import std.map;
56
import std.map.hashmap;
@@ -781,6 +782,85 @@ impure fn next_token(reader rdr) -> token.token {
781782
fail;
782783
}
783784

785+
tag cmnt_ {
786+
cmnt_line(str);
787+
cmnt_block(vec[str]);
788+
}
789+
type cmnt = rec(cmnt_ val, common.pos pos, bool space_after);
790+
791+
impure fn consume_whitespace(reader rdr) -> uint {
792+
auto lines = 0u;
793+
while (is_whitespace(rdr.curr())) {
794+
if (rdr.curr() == '\n') {lines += 1u;}
795+
rdr.bump();
796+
}
797+
ret lines;
798+
}
799+
800+
impure fn read_line_comment(reader rdr) -> cmnt {
801+
auto p = rdr.get_curr_pos();
802+
rdr.bump(); rdr.bump();
803+
consume_whitespace(rdr);
804+
auto val = "";
805+
while (rdr.curr() != '\n') {
806+
_str.push_char(val, rdr.curr());
807+
rdr.bump();
808+
}
809+
ret rec(val=cmnt_line(val),
810+
pos=p,
811+
space_after=consume_whitespace(rdr) > 1u);
812+
}
813+
814+
impure fn read_block_comment(reader rdr) -> cmnt {
815+
auto p = rdr.get_curr_pos();
816+
rdr.bump(); rdr.bump();
817+
consume_whitespace(rdr);
818+
let vec[str] lines = vec();
819+
auto val = "";
820+
auto level = 1;
821+
while (true) {
822+
if (rdr.curr() == '\n') {
823+
_vec.push[str](lines, val);
824+
val = "";
825+
consume_whitespace(rdr);
826+
} else {
827+
if (rdr.curr() == '*' && rdr.next() == '/') {
828+
level -= 1;
829+
if (level == 0) {
830+
rdr.bump(); rdr.bump();
831+
_vec.push[str](lines, val);
832+
break;
833+
}
834+
} else if (rdr.curr() == '/' && rdr.next() == '*') {
835+
level += 1;
836+
}
837+
_str.push_char(val, rdr.curr());
838+
rdr.bump();
839+
}
840+
}
841+
ret rec(val=cmnt_block(lines),
842+
pos=p,
843+
space_after=consume_whitespace(rdr) > 1u);
844+
}
845+
846+
impure fn gather_comments(str path) -> vec[cmnt] {
847+
auto srdr = io.file_reader(path);
848+
auto rdr = lexer.new_reader(srdr, path);
849+
let vec[cmnt] comments = vec();
850+
while (!rdr.is_eof()) {
851+
while (true) {
852+
consume_whitespace(rdr);
853+
if (rdr.curr() == '/' && rdr.next() == '/') {
854+
_vec.push[cmnt](comments, read_line_comment(rdr));
855+
} else if (rdr.curr() == '/' && rdr.next() == '*') {
856+
_vec.push[cmnt](comments, read_block_comment(rdr));
857+
} else { break; }
858+
}
859+
next_token(rdr);
860+
}
861+
ret comments;
862+
}
863+
784864

785865
//
786866
// Local Variables:

trunk/src/comp/front/parser.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@ impure fn new_parser(session.session sess,
116116
}
117117
auto srdr = io.file_reader(path);
118118
auto rdr = lexer.new_reader(srdr, path);
119+
// Make sure npos points at first actual token.
120+
lexer.consume_any_whitespace(rdr);
119121
auto npos = rdr.get_curr_pos();
120122
ret stdio_parser(sess, env, ftype, lexer.next_token(rdr),
121123
npos, npos, initial_def._1, UNRESTRICTED, initial_def._0,
@@ -1748,8 +1750,8 @@ impure fn parse_block(parser p) -> ast.block {
17481750
}
17491751
}
17501752

1751-
p.bump();
17521753
auto hi = p.get_span();
1754+
p.bump();
17531755

17541756
auto bloc = index_block(stmts, expr);
17551757
ret spanned[ast.block_](lo, hi, bloc);

0 commit comments

Comments
 (0)