mirror of
https://github.com/servo/servo.git
synced 2025-07-22 23:03:42 +01:00
Run the parser in a separate task
This commit is contained in:
parent
3415a7e429
commit
39462a50a4
2 changed files with 25 additions and 1 deletions
|
@ -1,3 +1,5 @@
|
||||||
|
import comm::{port, chan};
|
||||||
|
|
||||||
type parser = {
|
type parser = {
|
||||||
mut lookahead: option<char_or_eof>,
|
mut lookahead: option<char_or_eof>,
|
||||||
reader: io::reader
|
reader: io::reader
|
||||||
|
@ -162,3 +164,20 @@ fn parser(reader: io::reader) -> parser {
|
||||||
ret { mut lookahead: none, reader: reader };
|
ret { mut lookahead: none, reader: reader };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn spawn_parser_task(filename: str) -> port<token> {
|
||||||
|
let result_port = port();
|
||||||
|
let result_chan = chan(result_port);
|
||||||
|
task::spawn_listener::<()> {|_child_port|
|
||||||
|
let file_data = io::read_whole_file(filename).get();
|
||||||
|
let reader = io::bytes_reader(file_data);
|
||||||
|
let parser = parser(reader);
|
||||||
|
|
||||||
|
loop {
|
||||||
|
let token = parser.parse();
|
||||||
|
result_chan.send(token);
|
||||||
|
if token == to_eof { break; }
|
||||||
|
}
|
||||||
|
};
|
||||||
|
ret result_port;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,12 @@ fn parse(filename: str) {
|
||||||
|
|
||||||
fn main(args: [str]) {
|
fn main(args: [str]) {
|
||||||
if args.len() >= 2u {
|
if args.len() >= 2u {
|
||||||
parse(args[1]);
|
let p = html::spawn_parser_task(args[1]);
|
||||||
|
loop {
|
||||||
|
let token = p.recv();
|
||||||
|
io::println(#fmt("token: %?", token));
|
||||||
|
if token == html::to_eof { break; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// The platform event handler thread
|
// The platform event handler thread
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue