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

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

Issue 15724005: [Binding] Support primitive type for union member (Closed) Base URL: https://chromium.googlesource.com/chromium/blink@master
Patch Set: do not inherit getter. rename DoNotCheckJSProperty to OverrideBuiltins Created 7 years, 7 months 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 545 matching lines...) Expand 10 before | Expand all | Expand 10 after
556 { 556 {
557 my $interface = shift; 557 my $interface = shift;
558 return GetSpecialAccessorFunctionForType($interface, "getter", "DOMString"); 558 return GetSpecialAccessorFunctionForType($interface, "getter", "DOMString");
559 } 559 }
560 560
561 sub GetSpecialAccessorFunctionForType 561 sub GetSpecialAccessorFunctionForType
562 { 562 {
563 my $interface = shift; 563 my $interface = shift;
564 my $special = shift; 564 my $special = shift;
565 my $type = shift; 565 my $type = shift;
566 566
kojih 2013/05/23 05:14:26 quit searching all parents for special method
567 my @interfaces = ($interface); 567 foreach my $function (@{$interface->functions}) {
568 ForAllParents($interface, sub { 568 my $specials = $function->signature->specials;
569 my $currentInterface = shift; 569 my $specialExists = grep { $_ eq $special } @$specials;
570 push(@interfaces, $currentInterface); 570 my $parameters = $function->parameters;
571 }); 571 if ($specialExists and scalar(@$parameters) == 1 and $parameters->[0]->t ype eq $type) {
572 572 return $function;
573 foreach my $currentInterface (@interfaces) {
574 foreach my $function (@{$currentInterface->functions}) {
575 my $specials = $function->signature->specials;
576 my $specialExists = grep { $_ eq $special } @$specials;
577 my $parameters = $function->parameters;
578 if ($specialExists and scalar(@$parameters) == 1 and $parameters->[0 ]->type eq $type) {
579 return $function;
580 }
581 } 573 }
582 } 574 }
583 575
584 return 0; 576 return 0;
585 } 577 }
586 578
587 sub GenerateHeader 579 sub GenerateHeader
588 { 580 {
589 my $object = shift; 581 my $object = shift;
590 my $interface = shift; 582 my $interface = shift;
(...skipping 2441 matching lines...) Expand 10 before | Expand all | Expand 10 after
3032 for my $i (0 .. scalar(@$types)-1) { 3024 for my $i (0 .. scalar(@$types)-1) {
3033 my $unionMemberType = $types->[$i]; 3025 my $unionMemberType = $types->[$i];
3034 my $unionMemberVariable = $variableName . $i; 3026 my $unionMemberVariable = $variableName . $i;
3035 my $isNull = GenerateIsNullExpression($unionMemberType, $unionMember Variable); 3027 my $isNull = GenerateIsNullExpression($unionMemberType, $unionMember Variable);
3036 push @expression, $isNull; 3028 push @expression, $isNull;
3037 } 3029 }
3038 return join " && ", @expression; 3030 return join " && ", @expression;
3039 } 3031 }
3040 if (IsRefPtrType($type)) { 3032 if (IsRefPtrType($type)) {
3041 return "!${variableName}"; 3033 return "!${variableName}";
3034 } elsif ($type eq "DOMString") {
3035 return "${variableName}.isNull()";
3042 } else { 3036 } else {
3043 return "${variableName}.isNull()"; 3037 return "";
kojih 2013/05/23 05:14:26 primitive case
3044 } 3038 }
3045 } 3039 }
3046 3040
3047 sub GenerateImplementationIndexedProperty 3041 sub GenerateImplementationIndexedProperty
3048 { 3042 {
3049 my $interface = shift; 3043 my $interface = shift;
3050 my $interfaceName = $interface->name; 3044 my $interfaceName = $interface->name;
3051 my $implClassName = GetImplName($interface); 3045 my $implClassName = GetImplName($interface);
3052 my $v8ClassName = GetV8ClassName($interface); 3046 my $v8ClassName = GetV8ClassName($interface);
3053 3047
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
3199 push @arguments, "ec"; 3193 push @arguments, "ec";
3200 } 3194 }
3201 3195
3202 if (IsUnionType($returnType)) { 3196 if (IsUnionType($returnType)) {
3203 my $code = ""; 3197 my $code = "";
3204 my @extraArguments = (); 3198 my @extraArguments = ();
3205 for my $i (0..scalar(@{$returnType->unionMemberTypes})-1) { 3199 for my $i (0..scalar(@{$returnType->unionMemberTypes})-1) {
3206 my $unionMemberType = $returnType->unionMemberTypes->[$i]; 3200 my $unionMemberType = $returnType->unionMemberTypes->[$i];
3207 my $nativeType = GetNativeType($unionMemberType); 3201 my $nativeType = GetNativeType($unionMemberType);
3208 my $unionMemberVariable = $returnName . $i; 3202 my $unionMemberVariable = $returnName . $i;
3203 my $unionMemberEnabledVariable = $returnName . $i . "Enabled";
3204 $code .= " bool ${unionMemberEnabledVariable} = false;\n";
3209 $code .= " ${nativeType} ${unionMemberVariable};\n"; 3205 $code .= " ${nativeType} ${unionMemberVariable};\n";
3206 push @extraArguments, $unionMemberEnabledVariable;
3210 push @extraArguments, $unionMemberVariable; 3207 push @extraArguments, $unionMemberVariable;
3211 } 3208 }
3212 push @arguments, @extraArguments; 3209 push @arguments, @extraArguments;
3213 $code .= " ${functionExpression}(" . (join ", ", @arguments) . ");"; 3210 $code .= " ${functionExpression}(" . (join ", ", @arguments) . ");";
3214 return $code; 3211 return $code;
3215 } else { 3212 } else {
3216 my $nativeType = GetNativeType($returnType); 3213 my $nativeType = GetNativeType($returnType);
3217 return " ${nativeType} element = ${functionExpression}(" . (join ", " , @arguments) . ");" 3214 return " ${nativeType} element = ${functionExpression}(" . (join ", " , @arguments) . ");"
3218 } 3215 }
3219 } 3216 }
(...skipping 10 matching lines...) Expand all
3230 my $returnType = $namedGetterFunction->signature->type; 3227 my $returnType = $namedGetterFunction->signature->type;
3231 my $isNull = GenerateIsNullExpression($returnType, "element"); 3228 my $isNull = GenerateIsNullExpression($returnType, "element");
3232 my $nativeValue = "element"; 3229 my $nativeValue = "element";
3233 $nativeValue .= ".release()" if (IsRefPtrType($returnType)); 3230 $nativeValue .= ".release()" if (IsRefPtrType($returnType));
3234 my $returnJSValueCode = NativeToJSValue($namedGetterFunction->signature->typ e, $namedGetterFunction->signature->extendedAttributes, $nativeValue, " ", "r eturn", "info.Holder()", "info.GetIsolate()", "info", "collection"); 3231 my $returnJSValueCode = NativeToJSValue($namedGetterFunction->signature->typ e, $namedGetterFunction->signature->extendedAttributes, $nativeValue, " ", "r eturn", "info.Holder()", "info.GetIsolate()", "info", "collection");
3235 my $raisesExceptions = $namedGetterFunction->signature->extendedAttributes-> {"RaisesException"}; 3232 my $raisesExceptions = $namedGetterFunction->signature->extendedAttributes-> {"RaisesException"};
3236 my $methodCallCode = GenerateMethodCall($returnType, "element", "collection- >${methodName}", "propertyName", $raisesExceptions); 3233 my $methodCallCode = GenerateMethodCall($returnType, "element", "collection- >${methodName}", "propertyName", $raisesExceptions);
3237 3234
3238 my $code = "v8::Handle<v8::Value> ${v8ClassName}::namedPropertyGetter(v8::Lo cal<v8::String> name, const v8::AccessorInfo& info)\n"; 3235 my $code = "v8::Handle<v8::Value> ${v8ClassName}::namedPropertyGetter(v8::Lo cal<v8::String> name, const v8::AccessorInfo& info)\n";
3239 $code .= "{\n"; 3236 $code .= "{\n";
3240 if (!$namedGetterFunction->signature->extendedAttributes->{"DoNotCheckJSProp erty"}) { 3237 if (!$namedGetterFunction->signature->extendedAttributes->{"OverrideBuiltins "}) {
3241 $code .= " if (!info.Holder()->GetRealNamedPropertyInPrototypeChain(n ame).IsEmpty())\n"; 3238 $code .= " if (!info.Holder()->GetRealNamedPropertyInPrototypeChain(n ame).IsEmpty())\n";
3242 $code .= " return v8Undefined();\n"; 3239 $code .= " return v8Undefined();\n";
3243 $code .= " if (info.Holder()->HasRealNamedCallbackProperty(name))\n"; 3240 $code .= " if (info.Holder()->HasRealNamedCallbackProperty(name))\n";
3244 $code .= " return v8Undefined();\n"; 3241 $code .= " return v8Undefined();\n";
3245 } 3242 }
3246 $code .= "\n"; 3243 $code .= "\n";
3247 $code .= " ASSERT(V8DOMWrapper::maybeDOMWrapper(info.Holder()));\n"; 3244 $code .= " ASSERT(V8DOMWrapper::maybeDOMWrapper(info.Holder()));\n";
3248 $code .= " ${implClassName}* collection = toNative(info.Holder());\n"; 3245 $code .= " ${implClassName}* collection = toNative(info.Holder());\n";
3249 $code .= " AtomicString propertyName = toWebCoreAtomicString(name);\n"; 3246 $code .= " AtomicString propertyName = toWebCoreAtomicString(name);\n";
3250 if ($raisesExceptions) { 3247 if ($raisesExceptions) {
(...skipping 1481 matching lines...) Expand 10 before | Expand all | Expand 10 after
4732 my $returnHandleTypeArg = $returnHandleType ? ", $returnHandleType" : ""; 4729 my $returnHandleTypeArg = $returnHandleType ? ", $returnHandleType" : "";
4733 my $forMainWorldSuffix = shift || ""; 4730 my $forMainWorldSuffix = shift || "";
4734 4731
4735 if (IsUnionType($type)) { 4732 if (IsUnionType($type)) {
4736 my $types = $type->unionMemberTypes; 4733 my $types = $type->unionMemberTypes;
4737 my @codes = (); 4734 my @codes = ();
4738 for my $i (0 .. scalar(@$types)-1) { 4735 for my $i (0 .. scalar(@$types)-1) {
4739 my $unionMemberType = $types->[$i]; 4736 my $unionMemberType = $types->[$i];
4740 my $unionMemberNumber = $i + 1; 4737 my $unionMemberNumber = $i + 1;
4741 my $unionMemberVariable = $nativeValue . $i; 4738 my $unionMemberVariable = $nativeValue . $i;
4739 my $unionMemberEnabledVariable = $nativeValue . $i . "Enabled";
4742 my $unionMemberNativeValue = $unionMemberVariable; 4740 my $unionMemberNativeValue = $unionMemberVariable;
4743 $unionMemberNativeValue .= ".release()" if (IsRefPtrType($unionMembe rType)); 4741 $unionMemberNativeValue .= ".release()" if (IsRefPtrType($unionMembe rType));
4744 my $returnJSValueCode = NativeToJSValue($unionMemberType, $extendedA ttributes, $unionMemberNativeValue, $indent . " ", $receiver, $getCreationCon text, $getIsolate, $getHolderContainer, $getScriptWrappable, $returnHandleType, $forMainWorldSuffix); 4742 my $returnJSValueCode = NativeToJSValue($unionMemberType, $extendedA ttributes, $unionMemberNativeValue, $indent . " ", $receiver, $getCreationCon text, $getIsolate, $getHolderContainer, $getScriptWrappable, $returnHandleType, $forMainWorldSuffix);
4745 my $isNotNull = "!" . GenerateIsNullExpression($unionMemberType, $un ionMemberVariable); 4743 my $isNotNull = GenerateIsNullExpression($unionMemberType, $unionMem berVariable);
4744 $isNotNull = " && !" . $isNotNull if $isNotNull;
4746 my $code = ""; 4745 my $code = "";
4747 $code .= "${indent}if (${isNotNull})\n"; 4746 $code .= "${indent}if (${unionMemberEnabledVariable}${isNotNull})\n" ;
4748 $code .= "${returnJSValueCode}"; 4747 $code .= "${returnJSValueCode}";
4749 push @codes, $code; 4748 push @codes, $code;
4750 } 4749 }
4751 return join "\n", @codes; 4750 return join "\n", @codes;
4752 } 4751 }
4753 4752
4754 return "$indent$receiver v8Boolean($nativeValue, $getIsolate);" if $type eq "boolean"; 4753 return "$indent$receiver v8Boolean($nativeValue, $getIsolate);" if $type eq "boolean";
4755 return "$indent$receiver v8Undefined();" if $type eq "void"; # equivalen t to v8Undefined() 4754 return "$indent$receiver v8Undefined();" if $type eq "void"; # equivalen t to v8Undefined()
4756 4755
4757 # HTML5 says that unsigned reflected attributes should be in the range 4756 # HTML5 says that unsigned reflected attributes should be in the range
(...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after
5399 if ($currentInterface->extendedAttributes->{$extendedAttribute}) { 5398 if ($currentInterface->extendedAttributes->{$extendedAttribute}) {
5400 $found = 1; 5399 $found = 1;
5401 } 5400 }
5402 return 1 if $found; 5401 return 1 if $found;
5403 }, 0); 5402 }, 0);
5404 5403
5405 return $found; 5404 return $found;
5406 } 5405 }
5407 5406
5408 1; 5407 1;
OLDNEW
« no previous file with comments | « no previous file | Source/bindings/scripts/IDLAttributes.txt » ('j') | Source/bindings/tests/results/V8TestInterface.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698