OLD | NEW |
---|---|
1 # Copyright (C) 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org> | 1 # Copyright (C) 2005, 2006 Nikolas Zimmermann <zimmermann@kde.org> |
2 # Copyright (C) 2006 Anders Carlsson <andersca@mac.com> | 2 # Copyright (C) 2006 Anders Carlsson <andersca@mac.com> |
3 # Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com> | 3 # Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com> |
4 # Copyright (C) 2006 Alexey Proskuryakov <ap@webkit.org> | 4 # Copyright (C) 2006 Alexey Proskuryakov <ap@webkit.org> |
5 # Copyright (C) 2006 Apple Computer, Inc. | 5 # Copyright (C) 2006 Apple Computer, Inc. |
6 # Copyright (C) 2007, 2008, 2009, 2012 Google Inc. | 6 # Copyright (C) 2007, 2008, 2009, 2012 Google Inc. |
7 # Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au> | 7 # Copyright (C) 2009 Cameron McCormack <cam@mcc.id.au> |
8 # Copyright (C) Research In Motion Limited 2010. All rights reserved. | 8 # Copyright (C) Research In Motion Limited 2010. All rights reserved. |
9 # Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) | 9 # Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) |
10 # Copyright (C) 2012 Ericsson AB. All rights reserved. | 10 # Copyright (C) 2012 Ericsson AB. All rights reserved. |
(...skipping 1486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1497 } | 1497 } |
1498 $code .= <<END; | 1498 $code .= <<END; |
1499 ${implClassName}* imp = ${v8ClassName}::toNative(holder); | 1499 ${implClassName}* imp = ${v8ClassName}::toNative(holder); |
1500 END | 1500 END |
1501 } else { | 1501 } else { |
1502 my $reflect = $attribute->extendedAttributes->{"Reflect"}; | 1502 my $reflect = $attribute->extendedAttributes->{"Reflect"}; |
1503 my $url = $attribute->extendedAttributes->{"URL"}; | 1503 my $url = $attribute->extendedAttributes->{"URL"}; |
1504 if ($reflect && !$url && InheritsInterface($interface, "Node") && $attrT ype eq "DOMString") { | 1504 if ($reflect && !$url && InheritsInterface($interface, "Node") && $attrT ype eq "DOMString") { |
1505 # Generate super-compact call for regular attribute getter: | 1505 # Generate super-compact call for regular attribute getter: |
1506 my ($functionName, @arguments) = GetterExpression($interfaceName, $a ttribute); | 1506 my ($functionName, @arguments) = GetterExpression($interfaceName, $a ttribute); |
1507 my $getterExpression = "imp->${functionName}(" . join(", ", @argumen ts) . ")"; | |
1507 $code .= " Element* imp = V8Element::toNative(info.Holder());\n"; | 1508 $code .= " Element* imp = V8Element::toNative(info.Holder());\n"; |
1508 $code .= " v8SetReturnValueString(info, imp->${functionName}(" . join(", ", @arguments) . "), info.GetIsolate());\n"; | 1509 if ($attribute->extendedAttributes->{"ReflectOnly"}) { |
1510 $code .= " String resultValue = ${getterExpression};\n"; | |
1511 $code .= GenerateReflectOnlyCheck($attribute->extendedAttributes ->{"ReflectOnly"}, " "); | |
1512 $getterExpression = "resultValue"; | |
1513 } | |
1514 $code .= " v8SetReturnValueString(info, ${getterExpression}, info .GetIsolate());\n"; | |
1509 $code .= "}\n"; | 1515 $code .= "}\n"; |
1510 $code .= "#endif // ${conditionalString}\n" if $conditionalString; | 1516 $code .= "#endif // ${conditionalString}\n" if $conditionalString; |
1511 $code .= "\n"; | 1517 $code .= "\n"; |
1512 $implementation{nameSpaceInternal}->add($code); | 1518 $implementation{nameSpaceInternal}->add($code); |
1513 return; | 1519 return; |
1514 # Skip the rest of the function! | 1520 # Skip the rest of the function! |
1515 } | 1521 } |
1516 my $imp = 0; | 1522 my $imp = 0; |
1517 if ($attrCached) { | 1523 if ($attrCached) { |
1518 $imp = 1; | 1524 $imp = 1; |
(...skipping 4170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5689 return "${indent}v8SetReturnValue(${getCallbackInfo}, v8DateOrNull($nati veValue, $getIsolate));" if $isReturnValue; | 5695 return "${indent}v8SetReturnValue(${getCallbackInfo}, v8DateOrNull($nati veValue, $getIsolate));" if $isReturnValue; |
5690 return "$indent$receiver v8DateOrNull($nativeValue, $getIsolate);" | 5696 return "$indent$receiver v8DateOrNull($nativeValue, $getIsolate);" |
5691 } | 5697 } |
5692 | 5698 |
5693 # long long and unsigned long long are not representable in ECMAScript. | 5699 # long long and unsigned long long are not representable in ECMAScript. |
5694 if ($type eq "long long" or $type eq "unsigned long long" or $type eq "DOMTi meStamp") { | 5700 if ($type eq "long long" or $type eq "unsigned long long" or $type eq "DOMTi meStamp") { |
5695 return "${indent}v8SetReturnValue(${getCallbackInfo}, static_cast<double >($nativeValue));" if $isReturnValue; | 5701 return "${indent}v8SetReturnValue(${getCallbackInfo}, static_cast<double >($nativeValue));" if $isReturnValue; |
5696 return "$indent$receiver v8::Number::New($getIsolate, static_cast<double >($nativeValue));"; | 5702 return "$indent$receiver v8::Number::New($getIsolate, static_cast<double >($nativeValue));"; |
5697 } | 5703 } |
5698 | 5704 |
5705 if ($type eq "DOMString" && $extendedAttributes->{"ReflectOnly"}) { | |
5706 my $code = "${indent}String resultValue = ${nativeValue};\n"; | |
5707 $code .= GenerateReflectOnlyCheck($extendedAttributes->{"ReflectOnly"}, ${indent}); | |
5708 return "${code}${indent}v8SetReturnValueString(${getCallbackInfo}, resul tValue, $getIsolate);" if $isReturnValue; | |
5709 return "${code}$indent$receiver resultValue"; | |
5710 } | |
5711 | |
5699 my $conv = $extendedAttributes->{"TreatReturnedNullStringAs"}; | 5712 my $conv = $extendedAttributes->{"TreatReturnedNullStringAs"}; |
5700 if (($type eq "DOMString" || IsEnumType($type)) && $isReturnValue) { | 5713 if (($type eq "DOMString" || IsEnumType($type)) && $isReturnValue) { |
5701 my $functionSuffix = ""; | 5714 my $functionSuffix = ""; |
5702 if (defined $conv) { | 5715 if (defined $conv) { |
5703 if ($conv eq "Null") { | 5716 if ($conv eq "Null") { |
5704 $functionSuffix = "OrNull"; | 5717 $functionSuffix = "OrNull"; |
5705 } elsif ($conv eq "Undefined") { | 5718 } elsif ($conv eq "Undefined") { |
5706 $functionSuffix = "OrUndefined"; | 5719 $functionSuffix = "OrUndefined"; |
5707 } else { | 5720 } else { |
5708 die "Unknown value for TreatReturnedNullStringAs extended attrib ute"; | 5721 die "Unknown value for TreatReturnedNullStringAs extended attrib ute"; |
(...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6236 my $implementedByImplName = GetImplNameFromImplementedBy($consta nt->extendedAttributes->{"ImplementedBy"}); | 6249 my $implementedByImplName = GetImplNameFromImplementedBy($consta nt->extendedAttributes->{"ImplementedBy"}); |
6237 push(@checks, " COMPILE_ASSERT($value == " . $implementedByIm plName . "::$name, TheValueOf${implClassName}_${name}DoesntMatchWithImplementati on);\n"); | 6250 push(@checks, " COMPILE_ASSERT($value == " . $implementedByIm plName . "::$name, TheValueOf${implClassName}_${name}DoesntMatchWithImplementati on);\n"); |
6238 } else { | 6251 } else { |
6239 push(@checks, " COMPILE_ASSERT($value == ${implClassName}::$n ame, TheValueOf${implClassName}_${name}DoesntMatchWithImplementation);\n"); | 6252 push(@checks, " COMPILE_ASSERT($value == ${implClassName}::$n ame, TheValueOf${implClassName}_${name}DoesntMatchWithImplementation);\n"); |
6240 } | 6253 } |
6241 } | 6254 } |
6242 } | 6255 } |
6243 return @checks; | 6256 return @checks; |
6244 } | 6257 } |
6245 | 6258 |
6259 sub GenerateReflectOnlyCheck | |
6260 { | |
6261 my $knownValueString = shift; | |
6262 my $indent = shift; | |
6263 | |
6264 my @knownValues = split(quotemeta("|"), $knownValueString); | |
6265 | |
6266 # Attribute is limited to only known values: check that the attribute | |
6267 # value is one of those..and if not, set it to the empty string. | |
6268 # ( http://www.whatwg.org/specs/web-apps/current-work/#limited-to-only-known -values ) | |
6269 # | |
6270 AddToImplIncludes("wtf/text/WTFString.h"); | |
haraken
2014/01/06 13:13:02
This won't be needed.
sof
2014/01/06 13:45:33
Done.
| |
6271 my @normalizeAttributeCode = (); | |
6272 my $code = ""; | |
6273 my $prefix = ""; | |
6274 foreach my $knownValue (@knownValues) { | |
6275 push(@normalizeAttributeCode, "${indent}${prefix}if (equalIgnoringCase(r esultValue, \"$knownValue\")) {"); | |
6276 push(@normalizeAttributeCode, "${indent} resultValue = \"$knownVa lue\";"); | |
6277 if (!$prefix) { | |
6278 $prefix = " } else "; | |
6279 } | |
6280 } | |
6281 my $normalizeAttributeValue = join("\n", @normalizeAttributeCode); | |
6282 $code .= <<END; | |
6283 ${indent}if (!resultValue.isEmpty()) { | |
haraken
2014/01/06 13:13:02
This empty check won't be needed.
sof
2014/01/06 13:15:56
It is useful to check for early though (rather tha
sof
2014/01/06 13:45:33
Done.
| |
6284 ${indent}${normalizeAttributeValue} | |
6285 ${indent} } else { | |
6286 ${indent} resultValue = ""; | |
6287 ${indent} } | |
6288 ${indent}} | |
6289 END | |
6290 return "${code}"; | |
6291 } | |
6292 | |
6246 sub ExtendedAttributeContains | 6293 sub ExtendedAttributeContains |
6247 { | 6294 { |
6248 my $extendedAttributeValue = shift; | 6295 my $extendedAttributeValue = shift; |
6249 return 0 unless $extendedAttributeValue; | 6296 return 0 unless $extendedAttributeValue; |
6250 my $keyword = shift; | 6297 my $keyword = shift; |
6251 | 6298 |
6252 my @extendedAttributeValues = split /\s*(\&|\|)\s*/, $extendedAttributeValue ; | 6299 my @extendedAttributeValues = split /\s*(\&|\|)\s*/, $extendedAttributeValue ; |
6253 return grep { $_ eq $keyword } @extendedAttributeValues; | 6300 return grep { $_ eq $keyword } @extendedAttributeValues; |
6254 } | 6301 } |
6255 | 6302 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6307 | 6354 |
6308 foreach my $parameter (@{$function->parameters}) { | 6355 foreach my $parameter (@{$function->parameters}) { |
6309 if ($parameter->type eq "SerializedScriptValue") { | 6356 if ($parameter->type eq "SerializedScriptValue") { |
6310 return 1; | 6357 return 1; |
6311 } | 6358 } |
6312 } | 6359 } |
6313 return 0; | 6360 return 0; |
6314 } | 6361 } |
6315 | 6362 |
6316 1; | 6363 1; |
OLD | NEW |