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 545 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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; |
OLD | NEW |