mirror of
https://github.com/servo/servo.git
synced 2025-08-06 06:00:15 +01:00
Update rustc to 00b112c45a604fa6f4b59af2a40c9deeadfdb7c6/rustc-1.0.0-dev.
This commit is contained in:
parent
ff8cbff810
commit
95fc29fa0d
255 changed files with 3550 additions and 3362 deletions
|
@ -4,13 +4,11 @@
|
|||
|
||||
/// General actor system infrastructure.
|
||||
|
||||
use std::any::{Any, AnyRefExt, AnyMutRefExt};
|
||||
use std::any::Any;
|
||||
use std::collections::HashMap;
|
||||
use std::cell::{Cell, RefCell};
|
||||
use std::intrinsics::TypeId;
|
||||
use std::io::TcpStream;
|
||||
use std::mem::{transmute, transmute_copy, replace};
|
||||
use std::raw::TraitObject;
|
||||
use std::mem::replace;
|
||||
use serialize::json;
|
||||
|
||||
/// A common trait for all devtools actors that encompasses an immutable name
|
||||
|
@ -25,46 +23,6 @@ pub trait Actor : Any {
|
|||
fn name(&self) -> String;
|
||||
}
|
||||
|
||||
impl<'a> AnyMutRefExt<'a> for &'a mut (Actor + 'a) {
|
||||
fn downcast_mut<T: 'static>(self) -> Option<&'a mut T> {
|
||||
if self.is::<T>() {
|
||||
unsafe {
|
||||
// Get the raw representation of the trait object
|
||||
let to: TraitObject = transmute_copy(&self);
|
||||
|
||||
// Extract the data pointer
|
||||
Some(transmute(to.data))
|
||||
}
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> AnyRefExt<'a> for &'a (Actor + 'a) {
|
||||
fn is<T: 'static>(self) -> bool {
|
||||
// This implementation is only needed so long as there's a Rust bug that
|
||||
// prevents downcast_ref from giving realistic return values.
|
||||
let t = TypeId::of::<T>();
|
||||
let boxed: TypeId = (*self).get_type_id();
|
||||
t == boxed
|
||||
}
|
||||
|
||||
fn downcast_ref<T: 'static>(self) -> Option<&'a T> {
|
||||
if self.is::<T>() {
|
||||
unsafe {
|
||||
// Get the raw representation of the trait object
|
||||
let to: TraitObject = transmute_copy(&self);
|
||||
|
||||
// Extract the data pointer
|
||||
Some(transmute(to.data))
|
||||
}
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// A list of known, owned actors.
|
||||
pub struct ActorRegistry {
|
||||
actors: HashMap<String, Box<Actor+Send+Sized>>,
|
||||
|
@ -130,20 +88,14 @@ impl ActorRegistry {
|
|||
|
||||
/// Find an actor by registered name
|
||||
pub fn find<'a, T: 'static>(&'a self, name: &str) -> &'a T {
|
||||
//FIXME: Rust bug forces us to implement bogus Any for Actor since downcast_ref currently
|
||||
// fails for unknown reasons.
|
||||
/*let actor: &Actor+Send+Sized = *self.actors.find(&name.to_string()).unwrap();
|
||||
(actor as &Any).downcast_ref::<T>().unwrap()*/
|
||||
self.actors.get(&name.to_string()).unwrap().downcast_ref::<T>().unwrap()
|
||||
let actor: &Any = self.actors.get(&name.to_string()).unwrap();
|
||||
actor.downcast_ref::<T>().unwrap()
|
||||
}
|
||||
|
||||
/// Find an actor by registered name
|
||||
pub fn find_mut<'a, T: 'static>(&'a mut self, name: &str) -> &'a mut T {
|
||||
//FIXME: Rust bug forces us to implement bogus Any for Actor since downcast_ref currently
|
||||
// fails for unknown reasons.
|
||||
/*let actor: &mut Actor+Send+Sized = *self.actors.find_mut(&name.to_string()).unwrap();
|
||||
(actor as &mut Any).downcast_mut::<T>().unwrap()*/
|
||||
self.actors.get_mut(&name.to_string()).unwrap().downcast_mut::<T>().unwrap()
|
||||
let actor: &mut Any = self.actors.get_mut(&name.to_string()).unwrap();
|
||||
actor.downcast_mut::<T>().unwrap()
|
||||
}
|
||||
|
||||
/// Attempt to process a message as directed by its `to` property. If the actor is not
|
||||
|
|
|
@ -13,18 +13,19 @@ use devtools_traits::{EvaluateJS, NullValue, VoidValue, NumberValue, StringValue
|
|||
use devtools_traits::{ActorValue, DevtoolScriptControlMsg};
|
||||
use servo_msg::constellation_msg::PipelineId;
|
||||
|
||||
use collections::TreeMap;
|
||||
use collections::BTreeMap;
|
||||
use core::cell::RefCell;
|
||||
use serialize::json::{mod, Json, ToJson};
|
||||
use std::io::TcpStream;
|
||||
use std::num::Float;
|
||||
use std::sync::mpsc::{channel, Sender};
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct StartedListenersTraits {
|
||||
customNetworkRequest: bool,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct StartedListenersReply {
|
||||
from: String,
|
||||
nativeConsoleAPI: bool,
|
||||
|
@ -32,13 +33,13 @@ struct StartedListenersReply {
|
|||
traits: StartedListenersTraits,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
#[allow(dead_code)]
|
||||
struct ConsoleAPIMessage {
|
||||
_type: String, //FIXME: should this be __type__ instead?
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
#[allow(dead_code)]
|
||||
struct PageErrorMessage {
|
||||
_type: String, //FIXME: should this be __type__ instead?
|
||||
|
@ -56,7 +57,7 @@ struct PageErrorMessage {
|
|||
private: bool,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
#[allow(dead_code)]
|
||||
struct LogMessage {
|
||||
_type: String, //FIXME: should this be __type__ instead?
|
||||
|
@ -64,7 +65,7 @@ struct LogMessage {
|
|||
message: String,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
#[allow(dead_code)]
|
||||
enum ConsoleMessageType {
|
||||
ConsoleAPIType(ConsoleAPIMessage),
|
||||
|
@ -72,26 +73,26 @@ enum ConsoleMessageType {
|
|||
LogMessageType(LogMessage),
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct GetCachedMessagesReply {
|
||||
from: String,
|
||||
messages: Vec<json::Object>,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct StopListenersReply {
|
||||
from: String,
|
||||
stoppedListeners: Vec<String>,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct AutocompleteReply {
|
||||
from: String,
|
||||
matches: Vec<String>,
|
||||
matchProp: String,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct EvaluateJSReply {
|
||||
from: String,
|
||||
input: String,
|
||||
|
@ -220,28 +221,28 @@ impl Actor for ConsoleActor {
|
|||
"evaluateJS" => {
|
||||
let input = msg.get(&"text".to_string()).unwrap().as_string().unwrap().to_string();
|
||||
let (chan, port) = channel();
|
||||
self.script_chan.send(EvaluateJS(self.pipeline, input.clone(), chan));
|
||||
self.script_chan.send(EvaluateJS(self.pipeline, input.clone(), chan)).unwrap();
|
||||
|
||||
//TODO: extract conversion into protocol module or some other useful place
|
||||
let result = match try!(port.recv_opt()) {
|
||||
let result = match try!(port.recv().map_err(|_| ())) {
|
||||
VoidValue => {
|
||||
let mut m = TreeMap::new();
|
||||
let mut m = BTreeMap::new();
|
||||
m.insert("type".to_string(), "undefined".to_string().to_json());
|
||||
Json::Object(m)
|
||||
}
|
||||
NullValue => {
|
||||
let mut m = TreeMap::new();
|
||||
let mut m = BTreeMap::new();
|
||||
m.insert("type".to_string(), "null".to_string().to_json());
|
||||
Json::Object(m)
|
||||
}
|
||||
BooleanValue(val) => val.to_json(),
|
||||
NumberValue(val) => {
|
||||
if val.is_nan() {
|
||||
let mut m = TreeMap::new();
|
||||
let mut m = BTreeMap::new();
|
||||
m.insert("type".to_string(), "NaN".to_string().to_json());
|
||||
Json::Object(m)
|
||||
} else if val.is_infinite() {
|
||||
let mut m = TreeMap::new();
|
||||
let mut m = BTreeMap::new();
|
||||
if val < 0. {
|
||||
m.insert("type".to_string(), "-Infinity".to_string().to_json());
|
||||
} else {
|
||||
|
@ -249,7 +250,7 @@ impl Actor for ConsoleActor {
|
|||
}
|
||||
Json::Object(m)
|
||||
} else if val == Float::neg_zero() {
|
||||
let mut m = TreeMap::new();
|
||||
let mut m = BTreeMap::new();
|
||||
m.insert("type".to_string(), "-0".to_string().to_json());
|
||||
Json::Object(m)
|
||||
} else {
|
||||
|
@ -259,7 +260,7 @@ impl Actor for ConsoleActor {
|
|||
StringValue(s) => s.to_json(),
|
||||
ActorValue(s) => {
|
||||
//TODO: make initial ActorValue message include these properties.
|
||||
let mut m = TreeMap::new();
|
||||
let mut m = BTreeMap::new();
|
||||
m.insert("type".to_string(), "object".to_string().to_json());
|
||||
m.insert("class".to_string(), "???".to_string().to_json());
|
||||
m.insert("actor".to_string(), s.to_json());
|
||||
|
@ -276,9 +277,9 @@ impl Actor for ConsoleActor {
|
|||
input: input,
|
||||
result: result,
|
||||
timestamp: 0,
|
||||
exception: Json::Object(TreeMap::new()),
|
||||
exception: Json::Object(BTreeMap::new()),
|
||||
exceptionMessage: "".to_string(),
|
||||
helperResult: Json::Object(TreeMap::new()),
|
||||
helperResult: Json::Object(BTreeMap::new()),
|
||||
};
|
||||
stream.write_json_packet(&msg);
|
||||
true
|
||||
|
|
|
@ -10,11 +10,12 @@ use devtools_traits::{GetLayout, NodeInfo, ModifyAttribute};
|
|||
use actor::{Actor, ActorRegistry};
|
||||
use protocol::JsonPacketStream;
|
||||
|
||||
use collections::TreeMap;
|
||||
use collections::BTreeMap;
|
||||
use servo_msg::constellation_msg::PipelineId;
|
||||
use serialize::json::{mod, Json, ToJson};
|
||||
use std::cell::RefCell;
|
||||
use std::io::TcpStream;
|
||||
use std::sync::mpsc::{channel, Sender};
|
||||
use std::num::Float;
|
||||
|
||||
pub struct InspectorActor {
|
||||
|
@ -26,13 +27,13 @@ pub struct InspectorActor {
|
|||
pub pipeline: PipelineId,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct GetHighlighterReply {
|
||||
highligter: HighlighterMsg, // sic.
|
||||
from: String,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct HighlighterMsg {
|
||||
actor: String,
|
||||
}
|
||||
|
@ -47,12 +48,12 @@ pub struct NodeActor {
|
|||
pipeline: PipelineId,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct ShowBoxModelReply {
|
||||
from: String,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct HideBoxModelReply {
|
||||
from: String,
|
||||
}
|
||||
|
@ -89,7 +90,7 @@ impl Actor for HighlighterActor {
|
|||
}
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct ModifyAttributeReply{
|
||||
from: String,
|
||||
}
|
||||
|
@ -114,7 +115,8 @@ impl Actor for NodeActor {
|
|||
|
||||
self.script_chan.send(ModifyAttribute(self.pipeline,
|
||||
registry.actor_to_script(target.to_string()),
|
||||
modifications));
|
||||
modifications))
|
||||
.unwrap();
|
||||
let reply = ModifyAttributeReply{
|
||||
from: self.name(),
|
||||
};
|
||||
|
@ -127,26 +129,26 @@ impl Actor for NodeActor {
|
|||
}
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct GetWalkerReply {
|
||||
from: String,
|
||||
walker: WalkerMsg,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct WalkerMsg {
|
||||
actor: String,
|
||||
root: NodeActorMsg,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct AttrMsg {
|
||||
namespace: String,
|
||||
name: String,
|
||||
value: String,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct NodeActorMsg {
|
||||
actor: String,
|
||||
baseURI: String,
|
||||
|
@ -243,23 +245,23 @@ struct WalkerActor {
|
|||
pipeline: PipelineId,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct QuerySelectorReply {
|
||||
from: String,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct DocumentElementReply {
|
||||
from: String,
|
||||
node: NodeActorMsg,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct ClearPseudoclassesReply {
|
||||
from: String,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct ChildrenReply {
|
||||
hasFirst: bool,
|
||||
hasLast: bool,
|
||||
|
@ -288,8 +290,8 @@ impl Actor for WalkerActor {
|
|||
|
||||
"documentElement" => {
|
||||
let (tx, rx) = channel();
|
||||
self.script_chan.send(GetDocumentElement(self.pipeline, tx));
|
||||
let doc_elem_info = rx.recv();
|
||||
self.script_chan.send(GetDocumentElement(self.pipeline, tx)).unwrap();
|
||||
let doc_elem_info = rx.recv().unwrap();
|
||||
let node = doc_elem_info.encode(registry, true, self.script_chan.clone(), self.pipeline);
|
||||
|
||||
let msg = DocumentElementReply {
|
||||
|
@ -313,8 +315,9 @@ impl Actor for WalkerActor {
|
|||
let (tx, rx) = channel();
|
||||
self.script_chan.send(GetChildren(self.pipeline,
|
||||
registry.actor_to_script(target.to_string()),
|
||||
tx));
|
||||
let children = rx.recv();
|
||||
tx))
|
||||
.unwrap();
|
||||
let children = rx.recv().unwrap();
|
||||
|
||||
let msg = ChildrenReply {
|
||||
hasFirst: true,
|
||||
|
@ -333,13 +336,13 @@ impl Actor for WalkerActor {
|
|||
}
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct GetPageStyleReply {
|
||||
from: String,
|
||||
pageStyle: PageStyleMsg,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct PageStyleMsg {
|
||||
actor: String,
|
||||
}
|
||||
|
@ -350,7 +353,7 @@ struct PageStyleActor {
|
|||
pipeline: PipelineId,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct GetAppliedReply {
|
||||
entries: Vec<AppliedEntry>,
|
||||
rules: Vec<AppliedRule>,
|
||||
|
@ -358,13 +361,13 @@ struct GetAppliedReply {
|
|||
from: String,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct GetComputedReply {
|
||||
computed: Vec<uint>, //XXX all css props
|
||||
from: String,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct AppliedEntry {
|
||||
rule: String,
|
||||
pseudoElement: Json,
|
||||
|
@ -372,7 +375,7 @@ struct AppliedEntry {
|
|||
matchedSelectors: Vec<String>,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct AppliedRule {
|
||||
actor: String,
|
||||
__type__: uint,
|
||||
|
@ -383,7 +386,7 @@ struct AppliedRule {
|
|||
parentStyleSheet: String,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct AppliedSheet {
|
||||
actor: String,
|
||||
href: String,
|
||||
|
@ -395,7 +398,7 @@ struct AppliedSheet {
|
|||
ruleCount: uint,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct GetLayoutReply {
|
||||
width: int,
|
||||
height: int,
|
||||
|
@ -403,7 +406,7 @@ struct GetLayoutReply {
|
|||
from: String,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
#[allow(dead_code)]
|
||||
struct AutoMargins {
|
||||
top: String,
|
||||
|
@ -450,9 +453,10 @@ impl Actor for PageStyleActor {
|
|||
let target = msg.get(&"node".to_string()).unwrap().as_string().unwrap();
|
||||
let (tx, rx) = channel();
|
||||
self.script_chan.send(GetLayout(self.pipeline,
|
||||
registry.actor_to_script(target.to_string()),
|
||||
tx));
|
||||
let (width, height) = rx.recv();
|
||||
registry.actor_to_script(target.to_string()),
|
||||
tx))
|
||||
.unwrap();
|
||||
let (width, height) = rx.recv().unwrap();
|
||||
|
||||
let auto_margins = msg.get(&"autoMargins".to_string()).unwrap().as_boolean().unwrap();
|
||||
|
||||
|
@ -463,7 +467,7 @@ impl Actor for PageStyleActor {
|
|||
height: height.round() as int,
|
||||
autoMargins: if auto_margins {
|
||||
//TODO: real values like processMargins in http://mxr.mozilla.org/mozilla-central/source/toolkit/devtools/server/actors/styles.js
|
||||
let mut m = TreeMap::new();
|
||||
let mut m = BTreeMap::new();
|
||||
m.insert("top".to_string(), "auto".to_string().to_json());
|
||||
m.insert("bottom".to_string(), "auto".to_string().to_json());
|
||||
m.insert("left".to_string(), "auto".to_string().to_json());
|
||||
|
@ -507,8 +511,8 @@ impl Actor for InspectorActor {
|
|||
}
|
||||
|
||||
let (tx, rx) = channel();
|
||||
self.script_chan.send(GetRootNode(self.pipeline, tx));
|
||||
let root_info = rx.recv();
|
||||
self.script_chan.send(GetRootNode(self.pipeline, tx)).unwrap();
|
||||
let root_info = rx.recv().unwrap();
|
||||
|
||||
let node = root_info.encode(registry, false, self.script_chan.clone(), self.pipeline);
|
||||
|
||||
|
|
|
@ -13,28 +13,28 @@ use protocol::JsonPacketStream;
|
|||
use serialize::json;
|
||||
use std::io::TcpStream;
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct ActorTraits {
|
||||
sources: bool,
|
||||
highlightable: bool,
|
||||
customHighlighters: Vec<String>,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct ErrorReply {
|
||||
from: String,
|
||||
error: String,
|
||||
message: String,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct ListTabsReply {
|
||||
from: String,
|
||||
selected: uint,
|
||||
tabs: Vec<TabActorMsg>,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct RootActorMsg {
|
||||
from: String,
|
||||
applicationType: String,
|
||||
|
|
|
@ -13,10 +13,10 @@ use protocol::JsonPacketStream;
|
|||
use serialize::json;
|
||||
use std::io::TcpStream;
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct TabTraits;
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct TabAttachedReply {
|
||||
from: String,
|
||||
__type__: String,
|
||||
|
@ -26,24 +26,24 @@ struct TabAttachedReply {
|
|||
traits: TabTraits,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct TabDetachedReply {
|
||||
from: String,
|
||||
__type__: String,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct ReconfigureReply {
|
||||
from: String
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct ListFramesReply {
|
||||
from: String,
|
||||
frames: Vec<FrameMsg>,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
struct FrameMsg {
|
||||
id: uint,
|
||||
url: String,
|
||||
|
@ -51,7 +51,7 @@ struct FrameMsg {
|
|||
parentID: uint,
|
||||
}
|
||||
|
||||
#[deriving(Encodable)]
|
||||
#[derive(RustcEncodable)]
|
||||
pub struct TabActorMsg {
|
||||
actor: String,
|
||||
title: String,
|
||||
|
|
|
@ -10,17 +10,19 @@
|
|||
#![crate_name = "devtools"]
|
||||
#![crate_type = "rlib"]
|
||||
|
||||
#![feature(int_uint, box_syntax)]
|
||||
|
||||
#![allow(non_snake_case)]
|
||||
#![allow(missing_copy_implementations)]
|
||||
#![allow(unstable)]
|
||||
|
||||
#![feature(phase)]
|
||||
|
||||
#[phase(plugin, link)]
|
||||
#[macro_use]
|
||||
extern crate log;
|
||||
|
||||
extern crate collections;
|
||||
extern crate core;
|
||||
extern crate devtools_traits;
|
||||
extern crate "serialize" as rustc_serialize;
|
||||
extern crate serialize;
|
||||
extern crate "msg" as servo_msg;
|
||||
extern crate "util" as servo_util;
|
||||
|
@ -39,8 +41,8 @@ use servo_util::task::spawn_named;
|
|||
use std::borrow::ToOwned;
|
||||
use std::cell::RefCell;
|
||||
use std::collections::HashMap;
|
||||
use std::comm;
|
||||
use std::comm::{Disconnected, Empty};
|
||||
use std::sync::mpsc::{channel, Receiver, Sender};
|
||||
use std::sync::mpsc::TryRecvError::{Disconnected, Empty};
|
||||
use std::io::{TcpListener, TcpStream};
|
||||
use std::io::{Acceptor, Listener, TimedOut};
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
@ -57,8 +59,8 @@ mod protocol;
|
|||
|
||||
/// Spin up a devtools server that listens for connections on the specified port.
|
||||
pub fn start_server(port: u16) -> Sender<DevtoolsControlMsg> {
|
||||
let (sender, receiver) = comm::channel();
|
||||
spawn_named("Devtools".to_owned(), proc() {
|
||||
let (sender, receiver) = channel();
|
||||
spawn_named("Devtools".to_owned(), move || {
|
||||
run_server(receiver, port)
|
||||
});
|
||||
sender
|
||||
|
@ -92,7 +94,7 @@ fn run_server(receiver: Receiver<DevtoolsControlMsg>, port: u16) {
|
|||
fn handle_client(actors: Arc<Mutex<ActorRegistry>>, mut stream: TcpStream) {
|
||||
println!("connection established to {}", stream.peer_name().unwrap());
|
||||
{
|
||||
let actors = actors.lock();
|
||||
let actors = actors.lock().unwrap();
|
||||
let msg = actors.find::<RootActor>("root").encodable();
|
||||
stream.write_json_packet(&msg);
|
||||
}
|
||||
|
@ -100,8 +102,9 @@ fn run_server(receiver: Receiver<DevtoolsControlMsg>, port: u16) {
|
|||
'outer: loop {
|
||||
match stream.read_json_packet() {
|
||||
Ok(json_packet) => {
|
||||
match actors.lock().handle_message(json_packet.as_object().unwrap(),
|
||||
&mut stream) {
|
||||
let mut actors = actors.lock().unwrap();
|
||||
match actors.handle_message(json_packet.as_object().unwrap(),
|
||||
&mut stream) {
|
||||
Ok(()) => {},
|
||||
Err(()) => {
|
||||
println!("error: devtools actor stopped responding");
|
||||
|
@ -127,7 +130,7 @@ fn run_server(receiver: Receiver<DevtoolsControlMsg>, port: u16) {
|
|||
sender: Sender<DevtoolScriptControlMsg>,
|
||||
actor_pipelines: &mut HashMap<PipelineId, String>,
|
||||
page_info: DevtoolsPageInfo) {
|
||||
let mut actors = actors.lock();
|
||||
let mut actors = actors.lock().unwrap();
|
||||
|
||||
//TODO: move all this actor creation into a constructor method on TabActor
|
||||
let (tab, console, inspector) = {
|
||||
|
@ -185,7 +188,7 @@ fn run_server(receiver: Receiver<DevtoolsControlMsg>, port: u16) {
|
|||
Ok(stream) => {
|
||||
let actors = actors.clone();
|
||||
accepted_connections.push(stream.clone());
|
||||
spawn_named("DevtoolsClientHandler".to_owned(), proc() {
|
||||
spawn_named("DevtoolsClientHandler".to_owned(), move || {
|
||||
// connection succeeded
|
||||
handle_client(actors, stream.clone())
|
||||
})
|
||||
|
|
|
@ -12,12 +12,12 @@ use std::io::{IoError, OtherIoError, EndOfFile, TcpStream, IoResult};
|
|||
use std::num;
|
||||
|
||||
pub trait JsonPacketStream {
|
||||
fn write_json_packet<'a, T: Encodable<json::Encoder<'a>,IoError>>(&mut self, obj: &T);
|
||||
fn write_json_packet<'a, T: Encodable>(&mut self, obj: &T);
|
||||
fn read_json_packet(&mut self) -> IoResult<Json>;
|
||||
}
|
||||
|
||||
impl JsonPacketStream for TcpStream {
|
||||
fn write_json_packet<'a, T: Encodable<json::Encoder<'a>,IoError>>(&mut self, obj: &T) {
|
||||
fn write_json_packet<'a, T: Encodable>(&mut self, obj: &T) {
|
||||
let s = json::encode(obj).replace("__type__", "type");
|
||||
println!("<- {}", s);
|
||||
self.write_str(s.len().to_string().as_slice()).unwrap();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue