Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce trait Castable #8041

Merged
merged 5 commits into from Oct 21, 2015
Merged

Introduce trait Castable #8041

merged 5 commits into from Oct 21, 2015

Commits on Oct 21, 2015

  1. Introduce IDLInterface::derives()

    This method is given a DOMClass value and returns whether it derives from Self.
    
    Interfaces with no descendants directly check whether the given DOMClass is the
    same as their own.
    nox committed Oct 21, 2015
  2. Introduce trait Castable

    This trait is used to hold onto the downcast and upcast functions of all
    castable IDL interfaces. A castable IDL interface is one which either derives
    from or is derived by other interfaces.
    
    The deriving relation is represented by implementations of marker trait
    DerivedFrom<T: Castable> generated in InheritTypes.
    
    /^[ ]*use dom::bindings::codegen::InheritTypes::.*(Base|Cast|Derived)/ {
        /::[a-zA-Z]+(Base|Cast|Derived);/d
        s/([{ ])[a-zA-Z]+(Base|Cast|Derived), /\1/g
        s/([{ ])[a-zA-Z]+(Base|Cast|Derived), /\1/g
        s/, [a-zA-Z]+(Base|Cast|Derived)([},])/\2/g
        s/, [a-zA-Z]+(Base|Cast|Derived)([},])/\2/g
        /\{([a-zA-Z]+(Base|Cast|Derived))?\};$/d
        s/\{([a-zA-Z_]+)\};$/\1;/
    }
    
    s/([a-zA-Z]+)Cast::from_ref\(\&?\**([a-zA-Z_]+)(\.r\(\))?\)/\2.upcast::<\1>()/g
    s/([a-zA-Z]+)Cast::from_ref\(\&?\**([a-zA-Z_]+)(\.[a-zA-Z_]+\(\))?\)/\2\3.upcast::<\1>()/g
    s/\(([a-zA-Z]+)Cast::from_ref\)/\(Castable::upcast::<\1>\)/g
    
    s/([a-zA-Z]+)Cast::from_root/Root::upcast::<\1>/g
    
    s/([a-zA-Z]+)Cast::from_layout_js\(\&([a-zA-Z_.]+)\)/\2.upcast::<\1>()/g
    
    s/([a-zA-Z]+)Cast::to_ref\(\&?\**([a-zA-Z_]+)(\.r\(\))?\)/\2.downcast::<\1>()/g
    s/([a-zA-Z]+)Cast::to_ref\(\&?\**([a-zA-Z_]+)(\.[a-zA-Z_]+\(\))?\)/\2\3.downcast::<\1>()/g
    s/\(([a-zA-Z]+)Cast::to_ref\)/\(Castable::downcast::<\1>\)/g
    
    s/([a-zA-Z]+)Cast::to_root/Root::downcast::<\1>/g
    
    s/([a-zA-Z]+)Cast::to_layout_js\(&?([a-zA-Z_.]+(\(\))?)\)/\2.downcast::<\1>()/g
    
    s/\.is_document\(\)/.is::<Document>()/g
    s/\.is_htmlanchorelement\(\)/.is::<HTMLAnchorElement>()/g
    s/\.is_htmlappletelement\(\)/.is::<HTMLAppletElement>()/g
    s/\.is_htmlareaelement\(\)/.is::<HTMLAreaElement>()/g
    s/\.is_htmlbodyelement\(\)/.is::<HTMLBodyElement>()/g
    s/\.is_htmlembedelement\(\)/.is::<HTMLEmbedElement>()/g
    s/\.is_htmlfieldsetelement\(\)/.is::<HTMLFieldSetElement>()/g
    s/\.is_htmlformelement\(\)/.is::<HTMLFormElement>()/g
    s/\.is_htmlframesetelement\(\)/.is::<HTMLFrameSetElement>()/g
    s/\.is_htmlhtmlelement\(\)/.is::<HTMLHtmlElement>()/g
    s/\.is_htmlimageelement\(\)/.is::<HTMLImageElement>()/g
    s/\.is_htmllegendelement\(\)/.is::<HTMLLegendElement>()/g
    s/\.is_htmloptgroupelement\(\)/.is::<HTMLOptGroupElement>()/g
    s/\.is_htmloptionelement\(\)/.is::<HTMLOptionElement>()/g
    s/\.is_htmlscriptelement\(\)/.is::<HTMLScriptElement>()/g
    s/\.is_htmltabledatacellelement\(\)/.is::<HTMLTableDataCellElement>()/g
    s/\.is_htmltableheadercellelement\(\)/.is::<HTMLTableHeaderCellElement>()/g
    s/\.is_htmltablerowelement\(\)/.is::<HTMLTableRowElement>()/g
    s/\.is_htmltablesectionelement\(\)/.is::<HTMLTableSectionElement>()/g
    s/\.is_htmltitleelement\(\)/.is::<HTMLTitleElement>()/g
    nox committed Oct 21, 2015
  3. Clean up the cast calls

    nox committed Oct 21, 2015
  4. Document the new inheritance machinery (fixes #8125)

    nox committed Oct 21, 2015
You can’t perform that action at this time.