mirror of
https://github.com/servo/servo.git
synced 2025-07-22 14:53:49 +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 = {
|
||||
mut lookahead: option<char_or_eof>,
|
||||
reader: io::reader
|
||||
|
@ -162,3 +164,20 @@ fn parser(reader: io::reader) -> parser {
|
|||
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]) {
|
||||
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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue