[WebIDL] Remove special casing for RegExp which is no longer required by the spec
https://bugs.webkit.org/show_bug.cgi?id=174025
Patch by Sam Weinig <sam@webkit.org> on 2017-07-02
Reviewed by Chris Dumez.
LayoutTests/imported/w3c:
* web-platform-tests/FileAPI/blob/Blob-constructor-expected.txt:
Update results to passing.
Source/WebCore:
* bindings/scripts/CodeGeneratorJS.pm:
(GenerateDictionaryImplementationContent):
(GenerateOverloadDispatcher):
Remove special casing.
* bindings/scripts/IDLParser.pm:
(parseNonAnyType):
Remove parsing of RegExp.
* bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
* bindings/scripts/test/JS/JSTestEventConstructor.cpp:
* bindings/scripts/test/JS/JSTestObj.cpp:
* bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
* bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
Update test results.
LayoutTests:
* fast/files/blob-constructor-expected.txt:
* fast/files/blob-constructor.html:
* fast/files/file-constructor-expected.txt:
* fast/files/file-constructor.html:
Update tests/results for change in conversions of RegExp.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@219061 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 5016aba..e139f27 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,16 @@
+2017-07-02 Sam Weinig <sam@webkit.org>
+
+ [WebIDL] Remove special casing for RegExp which is no longer required by the spec
+ https://bugs.webkit.org/show_bug.cgi?id=174025
+
+ Reviewed by Chris Dumez.
+
+ * fast/files/blob-constructor-expected.txt:
+ * fast/files/blob-constructor.html:
+ * fast/files/file-constructor-expected.txt:
+ * fast/files/file-constructor.html:
+ Update tests/results for change in conversions of RegExp.
+
2017-07-01 Myles C. Maxfield <mmaxfield@apple.com>
REGRESSION(r218371): Reeder's default font is Times instead of San Francisco
diff --git a/LayoutTests/fast/files/blob-constructor-expected.txt b/LayoutTests/fast/files/blob-constructor-expected.txt
index 7b97f0a..0706f19 100644
--- a/LayoutTests/fast/files/blob-constructor-expected.txt
+++ b/LayoutTests/fast/files/blob-constructor-expected.txt
@@ -37,7 +37,7 @@
PASS (new Blob([], true)) instanceof window.Blob threw exception TypeError: Type error.
PASS (new Blob([], 'abc')) instanceof window.Blob threw exception TypeError: Type error.
PASS (new Blob([], [])) instanceof window.Blob is true
-PASS (new Blob([], /abc/)) threw exception TypeError: Type error.
+PASS (new Blob([], /abc/)) instanceof window.Blob is true
PASS (new Blob([], function () {})) instanceof window.Blob is true
PASS (new Blob([], {type:'text/html'})).type is 'text/html'
PASS (new Blob([], {type:'text/html'})).size is 0
diff --git a/LayoutTests/fast/files/blob-constructor.html b/LayoutTests/fast/files/blob-constructor.html
index 55e0df9..24f4902 100644
--- a/LayoutTests/fast/files/blob-constructor.html
+++ b/LayoutTests/fast/files/blob-constructor.html
@@ -60,7 +60,7 @@
shouldThrow("(new Blob([], true)) instanceof window.Blob", "'TypeError: Type error'");
shouldThrow("(new Blob([], 'abc')) instanceof window.Blob", "'TypeError: Type error'");
shouldBeTrue("(new Blob([], [])) instanceof window.Blob");
-shouldThrow("(new Blob([], /abc/))", "'TypeError: Type error'");
+shouldBeTrue("(new Blob([], /abc/)) instanceof window.Blob");
shouldBeTrue("(new Blob([], function () {})) instanceof window.Blob");
// Test that the type/size is correctly added to the Blob
diff --git a/LayoutTests/fast/files/file-constructor-expected.txt b/LayoutTests/fast/files/file-constructor-expected.txt
index f682ddc..102a956 100644
--- a/LayoutTests/fast/files/file-constructor-expected.txt
+++ b/LayoutTests/fast/files/file-constructor-expected.txt
@@ -54,7 +54,7 @@
PASS (new File([], 'world.html', true)) instanceof window.File threw exception TypeError: Type error.
PASS (new File([], 'world.html', 'abc')) instanceof window.File threw exception TypeError: Type error.
PASS (new File([], 'world.html', [])) instanceof window.File is true
-PASS (new File([], 'world.html', /abc/)) instanceof window.File threw exception TypeError: Type error.
+PASS (new File([], 'world.html', /abc/)) instanceof window.File is true
PASS (new File([], 'world.html', function () {})) instanceof window.File is true
PASS (new File([], 'world.html')).name is 'world.html'
PASS (new File([], 'w/orld/ht/m.l')).name is 'w/orld/ht/m.l'
diff --git a/LayoutTests/fast/files/file-constructor.html b/LayoutTests/fast/files/file-constructor.html
index 0b59e00..0ef610c 100644
--- a/LayoutTests/fast/files/file-constructor.html
+++ b/LayoutTests/fast/files/file-constructor.html
@@ -84,7 +84,7 @@
shouldThrow("(new File([], 'world.html', true)) instanceof window.File", "'TypeError: Type error'");
shouldThrow("(new File([], 'world.html', 'abc')) instanceof window.File", "'TypeError: Type error'");
shouldBeTrue("(new File([], 'world.html', [])) instanceof window.File");
-shouldThrow("(new File([], 'world.html', /abc/)) instanceof window.File", "'TypeError: Type error'");
+shouldBeTrue("(new File([], 'world.html', /abc/)) instanceof window.File");
shouldBeTrue("(new File([], 'world.html', function () {})) instanceof window.File");
// Test that the name/type/size are correctly added to the File.
diff --git a/LayoutTests/imported/w3c/ChangeLog b/LayoutTests/imported/w3c/ChangeLog
index ca2d322..c66e1d2 100644
--- a/LayoutTests/imported/w3c/ChangeLog
+++ b/LayoutTests/imported/w3c/ChangeLog
@@ -1,3 +1,13 @@
+2017-07-02 Sam Weinig <sam@webkit.org>
+
+ [WebIDL] Remove special casing for RegExp which is no longer required by the spec
+ https://bugs.webkit.org/show_bug.cgi?id=174025
+
+ Reviewed by Chris Dumez.
+
+ * web-platform-tests/FileAPI/blob/Blob-constructor-expected.txt:
+ Update results to passing.
+
2017-06-29 Romain Bellessort <romain.bellessort@crf.canon.fr>
[Readable Streams API] Fix ReadableStream "strategy" argument handling
diff --git a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/blob/Blob-constructor-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/blob/Blob-constructor-expected.txt
index 21b380f..8b3cb5c 100644
--- a/LayoutTests/imported/w3c/web-platform-tests/FileAPI/blob/Blob-constructor-expected.txt
+++ b/LayoutTests/imported/w3c/web-platform-tests/FileAPI/blob/Blob-constructor-expected.txt
@@ -38,8 +38,8 @@
PASS Passing object "[object Object]" (index 2) for options should use the defaults (with newlines).
PASS Passing object "[object Object]" (index 3) for options should use the defaults.
PASS Passing object "[object Object]" (index 3) for options should use the defaults (with newlines).
-FAIL Passing object "/regex/" (index 4) for options should use the defaults. Type error
-FAIL Passing object "/regex/" (index 4) for options should use the defaults (with newlines). Type error
+PASS Passing object "/regex/" (index 4) for options should use the defaults.
+PASS Passing object "/regex/" (index 4) for options should use the defaults (with newlines).
PASS Passing function "function () {}" (index 5) for options should use the defaults.
PASS Passing function "function () {}" (index 5) for options should use the defaults (with newlines).
PASS Newlines should not change when endings is 'transparent'.
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 0059ea5..e2b97a3 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,26 @@
+2017-07-02 Sam Weinig <sam@webkit.org>
+
+ [WebIDL] Remove special casing for RegExp which is no longer required by the spec
+ https://bugs.webkit.org/show_bug.cgi?id=174025
+
+ Reviewed by Chris Dumez.
+
+ * bindings/scripts/CodeGeneratorJS.pm:
+ (GenerateDictionaryImplementationContent):
+ (GenerateOverloadDispatcher):
+ Remove special casing.
+
+ * bindings/scripts/IDLParser.pm:
+ (parseNonAnyType):
+ Remove parsing of RegExp.
+
+ * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
+ * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
+ * bindings/scripts/test/JS/JSTestObj.cpp:
+ * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
+ * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
+ Update test results.
+
2017-07-02 Youenn Fablet <youenn@apple.com>
RealtimeOutgoingVideoSource should pass frame timestamp
diff --git a/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm b/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
index aaa8761..c5519fa 100644
--- a/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
+++ b/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
@@ -2232,16 +2232,9 @@
$result .= " return { };\n";
$result .= " }\n";
- # 2. If V is a native RegExp object, then throw a TypeError.
- # FIXME: This RegExp special handling is likely to go away in the specification.
- $result .= " if (UNLIKELY(object && object->type() == RegExpObjectType)) {\n";
- $result .= " throwTypeError(&state, throwScope);\n";
- $result .= " return { };\n";
- $result .= " }\n";
+ # 2. Let dict be an empty dictionary value of type D; every dictionary member is initially considered to be not present.
- # 3. Let dict be an empty dictionary value of type D; every dictionary member is initially considered to be not present.
-
- # 4. Let dictionaries be a list consisting of D and all of D’s inherited dictionaries, in order from least to most derived.
+ # 3. Let dictionaries be a list consisting of D and all of D’s inherited dictionaries, in order from least to most derived.
my @dictionaries;
push(@dictionaries, $dictionary);
my $parentType = $dictionary->parentType;
@@ -2257,7 +2250,7 @@
$result .= " $className result;\n";
- # 5. For each dictionary dictionary in dictionaries, in order:
+ # 4. For each dictionary dictionary in dictionaries, in order:
foreach my $dictionary (@dictionaries) {
# For each dictionary member member declared on dictionary, in lexicographical order:
my @sortedMembers = sort { $a->name cmp $b->name } @{$dictionary->members};
@@ -2267,16 +2260,16 @@
my $type = $member->type;
AddToImplIncludesForIDLType($type);
- # 5.1. Let key be the identifier of member.
+ # 4.1. Let key be the identifier of member.
my $key = $member->name;
my $implementedAsKey = $member->extendedAttributes->{ImplementedAs} || $key;
- # 5.2. Let value be an ECMAScript value, depending on Type(V):
+ # 4.2. Let value be an ECMAScript value, depending on Type(V):
$result .= " JSValue ${key}Value = isNullOrUndefined ? jsUndefined() : object->get(&state, Identifier::fromString(&state, \"${key}\"));\n";
my $IDLType = GetIDLType($typeScope, $type);
- # 5.3. If value is not undefined, then:
+ # 4.3. If value is not undefined, then:
$result .= " if (!${key}Value.isUndefined()) {\n";
my $nativeValue = JSValueToNative($typeScope, $member, "${key}Value", $member->extendedAttributes->{Conditional}, "&state", "state");
@@ -2284,12 +2277,12 @@
$result .= " RETURN_IF_EXCEPTION(throwScope, { });\n";
# Value is undefined.
- # 5.4. Otherwise, if value is undefined but the dictionary member has a default value, then:
+ # 4.4. Otherwise, if value is undefined but the dictionary member has a default value, then:
if (!$member->isRequired && defined $member->default) {
$result .= " } else\n";
$result .= " result.$implementedAsKey = " . GenerateDefaultValue($typeScope, $member, $member->type, $member->default) . ";\n";
} elsif ($member->isRequired) {
- # 5.5. Otherwise, if value is undefined and the dictionary member is a required dictionary member, then throw a TypeError.
+ # 4.5. Otherwise, if value is undefined and the dictionary member is a required dictionary member, then throw a TypeError.
$result .= " } else {\n";
$result .= " throwRequiredMemberTypeError(state, throwScope, \"". $member->name ."\", \"$name\", \"". GetTypeNameForDisplayInException($type) ."\");\n";
$result .= " return { };\n";
@@ -2300,6 +2293,7 @@
}
}
+ # 5. Return dict.
$result .= " return result;\n";
$result .= "}\n\n";
@@ -3307,10 +3301,6 @@
return &$isDictionaryOrRecordParameter($type, $optionality);
}
};
- my $isRegExpOrObjectParameter = sub {
- my ($type, $optionality) = @_;
- return $type->name eq "RegExp" || $type->name eq "object";
- };
my $isObjectOrErrorParameter = sub {
my ($type, $optionality) = @_;
return $type->name eq "object" || $type->name eq "Error";
@@ -3387,9 +3377,6 @@
}
}
- $overload = GetOverloadThatMatches($S, $d, \&$isRegExpOrObjectParameter);
- &$generateOverloadCallIfNecessary($overload, "distinguishingArg.isObject() && asObject(distinguishingArg)->type() == RegExpObjectType");
-
$overload = GetOverloadThatMatches($S, $d, \&$isObjectOrErrorOrDOMExceptionParameter);
&$generateOverloadCallIfNecessary($overload, "distinguishingArg.isObject() && asObject(distinguishingArg)->inherits(vm, JSDOMCoreException::info())");
@@ -3404,7 +3391,7 @@
&$generateOverloadCallIfNecessary($overload, "hasIteratorMethod(*state, distinguishingArg)", "<runtime/IteratorOperations.h>");
$overload = GetOverloadThatMatches($S, $d, \&$isDictionaryOrRecordOrObjectOrCallbackInterfaceParameter);
- &$generateOverloadCallIfNecessary($overload, "distinguishingArg.isObject() && asObject(distinguishingArg)->type() != RegExpObjectType");
+ &$generateOverloadCallIfNecessary($overload, "distinguishingArg.isObject()");
my $booleanOverload = GetOverloadThatMatches($S, $d, \&$isBooleanParameter);
&$generateOverloadCallIfNecessary($booleanOverload, "distinguishingArg.isBoolean()");
diff --git a/Source/WebCore/bindings/scripts/IDLParser.pm b/Source/WebCore/bindings/scripts/IDLParser.pm
index 7b6c051..d2d4e86 100644
--- a/Source/WebCore/bindings/scripts/IDLParser.pm
+++ b/Source/WebCore/bindings/scripts/IDLParser.pm
@@ -2548,12 +2548,6 @@
$type->name("object");
return $type;
}
- if ($next->value() eq "RegExp") {
- $self->assertTokenValue($self->getToken(), "RegExp", __LINE__);
-
- $type->name("RegExp");
- return $type;
- }
if ($next->value() eq "Error") {
$self->assertTokenValue($self->getToken(), "Error", __LINE__);
diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestCallbackInterface.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestCallbackInterface.cpp
index 8321a06..06c0e6f 100644
--- a/Source/WebCore/bindings/scripts/test/JS/JSTestCallbackInterface.cpp
+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestCallbackInterface.cpp
@@ -84,10 +84,6 @@
throwTypeError(&state, throwScope);
return { };
}
- if (UNLIKELY(object && object->type() == RegExpObjectType)) {
- throwTypeError(&state, throwScope);
- return { };
- }
TestCallbackInterface::Dictionary result;
JSValue optionalMemberValue = isNullOrUndefined ? jsUndefined() : object->get(&state, Identifier::fromString(&state, "optionalMember"));
if (!optionalMemberValue.isUndefined()) {
diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp
index d2ae546..ffe20c3 100644
--- a/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp
+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp
@@ -46,10 +46,6 @@
throwTypeError(&state, throwScope);
return { };
}
- if (UNLIKELY(object && object->type() == RegExpObjectType)) {
- throwTypeError(&state, throwScope);
- return { };
- }
TestEventConstructor::Init result;
JSValue bubblesValue = isNullOrUndefined ? jsUndefined() : object->get(&state, Identifier::fromString(&state, "bubbles"));
if (!bubblesValue.isUndefined()) {
diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp
index cd0c7eb..dc9cff5 100644
--- a/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp
+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp
@@ -380,10 +380,6 @@
throwTypeError(&state, throwScope);
return { };
}
- if (UNLIKELY(object && object->type() == RegExpObjectType)) {
- throwTypeError(&state, throwScope);
- return { };
- }
TestObj::Dictionary result;
JSValue annotatedTypeInSequenceMemberValue = isNullOrUndefined ? jsUndefined() : object->get(&state, Identifier::fromString(&state, "annotatedTypeInSequenceMember"));
if (!annotatedTypeInSequenceMemberValue.isUndefined()) {
@@ -782,10 +778,6 @@
throwTypeError(&state, throwScope);
return { };
}
- if (UNLIKELY(object && object->type() == RegExpObjectType)) {
- throwTypeError(&state, throwScope);
- return { };
- }
TestObj::DictionaryThatShouldNotTolerateNull result;
JSValue booleanWithoutDefaultValue = isNullOrUndefined ? jsUndefined() : object->get(&state, Identifier::fromString(&state, "booleanWithoutDefault"));
if (!booleanWithoutDefaultValue.isUndefined()) {
@@ -829,10 +821,6 @@
throwTypeError(&state, throwScope);
return { };
}
- if (UNLIKELY(object && object->type() == RegExpObjectType)) {
- throwTypeError(&state, throwScope);
- return { };
- }
TestObj::DictionaryThatShouldTolerateNull result;
JSValue booleanWithoutDefaultValue = isNullOrUndefined ? jsUndefined() : object->get(&state, Identifier::fromString(&state, "booleanWithoutDefault"));
if (!booleanWithoutDefaultValue.isUndefined()) {
@@ -857,10 +845,6 @@
throwTypeError(&state, throwScope);
return { };
}
- if (UNLIKELY(object && object->type() == RegExpObjectType)) {
- throwTypeError(&state, throwScope);
- return { };
- }
AlternateDictionaryName result;
JSValue booleanWithoutDefaultValue = isNullOrUndefined ? jsUndefined() : object->get(&state, Identifier::fromString(&state, "booleanWithoutDefault"));
if (!booleanWithoutDefaultValue.isUndefined()) {
@@ -885,10 +869,6 @@
throwTypeError(&state, throwScope);
return { };
}
- if (UNLIKELY(object && object->type() == RegExpObjectType)) {
- throwTypeError(&state, throwScope);
- return { };
- }
TestObj::ParentDictionary result;
JSValue parentMember1Value = isNullOrUndefined ? jsUndefined() : object->get(&state, Identifier::fromString(&state, "parentMember1"));
if (!parentMember1Value.isUndefined()) {
@@ -913,10 +893,6 @@
throwTypeError(&state, throwScope);
return { };
}
- if (UNLIKELY(object && object->type() == RegExpObjectType)) {
- throwTypeError(&state, throwScope);
- return { };
- }
TestObj::ChildDictionary result;
JSValue parentMember1Value = isNullOrUndefined ? jsUndefined() : object->get(&state, Identifier::fromString(&state, "parentMember1"));
if (!parentMember1Value.isUndefined()) {
@@ -953,10 +929,6 @@
throwTypeError(&state, throwScope);
return { };
}
- if (UNLIKELY(object && object->type() == RegExpObjectType)) {
- throwTypeError(&state, throwScope);
- return { };
- }
TestObj::ConditionalDictionaryA result;
JSValue stringWithoutDefaultValue = isNullOrUndefined ? jsUndefined() : object->get(&state, Identifier::fromString(&state, "stringWithoutDefault"));
if (!stringWithoutDefaultValue.isUndefined()) {
@@ -980,10 +952,6 @@
throwTypeError(&state, throwScope);
return { };
}
- if (UNLIKELY(object && object->type() == RegExpObjectType)) {
- throwTypeError(&state, throwScope);
- return { };
- }
TestObj::ConditionalDictionaryB result;
JSValue stringWithoutDefaultValue = isNullOrUndefined ? jsUndefined() : object->get(&state, Identifier::fromString(&state, "stringWithoutDefault"));
if (!stringWithoutDefaultValue.isUndefined()) {
@@ -1007,10 +975,6 @@
throwTypeError(&state, throwScope);
return { };
}
- if (UNLIKELY(object && object->type() == RegExpObjectType)) {
- throwTypeError(&state, throwScope);
- return { };
- }
TestObj::ConditionalDictionaryC result;
JSValue stringWithoutDefaultValue = isNullOrUndefined ? jsUndefined() : object->get(&state, Identifier::fromString(&state, "stringWithoutDefault"));
if (!stringWithoutDefaultValue.isUndefined()) {
@@ -6807,7 +6771,7 @@
return jsTestObjPrototypeFunctionOverloadedMethod13Body(state, castedThis, throwScope);
if (hasIteratorMethod(*state, distinguishingArg))
return jsTestObjPrototypeFunctionOverloadedMethod7Body(state, castedThis, throwScope);
- if (distinguishingArg.isObject() && asObject(distinguishingArg)->type() != RegExpObjectType)
+ if (distinguishingArg.isObject())
return jsTestObjPrototypeFunctionOverloadedMethod5Body(state, castedThis, throwScope);
if (distinguishingArg.isNumber())
return jsTestObjPrototypeFunctionOverloadedMethod4Body(state, castedThis, throwScope);
diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp
index 936229e..2f538db 100644
--- a/Source/WebCore/bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp
+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp
@@ -49,10 +49,6 @@
throwTypeError(&state, throwScope);
return { };
}
- if (UNLIKELY(object && object->type() == RegExpObjectType)) {
- throwTypeError(&state, throwScope);
- return { };
- }
TestPromiseRejectionEvent::Init result;
JSValue bubblesValue = isNullOrUndefined ? jsUndefined() : object->get(&state, Identifier::fromString(&state, "bubbles"));
if (!bubblesValue.isUndefined()) {
diff --git a/Source/WebCore/bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp
index 13a78e5..7c816de 100644
--- a/Source/WebCore/bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp
+++ b/Source/WebCore/bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp
@@ -46,10 +46,6 @@
throwTypeError(&state, throwScope);
return { };
}
- if (UNLIKELY(object && object->type() == RegExpObjectType)) {
- throwTypeError(&state, throwScope);
- return { };
- }
DictionaryImplName result;
JSValue boolMemberValue = isNullOrUndefined ? jsUndefined() : object->get(&state, Identifier::fromString(&state, "boolMember"));
if (!boolMemberValue.isUndefined()) {