// run-pass
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]

use std::ops::Deref;

struct Root {
    jsref: JSRef
}

impl Deref for Root {
    type Target = JSRef;

    fn deref<'a>(&'a self) -> &'a JSRef {
        &self.jsref
    }
}

#[derive(Copy, Clone)]
struct JSRef {
    node: *const Node
}

impl Deref for JSRef {
    type Target = Node;

    fn deref<'a>(&'a self) -> &'a Node {
        self.get()
    }
}

trait INode {
    fn RemoveChild(&self);
}

impl INode for JSRef {
    fn RemoveChild(&self) {
        self.get().RemoveChild(0)
    }
}

impl JSRef {
    fn AddChild(&self) {
        self.get().AddChild(0);
    }

    fn get<'a>(&'a self) -> &'a Node {
        unsafe {
            &*self.node
        }
    }
}

struct Node;

impl Node {
    fn RemoveChild(&self, _a: usize) {
    }

    fn AddChild(&self, _a: usize) {
    }
}

fn main() {
    let n = Node;
    let jsref = JSRef { node: &n };
    let root = Root { jsref: jsref };

    root.AddChild();
    jsref.AddChild();

    root.RemoveChild();
    jsref.RemoveChild();
}
