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

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

Issue 112303003: IDL compiler: [Constructor] overloading (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Better test case 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 | Annotate | Revision Log
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 2683 matching lines...) Expand 10 before | Expand all | Expand 10 after
2694 } 2694 }
2695 return ($parameterCheckString, $paramIndex, %replacements); 2695 return ($parameterCheckString, $paramIndex, %replacements);
2696 } 2696 }
2697 2697
2698 sub GenerateOverloadedConstructorCallback 2698 sub GenerateOverloadedConstructorCallback
2699 { 2699 {
2700 my $interface = shift; 2700 my $interface = shift;
2701 my $interfaceName = $interface->name; 2701 my $interfaceName = $interface->name;
2702 my $implClassName = GetImplName($interface); 2702 my $implClassName = GetImplName($interface);
2703 2703
2704 my $hasExceptionState = 0; 2704 my $code .= <<END;
2705 my $header = "";
2706 $header .= <<END;
2707 static void constructor(const v8::FunctionCallbackInfo<v8::Value>& info) 2705 static void constructor(const v8::FunctionCallbackInfo<v8::Value>& info)
2708 { 2706 {
2709 END 2707 END
2710 my $code = "";
2711 my $leastNumMandatoryParams = 255; 2708 my $leastNumMandatoryParams = 255;
2712 foreach my $constructor (@{$interface->constructors}) { 2709 foreach my $constructor (@{$interface->constructors}) {
2713 my $name = "constructor" . $constructor->overloadedIndex; 2710 my $name = "constructor" . $constructor->overloadedIndex;
2714 my ($numMandatoryParams, $parametersCheck) = GenerateFunctionParametersC heck($constructor); 2711 my ($numMandatoryParams, $parametersCheck) = GenerateFunctionParametersC heck($constructor);
2715 $leastNumMandatoryParams = $numMandatoryParams if ($numMandatoryParams < $leastNumMandatoryParams); 2712 $leastNumMandatoryParams = $numMandatoryParams if ($numMandatoryParams < $leastNumMandatoryParams);
2716 $code .= " if ($parametersCheck) {\n"; 2713 $code .= " if ($parametersCheck) {\n";
2717 $code .= " ${implClassName}V8Internal::${name}(info);\n"; 2714 $code .= " ${implClassName}V8Internal::${name}(info);\n";
2718 $code .= " return;\n"; 2715 $code .= " return;\n";
2719 $code .= " }\n"; 2716 $code .= " }\n";
2720 } 2717 }
2718 AddToImplIncludes("bindings/v8/ExceptionMessages.h"); # FIXME: remove when rebase (after https://codereview.chromium.org/110423004/ lands)
2721 if ($leastNumMandatoryParams >= 1) { 2719 if ($leastNumMandatoryParams >= 1) {
2722 if (!$hasExceptionState) { 2720 $code .= <<END;
2723 AddToImplIncludes("bindings/v8/ExceptionMessages.h"); 2721 ExceptionState exceptionState(ExceptionState::ConstructionContext, \"${inter faceName}\", info.Holder(), info.GetIsolate());
2724 $header .= " ExceptionState exceptionState(ExceptionState::Constr uctionContext, \"${interfaceName}\", info.Holder(), info.GetIsolate());\n"; 2722 if (UNLIKELY(info.Length() < $leastNumMandatoryParams)) {
2725 $hasExceptionState = 1; 2723 exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments($lea stNumMandatoryParams, info.Length()));
2726 } 2724 exceptionState.throwIfNeeded();
2727 $code .= " if (UNLIKELY(info.Length() < $leastNumMandatoryParams)) {\ n"; 2725 return;
2728 $code .= " exceptionState.throwTypeError(ExceptionMessages::notEn oughArguments($leastNumMandatoryParams, info.Length()));\n";
2729 $code .= " exceptionState.throwIfNeeded();\n";
2730 $code .= " return;\n";
2731 $code .= " }\n";
2732 } 2726 }
2733 if ($hasExceptionState) {
2734 $code .= <<END;
2735 exceptionState.throwTypeError(\"No matching constructor signature.\"); 2727 exceptionState.throwTypeError(\"No matching constructor signature.\");
2736 exceptionState.throwIfNeeded(); 2728 exceptionState.throwIfNeeded();
2737 END 2729 END
2738 } else { 2730 } else {
2739 AddToImplIncludes("bindings/v8/ExceptionMessages.h");
2740 $code .= <<END; 2731 $code .= <<END;
2741 throwTypeError(ExceptionMessages::failedToConstruct(\"${interfaceName}\", \" No matching constructor signature.\"), info.GetIsolate()); 2732 throwTypeError(ExceptionMessages::failedToConstruct(\"${interfaceName}\", \" No matching constructor signature.\"), info.GetIsolate());
2742 END 2733 END
2743 } 2734 }
2744 $code .= "}\n\n"; 2735 $code .= "}\n\n";
2745 $implementation{nameSpaceInternal}->add($header . $code); 2736 $implementation{nameSpaceInternal}->add($code);
2746 } 2737 }
2747 2738
2748 sub GenerateSingleConstructorCallback 2739 sub GenerateSingleConstructorCallback
2749 { 2740 {
2750 my $interface = shift; 2741 my $interface = shift;
2751 my $function = shift; 2742 my $function = shift;
2752 2743
2753 my $interfaceName = $interface->name; 2744 my $interfaceName = $interface->name;
2754 my $implClassName = GetImplName($interface); 2745 my $implClassName = GetImplName($interface);
2755 my $v8ClassName = GetV8ClassName($interface); 2746 my $v8ClassName = GetV8ClassName($interface);
(...skipping 3595 matching lines...) Expand 10 before | Expand all | Expand 10 after
6351 6342
6352 return 1 if ExtendedAttributeContains($interface->extendedAttributes->{"Cust om"}, "ToV8"); 6343 return 1 if ExtendedAttributeContains($interface->extendedAttributes->{"Cust om"}, "ToV8");
6353 return 1 if ExtendedAttributeContains($interface->extendedAttributes->{"Cust om"}, "Wrap"); 6344 return 1 if ExtendedAttributeContains($interface->extendedAttributes->{"Cust om"}, "Wrap");
6354 return 1 if $interface->extendedAttributes->{"SpecialWrapFor"}; 6345 return 1 if $interface->extendedAttributes->{"SpecialWrapFor"};
6355 return 1 if InheritsInterface($interface, "Document"); 6346 return 1 if InheritsInterface($interface, "Document");
6356 6347
6357 return 0; 6348 return 0;
6358 } 6349 }
6359 6350
6360 1; 6351 1;
OLDNEW
« no previous file with comments | « no previous file | Source/bindings/scripts/unstable/v8_interface.py » ('j') | Source/bindings/scripts/unstable/v8_interface.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698