<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
<Definitions>
  <webidl>  typedef float number;

  exception FrameworkException {

    const long ERR_NOT_FOUND = 1;

    long code;
  };

  interface System {

    object createObject(DOMString _interface);

    getter DOMString (DOMString keyName);
  };

    
    interface TextField {

      attribute boolean _const;

      attribute DOMString? _value;
    };

interface Foo {
 void op(object interface);
};</webidl>
  <Typedef name="number" id="::number">
    <webidl>  typedef float number;</webidl>
    <Type type="float"/>
  </Typedef>
  <Exception name="FrameworkException" id="::FrameworkException">
    <webidl>  exception FrameworkException {

    const long ERR_NOT_FOUND = 1;

    long code;
  };</webidl>
    <Const name="ERR_NOT_FOUND" value="1" id="::FrameworkException::ERR_NOT_FOUND">
      <webidl>    const long ERR_NOT_FOUND = 1;</webidl>
      <Type type="long"/>
    </Const>
    <ExceptionField name="code" id="::FrameworkException::code">
      <webidl>    long code;</webidl>
      <Type type="long"/>
    </ExceptionField>
  </Exception>
  <Interface name="System" id="::System">
    <webidl>  interface System {

    object createObject(DOMString _interface);

    getter DOMString (DOMString keyName);
  };</webidl>
    <Operation name="createObject" id="::System::createObject">
      <webidl>    object createObject(DOMString _interface);</webidl>
      <Type type="object"/>
      <ArgumentList>
        <Argument name="_interface">
          <Type type="DOMString"/>
        </Argument>
      </ArgumentList>
    </Operation>
    <Operation getter="getter">
      <webidl>    getter DOMString (DOMString keyName);</webidl>
      <Type type="DOMString"/>
      <ArgumentList>
        <Argument name="keyName">
          <Type type="DOMString"/>
        </Argument>
      </ArgumentList>
    </Operation>
  </Interface>
  <Interface name="TextField" id="::TextField">
    <webidl>    interface TextField {

      attribute boolean _const;

      attribute DOMString? _value;
    };</webidl>
    <Attribute name="_const" id="::TextField::_const">
      <webidl>      attribute boolean _const;</webidl>
      <Type type="boolean"/>
    </Attribute>
    <Attribute name="_value" id="::TextField::_value">
      <webidl>      attribute DOMString? _value;</webidl>
      <Type type="DOMString" nullable="nullable"/>
    </Attribute>
  </Interface>
  <Interface name="Foo" id="::Foo">
    <webidl>interface Foo {
 void op(object interface);
};</webidl>
    <Operation name="op" id="::Foo::op">
      <webidl> void op(object interface);</webidl>
      <Type type="void"/>
      <ArgumentList>
        <Argument name="interface">
          <Type type="object"/>
        </Argument>
      </ArgumentList>
    </Operation>
  </Interface>
</Definitions>
