Get rid of outdated getter / setter raises from Web IDL
authorch.dumez@sisa.samsung.com <ch.dumez@sisa.samsung.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 7 Jun 2013 15:32:38 +0000 (15:32 +0000)
committerch.dumez@sisa.samsung.com <ch.dumez@sisa.samsung.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 7 Jun 2013 15:32:38 +0000 (15:32 +0000)
https://bugs.webkit.org/show_bug.cgi?id=117346

Reviewed by Darin Adler.

Stop using "getter / setter raises" in the IDL as this is no longer part of
the Web IDL specification. Web IDL no longer specifies exceptions for
attribute getters or setters. Instead, it is now explained in prose.

WebKit still needs to know if the getter / setter can throw an exception
(but does not need the exception name) so this patch adds 2 WebKit specific
IDL extended attributes: [GetterRaisesException] / [SetterRaisesException].
The naming is consistent with Blink.

This results in more standard and concise IDL. This also simplifies a lot
the code of the IDL parser.

Note that this patch does not remove "raises()" from the IDL methods yet.
This should be replaced by [RaisesException] IDL extended attribute in a
later patch.

No new tests, no behavior change.

* Modules/indexeddb/IDBRequest.idl:
* Modules/mediasource/MediaSource.idl:
* Modules/mediasource/SourceBuffer.idl:
* Modules/mediastream/RTCDataChannel.idl:
* Modules/mediastream/RTCPeerConnection.idl:
* Modules/mediastream/RTCSessionDescription.idl:
* Modules/mediastream/RTCStatsResponse.idl:
* Modules/webaudio/AnalyserNode.idl:
* Modules/webaudio/AudioBufferSourceNode.idl:
* Modules/webaudio/AudioNode.idl:
* Modules/webdatabase/SQLResultSet.idl:
* bindings/scripts/CodeGeneratorCPP.pm:
(GenerateImplementation):
* bindings/scripts/CodeGeneratorGObject.pm:
(GenerateProperty):
(GenerateFunctions):
* bindings/scripts/CodeGeneratorJS.pm:
(GenerateImplementation):
* bindings/scripts/CodeGeneratorObjC.pm:
(GenerateImplementation):
* bindings/scripts/IDLAttributes.txt:
* bindings/scripts/IDLParser.pm:
(parseAttributeRest):
(parseAttributeRestOld):
* bindings/scripts/test/TestObj.idl:
* bindings/scripts/test/TestTypedefs.idl:
* css/CSSCharsetRule.idl:
* css/CSSRule.idl:
* css/CSSStyleDeclaration.idl:
* css/CSSValue.idl:
* css/MediaList.idl:
* dom/Attr.idl:
* dom/CharacterData.idl:
* dom/Document.idl:
* dom/Node.idl:
* dom/ProcessingInstruction.idl:
* dom/Range.idl:
* dom/ShadowRoot.idl:
* dom/TreeWalker.idl:
* html/HTMLElement.idl:
* html/HTMLInputElement.idl:
* html/HTMLMarqueeElement.idl:
* html/HTMLMediaElement.idl:
* html/HTMLMeterElement.idl:
* html/HTMLOptionElement.idl:
* html/HTMLOptionsCollection.idl:
* html/HTMLProgressElement.idl:
* html/HTMLSelectElement.idl:
* html/HTMLTableElement.idl:
* html/HTMLTextAreaElement.idl:
* html/MediaController.idl:
* html/track/TextTrackCue.idl:
* html/track/TextTrackRegion.idl:
* page/DOMWindow.idl:
* storage/Storage.idl:
* svg/SVGAltGlyphElement.idl:
* svg/SVGAngle.idl:
* svg/SVGAnimatedBoolean.idl:
* svg/SVGAnimatedEnumeration.idl:
* svg/SVGAnimatedInteger.idl:
* svg/SVGAnimatedNumber.idl:
* svg/SVGAnimatedString.idl:
* svg/SVGElement.idl:
* svg/SVGGlyphRefElement.idl:
* svg/SVGLangSpace.idl:
* svg/SVGLength.idl:
* svg/SVGPreserveAspectRatio.idl:
* svg/SVGSVGElement.idl:
* svg/SVGScriptElement.idl:
* svg/SVGStyleElement.idl:
* svg/SVGViewSpec.idl:
* xml/XMLHttpRequest.idl:
* xml/XPathResult.idl:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@151321 268f45cc-cd09-0410-ab3c-d52691b4dbfc

67 files changed:
Source/WebCore/ChangeLog
Source/WebCore/Modules/indexeddb/IDBRequest.idl
Source/WebCore/Modules/mediasource/MediaSource.idl
Source/WebCore/Modules/mediasource/SourceBuffer.idl
Source/WebCore/Modules/mediastream/RTCDataChannel.idl
Source/WebCore/Modules/mediastream/RTCPeerConnection.idl
Source/WebCore/Modules/mediastream/RTCSessionDescription.idl
Source/WebCore/Modules/mediastream/RTCStatsResponse.idl
Source/WebCore/Modules/webaudio/AnalyserNode.idl
Source/WebCore/Modules/webaudio/AudioBufferSourceNode.idl
Source/WebCore/Modules/webaudio/AudioNode.idl
Source/WebCore/Modules/webdatabase/SQLResultSet.idl
Source/WebCore/bindings/scripts/CodeGeneratorCPP.pm
Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm
Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
Source/WebCore/bindings/scripts/CodeGeneratorObjC.pm
Source/WebCore/bindings/scripts/IDLAttributes.txt
Source/WebCore/bindings/scripts/IDLParser.pm
Source/WebCore/bindings/scripts/test/TestObj.idl
Source/WebCore/bindings/scripts/test/TestTypedefs.idl
Source/WebCore/css/CSSCharsetRule.idl
Source/WebCore/css/CSSRule.idl
Source/WebCore/css/CSSStyleDeclaration.idl
Source/WebCore/css/CSSValue.idl
Source/WebCore/css/MediaList.idl
Source/WebCore/dom/Attr.idl
Source/WebCore/dom/CharacterData.idl
Source/WebCore/dom/Document.idl
Source/WebCore/dom/Node.idl
Source/WebCore/dom/ProcessingInstruction.idl
Source/WebCore/dom/Range.idl
Source/WebCore/dom/ShadowRoot.idl
Source/WebCore/dom/TreeWalker.idl
Source/WebCore/html/HTMLElement.idl
Source/WebCore/html/HTMLInputElement.idl
Source/WebCore/html/HTMLMarqueeElement.idl
Source/WebCore/html/HTMLMediaElement.idl
Source/WebCore/html/HTMLMeterElement.idl
Source/WebCore/html/HTMLOptionElement.idl
Source/WebCore/html/HTMLOptionsCollection.idl
Source/WebCore/html/HTMLProgressElement.idl
Source/WebCore/html/HTMLSelectElement.idl
Source/WebCore/html/HTMLTableElement.idl
Source/WebCore/html/HTMLTextAreaElement.idl
Source/WebCore/html/MediaController.idl
Source/WebCore/html/track/TextTrackCue.idl
Source/WebCore/html/track/TextTrackRegion.idl
Source/WebCore/page/DOMWindow.idl
Source/WebCore/storage/Storage.idl
Source/WebCore/svg/SVGAltGlyphElement.idl
Source/WebCore/svg/SVGAngle.idl
Source/WebCore/svg/SVGAnimatedBoolean.idl
Source/WebCore/svg/SVGAnimatedEnumeration.idl
Source/WebCore/svg/SVGAnimatedInteger.idl
Source/WebCore/svg/SVGAnimatedNumber.idl
Source/WebCore/svg/SVGAnimatedString.idl
Source/WebCore/svg/SVGElement.idl
Source/WebCore/svg/SVGGlyphRefElement.idl
Source/WebCore/svg/SVGLangSpace.idl
Source/WebCore/svg/SVGLength.idl
Source/WebCore/svg/SVGPreserveAspectRatio.idl
Source/WebCore/svg/SVGSVGElement.idl
Source/WebCore/svg/SVGScriptElement.idl
Source/WebCore/svg/SVGStyleElement.idl
Source/WebCore/svg/SVGViewSpec.idl
Source/WebCore/xml/XMLHttpRequest.idl
Source/WebCore/xml/XPathResult.idl

index fdf2e64..43dbcab 100644 (file)
@@ -1,3 +1,102 @@
+2013-06-07  Christophe Dumez  <ch.dumez@sisa.samsung.com>
+
+        Get rid of outdated getter / setter raises from Web IDL
+        https://bugs.webkit.org/show_bug.cgi?id=117346
+
+        Reviewed by Darin Adler.
+
+        Stop using "getter / setter raises" in the IDL as this is no longer part of
+        the Web IDL specification. Web IDL no longer specifies exceptions for
+        attribute getters or setters. Instead, it is now explained in prose.
+
+        WebKit still needs to know if the getter / setter can throw an exception
+        (but does not need the exception name) so this patch adds 2 WebKit specific
+        IDL extended attributes: [GetterRaisesException] / [SetterRaisesException].
+        The naming is consistent with Blink.
+
+        This results in more standard and concise IDL. This also simplifies a lot
+        the code of the IDL parser.
+
+        Note that this patch does not remove "raises()" from the IDL methods yet.
+        This should be replaced by [RaisesException] IDL extended attribute in a
+        later patch.
+
+        No new tests, no behavior change.
+
+        * Modules/indexeddb/IDBRequest.idl:
+        * Modules/mediasource/MediaSource.idl:
+        * Modules/mediasource/SourceBuffer.idl:
+        * Modules/mediastream/RTCDataChannel.idl:
+        * Modules/mediastream/RTCPeerConnection.idl:
+        * Modules/mediastream/RTCSessionDescription.idl:
+        * Modules/mediastream/RTCStatsResponse.idl:
+        * Modules/webaudio/AnalyserNode.idl:
+        * Modules/webaudio/AudioBufferSourceNode.idl:
+        * Modules/webaudio/AudioNode.idl:
+        * Modules/webdatabase/SQLResultSet.idl:
+        * bindings/scripts/CodeGeneratorCPP.pm:
+        (GenerateImplementation):
+        * bindings/scripts/CodeGeneratorGObject.pm:
+        (GenerateProperty):
+        (GenerateFunctions):
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateImplementation):
+        * bindings/scripts/CodeGeneratorObjC.pm:
+        (GenerateImplementation):
+        * bindings/scripts/IDLAttributes.txt:
+        * bindings/scripts/IDLParser.pm:
+        (parseAttributeRest):
+        (parseAttributeRestOld):
+        * bindings/scripts/test/TestObj.idl:
+        * bindings/scripts/test/TestTypedefs.idl:
+        * css/CSSCharsetRule.idl:
+        * css/CSSRule.idl:
+        * css/CSSStyleDeclaration.idl:
+        * css/CSSValue.idl:
+        * css/MediaList.idl:
+        * dom/Attr.idl:
+        * dom/CharacterData.idl:
+        * dom/Document.idl:
+        * dom/Node.idl:
+        * dom/ProcessingInstruction.idl:
+        * dom/Range.idl:
+        * dom/ShadowRoot.idl:
+        * dom/TreeWalker.idl:
+        * html/HTMLElement.idl:
+        * html/HTMLInputElement.idl:
+        * html/HTMLMarqueeElement.idl:
+        * html/HTMLMediaElement.idl:
+        * html/HTMLMeterElement.idl:
+        * html/HTMLOptionElement.idl:
+        * html/HTMLOptionsCollection.idl:
+        * html/HTMLProgressElement.idl:
+        * html/HTMLSelectElement.idl:
+        * html/HTMLTableElement.idl:
+        * html/HTMLTextAreaElement.idl:
+        * html/MediaController.idl:
+        * html/track/TextTrackCue.idl:
+        * html/track/TextTrackRegion.idl:
+        * page/DOMWindow.idl:
+        * storage/Storage.idl:
+        * svg/SVGAltGlyphElement.idl:
+        * svg/SVGAngle.idl:
+        * svg/SVGAnimatedBoolean.idl:
+        * svg/SVGAnimatedEnumeration.idl:
+        * svg/SVGAnimatedInteger.idl:
+        * svg/SVGAnimatedNumber.idl:
+        * svg/SVGAnimatedString.idl:
+        * svg/SVGElement.idl:
+        * svg/SVGGlyphRefElement.idl:
+        * svg/SVGLangSpace.idl:
+        * svg/SVGLength.idl:
+        * svg/SVGPreserveAspectRatio.idl:
+        * svg/SVGSVGElement.idl:
+        * svg/SVGScriptElement.idl:
+        * svg/SVGStyleElement.idl:
+        * svg/SVGViewSpec.idl:
+        * xml/XMLHttpRequest.idl:
+        * xml/XPathResult.idl:
+
 2013-06-07  Kangil Han  <kangil.han@samsung.com>
 
         Remove unused header includes in Document
index 1bc1e22..10be791 100644 (file)
     EventTarget,
     JSNoStaticTables
 ] interface IDBRequest {
-    readonly attribute IDBAny result
-        getter raises (DOMException);
-    readonly attribute DOMError error
-        getter raises (DOMException);
-    [TreatReturnedNullStringAs=Undefined] readonly attribute DOMString webkitErrorMessage
-        getter raises (DOMException);
+    [GetterRaisesException] readonly attribute IDBAny result;
+    [GetterRaisesException] readonly attribute DOMError error;
+    [TreatReturnedNullStringAs=Undefined, GetterRaisesException] readonly attribute DOMString webkitErrorMessage;
 
     readonly attribute IDBAny source;
     readonly attribute IDBTransaction transaction;
index 7f185b0..0ca10ec 100644 (file)
@@ -42,7 +42,7 @@
     // Subset of sourceBuffers that provide data for the selected/enabled tracks.
     readonly attribute SourceBufferList activeSourceBuffers;
 
-    attribute double duration setter raises (DOMException);
+    [SetterRaisesException] attribute double duration;
 
     SourceBuffer addSourceBuffer(DOMString type) raises (DOMException);
     void removeSourceBuffer(SourceBuffer buffer) raises (DOMException);
index 71c6b3f..a9d0ef6 100644 (file)
 ] interface SourceBuffer {
 
     // Returns the time ranges buffered.
-    readonly attribute TimeRanges buffered
-        getter raises(DOMException);
+    [GetterRaisesException] readonly attribute TimeRanges buffered;
 
     // Applies an offset to media segment timestamps.
-    attribute double timestampOffset
-        setter raises(DOMException);
+    [SetterRaisesException] attribute double timestampOffset;
 
     // Append segment data.
     void append(Uint8Array data) raises (DOMException);
index a6a03e9..a860ec0 100644 (file)
@@ -32,8 +32,7 @@
     readonly attribute DOMString readyState;
     readonly attribute unsigned long bufferedAmount;
 
-    attribute DOMString binaryType
-        setter raises(DOMException);
+    [SetterRaisesException] attribute DOMString binaryType;
 
     void send(ArrayBuffer data)
         raises(DOMException);
index 2e319c0..706c9c3 100644 (file)
 
     void setLocalDescription(RTCSessionDescription description, [Default=Undefined] optional VoidCallback successCallback, [Default=Undefined] optional RTCErrorCallback failureCallback)
         raises(DOMException);
-    readonly attribute RTCSessionDescription localDescription
-        getter raises(DOMException);
+    [GetterRaisesException] readonly attribute RTCSessionDescription localDescription;
 
     void setRemoteDescription(RTCSessionDescription description, [Default=Undefined] optional VoidCallback successCallback, [Default=Undefined] optional RTCErrorCallback failureCallback)
         raises(DOMException);
-    readonly attribute RTCSessionDescription remoteDescription
-        getter raises(DOMException);
+    [GetterRaisesException] readonly attribute RTCSessionDescription remoteDescription;
 
     readonly attribute DOMString signalingState;
 
index acf47fb..b51746c 100644 (file)
@@ -33,9 +33,7 @@
     Constructor(Dictionary dictionary),
     ConstructorRaisesException
 ] interface RTCSessionDescription {
-    attribute DOMString type
-        setter raises(DOMException);
-    attribute DOMString sdp
-        setter raises(DOMException);
+    [SetterRaisesException] attribute DOMString type;
+    [SetterRaisesException] attribute DOMString sdp;
 };
 
index 76778e7..b1a0da8 100644 (file)
@@ -24,9 +24,8 @@
 
 [
     NoInterfaceObject,
-    Conditional=MEDIA_STREAM,
-    NamedGetter
+    Conditional=MEDIA_STREAM
 ] interface RTCStatsResponse {
     sequence<RTCStatsReport> result();
-    RTCStatsReport namedItem([Default=Undefined] optional DOMString name);
+    getter RTCStatsReport namedItem([Default=Undefined] optional DOMString name);
 };
index 34c706e..b552582 100644 (file)
@@ -26,8 +26,7 @@
     Conditional=WEB_AUDIO,
     JSGenerateToJSObject
 ] interface AnalyserNode : AudioNode {
-    attribute unsigned long fftSize
-        setter raises(DOMException);
+    [SetterRaisesException] attribute unsigned long fftSize;
     readonly attribute unsigned long frequencyBinCount;
 
     // minDecibels / maxDecibels represent the range to scale the FFT analysis data for conversion to unsigned byte values.
index edfb88a..66b5be0 100644 (file)
@@ -27,8 +27,7 @@
     Conditional=WEB_AUDIO,
     JSGenerateToJSObject
 ] interface AudioBufferSourceNode : AudioNode {
-    [CustomSetter] attribute AudioBuffer buffer
-        setter raises (DOMException);
+    [CustomSetter, SetterRaisesException] attribute AudioBuffer buffer;
 
     const unsigned short UNSCHEDULED_STATE = 0;
     const unsigned short SCHEDULED_STATE = 1;
index b29e206..2eb5994 100644 (file)
     readonly attribute unsigned long numberOfInputs;
     readonly attribute unsigned long numberOfOutputs;
 
-    attribute unsigned long channelCount
-        setter raises(DOMException);
+    [SetterRaisesException] attribute unsigned long channelCount;
 
-    attribute DOMString channelCountMode
-        setter raises(DOMException);
+    [SetterRaisesException] attribute DOMString channelCountMode;
 
-    attribute DOMString channelInterpretation
-        setter raises(DOMException);
+    [SetterRaisesException] attribute DOMString channelInterpretation;
 
     void connect(AudioNode? destination, [Default=Undefined] optional unsigned long output, [Default=Undefined] optional unsigned long input)
         raises(DOMException);
index 038576f..d3b93e4 100644 (file)
     readonly attribute SQLResultSetRowList rows;
 
 #if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
-    readonly attribute long insertId
-        getter raises(DOMException);
+    [GetterRaisesException] readonly attribute long insertId;
 #else
     // Explicitely choose 'long long' here to avoid a 64bit->32bit shortening warning for us.
-    readonly attribute long long insertId
-        getter raises(DOMException);
+    [GetterRaisesException] readonly attribute long long insertId;
 #endif
     readonly attribute long rowsAffected;
 };
index 3c5f994..eb69eba 100644 (file)
@@ -701,7 +701,7 @@ sub GenerateImplementation
 
             # - GETTER
             my $getterSig = "$attributeType $className\:\:$attributeName() const\n";
-            my $hasGetterException = @{$attribute->getterExceptions};
+            my $hasGetterException = $attribute->signature->extendedAttributes->{"GetterRaisesException"};
             my ($functionName, @arguments) = $codeGenerator->GetterExpression(\%implIncludes, $interfaceName, $attribute);
             push(@arguments, "isNull") if $attributeIsNullable;
             push(@arguments, "ec") if $hasGetterException;
@@ -763,7 +763,7 @@ sub GenerateImplementation
             # - SETTER
             if (!$attribute->isReadOnly and !$attribute->signature->extendedAttributes->{"Replaceable"}) {
                 # Exception handling
-                my $hasSetterException = @{$attribute->setterExceptions};
+                my $hasSetterException = $attribute->signature->extendedAttributes->{"SetterRaisesException"};
 
                 my $coreSetterName = "set" . $codeGenerator->WK_ucfirst($attributeName);
                 my $setterName = "set" . ucfirst($attributeName);
index cbe6971..cd223d4 100644 (file)
@@ -452,6 +452,8 @@ sub GenerateProperty {
     my $camelPropName = $attribute->signature->name;
     my $setPropNameFunction = $codeGenerator->WK_ucfirst($camelPropName);
     my $getPropNameFunction = $codeGenerator->WK_lcfirst($camelPropName);
+    my $hasGetterException = $attribute->signature->extendedAttributes->{"GetterRaisesException"};
+    my $hasSetterException = $attribute->signature->extendedAttributes->{"SetterRaisesException"};
 
     my $propName = decamelize($camelPropName);
     my $propNameCaps = uc($propName);
@@ -503,14 +505,14 @@ sub GenerateProperty {
         $setterFunctionName = "coreSelf->$setterFunctionName";
     }
     push(@getterArguments, "isNull") if $attribute->signature->isNullable;
-    push(@getterArguments, "ec") if @{$attribute->getterExceptions};
-    push(@setterArguments, "ec") if @{$attribute->setterExceptions};
+    push(@getterArguments, "ec") if $hasGetterException;
+    push(@setterArguments, "ec") if $hasSetterException;
 
     if (grep {$_ eq $attribute} @writeableProperties) {
         push(@txtSetProps, "    case ${propEnum}: {\n");
         push(@txtSetProps, "#if ${parentConditionalString}\n") if $parentConditionalString;
         push(@txtSetProps, "#if ${conditionalString}\n") if $conditionalString;
-        push(@txtSetProps, "        WebCore::ExceptionCode ec = 0;\n") if @{$attribute->setterExceptions};
+        push(@txtSetProps, "        WebCore::ExceptionCode ec = 0;\n") if $hasSetterException;
         push(@txtSetProps, "        ${setterFunctionName}(" . join(", ", @setterArguments) . ");\n");
         push(@txtSetProps, "#else\n") if $conditionalString;
         push(@txtSetProps, @conditionalWarn) if scalar(@conditionalWarn);
@@ -525,7 +527,7 @@ sub GenerateProperty {
     push(@txtGetProps, "#if ${parentConditionalString}\n") if $parentConditionalString;
     push(@txtGetProps, "#if ${conditionalString}\n") if $conditionalString;
     push(@txtGetProps, "        bool isNull = false;\n") if $attribute->signature->isNullable;
-    push(@txtGetProps, "        WebCore::ExceptionCode ec = 0;\n") if @{$attribute->getterExceptions};
+    push(@txtGetProps, "        WebCore::ExceptionCode ec = 0;\n") if $hasGetterException;
 
     # FIXME: Should we return a default value when isNull == true?
 
@@ -1241,7 +1243,9 @@ sub GenerateFunctions {
         # "get_foo" which calls a DOM class method named foo().
         my $function = new domFunction();
         $function->signature($attribute->signature);
-        $function->raisesExceptions($attribute->getterExceptions);
+        if ($attribute->signature->extendedAttributes->{"GetterRaisesException"}) {
+            $function->raisesExceptions(["DOMException"]);
+        }
         $object->GenerateFunction($interfaceName, $function, "get_", $interface);
 
         # FIXME: We are not generating setters for 'Replaceable'
@@ -1267,7 +1271,9 @@ sub GenerateFunctions {
         my $arrayRef = $function->parameters;
         push(@$arrayRef, $param);
         
-        $function->raisesExceptions($attribute->setterExceptions);
+        if ($attribute->signature->extendedAttributes->{"SetterRaisesException"}) {
+            $function->raisesExceptions(["DOMException"]);
+        }
         
         $object->GenerateFunction($interfaceName, $function, "set_", $interface);
     }
index 5c1871f..67b332c 100644 (file)
@@ -2040,7 +2040,7 @@ sub GenerateImplementation
                        AddToImplIncludes("JS" . $constructorType . ".h", $attribute->signature->extendedAttributes->{"Conditional"});
                        push(@implContent, "    return JS" . $constructorType . "::getConstructor(exec, castedThis->globalObject());\n");
                     }
-                } elsif (!@{$attribute->getterExceptions}) {
+                } elsif (!$attribute->signature->extendedAttributes->{"GetterRaisesException"}) {
                     push(@implContent, "    UNUSED_PARAM(exec);\n") if !$attribute->signature->extendedAttributes->{"CallWith"};
                     push(@implContent, "    bool isNull = false;\n") if $isNullable;
 
@@ -2217,6 +2217,7 @@ sub GenerateImplementation
                         my $type = $attribute->signature->type;
                         my $putFunctionName = GetAttributeSetterName($interfaceName, $className, $attribute);
                         my $implSetterFunctionName = $codeGenerator->WK_ucfirst($name);
+                        my $setterRaisesException = $attribute->signature->extendedAttributes->{"SetterRaisesException"};
 
                         my $attributeConditionalString = $codeGenerator->GenerateConditionalString($attribute->signature);
                         push(@implContent, "#if ${attributeConditionalString}\n") if $attributeConditionalString;
@@ -2279,7 +2280,7 @@ sub GenerateImplementation
                                     push(@implContent, "    $className* castedThis = jsCast<$className*>(thisObject);\n");
                                     push(@implContent, "    $implType* impl = static_cast<$implType*>(castedThis->impl());\n");
                                 }
-                                push(@implContent, "    ExceptionCode ec = 0;\n") if @{$attribute->setterExceptions};
+                                push(@implContent, "    ExceptionCode ec = 0;\n") if $setterRaisesException;
 
                                 # If the "StrictTypeChecking" extended attribute is present, and the attribute's type is an
                                 # interface type, then if the incoming value does not implement that interface, a TypeError
@@ -2325,12 +2326,12 @@ sub GenerateImplementation
                                         push(@implContent, "    podImpl = nativeValue;\n");
                                     } else {
                                         push(@implContent, "    podImpl.set$implSetterFunctionName(nativeValue");
-                                        push(@implContent, ", ec") if @{$attribute->setterExceptions};
+                                        push(@implContent, ", ec") if $setterRaisesException;
                                         push(@implContent, ");\n");
-                                        push(@implContent, "    setDOMException(exec, ec);\n") if @{$attribute->setterExceptions};
+                                        push(@implContent, "    setDOMException(exec, ec);\n") if $setterRaisesException;
                                     }
                                     if ($svgPropertyType) {
-                                        if (@{$attribute->setterExceptions}) {
+                                        if ($setterRaisesException) {
                                             push(@implContent, "    if (!ec)\n");
                                             push(@implContent, "        impl->commitChange();\n");
                                         } else {
@@ -2353,9 +2354,9 @@ sub GenerateImplementation
 
                                     unshift(@arguments, GenerateCallWith($attribute->signature->extendedAttributes->{"CallWith"}, \@implContent, ""));
 
-                                    push(@arguments, "ec") if @{$attribute->setterExceptions};
+                                    push(@arguments, "ec") if $setterRaisesException;
                                     push(@implContent, "    ${functionName}(" . join(", ", @arguments) . ");\n");
-                                    push(@implContent, "    setDOMException(exec, ec);\n") if @{$attribute->setterExceptions};
+                                    push(@implContent, "    setDOMException(exec, ec);\n") if $setterRaisesException;
                                 }
                             }
 
index b3492af..72d5197 100644 (file)
@@ -1190,7 +1190,7 @@ sub GenerateImplementation
             # document when called on the document itself. Legacy behavior, see <https://bugs.webkit.org/show_bug.cgi?id=10889>.
             $getterExpressionPrefix =~ s/\bownerDocument\b/document/;
 
-            my $hasGetterException = @{$attribute->getterExceptions};
+            my $hasGetterException = $attribute->signature->extendedAttributes->{"GetterRaisesException"};
             my $getterContentHead;
             if ($attribute->signature->extendedAttributes->{"ImplementedBy"}) {
                 my $implementedBy = $attribute->signature->extendedAttributes->{"ImplementedBy"};
@@ -1380,7 +1380,7 @@ sub GenerateImplementation
             # - SETTER
             if (!$attribute->isReadOnly) {
                 # Exception handling
-                my $hasSetterException = @{$attribute->setterExceptions};
+                my $hasSetterException = $attribute->signature->extendedAttributes->{"SetterRaisesException"};
 
                 my $coreSetterName = "set" . $codeGenerator->WK_ucfirst($attributeName);
                 my $setterName = "set" . ucfirst($attributeInterfaceName);
index 340fd98..5d7dd97 100644 (file)
@@ -56,6 +56,7 @@ EnforceRange
 EventTarget
 ExtendsDOMGlobalObject
 GenerateIsReachable=|Impl|ImplContext|ImplDocument|ImplElementRoot|ImplFrame|ImplOwnerNodeRoot
+GetterRaisesException
 GlobalContext=WindowOnly|WorkerOnly|WindowAndWorker
 Immutable
 ImplementationLacksVTable
@@ -97,6 +98,7 @@ Reflect=*
 Replaceable
 ReplaceableConstructor
 ReturnNewObject
+SetterRaisesException
 SkipVTableValidation
 StrictTypeChecking
 SuppressToJSObject
index b50068c..2966a16 100644 (file)
@@ -69,8 +69,6 @@ struct( domAttribute => {
     isStatic => '$',
     isReadOnly => '$',
     signature => '$',         # Attribute signature
-    getterExceptions => '@',  # Possibly raised exceptions.
-    setterExceptions => '@',  # Possibly raised exceptions.
 });
 
 # Used to represent a map of 'variable name' <-> 'variable type'
@@ -312,7 +310,6 @@ sub typeRemoveNullableSuffix
 my $nextAttributeOld_1 = '^(attribute|inherit|readonly)$';
 my $nextPrimitiveType_1 = '^(int|long|short|unsigned)$';
 my $nextPrimitiveType_2 = '^(double|float|unrestricted)$';
-my $nextSetGetRaises2_1 = '^(;|getraises|setraises)$';
 my $nextArgumentList_1 = '^(\(|::|ByteString|DOMString|Date|\[|any|boolean|byte|double|float|in|int|long|object|octet|optional|sequence|short|unrestricted|unsigned)$';
 my $nextNonAnyType_1 = '^(boolean|byte|double|float|int|long|octet|short|unrestricted|unsigned)$';
 my $nextInterfaceMemberOld_1 = '^(\(|::|ByteString|DOMString|Date|any|attribute|boolean|byte|creator|deleter|double|float|getter|inherit|int|legacycaller|long|object|octet|readonly|sequence|serializer|setter|short|static|stringifier|unrestricted|unsigned|void)$';
@@ -329,7 +326,6 @@ my $nextExceptionMembers_1 = '^(\(|::|ByteString|DOMString|Date|\[|any|boolean|b
 my $nextAttributeRest_1 = '^(attribute|readonly)$';
 my $nextInterfaceMembers_1 = '^(\(|::|ByteString|DOMString|Date|any|attribute|boolean|byte|const|creator|deleter|double|float|getter|inherit|int|legacycaller|long|object|octet|readonly|sequence|serializer|setter|short|static|stringifier|unrestricted|unsigned|void)$';
 my $nextSingleType_1 = '^(::|ByteString|DOMString|Date|boolean|byte|double|float|int|long|object|octet|sequence|short|unrestricted|unsigned)$';
-my $nextGet_1 = '^(;|getraises|getter|setraises|setter)$';
 my $nextArgumentName_1 = '^(attribute|callback|const|creator|deleter|dictionary|enum|exception|getter|implements|inherit|interface|legacycaller|partial|serializer|setter|static|stringifier|typedef|unrestricted)$';
 my $nextConstValue_1 = '^(false|true)$';
 my $nextConstValue_2 = '^(-|Infinity|NaN)$';
@@ -1161,11 +1157,6 @@ sub parseAttributeRest
         my $token = $self->getToken();
         $self->assertTokenType($token, IdentifierToken);
         $newDataNode->signature->name($token->value());
-        my $getRef = $self->parseGet();
-        if (defined $getRef) {
-            push(@{$newDataNode->getterExceptions}, @{$getRef->{"getraises"}});
-            push(@{$newDataNode->setterExceptions}, @{$getRef->{"setraises"}});
-        }
         $self->assertTokenValue($self->getToken(), ";", __LINE__);
         # CustomConstructor may also be used on attributes.
         if (defined $extendedAttributeList->{"CustomConstructors"}) {
@@ -2058,133 +2049,6 @@ sub parseReturnType
     $self->assertUnexpectedToken($next->value(), __LINE__);
 }
 
-sub parseGet
-{
-    my $self = shift;
-    my $next = $self->nextToken();
-    if ($next->value() eq "inherits") {
-        my $attr = {};
-        $self->parseInheritsGetter();
-        $attr->{"inherits"} = 1;
-        $attr->{"getraises"} = [];
-        $attr->{"setraises"} = $self->parseSetRaises();
-        return $attr;
-    }
-    if ($next->value() =~ /$nextGet_1/) {
-        return $self->parseSetGetRaises();
-    }
-}
-
-sub parseInheritsGetter
-{
-    my $self = shift;
-    my $next = $self->nextToken();
-    if ($next->value() eq "inherits") {
-        $self->assertTokenValue($self->getToken(), "inherits", __LINE__);
-        $self->assertTokenValue($self->getToken(), "getter", __LINE__);
-        return;
-    }
-    $self->assertUnexpectedToken($next->value(), __LINE__);
-}
-
-sub parseSetGetRaises
-{
-    my $self = shift;
-    my $attr = {};
-    $attr->{"inherits"} = 0;
-
-    my $next = $self->nextToken();
-    if ($next->value() eq "setter") {
-        $attr->{"setraises"} = $self->parseSetRaises();
-        $attr->{"getraises"} = $self->parseGetRaises2();
-        return $attr;
-    }
-    if ($next->value() eq "getter") {
-        $attr->{"setraises"} = [];
-        $attr->{"getraises"} = $self->parseGetRaises();
-        return $attr;
-    }
-    if ($next->value() =~ /$nextSetGetRaises2_1/) {
-        return $self->parseSetGetRaises2();
-    }
-    $self->assertUnexpectedToken($next->value(), __LINE__);
-}
-
-sub parseGetRaises
-{
-    my $self = shift;
-    my $next = $self->nextToken();
-
-    if ($next->value() eq "getter") {
-        $self->assertTokenValue($self->getToken(), "getter", __LINE__);
-        $self->assertTokenValue($self->getToken(), "raises", __LINE__);
-        return $self->parseExceptionList();
-    }
-    $self->assertUnexpectedToken($next->value(), __LINE__);
-}
-
-sub parseGetRaises2
-{
-    my $self = shift;
-    my $next = $self->nextToken();
-
-    if ($next->value() eq ",") {
-        $self->assertTokenValue($self->getToken(), ",", __LINE__);
-        $self->assertTokenValue($self->getToken(), "getter", __LINE__);
-        $self->assertTokenValue($self->getToken(), "raises", __LINE__);
-        return $self->parseExceptionList();
-    }
-    return [];
-}
-
-sub parseSetRaises
-{
-    my $self = shift;
-    my $next = $self->nextToken();
-    if ($next->value() eq "setter") {
-        $self->assertTokenValue($self->getToken(), "setter", __LINE__);
-        $self->assertTokenValue($self->getToken(), "raises", __LINE__);
-        return $self->parseExceptionList();
-    }
-    $self->assertUnexpectedToken($next->value(), __LINE__);
-}
-
-sub parseSetGetRaises2
-{
-    my $self = shift;
-    my $next = $self->nextToken();
-    if ($next->value() =~ /$nextSetGetRaises2_1/) {
-        my $attr = {};
-        $attr->{"inherits"} = 0;
-        $attr->{"getraises"} = $self->parseGetRaises3();
-        $attr->{"setraises"} = $self->parseSetRaises3();
-        return $attr;
-    }
-    $self->assertUnexpectedToken($next->value(), __LINE__);
-}
-
-sub parseGetRaises3
-{
-    my $self = shift;
-    my $next = $self->nextToken();
-    if ($next->value() eq "getraises") {
-        $self->assertTokenValue($self->getToken(), "getraises", __LINE__);
-        return $self->parseExceptionList();
-    }
-    return [];
-}
-
-sub parseSetRaises3
-{
-    my $self = shift;
-    my $next = $self->nextToken();
-    if ($next->value() eq "setraises") {
-        $self->assertTokenValue($self->getToken(), "setraises", __LINE__);
-        return $self->parseExceptionList();
-    }
-    return [];
-}
-
 sub parseExceptionList
 {
     my $self = shift;
@@ -2450,11 +2314,6 @@ sub parseAttributeRestOld
         my $token = $self->getToken();
         $self->assertTokenType($token, IdentifierToken);
         $newDataNode->signature->name($token->value());
-        my $getRef = $self->parseGet();
-        if (defined $getRef) {
-            push(@{$newDataNode->getterExceptions}, @{$getRef->{"getraises"}});
-            push(@{$newDataNode->setterExceptions}, @{$getRef->{"setraises"}});
-        }
         $self->assertTokenValue($self->getToken(), ";", __LINE__);
         return $newDataNode;
     }
index 56d74f8..88594b2 100644 (file)
@@ -90,10 +90,10 @@ enum TestEnumType { "", "EnumValue1", "EnumValue2", "EnumValue3" };
 
     // Exceptions
     void methodWithException() raises(DOMException);
-    attribute long attrWithGetterException getter raises(DOMException);
-    attribute long attrWithSetterException setter raises(DOMException);
-    attribute DOMString stringAttrWithGetterException getter raises(DOMException);
-    attribute DOMString stringAttrWithSetterException setter raises(DOMException);
+    [GetterRaisesException] attribute long attrWithGetterException;
+    [SetterRaisesException] attribute long attrWithSetterException;
+    [GetterRaisesException] attribute DOMString stringAttrWithGetterException;
+    [SetterRaisesException] attribute DOMString stringAttrWithSetterException;
 
     // 'Custom' extended attribute
     [Custom] attribute long            customAttr;
@@ -123,13 +123,10 @@ enum TestEnumType { "", "EnumValue1", "EnumValue2", "EnumValue3" };
 
     [CallWith=ScriptState] attribute long withScriptStateAttribute;
     [CallWith=ScriptExecutionContext] attribute TestObj withScriptExecutionContextAttribute;
-    [CallWith=ScriptState] attribute TestObj withScriptStateAttributeRaises
-        getter raises(DOMException);
-    [CallWith=ScriptExecutionContext] attribute TestObj withScriptExecutionContextAttributeRaises
-        getter raises(DOMException);
+    [CallWith=ScriptState, GetterRaisesException] attribute TestObj withScriptStateAttributeRaises;
+    [CallWith=ScriptExecutionContext, GetterRaisesException] attribute TestObj withScriptExecutionContextAttributeRaises;
     [CallWith=ScriptExecutionContext|ScriptState] attribute TestObj withScriptExecutionContextAndScriptStateAttribute;
-    [CallWith=ScriptExecutionContext|ScriptState] attribute TestObj withScriptExecutionContextAndScriptStateAttributeRaises
-        getter raises(DOMException);
+    [CallWith=ScriptExecutionContext|ScriptState,GetterRaisesException] attribute TestObj withScriptExecutionContextAndScriptStateAttributeRaises;
     [CallWith=  ScriptExecutionContext  |  ScriptState  ] attribute TestObj withScriptExecutionContextAndScriptStateWithSpacesAttribute;
     [CallWith=ScriptArguments|CallStack] attribute TestObj withScriptArgumentsAndCallStackAttribute;
 
@@ -260,6 +257,5 @@ enum TestEnumType { "", "EnumValue1", "EnumValue2", "EnumValue3" };
 
     attribute long? nullableLongSettableAttribute;
 
-    attribute long? nullableStringValue
-        getter raises(DOMException);
+    [GetterRaisesException] attribute long? nullableStringValue;
 };
index 11d2e48..72dc270 100644 (file)
 
     // Exceptions
     void methodWithException() raises(E);
-    attribute long attrWithGetterException getter raises(E);
-    attribute long attrWithSetterException setter raises(E);
-    attribute DOMString stringAttrWithGetterException getter raises(E);
-    attribute DOMString stringAttrWithSetterException setter raises(E);
+    [GetterRaisesException] attribute long attrWithGetterException;
+    [SetterRaisesException] attribute long attrWithSetterException;
+    [GetterRaisesException] attribute DOMString stringAttrWithGetterException;
+    [SetterRaisesException] attribute DOMString stringAttrWithSetterException;
 };
 
 typedef float                      DOUBLE;
index d2386de..9d5071e 100644 (file)
@@ -23,8 +23,7 @@ interface CSSCharsetRule : CSSRule {
 #if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
     [TreatReturnedNullStringAs=Null] readonly attribute DOMString encoding;
 #else
-             [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] attribute DOMString encoding
-                 setter raises(DOMException);
+    [TreatReturnedNullStringAs=Null, TreatNullAs=NullString, SetterRaisesException] attribute DOMString encoding;
 #endif
 };
 
index 9c12723..f4d4e6e 100644 (file)
@@ -55,8 +55,7 @@
 
     readonly attribute unsigned short   type;
 
-             [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] attribute DOMString        cssText
-                 setter raises (DOMException);
+    [TreatReturnedNullStringAs=Null, TreatNullAs=NullString, SetterRaisesException] attribute DOMString cssText;
 
     readonly attribute CSSStyleSheet    parentStyleSheet;
     readonly attribute CSSRule          parentRule;
index 9d787a5..8cf19b8 100644 (file)
@@ -29,8 +29,7 @@
     CustomEnumerateProperty,
     SkipVTableValidation
 ] interface CSSStyleDeclaration {
-             [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] attribute DOMString        cssText
-                 setter raises(DOMException);
+    [TreatReturnedNullStringAs=Null, TreatNullAs=NullString, SetterRaisesException] attribute DOMString cssText;
 
     [TreatReturnedNullStringAs=Null] DOMString          getPropertyValue([Default=Undefined] optional DOMString propertyName);
     [Custom] CSSValue           getPropertyCSSValue([Default=Undefined] optional DOMString propertyName);
index 36f7830..f7f766c 100644 (file)
@@ -32,8 +32,7 @@
     const unsigned short CSS_VALUE_LIST      = 2;
     const unsigned short CSS_CUSTOM          = 3;
 
-             [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] attribute DOMString cssText
-                 setter raises(DOMException);
+    [TreatReturnedNullStringAs=Null, TreatNullAs=NullString, SetterRaisesException] attribute DOMString cssText;
 
     readonly attribute unsigned short cssValueType;
 
index 3a7642b..3a61a12 100644 (file)
@@ -31,8 +31,7 @@
     ImplementationLacksVTable
 ] interface MediaList {
 
-             [TreatNullAs=NullString, TreatReturnedNullStringAs=Null] attribute DOMString mediaText
-                 setter raises(DOMException);
+    [TreatNullAs=NullString, TreatReturnedNullStringAs=Null, SetterRaisesException] attribute DOMString mediaText;
     readonly attribute unsigned long length;
 
     [TreatReturnedNullStringAs=Null] DOMString item([Default=Undefined] optional unsigned long index);
index bd3b50f..15c001a 100644 (file)
@@ -29,8 +29,7 @@
 
     readonly attribute boolean specified;
 
-             [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] attribute DOMString value 
-                 setter raises(DOMException);
+    [TreatReturnedNullStringAs=Null, TreatNullAs=NullString, SetterRaisesException] attribute DOMString value;
 
     // DOM Level 2
 
index e2b0456..b145c62 100644 (file)
@@ -19,8 +19,7 @@
 
 interface CharacterData : Node {
 
-    [TreatNullAs=NullString] attribute DOMString data
-        setter raises(DOMException);
+    [TreatNullAs=NullString, SetterRaisesException] attribute DOMString data;
 
     readonly attribute unsigned long length;
     
index 1c0e42c..6a8d3e3 100644 (file)
     [TreatReturnedNullStringAs=Null] readonly attribute DOMString inputEncoding;
 
     [TreatReturnedNullStringAs=Null] readonly attribute DOMString xmlEncoding;
-             [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] attribute DOMString xmlVersion
-                setter raises (DOMException);
-             attribute boolean xmlStandalone
-                setter raises (DOMException);
+    [TreatReturnedNullStringAs=Null, TreatNullAs=NullString, SetterRaisesException] attribute DOMString xmlVersion;
+    [SetterRaisesException] attribute boolean xmlStandalone;
 
     Node               adoptNode([Default=Undefined] optional Node source)
         raises (DOMException);
              [TreatNullAs=NullString] attribute DOMString title;
     readonly attribute DOMString referrer;
 #if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-             [TreatNullAs=NullString] attribute DOMString domain
-                 setter raises (DOMException);
+    [TreatNullAs=NullString, SetterRaisesException] attribute DOMString domain;
 #else
     readonly attribute DOMString domain;
 #endif
     readonly attribute DOMString URL;
 
-             [TreatNullAs=NullString] attribute DOMString cookie
-                 setter raises (DOMException),
-                 getter raises (DOMException);
+    [TreatNullAs=NullString, GetterRaisesException, SetterRaisesException] attribute DOMString cookie;
 
-             attribute HTMLElement body
-                 setter raises (DOMException);
+    [SetterRaisesException] attribute HTMLElement body;
 
     readonly attribute HTMLHeadElement head;
     readonly attribute HTMLCollection images;
index 0550789..9970eba 100644 (file)
@@ -50,9 +50,8 @@
 
     readonly attribute [TreatReturnedNullStringAs=Null] DOMString        nodeName;
 
-             // FIXME: the spec says this can also raise on retrieval.
-             attribute [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] DOMString        nodeValue
-                 setter raises(DOMException);
+    // FIXME: the spec says this can also raise on retrieval.
+    [TreatReturnedNullStringAs=Null, TreatNullAs=NullString, SetterRaisesException] attribute DOMString nodeValue;
 
     readonly attribute unsigned short   nodeType;
     readonly attribute Node             parentNode;
@@ -84,8 +83,7 @@
                                        [TreatNullAs=NullString,Default=Undefined] optional DOMString version);
 
     readonly attribute [TreatReturnedNullStringAs=Null] DOMString        namespaceURI;
-             attribute [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] DOMString        prefix
-                 setter raises(DOMException);
+    [TreatReturnedNullStringAs=Null, TreatNullAs=NullString, SetterRaisesException] attribute DOMString prefix;
     readonly attribute [TreatReturnedNullStringAs=Null] DOMString        localName;
 
 #if defined(LANGUAGE_OBJECTIVE_C)
@@ -98,9 +96,8 @@
 
     readonly attribute [TreatReturnedNullStringAs=Null] DOMString       baseURI;
 
-             // FIXME: the spec says this can also raise on retrieval.
-             attribute [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] DOMString       textContent
-                 setter raises(DOMException);
+    // FIXME: the spec says this can also raise on retrieval.
+    [TreatReturnedNullStringAs=Null, TreatNullAs=NullString, SetterRaisesException] attribute DOMString textContent;
 
     boolean            isSameNode([Default=Undefined] optional Node other);
     boolean            isEqualNode([Default=Undefined] optional Node other);
index 55599de..00bcd0f 100644 (file)
@@ -23,8 +23,7 @@ interface ProcessingInstruction : Node {
     // DOM Level 1
 
     [TreatReturnedNullStringAs=Null] readonly attribute DOMString target;
-             [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] attribute DOMString data
-                 setter raises(DOMException);
+    [TreatReturnedNullStringAs=Null, TreatNullAs=NullString, SetterRaisesException] attribute DOMString data;
 
     // interface LinkStyle from DOM Level 2 Style Sheets
     readonly attribute StyleSheet sheet;
index dd840c1..2e40fd1 100644 (file)
     ImplementationLacksVTable
 ] interface Range {
 
-    readonly attribute Node startContainer
-        getter raises(DOMException);
-    readonly attribute long startOffset
-        getter raises(DOMException);
-    readonly attribute Node endContainer
-        getter raises(DOMException);
-    readonly attribute long endOffset
-        getter raises(DOMException);
-    readonly attribute boolean collapsed
-        getter raises(DOMException);
-    readonly attribute Node commonAncestorContainer
-        getter raises(DOMException);
+    [GetterRaisesException] readonly attribute Node startContainer;
+    [GetterRaisesException] readonly attribute long startOffset;
+    [GetterRaisesException] readonly attribute Node endContainer;
+    [GetterRaisesException] readonly attribute long endOffset;
+    [GetterRaisesException] readonly attribute boolean collapsed;
+    [GetterRaisesException] readonly attribute Node commonAncestorContainer;
 
     [ObjCLegacyUnnamedParameters] void setStart([Default=Undefined] optional Node refNode, 
                                  [Default=Undefined] optional long offset)
index a4d27aa..b6c538f 100644 (file)
@@ -33,8 +33,7 @@
     attribute boolean applyAuthorStyles;
     attribute boolean resetStyleInheritance;
 
-    [TreatNullAs=NullString]
-    attribute DOMString innerHTML setter raises(DOMException);
+    [TreatNullAs=NullString, SetterRaisesException] attribute DOMString innerHTML;
 
 #if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
     Node cloneNode([Default=Undefined] optional boolean deep) raises(DOMException);
index 4d4bf18..11736e8 100644 (file)
@@ -27,8 +27,7 @@
     readonly attribute unsigned long whatToShow;
     readonly attribute NodeFilter filter;
     readonly attribute boolean expandEntityReferences;        
-             attribute Node currentNode
-                 setter raises(DOMException);
+    [SetterRaisesException] attribute Node currentNode;
 
     [CallWith=ScriptState] Node parentNode();
     [CallWith=ScriptState] Node firstChild();
index 558c66d..e0ebc6e 100644 (file)
              [Reflect] attribute DOMString accessKey;
 
     // Extensions
-             [TreatNullAs=NullString] attribute DOMString innerHTML
-                 setter raises(DOMException);
-             [TreatNullAs=NullString] attribute DOMString innerText
-                 setter raises(DOMException);
-             [TreatNullAs=NullString] attribute DOMString outerHTML
-                 setter raises(DOMException);
-             [TreatNullAs=NullString] attribute DOMString outerText
-                 setter raises(DOMException);
+             [TreatNullAs=NullString, SetterRaisesException] attribute DOMString innerHTML;
+             [TreatNullAs=NullString, SetterRaisesException] attribute DOMString innerText;
+             [TreatNullAs=NullString, SetterRaisesException] attribute DOMString outerHTML;
+             [TreatNullAs=NullString, SetterRaisesException] attribute DOMString outerText;
 
     Element insertAdjacentElement([Default=Undefined] optional DOMString where,
                                   [Default=Undefined] optional Element element)
@@ -58,8 +54,7 @@
 
     readonly attribute HTMLCollection children;
 
-             [TreatNullAs=NullString] attribute DOMString contentEditable
-                 setter raises(DOMException);
+             [TreatNullAs=NullString, SetterRaisesException] attribute DOMString contentEditable;
     readonly attribute boolean isContentEditable;
 
              attribute boolean spellcheck;
@@ -77,8 +72,7 @@
 
 #if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
 #if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C
-             [Conditional=MICRODATA, Custom] attribute any itemValue
-                 setter raises(DOMException);
+             [Conditional=MICRODATA, Custom, SetterRaisesException] attribute any itemValue;
 #endif
 #endif
 
index f86c1bb..e859f95 100644 (file)
@@ -39,7 +39,7 @@ interface HTMLInputElement : HTMLElement {
     attribute boolean indeterminate;
     [Conditional=DATALIST_ELEMENT] readonly attribute HTMLElement list;
     [Reflect] attribute DOMString max;
-    attribute long maxLength setter raises(DOMException);
+    [SetterRaisesException] attribute long maxLength;
     [Reflect] attribute DOMString min;
     [Reflect] attribute boolean multiple;
     [Reflect] attribute DOMString name;
@@ -50,7 +50,7 @@ interface HTMLInputElement : HTMLElement {
 #if defined(LANGUAGE_OBJECTIVE_C) && LANGUAGE_OBJECTIVE_C
     [ObjCImplementedAsUnsignedLong] attribute DOMString size; // DOM level 2 changed this to a long, but ObjC API is a string
 #else
-    attribute unsigned long size setter raises(DOMException); // Changed string -> long -> unsigned long
+    [SetterRaisesException] attribute unsigned long size; // Changed string -> long -> unsigned long
 #endif
     [Reflect, URL] attribute DOMString src;
     [Reflect] attribute DOMString step;
@@ -58,14 +58,14 @@ interface HTMLInputElement : HTMLElement {
     [TreatNullAs=NullString] attribute DOMString defaultValue;
     // See the discussion in https://bugs.webkit.org/show_bug.cgi?id=100085
 #if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-    [TreatNullAs=NullString] attribute DOMString value setter raises(DOMException);
+    [TreatNullAs=NullString, SetterRaisesException] attribute DOMString value;
 #else
     [TreatNullAs=NullString] attribute DOMString value;
 #endif
 #if !defined(LANGUAGE_CPP) || !LANGUAGE_CPP
-    attribute Date valueAsDate setter raises(DOMException);
+    [SetterRaisesException] attribute Date valueAsDate;
 #endif
-    attribute double valueAsNumber setter raises(DOMException);
+    [SetterRaisesException] attribute double valueAsNumber;
 
     void stepUp(optional long n) raises(DOMException);
     void stepDown(optional long n) raises(DOMException);
index 41bd019..5b8e3a9 100644 (file)
@@ -26,9 +26,9 @@ interface HTMLMarqueeElement : HTMLElement {
     [Reflect] attribute DOMString direction;
     [Reflect] attribute DOMString height;
     [Reflect] attribute unsigned long hspace;
-    attribute long loop setter raises(DOMException);
-    attribute long scrollAmount setter raises(DOMException);
-    attribute long scrollDelay setter raises(DOMException);
+    [SetterRaisesException] attribute long loop;
+    [SetterRaisesException] attribute long scrollAmount;
+    [SetterRaisesException] attribute long scrollDelay;
     [Reflect] attribute boolean trueSpeed;
     [Reflect] attribute unsigned long vspace;
     [Reflect] attribute DOMString width;
index 06b2ef5..96b2c51 100644 (file)
@@ -63,8 +63,7 @@ readonly attribute unsigned short readyState;
 readonly attribute boolean seeking;
 
 // playback state
-attribute double currentTime
-    setter raises (DOMException);
+[SetterRaisesException] attribute double currentTime;
 readonly attribute double initialTime;
 readonly attribute double startTime;
 readonly attribute double duration;
@@ -81,8 +80,7 @@ void pause();
 
 // controls
 attribute boolean controls;
-attribute double volume 
-    setter raises (DOMException);
+[SetterRaisesException] attribute double volume;
 attribute boolean muted;
 attribute [Reflect=muted] boolean defaultMuted;
 
index 85d1b51..15575dd 100644 (file)
 [
     Conditional=METER_ELEMENT
 ] interface HTMLMeterElement : HTMLElement {
-             attribute double value
-                 setter raises(DOMException);
-             attribute double min
-                 setter raises(DOMException);
-             attribute double max
-                 setter raises(DOMException);
-             attribute double low
-                 setter raises(DOMException);
-             attribute double high
-                 setter raises(DOMException);
-             attribute double optimum
-                 setter raises(DOMException);
+    [SetterRaisesException] attribute double value;
+    [SetterRaisesException] attribute double min;
+    [SetterRaisesException] attribute double max;
+    [SetterRaisesException] attribute double low;
+    [SetterRaisesException] attribute double high;
+    [SetterRaisesException] attribute double optimum;
     readonly attribute NodeList labels;
 };
index 4932898..eeafa42 100644 (file)
@@ -31,7 +31,7 @@
     attribute DOMString value;
 
 #if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
-    attribute DOMString text setter raises(DOMException);
+    [SetterRaisesException] attribute DOMString text;
 #else
     readonly attribute DOMString text;
 #endif
index 891bb4d..a8b0cc9 100644 (file)
@@ -24,8 +24,7 @@
     GenerateIsReachable=ImplOwnerNodeRoot,
 ] interface HTMLOptionsCollection : HTMLCollection {
     attribute long selectedIndex;
-    [CustomSetter] attribute unsigned long length
-        setter raises (DOMException);
+    [CustomSetter, SetterRaisesException] attribute unsigned long length;
 
     Node namedItem([Default=Undefined] optional DOMString name);
 
index 23a94fa..fcc657b 100644 (file)
 [
     Conditional=PROGRESS_ELEMENT
 ] interface HTMLProgressElement : HTMLElement {
-             attribute  double                value
-                 setter raises(DOMException);
-             attribute  double                max
-                 setter raises(DOMException);
+    [SetterRaisesException] attribute  double value;
+    [SetterRaisesException] attribute  double max;
     readonly attribute  double                position;
     readonly attribute  NodeList              labels;
 };
index 39217b7..ae70e40 100644 (file)
@@ -38,7 +38,7 @@
     // for compatibility we keep DOM Level 1 definition.
     readonly attribute long length;
 #else
-    attribute unsigned long length setter raises (DOMException);
+    [SetterRaisesException] attribute unsigned long length;
 #endif
     Node item([IsIndex,Default=Undefined] optional unsigned long index);
     Node namedItem([Default=Undefined] optional DOMString name);
index c03fe82..08a9b42 100644 (file)
@@ -19,9 +19,9 @@
  */
 
 interface HTMLTableElement : HTMLElement {
-    attribute HTMLTableCaptionElement caption setter raises(DOMException);
-    attribute HTMLTableSectionElement tHead setter raises(DOMException);
-    attribute HTMLTableSectionElement tFoot setter raises(DOMException);
+    [SetterRaisesException] attribute HTMLTableCaptionElement caption;
+    [SetterRaisesException] attribute HTMLTableSectionElement tHead;
+    [SetterRaisesException] attribute HTMLTableSectionElement tFoot;
 
     readonly attribute HTMLCollection rows;
     readonly attribute HTMLCollection tBodies;
index 436f591..09330d4 100644 (file)
@@ -25,7 +25,7 @@ interface HTMLTextAreaElement : HTMLElement {
     [Reflect] attribute DOMString dirName;
     [Reflect] attribute boolean disabled;
     readonly attribute HTMLFormElement form;
-    attribute long maxLength setter raises(DOMException);
+    [SetterRaisesException] attribute long maxLength;
     [Reflect] attribute DOMString name;
     [Reflect] attribute DOMString placeholder;
     [Reflect] attribute boolean readOnly;
index 04c1947..8f8677d 100644 (file)
@@ -34,8 +34,7 @@
     readonly attribute TimeRanges seekable;
 
     readonly attribute double duration;
-    attribute double currentTime
-        setter raises (DOMException);
+    [SetterRaisesException] attribute double currentTime;
 
     readonly attribute boolean paused;
     readonly attribute TimeRanges played;
@@ -47,8 +46,7 @@
     attribute double defaultPlaybackRate;
     attribute double playbackRate;
 
-    attribute double volume
-        setter raises (DOMException);
+    [SetterRaisesException] attribute double volume;
     attribute boolean muted;
 
     // EventTarget interface
index b7b1aee..ec7b6c3 100644 (file)
     readonly attribute TextTrack track;
 
     attribute DOMString id;
-    attribute double startTime
-        setter raises (DOMException);
-    attribute double endTime
-        setter raises (DOMException);
+    [SetterRaisesException] attribute double startTime;
+    [SetterRaisesException] attribute double endTime;
     attribute boolean pauseOnExit;
 
-    attribute DOMString vertical
-        setter raises (DOMException);
+    [SetterRaisesException] attribute DOMString vertical;
     attribute boolean snapToLines;
-    attribute long line
-        setter raises (DOMException);
-    attribute long position
-        setter raises (DOMException);
-    attribute long size
-        setter raises (DOMException);
-    attribute DOMString align
-        setter raises (DOMException);
+    [SetterRaisesException] attribute long line;
+    [SetterRaisesException] attribute long position;
+    [SetterRaisesException] attribute long size;
+    [SetterRaisesException] attribute DOMString align;
 
     attribute DOMString text;
     DocumentFragment getCueAsHTML();
index 7928492..f8f23b2 100644 (file)
     readonly attribute TextTrack track;
 
     attribute DOMString id;
-    attribute double width
-        setter raises (DOMException);
-    attribute long height
-        setter raises (DOMException);
-    attribute double regionAnchorX
-        setter raises (DOMException);
-    attribute double regionAnchorY
-        setter raises (DOMException);
-    attribute double viewportAnchorX
-        setter raises (DOMException);
-    attribute double viewportAnchorY
-        setter raises (DOMException);
-    attribute DOMString scroll
-        setter raises (DOMException);
+    [SetterRaisesException] attribute double width;
+    [SetterRaisesException] attribute long height;
+    [SetterRaisesException] attribute double regionAnchorX;
+    [SetterRaisesException] attribute double regionAnchorY;
+    [SetterRaisesException] attribute double viewportAnchorX;
+    [SetterRaisesException] attribute double viewportAnchorY;
+    [SetterRaisesException] attribute DOMString scroll;
 };
 
index 2bdd05d..6e47e93 100644 (file)
 
     readonly attribute DOMApplicationCache applicationCache;
 
-    readonly attribute Storage sessionStorage
-        getter raises(DOMException);
-    readonly attribute Storage localStorage
-        getter raises(DOMException);
+    [GetterRaisesException] readonly attribute Storage sessionStorage;
+    [GetterRaisesException] readonly attribute Storage localStorage;
 
 #if defined(ENABLE_ORIENTATION_EVENTS) && ENABLE_ORIENTATION_EVENTS
     // This is the interface orientation in degrees. Some examples are:
index c333fd0..85fd14d 100644 (file)
@@ -31,7 +31,7 @@
     CustomNamedSetter,
     SkipVTableValidation
 ] interface Storage {
-    [NotEnumerable] readonly attribute unsigned long length getter raises(DOMException);
+    [NotEnumerable, GetterRaisesException] readonly attribute unsigned long length;
     [NotEnumerable, TreatReturnedNullStringAs=Null] DOMString key(unsigned long index)
         raises(DOMException);
     [NotEnumerable, TreatReturnedNullStringAs=Null] DOMString getItem(DOMString key)
index 52bdabc..3ecec93 100644 (file)
@@ -26,9 +26,6 @@
 [
     Conditional=SVG&SVG_FONTS,
 ] interface SVGAltGlyphElement : SVGTextPositioningElement, SVGURIReference {
-    attribute DOMString glyphRef
-        setter raises(DOMException);
-    attribute DOMString format
-        setter raises(DOMException);
+    [SetterRaisesException] attribute DOMString glyphRef;
+    [SetterRaisesException] attribute DOMString format;
 };
-
index 7b72367..69605c6 100644 (file)
@@ -34,8 +34,7 @@
     [StrictTypeChecking] attribute float value;
     [StrictTypeChecking] attribute float valueInSpecifiedUnits;
 
-    [TreatNullAs=NullString] attribute DOMString valueAsString
-        setter raises(DOMException);
+    [TreatNullAs=NullString, SetterRaisesException] attribute DOMString valueAsString;
 
     [StrictTypeChecking] void newValueSpecifiedUnits(unsigned short unitType, float valueInSpecifiedUnits)
         raises(DOMException);
index 6af6da0..0f703f6 100644 (file)
@@ -27,8 +27,7 @@
     Conditional=SVG,
     SkipVTableValidation
 ] interface SVGAnimatedBoolean {
-    [StrictTypeChecking] attribute boolean baseVal
-        setter raises(DOMException);
+    [StrictTypeChecking, SetterRaisesException] attribute boolean baseVal;
     readonly attribute boolean animVal;
 };
 
index 91bfe61..b2210ea 100644 (file)
@@ -27,8 +27,7 @@
     Conditional=SVG,
     SkipVTableValidation
 ] interface SVGAnimatedEnumeration {
-    [StrictTypeChecking] attribute unsigned short baseVal
-        setter raises(DOMException);
+    [StrictTypeChecking, SetterRaisesException] attribute unsigned short baseVal;
     readonly attribute unsigned short animVal;
 };
 
index 83e2d5f..862bce6 100644 (file)
@@ -27,8 +27,7 @@
     Conditional=SVG,
     SkipVTableValidation
 ] interface SVGAnimatedInteger {
-    [StrictTypeChecking] attribute long baseVal
-        setter raises(DOMException);
+    [StrictTypeChecking, SetterRaisesException] attribute long baseVal;
     readonly attribute long animVal;
 };
 
index b422be6..c5e3863 100644 (file)
@@ -28,8 +28,7 @@
     Conditional=SVG,
     SkipVTableValidation
 ] interface SVGAnimatedNumber {
-    [StrictTypeChecking] attribute float baseVal
-        setter raises(DOMException);
+    [StrictTypeChecking, SetterRaisesException] attribute float baseVal;
     readonly attribute float animVal;
 };
 
index 8a89ab0..73e60ef 100644 (file)
@@ -27,8 +27,7 @@
     Conditional=SVG,
     SkipVTableValidation
 ] interface SVGAnimatedString {
-    attribute DOMString baseVal
-        setter raises(DOMException);
+    [SetterRaisesException] attribute DOMString baseVal;
     readonly attribute DOMString animVal;
 };
 
index 22c4726..7736767 100644 (file)
@@ -25,7 +25,7 @@
     Conditional=SVG
 ] interface SVGElement : Element {
     [Reflect] attribute DOMString id;
-    [TreatNullAs=NullString] attribute DOMString xmlbase setter raises(DOMException);
+    [TreatNullAs=NullString, SetterRaisesException] attribute DOMString xmlbase;
     readonly attribute SVGSVGElement ownerSVGElement;
     readonly attribute SVGElement viewportElement;
 };
index 678ccbd..1a052d7 100644 (file)
 [Conditional=SVG&SVG_FONTS] interface SVGGlyphRefElement : SVGStyledElement,
                                                            SVGURIReference {
     // FIXME: Use [Reflect] after https://bugs.webkit.org/show_bug.cgi?id=64843 is fixed.
-    attribute DOMString glyphRef
-        setter raises(DOMException);
+    [SetterRaisesException] attribute DOMString glyphRef;
     [Reflect] attribute DOMString format;
-    attribute float x
-        setter raises(DOMException);
-    attribute float y
-        setter raises(DOMException);
-    attribute float dx
-        setter raises(DOMException);
-    attribute float dy
-        setter raises(DOMException);
+    [SetterRaisesException] attribute float x;
+    [SetterRaisesException] attribute float y;
+    [SetterRaisesException] attribute float dx;
+    [SetterRaisesException] attribute float dy;
 };
 
index 74e6cc9..1e10028 100644 (file)
@@ -30,9 +30,7 @@
     ObjCProtocol,
     SuppressToJSObject,
 ] interface SVGLangSpace {
-             attribute DOMString xmllang
-                 /*setter raises(DOMException)*/;
-             attribute DOMString xmlspace
-                 /*setter raises(DOMException)*/;
+             attribute DOMString xmllang;
+             attribute DOMString xmlspace;
 };
 
index bf4ea65..eb01ad1 100644 (file)
     const unsigned short SVG_LENGTHTYPE_PC         = 10;
 
     readonly attribute unsigned short unitType;
-    [Custom, StrictTypeChecking] attribute float value
-        setter raises(DOMException),
-        getter raises(DOMException);
+    [GetterRaisesException, SetterRaisesException, Custom, StrictTypeChecking] attribute float value;
 
     [StrictTypeChecking] attribute float valueInSpecifiedUnits;
-    [TreatNullAs=NullString, StrictTypeChecking] attribute DOMString valueAsString
-        setter raises(DOMException);
+    [TreatNullAs=NullString, StrictTypeChecking, SetterRaisesException] attribute DOMString valueAsString;
 
     [StrictTypeChecking] void newValueSpecifiedUnits(unsigned short unitType, 
                                                      float valueInSpecifiedUnits)
index 44be334..5f4ed8a 100644 (file)
     const unsigned short SVG_MEETORSLICE_MEET = 1;
     const unsigned short SVG_MEETORSLICE_SLICE = 2;
 
-    [StrictTypeChecking] attribute unsigned short align
-        setter raises(DOMException);
+    [StrictTypeChecking, SetterRaisesException] attribute unsigned short align;
 
-    [StrictTypeChecking] attribute unsigned short meetOrSlice
-        setter raises(DOMException);
+    [StrictTypeChecking, SetterRaisesException] attribute unsigned short meetOrSlice;
 };
 
index c1ad811..6d869d2 100644 (file)
     readonly attribute SVGAnimatedLength y;
     readonly attribute SVGAnimatedLength width;
     readonly attribute SVGAnimatedLength height;
-             attribute DOMString contentScriptType
-                 /*setter raises(DOMException)*/;
-             attribute DOMString contentStyleType
-                 /*setter raises(DOMException)*/;
+             attribute DOMString contentScriptType;
+             attribute DOMString contentStyleType;
     readonly attribute SVGRect viewport;
     readonly attribute float pixelUnitToMillimeterX;
     readonly attribute float pixelUnitToMillimeterY;
@@ -47,8 +45,7 @@
     readonly attribute float screenPixelToMillimeterY;
     readonly attribute boolean useCurrentView;
     readonly attribute SVGViewSpec currentView;
-             attribute float currentScale
-                 /*setter raises(DOMException)*/;
+             attribute float currentScale;
     readonly attribute SVGPoint currentTranslate;
 
     unsigned long suspendRedraw([Default=Undefined] optional unsigned long maxWaitMilliseconds);
index 4b96625..5fb90ba 100644 (file)
@@ -28,7 +28,6 @@
 ] interface SVGScriptElement : SVGElement,
                                                SVGURIReference,
                                                SVGExternalResourcesRequired {
-             attribute [TreatNullAs=NullString] DOMString type
-                 /*setter raises(DOMException)*/;
+             attribute [TreatNullAs=NullString] DOMString type;
 };
 
index 6853535..6005b2e 100644 (file)
 ] interface SVGStyleElement : SVGElement,
                                               SVGLangSpace {
              attribute boolean disabled;
-             attribute DOMString type
-                 setter raises(DOMException);
-             attribute DOMString media
-                 setter raises(DOMException);
-             attribute DOMString title
-                 setter raises(DOMException);
+             [SetterRaisesException] attribute DOMString type;
+             [SetterRaisesException] attribute DOMString media;
+             [SetterRaisesException] attribute DOMString title;
 };
 
index cd33f4b..299680f 100644 (file)
@@ -37,8 +37,7 @@
       readonly attribute DOMString viewTargetString;
 
       // SVGZoomAndPan
-      attribute unsigned short zoomAndPan
-          setter raises(DOMException);
+      [SetterRaisesException] attribute unsigned short zoomAndPan;
 
       // SVGFitToViewBox
       readonly attribute SVGAnimatedRect viewBox;
index 1ffd9af..0f2aebd 100644 (file)
@@ -65,12 +65,10 @@ enum XMLHttpRequestResponseType {
     const unsigned short LOADING = 3;
     const unsigned short DONE = 4;
 
-    [Conditional=XHR_TIMEOUT] attribute unsigned long timeout
-        setter raises(DOMException);
+    [Conditional=XHR_TIMEOUT, SetterRaisesException] attribute unsigned long timeout;
     readonly attribute unsigned short readyState;
 
-    attribute boolean withCredentials
-        setter raises(DOMException);
+    [SetterRaisesException] attribute boolean withCredentials;
 
     [Custom] void open(DOMString method, DOMString url, optional boolean async, optional DOMString user, optional DOMString password)
         raises(DOMException);
@@ -90,20 +88,14 @@ enum XMLHttpRequestResponseType {
         raises(DOMException);
     [TreatReturnedNullStringAs=Null] DOMString getResponseHeader(DOMString header)
         raises(DOMException);
-    [CustomGetter] readonly attribute DOMString responseText // The custom getter implements TreatReturnedNullStringAs=Null
-        getter raises(DOMException);
-    readonly attribute Document responseXML
-        getter raises(DOMException);
-
-    attribute XMLHttpRequestResponseType responseType
-        setter raises(DOMException);
-    [CustomGetter] readonly attribute Object response
-        getter raises(DOMException);
-
-    readonly attribute unsigned short status
-        getter raises(DOMException);
-    readonly attribute DOMString statusText
-        getter raises(DOMException);
+    [GetterRaisesException, CustomGetter] readonly attribute DOMString responseText; // The custom getter implements TreatReturnedNullStringAs=Null
+    [GetterRaisesException] readonly attribute Document responseXML;
+
+    [SetterRaisesException] attribute XMLHttpRequestResponseType responseType;
+    [GetterRaisesException, CustomGetter] readonly attribute Object response;
+
+    [GetterRaisesException] readonly attribute unsigned short status;
+    [GetterRaisesException] readonly attribute DOMString statusText;
 
     // Extension
     void overrideMimeType(DOMString override);
index 7b34367..4498a49 100644 (file)
     const unsigned short FIRST_ORDERED_NODE_TYPE        = 9;
 
     readonly attribute unsigned short  resultType;
-    readonly attribute double          numberValue
-        getter raises (DOMException);
+    [GetterRaisesException] readonly attribute double          numberValue;
         
-    readonly attribute DOMString       stringValue
-        getter raises (DOMException);
+    [GetterRaisesException] readonly attribute DOMString       stringValue;
 
-    readonly attribute boolean         booleanValue
-        getter raises (DOMException);
+    [GetterRaisesException] readonly attribute boolean         booleanValue;
 
-    readonly attribute Node            singleNodeValue
-        getter raises (DOMException);
+    [GetterRaisesException] readonly attribute Node            singleNodeValue;
 
     readonly attribute boolean         invalidIteratorState;
-    readonly attribute unsigned long   snapshotLength
-        getter raises (DOMException);
+    [GetterRaisesException] readonly attribute unsigned long   snapshotLength;
         
     Node iterateNext()
         raises (DOMException);