Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Side by Side Diff: Source/bindings/scripts/code_generator_v8.pm

Issue 105693002: Generate a bit less code to handle failed arity checks. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 2236 matching lines...) Expand 10 before | Expand all | Expand 10 after
2247 # values passed in non-primitive argument slots. When more than a single 2247 # values passed in non-primitive argument slots. When more than a single
2248 # overload is applicable, precedence is given according to the order of 2248 # overload is applicable, precedence is given according to the order of
2249 # declaration in the IDL. 2249 # declaration in the IDL.
2250 2250
2251 my $name = $function->name; 2251 my $name = $function->name;
2252 my $interfaceName = $interface->name; 2252 my $interfaceName = $interface->name;
2253 my $implClassName = GetImplName($interface); 2253 my $implClassName = GetImplName($interface);
2254 2254
2255 my $conditionalString = GenerateConditionalString($function); 2255 my $conditionalString = GenerateConditionalString($function);
2256 my $leastNumMandatoryParams = 255; 2256 my $leastNumMandatoryParams = 255;
2257 my $code = ""; 2257
2258 $code .= "#if ${conditionalString}\n\n" if $conditionalString; 2258 my $hasExceptionState = 0;
2259 $code .= <<END; 2259 my $header = "";
2260 $header .= "#if ${conditionalString}\n\n" if $conditionalString;
2261 $header .= <<END;
2260 static void ${name}Method${forMainWorldSuffix}(const v8::FunctionCallbackInfo<v8 ::Value>& info) 2262 static void ${name}Method${forMainWorldSuffix}(const v8::FunctionCallbackInfo<v8 ::Value>& info)
2261 { 2263 {
2262 END 2264 END
2265 my $code = "";
2263 $code .= GenerateFeatureObservation($function->extendedAttributes->{"Measure As"}); 2266 $code .= GenerateFeatureObservation($function->extendedAttributes->{"Measure As"});
2264 $code .= GenerateDeprecationNotification($function->extendedAttributes->{"De precateAs"}); 2267 $code .= GenerateDeprecationNotification($function->extendedAttributes->{"De precateAs"});
2265 2268
2266 foreach my $overload (@{$function->{overloads}}) { 2269 foreach my $overload (@{$function->{overloads}}) {
2267 my ($numMandatoryParams, $parametersCheck) = GenerateFunctionParametersC heck($overload); 2270 my ($numMandatoryParams, $parametersCheck) = GenerateFunctionParametersC heck($overload);
2268 $leastNumMandatoryParams = $numMandatoryParams if ($numMandatoryParams < $leastNumMandatoryParams); 2271 $leastNumMandatoryParams = $numMandatoryParams if ($numMandatoryParams < $leastNumMandatoryParams);
2269 $code .= " if ($parametersCheck) {\n"; 2272 $code .= " if ($parametersCheck) {\n";
2270 my $overloadedIndexString = $overload->{overloadIndex}; 2273 my $overloadedIndexString = $overload->{overloadIndex};
2271 $code .= " ${name}${overloadedIndexString}Method${forMainWorldSuf fix}(info);\n"; 2274 $code .= " ${name}${overloadedIndexString}Method${forMainWorldSuf fix}(info);\n";
2272 $code .= " return;\n"; 2275 $code .= " return;\n";
2273 $code .= " }\n"; 2276 $code .= " }\n";
2274 } 2277 }
2275 if ($leastNumMandatoryParams >= 1) { 2278 if ($leastNumMandatoryParams >= 1) {
2279 if (!$hasExceptionState) {
2280 AddToImplIncludes("bindings/v8/ExceptionMessages.h");
2281 AddToImplIncludes("bindings/v8/ExceptionState.h");
2282 $header .= " ExceptionState exceptionState(ExceptionState::Execut ionContext, \"${name}\", \"${interfaceName}\", info.Holder(), info.GetIsolate()) ;\n";
2283 $hasExceptionState = 1;
2284 }
2276 $code .= " if (UNLIKELY(info.Length() < $leastNumMandatoryParams)) {\ n"; 2285 $code .= " if (UNLIKELY(info.Length() < $leastNumMandatoryParams)) {\ n";
2277 $code .= " throwTypeError(ExceptionMessages::failedToExecute(\"$n ame\", \"$interfaceName\", ExceptionMessages::notEnoughArguments($leastNumMandat oryParams, info.Length())), info.GetIsolate());\n"; 2286 $code .= " exceptionState.throwTypeError(ExceptionMessages::notEn oughArguments($leastNumMandatoryParams, info.Length()));\n";
2287 $code .= " exceptionState.throwIfNeeded();\n";
2278 $code .= " return;\n"; 2288 $code .= " return;\n";
2279 $code .= " }\n"; 2289 $code .= " }\n";
2280 } 2290 }
2281 $code .= <<END; 2291 if ($hasExceptionState) {
2282 throwTypeError(ExceptionMessages::failedToExecute(\"$name\", \"$interfaceNam e\", \"No function was found that matched the signature provided.\"), info.GetIs olate()); 2292 $code .= <<END;
2293 exceptionState.throwTypeError(\"No function was found that matched the signa ture provided.\");
2294 exceptionState.throwIfNeeded();
2283 END 2295 END
2296 } else {
2297 AddToImplIncludes("bindings/v8/ExceptionMessages.h");
2298 $code .=<<END;
2299 throwTypeError(ExceptionMessages::failedToExecute(\"${name}\", \"${interface Name}\", \"No function was found that matched the signature provided.\"), info.G etIsolate());
2300 END
2301 }
2284 $code .= "}\n\n"; 2302 $code .= "}\n\n";
2285 $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; 2303 $code .= "#endif // ${conditionalString}\n\n" if $conditionalString;
2286 $implementation{nameSpaceInternal}->add($code); 2304 $implementation{nameSpaceInternal}->add($header . $code);
2287 } 2305 }
2288 2306
2289 sub GenerateFunctionCallback 2307 sub GenerateFunctionCallback
2290 { 2308 {
2291 my $function = shift; 2309 my $function = shift;
2292 my $interface = shift; 2310 my $interface = shift;
2293 my $forMainWorldSuffix = shift; 2311 my $forMainWorldSuffix = shift;
2294 2312
2295 my $implClassName = GetImplName($interface); 2313 my $implClassName = GetImplName($interface);
2296 my $v8ClassName = GetV8ClassName($interface); 2314 my $v8ClassName = GetV8ClassName($interface);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
2355 $code .= "{\n"; 2373 $code .= "{\n";
2356 2374
2357 # We throw exceptions using 'ExceptionState' if the function explicitly clai ms that exceptions 2375 # We throw exceptions using 'ExceptionState' if the function explicitly clai ms that exceptions
2358 # may be raised, or for event listeners, or for security-checking, and for w eird SVG stuff. 2376 # may be raised, or for event listeners, or for security-checking, and for w eird SVG stuff.
2359 my $isEventListener = $name eq "addEventListener" || $name eq "removeEventLi stener"; 2377 my $isEventListener = $name eq "addEventListener" || $name eq "removeEventLi stener";
2360 my $isSecurityCheckNecessary = $interface->extendedAttributes->{"CheckSecuri ty"} && !$function->extendedAttributes->{"DoNotCheckSecurity"}; 2378 my $isSecurityCheckNecessary = $interface->extendedAttributes->{"CheckSecuri ty"} && !$function->extendedAttributes->{"DoNotCheckSecurity"};
2361 my $raisesExceptions = $function->extendedAttributes->{"RaisesException"}; 2379 my $raisesExceptions = $function->extendedAttributes->{"RaisesException"};
2362 my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGProperty Types($interfaceName); 2380 my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGProperty Types($interfaceName);
2363 my $isNonListSVGType = $svgNativeType && !($interfaceName =~ /List$/); 2381 my $isNonListSVGType = $svgNativeType && !($interfaceName =~ /List$/);
2364 2382
2383 my $hasExceptionState = 0;
2365 if ($raisesExceptions || $isEventListener || $isSecurityCheckNecessary || $i sNonListSVGType) { 2384 if ($raisesExceptions || $isEventListener || $isSecurityCheckNecessary || $i sNonListSVGType) {
2366 AddToImplIncludes("bindings/v8/ExceptionState.h"); 2385 AddToImplIncludes("bindings/v8/ExceptionState.h");
2367 $code .= " ExceptionState exceptionState(ExceptionState::ExecutionCon text, \"${unoverloadedName}\", \"${interfaceName}\", info.Holder(), info.GetIsol ate());\n"; 2386 $code .= " ExceptionState exceptionState(ExceptionState::ExecutionCon text, \"${unoverloadedName}\", \"${interfaceName}\", info.Holder(), info.GetIsol ate());\n";
2387 $hasExceptionState = 1;
2368 } 2388 }
2369 2389
2370 if ($isEventListener) { 2390 if ($isEventListener) {
2371 my $lookupType = ($name eq "addEventListener") ? "OrCreate" : "Only"; 2391 my $lookupType = ($name eq "addEventListener") ? "OrCreate" : "Only";
2372 my $passRefPtrHandling = ($name eq "addEventListener") ? "" : ".get()"; 2392 my $passRefPtrHandling = ($name eq "addEventListener") ? "" : ".get()";
2373 my $hiddenDependencyAction = ($name eq "addEventListener") ? "create" : "remove"; 2393 my $hiddenDependencyAction = ($name eq "addEventListener") ? "create" : "remove";
2374 2394
2375 AddToImplIncludes("bindings/v8/BindingSecurity.h"); 2395 AddToImplIncludes("bindings/v8/BindingSecurity.h");
2376 AddToImplIncludes("bindings/v8/V8EventListenerList.h"); 2396 AddToImplIncludes("bindings/v8/V8EventListenerList.h");
2377 AddToImplIncludes("core/frame/DOMWindow.h"); 2397 AddToImplIncludes("core/frame/DOMWindow.h");
(...skipping 15 matching lines...) Expand all
2393 ${hiddenDependencyAction}HiddenDependency(info.Holder(), info[1], ${ v8ClassName}::eventListenerCacheIndex, info.GetIsolate()); 2413 ${hiddenDependencyAction}HiddenDependency(info.Holder(), info[1], ${ v8ClassName}::eventListenerCacheIndex, info.GetIsolate());
2394 } 2414 }
2395 } 2415 }
2396 END 2416 END
2397 $code .= "#endif // ${conditionalString}\n" if $conditionalString; 2417 $code .= "#endif // ${conditionalString}\n" if $conditionalString;
2398 $code .= "\n"; 2418 $code .= "\n";
2399 $implementation{nameSpaceInternal}->add($code); 2419 $implementation{nameSpaceInternal}->add($code);
2400 return; 2420 return;
2401 } 2421 }
2402 2422
2403 $code .= GenerateArgumentsCountCheck($function, $interface); 2423 $code .= GenerateArgumentsCountCheck($function, $interface, $hasExceptionSta te);
2404 2424
2405 if ($svgNativeType) { 2425 if ($svgNativeType) {
2406 my $nativeClassName = GetNativeType($interfaceName); 2426 my $nativeClassName = GetNativeType($interfaceName);
2407 if ($interfaceName =~ /List$/) { 2427 if ($interfaceName =~ /List$/) {
2408 $code .= " $nativeClassName imp = ${v8ClassName}::toNative(info.H older());\n"; 2428 $code .= " $nativeClassName imp = ${v8ClassName}::toNative(info.H older());\n";
2409 } else { 2429 } else {
2410 AddToImplIncludes("core/dom/ExceptionCode.h"); 2430 AddToImplIncludes("core/dom/ExceptionCode.h");
2411 $code .= " $nativeClassName wrapper = ${v8ClassName}::toNative(in fo.Holder());\n"; 2431 $code .= " $nativeClassName wrapper = ${v8ClassName}::toNative(in fo.Holder());\n";
2412 $code .= " if (wrapper->isReadOnly()) {\n"; 2432 $code .= " if (wrapper->isReadOnly()) {\n";
2413 $code .= " exceptionState.throwDOMException(NoModificationAll owedError, \"The object is read-only.\");\n"; 2433 $code .= " exceptionState.throwDOMException(NoModificationAll owedError, \"The object is read-only.\");\n";
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
2493 if (ExtendedAttributeContains($callWith, "FirstWindow")) { 2513 if (ExtendedAttributeContains($callWith, "FirstWindow")) {
2494 push(@callWithArgs, "firstDOMWindow()"); 2514 push(@callWithArgs, "firstDOMWindow()");
2495 } 2515 }
2496 return ([@callWithArgs], $code); 2516 return ([@callWithArgs], $code);
2497 } 2517 }
2498 2518
2499 sub GenerateArgumentsCountCheck 2519 sub GenerateArgumentsCountCheck
2500 { 2520 {
2501 my $function = shift; 2521 my $function = shift;
2502 my $interface = shift; 2522 my $interface = shift;
2523 my $hasExceptionState = shift;
2503 2524
2504 my $functionName = $function->name; 2525 my $functionName = $function->name;
2505 my $interfaceName = $interface->name; 2526 my $interfaceName = $interface->name;
2506 my $implClassName = GetImplName($interface); 2527 my $implClassName = GetImplName($interface);
2507 2528
2508 my $numMandatoryParams = 0; 2529 my $numMandatoryParams = 0;
2509 my $allowNonOptional = 1; 2530 my $allowNonOptional = 1;
2510 foreach my $param (@{$function->parameters}) { 2531 foreach my $param (@{$function->parameters}) {
2511 if ($param->isOptional or $param->isVariadic) { 2532 if ($param->isOptional or $param->isVariadic) {
2512 $allowNonOptional = 0; 2533 $allowNonOptional = 0;
2513 } else { 2534 } else {
2514 die "An argument must not be declared to be optional unless all subs equent arguments to the operation are also optional." if !$allowNonOptional; 2535 die "An argument must not be declared to be optional unless all subs equent arguments to the operation are also optional." if !$allowNonOptional;
2515 $numMandatoryParams++; 2536 $numMandatoryParams++;
2516 } 2537 }
2517 } 2538 }
2518 2539
2519 my $argumentsCountCheckString = ""; 2540 my $argumentsCountCheckString = "";
2520 if ($numMandatoryParams >= 1) { 2541 if ($numMandatoryParams >= 1) {
2521 $argumentsCountCheckString .= " if (UNLIKELY(info.Length() < $numMand atoryParams)) {\n"; 2542 $argumentsCountCheckString .= " if (UNLIKELY(info.Length() < $numMand atoryParams)) {\n";
2522 $argumentsCountCheckString .= " throwTypeError(ExceptionMessages: :failedToExecute(\"$functionName\", \"$interfaceName\", ExceptionMessages::notEn oughArguments($numMandatoryParams, info.Length())), info.GetIsolate());\n"; 2543 if ($hasExceptionState) {
2544 $argumentsCountCheckString .= " exceptionState.throwTypeError (ExceptionMessages::notEnoughArguments($numMandatoryParams, info.Length()));\n";
2545 $argumentsCountCheckString .= " exceptionState.throwIfNeeded( );\n";
2546 } else {
2547 $argumentsCountCheckString .= " throwTypeError(ExceptionMessa ges::failedToExecute(\"$functionName\", \"$interfaceName\", ExceptionMessages::n otEnoughArguments($numMandatoryParams, info.Length())), info.GetIsolate());\n";
2548 }
2523 $argumentsCountCheckString .= " return;\n"; 2549 $argumentsCountCheckString .= " return;\n";
2524 $argumentsCountCheckString .= " }\n"; 2550 $argumentsCountCheckString .= " }\n";
2525 } 2551 }
2526 return $argumentsCountCheckString; 2552 return $argumentsCountCheckString;
2527 } 2553 }
2528 2554
2529 sub GenerateParametersCheck 2555 sub GenerateParametersCheck
2530 { 2556 {
2531 my $function = shift; 2557 my $function = shift;
2532 my $interface = shift; 2558 my $interface = shift;
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
2681 } 2707 }
2682 return ($parameterCheckString, $paramIndex, %replacements); 2708 return ($parameterCheckString, $paramIndex, %replacements);
2683 } 2709 }
2684 2710
2685 sub GenerateOverloadedConstructorCallback 2711 sub GenerateOverloadedConstructorCallback
2686 { 2712 {
2687 my $interface = shift; 2713 my $interface = shift;
2688 my $interfaceName = $interface->name; 2714 my $interfaceName = $interface->name;
2689 my $implClassName = GetImplName($interface); 2715 my $implClassName = GetImplName($interface);
2690 2716
2691 my $code = ""; 2717 my $hasExceptionState = 0;
2692 $code .= <<END; 2718 my $header = "";
2719 $header .= <<END;
2693 static void constructor(const v8::FunctionCallbackInfo<v8::Value>& info) 2720 static void constructor(const v8::FunctionCallbackInfo<v8::Value>& info)
2694 { 2721 {
2695 END 2722 END
2723 my $code = "";
2696 my $leastNumMandatoryParams = 255; 2724 my $leastNumMandatoryParams = 255;
2697 foreach my $constructor (@{$interface->constructors}) { 2725 foreach my $constructor (@{$interface->constructors}) {
2698 my $name = "constructor" . $constructor->overloadedIndex; 2726 my $name = "constructor" . $constructor->overloadedIndex;
2699 my ($numMandatoryParams, $parametersCheck) = GenerateFunctionParametersC heck($constructor); 2727 my ($numMandatoryParams, $parametersCheck) = GenerateFunctionParametersC heck($constructor);
2700 $leastNumMandatoryParams = $numMandatoryParams if ($numMandatoryParams < $leastNumMandatoryParams); 2728 $leastNumMandatoryParams = $numMandatoryParams if ($numMandatoryParams < $leastNumMandatoryParams);
2701 $code .= " if ($parametersCheck) {\n"; 2729 $code .= " if ($parametersCheck) {\n";
2702 $code .= " ${implClassName}V8Internal::${name}(info);\n"; 2730 $code .= " ${implClassName}V8Internal::${name}(info);\n";
2703 $code .= " return;\n"; 2731 $code .= " return;\n";
2704 $code .= " }\n"; 2732 $code .= " }\n";
2705 } 2733 }
2706 if ($leastNumMandatoryParams >= 1) { 2734 if ($leastNumMandatoryParams >= 1) {
2735 if (!$hasExceptionState) {
2736 AddToImplIncludes("bindings/v8/ExceptionMessages.h");
2737 AddToImplIncludes("bindings/v8/ExceptionState.h");
2738 $header .= " ExceptionState exceptionState(ExceptionState::Constr uctionContext, \"${interfaceName}\", info.Holder(), info.GetIsolate());\n";
2739 $hasExceptionState = 1;
2740 }
2707 $code .= " if (UNLIKELY(info.Length() < $leastNumMandatoryParams)) {\ n"; 2741 $code .= " if (UNLIKELY(info.Length() < $leastNumMandatoryParams)) {\ n";
2708 2742 $code .= " exceptionState.throwTypeError(ExceptionMessages::notEn oughArguments($leastNumMandatoryParams, info.Length()));\n";
2709 $code .= " throwTypeError(ExceptionMessages::failedToConstruct(\" $interfaceName\", ExceptionMessages::notEnoughArguments($leastNumMandatoryParams , info.Length())), info.GetIsolate());\n"; 2743 $code .= " exceptionState.throwIfNeeded();\n";
2710 $code .= " return;\n"; 2744 $code .= " return;\n";
2711 $code .= " }\n"; 2745 $code .= " }\n";
2712 } 2746 }
2713 $code .= <<END; 2747 if ($hasExceptionState) {
2714 throwTypeError(ExceptionMessages::failedToConstruct(\"$interfaceName\", \"No matching constructor signature.\"), info.GetIsolate()); 2748 $code .= <<END;
2715 return; 2749 exceptionState.throwTypeError(\"No matching constructor signature.\");
2750 exceptionState.throwIfNeeded();
2716 END 2751 END
2752 } else {
2753 AddToImplIncludes("bindings/v8/ExceptionMessages.h");
2754 $code .= <<END;
2755 throwTypeError(ExceptionMessages::failedToConstruct(\"${interfaceName}\", \" No matching constructor signature.\"), info.GetIsolate());
2756 END
2757 }
2717 $code .= "}\n\n"; 2758 $code .= "}\n\n";
2718 $implementation{nameSpaceInternal}->add($code); 2759 $implementation{nameSpaceInternal}->add($header . $code);
2719 } 2760 }
2720 2761
2721 sub GenerateSingleConstructorCallback 2762 sub GenerateSingleConstructorCallback
2722 { 2763 {
2723 my $interface = shift; 2764 my $interface = shift;
2724 my $function = shift; 2765 my $function = shift;
2725 2766
2726 my $implClassName = GetImplName($interface); 2767 my $implClassName = GetImplName($interface);
2727 my $v8ClassName = GetV8ClassName($interface); 2768 my $v8ClassName = GetV8ClassName($interface);
2728 my $overloadedIndexString = ""; 2769 my $overloadedIndexString = "";
2729 if ($function->overloadedIndex > 0) { 2770 if ($function->overloadedIndex > 0) {
2730 $overloadedIndexString .= $function->overloadedIndex; 2771 $overloadedIndexString .= $function->overloadedIndex;
2731 } 2772 }
2732 2773
2733 my $constructorRaisesException = $interface->extendedAttributes->{"RaisesExc eption"} && $interface->extendedAttributes->{"RaisesException"} eq "Constructor" ; 2774 my $constructorRaisesException = $interface->extendedAttributes->{"RaisesExc eption"} && $interface->extendedAttributes->{"RaisesException"} eq "Constructor" ;
2734 my $raisesExceptions = $function->extendedAttributes->{"RaisesException"} || $constructorRaisesException; 2775 my $raisesExceptions = $function->extendedAttributes->{"RaisesException"} || $constructorRaisesException;
2735 2776
2736 my @beforeArgumentList; 2777 my @beforeArgumentList;
2737 my @afterArgumentList; 2778 my @afterArgumentList;
2738 my $code = ""; 2779 my $code = "";
2739 $code .= <<END; 2780 $code .= <<END;
2740 static void constructor${overloadedIndexString}(const v8::FunctionCallbackInfo<v 8::Value>& info) 2781 static void constructor${overloadedIndexString}(const v8::FunctionCallbackInfo<v 8::Value>& info)
2741 { 2782 {
2742 END 2783 END
2743 2784
2744 if ($function->overloadedIndex == 0) { 2785 if ($function->overloadedIndex == 0) {
2745 $code .= GenerateArgumentsCountCheck($function, $interface); 2786 my $hasExceptionState = 0;
2787 $code .= GenerateArgumentsCountCheck($function, $interface, $hasExceptio nState);
2746 } 2788 }
2747 2789
2748 if ($raisesExceptions) { 2790 if ($raisesExceptions) {
2749 AddToImplIncludes("bindings/v8/ExceptionState.h"); 2791 AddToImplIncludes("bindings/v8/ExceptionState.h");
2750 $code .= " ExceptionState exceptionState(info.Holder(), info.GetIsola te());\n"; 2792 $code .= " ExceptionState exceptionState(info.Holder(), info.GetIsola te());\n";
2751 } 2793 }
2752 2794
2753 # FIXME: Currently [Constructor(...)] does not yet support optional argument s without [Default=...] 2795 # FIXME: Currently [Constructor(...)] does not yet support optional argument s without [Default=...]
2754 my ($parameterCheckString, $paramIndex, %replacements) = GenerateParametersC heck($function, $interface, ""); 2796 my ($parameterCheckString, $paramIndex, %replacements) = GenerateParametersC heck($function, $interface, "");
2755 $code .= $parameterCheckString; 2797 $code .= $parameterCheckString;
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
3075 $code .= <<END; 3117 $code .= <<END;
3076 Document* document = currentDocument(); 3118 Document* document = currentDocument();
3077 ASSERT(document); 3119 ASSERT(document);
3078 3120
3079 // Make sure the document is added to the DOM Node map. Otherwise, the ${imp lClassName} instance 3121 // Make sure the document is added to the DOM Node map. Otherwise, the ${imp lClassName} instance
3080 // may end up being the only node in the map and get garbage-collected prema turely. 3122 // may end up being the only node in the map and get garbage-collected prema turely.
3081 toV8(document, info.Holder(), info.GetIsolate()); 3123 toV8(document, info.Holder(), info.GetIsolate());
3082 3124
3083 END 3125 END
3084 3126
3085 $code .= GenerateArgumentsCountCheck($function, $interface);
3086
3087 if ($raisesExceptions) { 3127 if ($raisesExceptions) {
3088 AddToImplIncludes("bindings/v8/ExceptionState.h"); 3128 AddToImplIncludes("bindings/v8/ExceptionState.h");
3089 $code .= " ExceptionState exceptionState(info.Holder(), info.GetIsola te());\n"; 3129 my $interfaceName = $interface->name;
3130 $code .= " ExceptionState exceptionState(ExceptionState::Construction Context, \"${interfaceName}\", info.Holder(), info.GetIsolate());\n";
3090 } 3131 }
3091 3132
3133 my $hasExceptionState = $raisesExceptions;
3134 $code .= GenerateArgumentsCountCheck($function, $interface, $hasExceptionSta te);
3135
3092 my ($parameterCheckString, $paramIndex, %replacements) = GenerateParametersC heck($function, $interface); 3136 my ($parameterCheckString, $paramIndex, %replacements) = GenerateParametersC heck($function, $interface);
3093 $code .= $parameterCheckString; 3137 $code .= $parameterCheckString;
3094 3138
3095 push(@beforeArgumentList, "*document"); 3139 push(@beforeArgumentList, "*document");
3096 3140
3097 if ($constructorRaisesException) { 3141 if ($constructorRaisesException) {
3098 push(@afterArgumentList, "exceptionState"); 3142 push(@afterArgumentList, "exceptionState");
3099 } 3143 }
3100 3144
3101 my @argumentList; 3145 my @argumentList;
(...skipping 3245 matching lines...) Expand 10 before | Expand all | Expand 10 after
6347 6391
6348 return 1 if ExtendedAttributeContains($interface->extendedAttributes->{"Cust om"}, "ToV8"); 6392 return 1 if ExtendedAttributeContains($interface->extendedAttributes->{"Cust om"}, "ToV8");
6349 return 1 if ExtendedAttributeContains($interface->extendedAttributes->{"Cust om"}, "Wrap"); 6393 return 1 if ExtendedAttributeContains($interface->extendedAttributes->{"Cust om"}, "Wrap");
6350 return 1 if $interface->extendedAttributes->{"SpecialWrapFor"}; 6394 return 1 if $interface->extendedAttributes->{"SpecialWrapFor"};
6351 return 1 if InheritsInterface($interface, "Document"); 6395 return 1 if InheritsInterface($interface, "Document");
6352 6396
6353 return 0; 6397 return 0;
6354 } 6398 }
6355 6399
6356 1; 6400 1;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698