Chromium Code Reviews| Index: Source/bindings/scripts/code_generator_v8.pm |
| diff --git a/Source/bindings/scripts/code_generator_v8.pm b/Source/bindings/scripts/code_generator_v8.pm |
| index 671aae9aac94b806cbf22f93d6253c6a150f9abd..0a49403bd5e574926105dc15f8b2c91c316365f7 100644 |
| --- a/Source/bindings/scripts/code_generator_v8.pm |
| +++ b/Source/bindings/scripts/code_generator_v8.pm |
| @@ -1508,7 +1508,7 @@ END |
| $code .= " Element* imp = V8Element::toNative(info.Holder());\n"; |
| if ($attribute->extendedAttributes->{"ReflectOnly"}) { |
| $code .= " String resultValue = ${getterExpression};\n"; |
| - $code .= GenerateReflectOnlyCheck($attribute->extendedAttributes->{"ReflectOnly"}, " "); |
| + $code .= GenerateReflectOnlyCheck($attribute->extendedAttributes, " "); |
| $getterExpression = "resultValue"; |
| } |
| $code .= " v8SetReturnValueString(info, ${getterExpression}, info.GetIsolate());\n"; |
| @@ -5704,7 +5704,7 @@ sub NativeToJSValue |
| if ($type eq "DOMString" && $extendedAttributes->{"ReflectOnly"}) { |
| my $code = "${indent}String resultValue = ${nativeValue};\n"; |
| - $code .= GenerateReflectOnlyCheck($extendedAttributes->{"ReflectOnly"}, ${indent}); |
| + $code .= GenerateReflectOnlyCheck($extendedAttributes, ${indent}); |
| return "${code}${indent}v8SetReturnValueString(${getCallbackInfo}, resultValue, $getIsolate);" if $isReturnValue; |
| return "${code}$indent$receiver resultValue"; |
| } |
| @@ -6258,11 +6258,32 @@ sub GenerateCompileTimeCheckForEnumsIfNeeded |
| sub GenerateReflectOnlyCheck |
| { |
| - my $knownValueString = shift; |
| + my $extendedAttributes = shift; |
| my $indent = shift; |
| + my $knownValueString = $extendedAttributes->{"ReflectOnly"}; |
| my @knownValues = split(quotemeta("|"), $knownValueString); |
| + my $missingValueDefault = $extendedAttributes->{"ReflectMissing"}; |
| + if ($missingValueDefault) { |
| + if (!($missingValueDefault ~~ @knownValues)) { |
|
haraken
2014/01/07 10:48:19
Nit: I'd prefer not using ~~, since it won't be po
sof
2014/01/07 11:40:52
Thanks, switched to the grep {..} idiom used elsew
|
| + die "Missing attribute value is not a known value " . $missingValueDefault; |
| + } |
| + $missingValueDefault = "resultValue = \"${missingValueDefault}\""; |
| + } else { |
| + $missingValueDefault = ""; |
| + } |
| + |
| + my $invalidValueDefault = $extendedAttributes->{"ReflectInvalid"}; |
| + if ($invalidValueDefault) { |
| + if (!($invalidValueDefault ~~ @knownValues)) { |
| + die "Invalid attribute value is not a known value " . $invalidValueDefault; |
| + } |
| + $invalidValueDefault = "\"${invalidValueDefault}\""; |
| + } else { |
| + $invalidValueDefault = "\"\""; |
| + } |
| + |
| # Attribute is limited to only known values: check that the attribute |
| # value is one of those..and if not, set it to the empty string. |
| # ( http://www.whatwg.org/specs/web-apps/current-work/#limited-to-only-known-values ) |
| @@ -6276,10 +6297,10 @@ sub GenerateReflectOnlyCheck |
| my $normalizeAttributeValue = join("\n", @normalizeAttributeCode); |
| $code .= <<END; |
| ${indent}if (resultValue.isEmpty()) { |
| -${indent} ; |
| +${indent} $missingValueDefault; |
| ${normalizeAttributeValue} |
| ${indent}} else { |
| -${indent} resultValue = ""; |
| +${indent} resultValue = $invalidValueDefault; |
| ${indent}} |
| END |
| return "${code}"; |