diff options
| author | Graydon Hoare <[email protected]> | 2010-08-18 15:41:13 -0700 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2010-08-18 15:41:24 -0700 |
| commit | 4727532e958dbb961f4ddafa90e8466f12f54cca (patch) | |
| tree | 9a695b6e96761c6fd5e4db7c9e855e58767dddb4 /src | |
| parent | Add stdio_reader to io, just use FILE* values for now. We have things to do. (diff) | |
| download | rust-4727532e958dbb961f4ddafa90e8466f12f54cca.tar.xz rust-4727532e958dbb961f4ddafa90e8466f12f54cca.zip | |
Simplify lexer/parser structure to use stdio_reader.
Diffstat (limited to 'src')
| -rw-r--r-- | src/comp/driver/rustc.rs | 10 | ||||
| -rw-r--r-- | src/comp/fe/lexer.rs | 32 | ||||
| -rw-r--r-- | src/comp/fe/parser.rs | 22 | ||||
| -rw-r--r-- | src/comp/rustc.rc | 3 |
4 files changed, 35 insertions, 32 deletions
diff --git a/src/comp/driver/rustc.rs b/src/comp/driver/rustc.rs index 4b842bd0..67aa5308 100644 --- a/src/comp/driver/rustc.rs +++ b/src/comp/driver/rustc.rs @@ -3,6 +3,8 @@ import std._str; import lib.llvm.llvm; import lib.llvm.builder; +import fe.parser; +import fe.token; fn write_module() { auto llmod = @@ -25,11 +27,9 @@ fn main(vec[str] args) -> () { auto i = 0; for (str filename in args) { if (i > 0) { - auto br = std._io.new_buf_reader(filename); - log "opened file: " + filename; - for (u8 b in br.read()) { - log b; - } + auto p = parser.new_parser(filename); + log "opened file: " + filename; + auto tok = p.peek(); } i += 1; } diff --git a/src/comp/fe/lexer.rs b/src/comp/fe/lexer.rs index d8a4629a..f1589e7f 100644 --- a/src/comp/fe/lexer.rs +++ b/src/comp/fe/lexer.rs @@ -1,33 +1,13 @@ -import std._io.buf_reader; +import std._io.stdio_reader; -iter buffers(buf_reader rdr) -> vec[u8] { - while (true) { - let vec[u8] v = rdr.read(); - if (std._vec.len[u8](v) == 0u) { - ret; - } - put v; - } +fn next_token(stdio_reader rdr) -> token.token { + auto c = rdr.getc(); + log "got char"; + log c; + ret token.EOF(); } -obj lexer(buf_reader rdr) { - fn peek() -> token.token { - ret token.EOF(); - } - fn bump() { - } -} - -iter bytes(buf_reader rdr) -> u8 { - for each (vec[u8] buf in buffers(rdr)) { - for (u8 b in buf) { - // FIXME: doesn't compile at the moment. - // put b; - } - } -} - // // Local Variables: // mode: rust diff --git a/src/comp/fe/parser.rs b/src/comp/fe/parser.rs index 406c8119..02de22a7 100644 --- a/src/comp/fe/parser.rs +++ b/src/comp/fe/parser.rs @@ -1,3 +1,25 @@ +import std._io; + +state type parser = + state obj { + state fn peek() -> token.token; + state fn bump(); + }; + +fn new_parser(str path) -> parser { + state obj stdio_parser(mutable token.token tok, + _io.stdio_reader rdr) + { + state fn peek() -> token.token { + ret tok; + } + state fn bump() { + tok = lexer.next_token(rdr); + } + } + auto rdr = _io.new_stdio_reader(path); + ret stdio_parser(lexer.next_token(rdr), rdr); +} // // Local Variables: diff --git a/src/comp/rustc.rc b/src/comp/rustc.rc index 6d845c71..4e186b17 100644 --- a/src/comp/rustc.rc +++ b/src/comp/rustc.rc @@ -18,7 +18,8 @@ mod util { mod common; } -auth driver = unsafe; +auth driver.rustc.main = state; +auth driver.rustc.write_module = unsafe; mod lib { alt (target_os) { |