diff --git a/src/servo/parser/html.rs b/src/servo/parser/html.rs
index 0bfd79b5d2d..c4134289b87 100644
--- a/src/servo/parser/html.rs
+++ b/src/servo/parser/html.rs
@@ -1,3 +1,5 @@
+import comm::{port, chan};
+
type parser = {
mut lookahead: option,
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 {
+ 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;
+}
+
diff --git a/src/servo/servo.rs b/src/servo/servo.rs
index 9a9540b9742..0318854e2e6 100644
--- a/src/servo/servo.rs
+++ b/src/servo/servo.rs
@@ -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