// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
  // Typedef identifier: "number"
  // Qualified name:    "::framework::number"
  typedef float number;

  // Exception identifier: "FrameworkException"
  // Qualified name:       "::framework::FrameworkException"
  exception FrameworkException {

    // Constant identifier: "ERR_NOT_FOUND"
    // Qualified name:      "::framework::FrameworkException::ERR_NOT_FOUND"
    const long ERR_NOT_FOUND = 1;

    // Exception field identifier: "code"
    long code;
  };

  // Interface identifier: "System"
  // Qualified name:       "::framework::System"
  interface System {

    // Operation identifier:          "createObject"
    // Operation argument identifier: "interface"
    object createObject(DOMString _interface);

    // Operation has no identifier; it declares a getter.
    getter DOMString (DOMString keyName);
  };

    
    // Interface identifier: "TextField"
    // Qualified name:       "::framework::gui::TextField"
    interface TextField {

      // Attribute identifier: "const"
      attribute boolean _const;

      // Attribute identifier: "value"
      attribute DOMString? _value;
    };

interface Foo {
 void op(object interface);
};