mirror of
https://github.com/servo/servo.git
synced 2025-07-25 08:10:21 +01:00
Merge pull request #18 from mmeyerho/copies
Fixed warnings about implicitly copying values, but not warnings of type mismatches.
This commit is contained in:
commit
13f82a23bf
11 changed files with 50 additions and 39 deletions
|
@ -9,8 +9,8 @@ import layout::layout;
|
||||||
import js::rust::methods;
|
import js::rust::methods;
|
||||||
|
|
||||||
enum msg {
|
enum msg {
|
||||||
parse(str),
|
parse(~str),
|
||||||
execute(str),
|
execute(~str),
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,20 +37,21 @@ fn content(to_layout: chan<layout::msg>) -> chan<msg> {
|
||||||
loop {
|
loop {
|
||||||
alt from_master.recv() {
|
alt from_master.recv() {
|
||||||
parse(filename) {
|
parse(filename) {
|
||||||
#debug["content: Received filename `%s` to parse", filename];
|
#debug["content: Received filename `%s` to parse", *filename];
|
||||||
|
|
||||||
// TODO actually parse where the css sheet should be
|
// TODO actually parse where the css sheet should be
|
||||||
// Replace .html with .css and try to open a stylesheet
|
// Replace .html with .css and try to open a stylesheet
|
||||||
assert filename.ends_with(".html");
|
assert (*filename).ends_with(".html");
|
||||||
let new_file = filename.substr(0u, filename.len() - 5u)
|
let new_file = (*filename).substr(0u, (*filename).len() - 5u)
|
||||||
+ ".css";
|
+ ".css";
|
||||||
|
|
||||||
// Send off a task to parse the stylesheet
|
// Send off a task to parse the stylesheet
|
||||||
let css_port = comm::port();
|
let css_port = comm::port();
|
||||||
let css_chan = comm::chan(css_port);
|
let css_chan = comm::chan(css_port);
|
||||||
task::spawn {||
|
task::spawn {||
|
||||||
|
let new_file <- new_file;
|
||||||
let css_stream = parser::lexer::
|
let css_stream = parser::lexer::
|
||||||
spawn_css_lexer_task(new_file);
|
spawn_css_lexer_task(~new_file);
|
||||||
let css_rules = parser::css_builder::
|
let css_rules = parser::css_builder::
|
||||||
build_stylesheet(css_stream);
|
build_stylesheet(css_stream);
|
||||||
css_chan.send(css_rules);
|
css_chan.send(css_rules);
|
||||||
|
@ -81,11 +82,12 @@ fn content(to_layout: chan<layout::msg>) -> chan<msg> {
|
||||||
scope.reader_forked();
|
scope.reader_forked();
|
||||||
}
|
}
|
||||||
execute(filename) {
|
execute(filename) {
|
||||||
#debug["content: Received filename `%s` to execute", filename];
|
#debug["content: Received filename `%s` to execute",
|
||||||
|
*filename];
|
||||||
|
|
||||||
alt io::read_whole_file(filename) {
|
alt io::read_whole_file(*filename) {
|
||||||
result::err(msg) {
|
result::err(msg) {
|
||||||
io::println(#fmt["Error opening %s: %s", filename, msg]);
|
io::println(#fmt["Error opening %s: %s", *filename, msg]);
|
||||||
}
|
}
|
||||||
result::ok(bytes) {
|
result::ok(bytes) {
|
||||||
let cx = rt.cx();
|
let cx = rt.cx();
|
||||||
|
@ -93,7 +95,8 @@ fn content(to_layout: chan<layout::msg>) -> chan<msg> {
|
||||||
cx.set_logging_error_reporter();
|
cx.set_logging_error_reporter();
|
||||||
cx.new_compartment(js::global::global_class).chain { |comp|
|
cx.new_compartment(js::global::global_class).chain { |comp|
|
||||||
comp.define_functions(js::global::debug_fns);
|
comp.define_functions(js::global::debug_fns);
|
||||||
cx.evaluate_script(comp.global_obj, bytes, filename, 1u)
|
cx.evaluate_script(comp.global_obj, bytes, *filename,
|
||||||
|
1u)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ class element {
|
||||||
let subclass: ~element_subclass;
|
let subclass: ~element_subclass;
|
||||||
let attrs: dvec<~attr>;
|
let attrs: dvec<~attr>;
|
||||||
|
|
||||||
new(tag_name: str, -subclass: ~element_subclass) {
|
new(-tag_name: str, -subclass: ~element_subclass) {
|
||||||
self.tag_name = tag_name;
|
self.tag_name = tag_name;
|
||||||
self.subclass = subclass;
|
self.subclass = subclass;
|
||||||
self.attrs = dvec();
|
self.attrs = dvec();
|
||||||
|
@ -29,7 +29,7 @@ class element {
|
||||||
let mut i = 0u;
|
let mut i = 0u;
|
||||||
while i < self.attrs.len() {
|
while i < self.attrs.len() {
|
||||||
if attr_name == self.attrs[i].name {
|
if attr_name == self.attrs[i].name {
|
||||||
ret some(self.attrs[i].value);
|
ret some(copy self.attrs[i].value);
|
||||||
}
|
}
|
||||||
i += 1u;
|
i += 1u;
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ class attr {
|
||||||
let name: str;
|
let name: str;
|
||||||
let value: str;
|
let value: str;
|
||||||
|
|
||||||
new(name: str, value: str) {
|
new(-name: str, -value: str) {
|
||||||
self.name = name;
|
self.name = name;
|
||||||
self.value = value;
|
self.value = value;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import gfx::renderer;
|
import gfx::renderer;
|
||||||
|
|
||||||
enum msg {
|
enum msg {
|
||||||
load_url(str),
|
load_url(~str),
|
||||||
exit(comm::chan<()>)
|
exit(comm::chan<()>)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,8 @@ fn engine<S: renderer::sink send copy>(sink: S) -> comm::chan<msg> {
|
||||||
loop {
|
loop {
|
||||||
alt self_ch.recv() {
|
alt self_ch.recv() {
|
||||||
load_url(url) {
|
load_url(url) {
|
||||||
if url.ends_with(".js") {
|
let url <- url;
|
||||||
|
if (*url).ends_with(".js") {
|
||||||
content.send(content::execute(url))
|
content.send(content::execute(url))
|
||||||
} else {
|
} else {
|
||||||
content.send(content::parse(url))
|
content.send(content::parse(url))
|
||||||
|
|
|
@ -207,10 +207,11 @@ mod test {
|
||||||
import dvec::{dvec, extensions};
|
import dvec::{dvec, extensions};
|
||||||
import io::println;
|
import io::println;
|
||||||
|
|
||||||
fn new_node_from_attr(scope : node_scope, name : str, val : str) -> node {
|
fn new_node_from_attr(scope : node_scope, -name : str, -val : str) -> node
|
||||||
|
{
|
||||||
let elmt = dom::base::element("div", ~es_div);
|
let elmt = dom::base::element("div", ~es_div);
|
||||||
let attr = ~attr(name, val);
|
let attr = ~attr(name, val);
|
||||||
elmt.attrs.push(copy attr);
|
elmt.attrs.push(attr);
|
||||||
ret scope.new_node(nk_element(elmt));
|
ret scope.new_node(nk_element(elmt));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ class text_box {
|
||||||
let text: str;
|
let text: str;
|
||||||
let mut run: option<text_run>;
|
let mut run: option<text_run>;
|
||||||
|
|
||||||
new(text: str) {
|
new(-text: str) {
|
||||||
self.text = text;
|
self.text = text;
|
||||||
self.run = none;
|
self.run = none;
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ impl text_layout_methods for @box {
|
||||||
_ { fail "expected text box in reflow_text!" }
|
_ { fail "expected text box in reflow_text!" }
|
||||||
};
|
};
|
||||||
|
|
||||||
let run = text_run(subbox.text);
|
let run = text_run(copy subbox.text);
|
||||||
subbox.run = some(copy run);
|
subbox.run = some(copy run);
|
||||||
run.shape();
|
run.shape();
|
||||||
|
|
||||||
|
|
|
@ -25,18 +25,18 @@ fn from_cmdline_args(args: [str]) -> opts {
|
||||||
];
|
];
|
||||||
|
|
||||||
let match = alt getopts::getopts(args, opts) {
|
let match = alt getopts::getopts(args, opts) {
|
||||||
result::ok(m) { m }
|
result::ok(m) { let m <- m; m }
|
||||||
result::err(f) { fail getopts::fail_str(f) }
|
result::err(f) { fail getopts::fail_str(f) }
|
||||||
};
|
};
|
||||||
|
|
||||||
let urls = if match.free.is_empty() {
|
let urls = if match.free.is_empty() {
|
||||||
fail "servo asks that you provide 1 or more URLs"
|
fail "servo asks that you provide 1 or more URLs"
|
||||||
} else {
|
} else {
|
||||||
match.free
|
copy match.free
|
||||||
};
|
};
|
||||||
|
|
||||||
let render_mode = alt getopts::opt_maybe_str(match, "o") {
|
let render_mode = alt getopts::opt_maybe_str(match, "o") {
|
||||||
some(output_file) { png(output_file) }
|
some(output_file) { let output_file <- output_file; png(output_file) }
|
||||||
none { screen }
|
none { screen }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -16,12 +16,12 @@ type token_reader = {stream : port<token>, mut lookahead : option<token>};
|
||||||
impl methods for token_reader {
|
impl methods for token_reader {
|
||||||
fn get() -> token {
|
fn get() -> token {
|
||||||
alt copy self.lookahead {
|
alt copy self.lookahead {
|
||||||
some(tok) { self.lookahead = none; tok }
|
some(tok) { self.lookahead = none; let t <- tok; t }
|
||||||
none { recv(self.stream) }
|
none { recv(self.stream) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn unget(tok : token) {
|
fn unget(-tok : token) {
|
||||||
assert is_none(self.lookahead);
|
assert is_none(self.lookahead);
|
||||||
self.lookahead = some(tok);
|
self.lookahead = some(tok);
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ impl methods for token_reader {
|
||||||
fn parse_element(reader : token_reader) -> option<~selector> {
|
fn parse_element(reader : token_reader) -> option<~selector> {
|
||||||
// Get the current element type
|
// Get the current element type
|
||||||
let elmt_name = alt reader.get() {
|
let elmt_name = alt reader.get() {
|
||||||
to_elmt(tag) { tag }
|
to_elmt(tag) { let t <- tag; t }
|
||||||
to_eof { ret none; }
|
to_eof { ret none; }
|
||||||
_ { fail "Expected an element" }
|
_ { fail "Expected an element" }
|
||||||
};
|
};
|
||||||
|
@ -41,7 +41,7 @@ fn parse_element(reader : token_reader) -> option<~selector> {
|
||||||
loop {
|
loop {
|
||||||
let tok = reader.get();
|
let tok = reader.get();
|
||||||
alt tok {
|
alt tok {
|
||||||
to_attr(attr) { attr_list += [attr]; }
|
to_attr(attr) { let a <- attr; attr_list += [a]; }
|
||||||
to_start_desc | to_descendant | to_child | to_sibling
|
to_start_desc | to_descendant | to_child | to_sibling
|
||||||
| to_comma {
|
| to_comma {
|
||||||
reader.unget(tok);
|
reader.unget(tok);
|
||||||
|
|
|
@ -10,15 +10,15 @@ import parser::token;
|
||||||
import gfx::geom;
|
import gfx::geom;
|
||||||
import dvec::extensions;
|
import dvec::extensions;
|
||||||
|
|
||||||
fn link_up_attribute(scope: dom::node_scope, node: dom::node, key: str,
|
fn link_up_attribute(scope: dom::node_scope, node: dom::node, -key: str,
|
||||||
value: str) {
|
-value: str) {
|
||||||
// TODO: Implement atoms so that we don't always perform string
|
// TODO: Implement atoms so that we don't always perform string
|
||||||
// comparisons.
|
// comparisons.
|
||||||
scope.rd(node) {
|
scope.rd(node) {
|
||||||
|node_contents|
|
|node_contents|
|
||||||
alt *node_contents.kind {
|
alt *node_contents.kind {
|
||||||
dom::nk_element(element) {
|
dom::nk_element(element) {
|
||||||
element.attrs.push(~attr(key, value));
|
element.attrs.push(~attr(copy key, copy value));
|
||||||
alt *element.subclass {
|
alt *element.subclass {
|
||||||
es_img(img) if key == "width" {
|
es_img(img) if key == "width" {
|
||||||
alt int::from_str(value) {
|
alt int::from_str(value) {
|
||||||
|
@ -89,6 +89,7 @@ fn build_dom(scope: dom::node_scope,
|
||||||
cur = scope.get_parent(cur).get();
|
cur = scope.get_parent(cur).get();
|
||||||
}
|
}
|
||||||
parser::to_text(s) if !s.is_whitespace() {
|
parser::to_text(s) if !s.is_whitespace() {
|
||||||
|
let s <- s;
|
||||||
let new_node = scope.new_node(dom::nk_text(s));
|
let new_node = scope.new_node(dom::nk_text(s));
|
||||||
scope.add_child(cur, new_node);
|
scope.add_child(cur, new_node);
|
||||||
}
|
}
|
||||||
|
|
|
@ -475,31 +475,34 @@ fn parser(reader: io::reader, state : parse_state) -> parser {
|
||||||
ret { mut lookahead: none, mut state: state, reader: reader };
|
ret { mut lookahead: none, mut state: state, reader: reader };
|
||||||
}
|
}
|
||||||
|
|
||||||
fn spawn_html_parser_task(filename: str) -> port<html::token> {
|
fn spawn_html_parser_task(-filename: ~str) -> port<html::token> {
|
||||||
let result_port = port();
|
let result_port = port();
|
||||||
let result_chan = chan(result_port);
|
let result_chan = chan(result_port);
|
||||||
task::spawn {||
|
task::spawn {||
|
||||||
|
let filename <- *filename;
|
||||||
|
assert (copy filename).ends_with(".html");
|
||||||
let file_data = io::read_whole_file(filename).get();
|
let file_data = io::read_whole_file(filename).get();
|
||||||
let reader = io::bytes_reader(file_data);
|
let reader = io::bytes_reader(file_data);
|
||||||
|
|
||||||
assert filename.ends_with(".html");
|
|
||||||
let parser = parser(reader, ps_html_normal);
|
let parser = parser(reader, ps_html_normal);
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let token = parser.parse_html();
|
let token = parser.parse_html();
|
||||||
|
let should_break = token == html::to_eof;
|
||||||
result_chan.send(token);
|
result_chan.send(token);
|
||||||
if token == html::to_eof { break; }
|
if should_break { break; }
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
ret result_port;
|
ret result_port;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn spawn_css_lexer_task(filename: str) -> port<css::token> {
|
fn spawn_css_lexer_task(-filename: ~str) -> port<css::token> {
|
||||||
let result_port = port();
|
let result_port = port();
|
||||||
let result_chan = chan(result_port);
|
let result_chan = chan(result_port);
|
||||||
task::spawn {||
|
task::spawn {||
|
||||||
assert filename.ends_with(".css");
|
let filename <- *filename;
|
||||||
|
|
||||||
|
assert (copy filename).ends_with(".css");
|
||||||
let file_try = io::read_whole_file(filename);
|
let file_try = io::read_whole_file(filename);
|
||||||
|
|
||||||
// Check if the given css file existed, if it does, parse it,
|
// Check if the given css file existed, if it does, parse it,
|
||||||
|
@ -515,8 +518,9 @@ fn spawn_css_lexer_task(filename: str) -> port<css::token> {
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let token = parser.parse_css();
|
let token = parser.parse_css();
|
||||||
|
let should_break = token == css::to_eof;
|
||||||
result_chan.send(token);
|
result_chan.send(token);
|
||||||
if token == css::to_eof { break; }
|
if should_break { break; }
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
#debug["Failed to open css sheet %s", filename];
|
#debug["Failed to open css sheet %s", filename];
|
||||||
|
|
|
@ -41,7 +41,7 @@ fn run_pipeline_screen(urls: [str]) {
|
||||||
|
|
||||||
for urls.each { |filename|
|
for urls.each { |filename|
|
||||||
#debug["master: Sending filename `%s`", filename];
|
#debug["master: Sending filename `%s`", filename];
|
||||||
engine.send(engine::load_url(filename));
|
engine.send(engine::load_url(~copy filename));
|
||||||
#debug["master: Waiting for keypress"];
|
#debug["master: Waiting for keypress"];
|
||||||
key_ch.recv();
|
key_ch.recv();
|
||||||
}
|
}
|
||||||
|
@ -56,7 +56,7 @@ fn run_pipeline_screen(urls: [str]) {
|
||||||
osmain.send(platform::osmain::exit);
|
osmain.send(platform::osmain::exit);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn run_pipeline_png(url: str, outfile: str) {
|
fn run_pipeline_png(-url: str, outfile: str) {
|
||||||
|
|
||||||
// Use a PNG encoder as the graphics sink
|
// Use a PNG encoder as the graphics sink
|
||||||
import gfx::pngsink;
|
import gfx::pngsink;
|
||||||
|
@ -65,7 +65,8 @@ fn run_pipeline_png(url: str, outfile: str) {
|
||||||
listen {|pngdata|
|
listen {|pngdata|
|
||||||
let sink = pngsink::pngsink(pngdata);
|
let sink = pngsink::pngsink(pngdata);
|
||||||
let engine = engine::engine(sink);
|
let engine = engine::engine(sink);
|
||||||
engine.send(engine::load_url(url));
|
let url <- url;
|
||||||
|
engine.send(engine::load_url(~url));
|
||||||
alt io::buffered_file_writer(outfile) {
|
alt io::buffered_file_writer(outfile) {
|
||||||
result::ok(writer) {
|
result::ok(writer) {
|
||||||
import io::writer;
|
import io::writer;
|
||||||
|
|
|
@ -7,7 +7,7 @@ class text_run {
|
||||||
let text: str;
|
let text: str;
|
||||||
let mut glyphs: option<[glyph]>;
|
let mut glyphs: option<[glyph]>;
|
||||||
|
|
||||||
new(text: str) {
|
new(-text: str) {
|
||||||
self.text = text;
|
self.text = text;
|
||||||
self.glyphs = none;
|
self.glyphs = none;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue