| 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 408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 419 | 419 |
| 420 return if SkipIncludeHeader($type); | 420 return if SkipIncludeHeader($type); |
| 421 | 421 |
| 422 # Default includes | 422 # Default includes |
| 423 if ($type eq "EventListener") { | 423 if ($type eq "EventListener") { |
| 424 AddToImplIncludes("core/dom/EventListener.h"); | 424 AddToImplIncludes("core/dom/EventListener.h"); |
| 425 } elsif ($type eq "SerializedScriptValue") { | 425 } elsif ($type eq "SerializedScriptValue") { |
| 426 AddToImplIncludes("bindings/v8/SerializedScriptValue.h"); | 426 AddToImplIncludes("bindings/v8/SerializedScriptValue.h"); |
| 427 } elsif ($type eq "any" || IsCallbackFunctionType($type)) { | 427 } elsif ($type eq "any" || IsCallbackFunctionType($type)) { |
| 428 AddToImplIncludes("bindings/v8/ScriptValue.h"); | 428 AddToImplIncludes("bindings/v8/ScriptValue.h"); |
| 429 } elsif ($type eq "ArrayBuffer") { | 429 } elsif (IsTypedArrayType($type)) { |
| 430 AddToImplIncludes("bindings/v8/custom/V8ArrayBufferCustom.h"); | 430 AddToImplIncludes("bindings/v8/custom/V8${type}Custom.h"); |
| 431 } else { | 431 } else { |
| 432 AddToImplIncludes("V8${type}.h"); | 432 AddToImplIncludes("V8${type}.h"); |
| 433 } | 433 } |
| 434 } | 434 } |
| 435 | 435 |
| 436 sub HeaderFilesForInterface | 436 sub HeaderFilesForInterface |
| 437 { | 437 { |
| 438 my $interfaceName = shift; | 438 my $interfaceName = shift; |
| 439 my $implClassName = shift; | 439 my $implClassName = shift; |
| 440 | 440 |
| 441 my @includes = (); | 441 my @includes = (); |
| 442 if (IsTypedArrayType($interfaceName) or $interfaceName eq "ArrayBuffer") { | 442 if (IsTypedArrayType($interfaceName)) { |
| 443 push(@includes, "wtf/${interfaceName}.h"); | 443 push(@includes, "wtf/${interfaceName}.h"); |
| 444 } elsif (!SkipIncludeHeader($interfaceName)) { | 444 } elsif (!SkipIncludeHeader($interfaceName)) { |
| 445 my $idlFilename = IDLFileForInterface($interfaceName) or die("Could NOT
find IDL file for interface \"$interfaceName\" $!\n"); | 445 my $idlFilename = IDLFileForInterface($interfaceName) or die("Could NOT
find IDL file for interface \"$interfaceName\" $!\n"); |
| 446 my $idlRelPath= "bindings/" . File::Spec->abs2rel($idlFilename, $sourceR
oot); | 446 my $idlRelPath= "bindings/" . File::Spec->abs2rel($idlFilename, $sourceR
oot); |
| 447 push(@includes, dirname($idlRelPath) . "/" . $implClassName . ".h"); | 447 push(@includes, dirname($idlRelPath) . "/" . $implClassName . ".h"); |
| 448 } | 448 } |
| 449 return @includes; | 449 return @includes; |
| 450 } | 450 } |
| 451 | 451 |
| 452 sub NeedsOpaqueRootForGC | 452 sub NeedsOpaqueRootForGC |
| (...skipping 2267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2720 } | 2720 } |
| 2721 | 2721 |
| 2722 $code .= <<END; | 2722 $code .= <<END; |
| 2723 return true; | 2723 return true; |
| 2724 } | 2724 } |
| 2725 | 2725 |
| 2726 END | 2726 END |
| 2727 $implementation{nameSpaceWebCore}->add($code); | 2727 $implementation{nameSpaceWebCore}->add($code); |
| 2728 } | 2728 } |
| 2729 | 2729 |
| 2730 sub GenerateTypedArrayConstructor | |
| 2731 { | |
| 2732 my $interface = shift; | |
| 2733 my $implClassName = GetImplName($interface); | |
| 2734 my $v8ClassName = GetV8ClassName($interface); | |
| 2735 | |
| 2736 my ($nativeType, $arrayType) = GetNativeTypeOfTypedArray($interface); | |
| 2737 AddToImplIncludes("bindings/v8/custom/V8ArrayBufferViewCustom.h"); | |
| 2738 | |
| 2739 $implementation{nameSpaceInternal}->add(<<END); | |
| 2740 static void constructor(const v8::FunctionCallbackInfo<v8::Value>& args) | |
| 2741 { | |
| 2742 return constructWebGLArray<$implClassName, ${v8ClassName}, $nativeType>(args
, &${v8ClassName}::info, $arrayType); | |
| 2743 } | |
| 2744 | |
| 2745 END | |
| 2746 } | |
| 2747 | |
| 2748 sub GenerateNamedConstructor | 2730 sub GenerateNamedConstructor |
| 2749 { | 2731 { |
| 2750 my $function = shift; | 2732 my $function = shift; |
| 2751 my $interface = shift; | 2733 my $interface = shift; |
| 2752 | 2734 |
| 2753 my $implClassName = GetImplName($interface); | 2735 my $implClassName = GetImplName($interface); |
| 2754 my $v8ClassName = GetV8ClassName($interface); | 2736 my $v8ClassName = GetV8ClassName($interface); |
| 2755 my $raisesExceptions = $function->extendedAttributes->{"RaisesException"}; | 2737 my $raisesExceptions = $function->extendedAttributes->{"RaisesException"}; |
| 2756 if ($interface->extendedAttributes->{"ConstructorRaisesException"}) { | 2738 if ($interface->extendedAttributes->{"ConstructorRaisesException"}) { |
| 2757 $raisesExceptions = 1; | 2739 $raisesExceptions = 1; |
| (...skipping 1384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4142 $implementation{nameSpaceWebCore}->add($code); | 4124 $implementation{nameSpaceWebCore}->add($code); |
| 4143 } | 4125 } |
| 4144 | 4126 |
| 4145 if (!HasCustomConstructor($interface)) { | 4127 if (!HasCustomConstructor($interface)) { |
| 4146 if ($interface->extendedAttributes->{"NamedConstructor"}) { | 4128 if ($interface->extendedAttributes->{"NamedConstructor"}) { |
| 4147 GenerateNamedConstructor(@{$interface->constructors}[0], $interface)
; | 4129 GenerateNamedConstructor(@{$interface->constructors}[0], $interface)
; |
| 4148 } elsif ($interface->extendedAttributes->{"Constructor"}) { | 4130 } elsif ($interface->extendedAttributes->{"Constructor"}) { |
| 4149 GenerateConstructor($interface); | 4131 GenerateConstructor($interface); |
| 4150 } elsif (IsConstructorTemplate($interface, "Event")) { | 4132 } elsif (IsConstructorTemplate($interface, "Event")) { |
| 4151 GenerateEventConstructor($interface); | 4133 GenerateEventConstructor($interface); |
| 4152 } elsif (IsConstructorTemplate($interface, "TypedArray")) { | |
| 4153 GenerateTypedArrayConstructor($interface); | |
| 4154 } | 4134 } |
| 4155 } | 4135 } |
| 4156 if (IsConstructable($interface)) { | 4136 if (IsConstructable($interface)) { |
| 4157 GenerateConstructorCallback($interface); | 4137 GenerateConstructorCallback($interface); |
| 4158 } | 4138 } |
| 4159 | 4139 |
| 4160 my $access_check = ""; | 4140 my $access_check = ""; |
| 4161 if ($interface->extendedAttributes->{"CheckSecurity"} && $interfaceName ne "
Window") { | 4141 if ($interface->extendedAttributes->{"CheckSecurity"} && $interfaceName ne "
Window") { |
| 4162 $access_check = "instance->SetAccessCheckCallbacks(${implClassName}V8Int
ernal::namedSecurityCheck, ${implClassName}V8Internal::indexedSecurityCheck, v8:
:External::New(&${v8ClassName}::info));"; | 4142 $access_check = "instance->SetAccessCheckCallbacks(${implClassName}V8Int
ernal::namedSecurityCheck, ${implClassName}V8Internal::indexedSecurityCheck, v8:
:External::New(&${v8ClassName}::info));"; |
| 4163 } | 4143 } |
| (...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5026 return "Dictionary" if $type eq "Dictionary"; | 5006 return "Dictionary" if $type eq "Dictionary"; |
| 5027 | 5007 |
| 5028 return "RefPtr<DOMStringList>" if $type eq "DOMStringList"; | 5008 return "RefPtr<DOMStringList>" if $type eq "DOMStringList"; |
| 5029 return "RefPtr<MediaQueryListListener>" if $type eq "MediaQueryListListener"
; | 5009 return "RefPtr<MediaQueryListListener>" if $type eq "MediaQueryListListener"
; |
| 5030 return "RefPtr<NodeFilter>" if $type eq "NodeFilter"; | 5010 return "RefPtr<NodeFilter>" if $type eq "NodeFilter"; |
| 5031 return "RefPtr<SerializedScriptValue>" if $type eq "SerializedScriptValue"; | 5011 return "RefPtr<SerializedScriptValue>" if $type eq "SerializedScriptValue"; |
| 5032 return "RefPtr<XPathNSResolver>" if $type eq "XPathNSResolver"; | 5012 return "RefPtr<XPathNSResolver>" if $type eq "XPathNSResolver"; |
| 5033 | 5013 |
| 5034 die "UnionType is not supported" if IsUnionType($type); | 5014 die "UnionType is not supported" if IsUnionType($type); |
| 5035 | 5015 |
| 5036 if ($type eq "ArrayBuffer") { | 5016 if (IsTypedArrayType($type)) { |
| 5037 return $isParameter ? "ArrayBuffer*" : "RefPtr<ArrayBuffer>"; | 5017 return $isParameter ? "${type}*" : "RefPtr<${type}>"; |
| 5038 } | 5018 } |
| 5039 | 5019 |
| 5040 # We need to check [ImplementedAs] extended attribute for wrapper types. | 5020 # We need to check [ImplementedAs] extended attribute for wrapper types. |
| 5041 if (IsWrapperType($type)) { | 5021 if (IsWrapperType($type)) { |
| 5042 my $interface = ParseInterface($type); | 5022 my $interface = ParseInterface($type); |
| 5043 my $implClassName = GetImplName($interface); | 5023 my $implClassName = GetImplName($interface); |
| 5044 return $isParameter ? "${implClassName}*" : "RefPtr<${implClassName}>"; | 5024 return $isParameter ? "${implClassName}*" : "RefPtr<${implClassName}>"; |
| 5045 } | 5025 } |
| 5046 return "RefPtr<${type}>" if IsRefPtrType($type) and not $isParameter; | 5026 return "RefPtr<${type}>" if IsRefPtrType($type) and not $isParameter; |
| 5047 | 5027 |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5155 | 5135 |
| 5156 if ($type eq "MediaQueryListListener") { | 5136 if ($type eq "MediaQueryListListener") { |
| 5157 AddToImplIncludes("core/css/MediaQueryListListener.h"); | 5137 AddToImplIncludes("core/css/MediaQueryListListener.h"); |
| 5158 return "MediaQueryListListener::create(" . $value . ")"; | 5138 return "MediaQueryListListener::create(" . $value . ")"; |
| 5159 } | 5139 } |
| 5160 | 5140 |
| 5161 if ($type eq "EventTarget") { | 5141 if ($type eq "EventTarget") { |
| 5162 return "V8DOMWrapper::isDOMWrapper($value) ? toWrapperTypeInfo(v8::Handl
e<v8::Object>::Cast($value))->toEventTarget(v8::Handle<v8::Object>::Cast($value)
) : 0"; | 5142 return "V8DOMWrapper::isDOMWrapper($value) ? toWrapperTypeInfo(v8::Handl
e<v8::Object>::Cast($value))->toEventTarget(v8::Handle<v8::Object>::Cast($value)
) : 0"; |
| 5163 } | 5143 } |
| 5164 | 5144 |
| 5165 if ($type eq "ArrayBuffer") { | 5145 if (IsTypedArrayType($type)) { |
| 5166 AddIncludesForType($type); | 5146 AddIncludesForType($type); |
| 5167 return "$value->IsArrayBuffer() ? V8ArrayBuffer::toNative(v8::Handle<v8:
:ArrayBuffer>::Cast($value)) : 0" | 5147 return "$value->Is${type}() ? V8${type}::toNative(v8::Handle<v8::${type}
>::Cast($value)) : 0" |
| 5168 } | 5148 } |
| 5169 | 5149 |
| 5170 if ($type eq "XPathNSResolver") { | 5150 if ($type eq "XPathNSResolver") { |
| 5171 return "toXPathNSResolver($value, $getIsolate)"; | 5151 return "toXPathNSResolver($value, $getIsolate)"; |
| 5172 } | 5152 } |
| 5173 | 5153 |
| 5174 my $arrayOrSequenceType = GetArrayOrSequenceType($type); | 5154 my $arrayOrSequenceType = GetArrayOrSequenceType($type); |
| 5175 | 5155 |
| 5176 if ($arrayOrSequenceType) { | 5156 if ($arrayOrSequenceType) { |
| 5177 if (IsRefPtrType($arrayOrSequenceType)) { | 5157 if (IsRefPtrType($arrayOrSequenceType)) { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 5191 { | 5171 { |
| 5192 my $function = shift; | 5172 my $function = shift; |
| 5193 my $count = @{$function->parameters}; | 5173 my $count = @{$function->parameters}; |
| 5194 my $name = $function->name; | 5174 my $name = $function->name; |
| 5195 my $code = " const int ${name}Argc = ${count};\n" . | 5175 my $code = " const int ${name}Argc = ${count};\n" . |
| 5196 " v8::Handle<v8::FunctionTemplate> ${name}Argv[${name}Argc] = { "; | 5176 " v8::Handle<v8::FunctionTemplate> ${name}Argv[${name}Argc] = { "; |
| 5197 my $first = 1; | 5177 my $first = 1; |
| 5198 foreach my $parameter (@{$function->parameters}) { | 5178 foreach my $parameter (@{$function->parameters}) { |
| 5199 if ($first) { $first = 0; } | 5179 if ($first) { $first = 0; } |
| 5200 else { $code .= ", "; } | 5180 else { $code .= ", "; } |
| 5201 if (IsWrapperType($parameter->type) && $parameter->type ne "ArrayBuffer"
) { | 5181 if (IsWrapperType($parameter->type) && not IsTypedArrayType($parameter->
type)) { |
| 5202 if ($parameter->type eq "XPathNSResolver") { | 5182 if ($parameter->type eq "XPathNSResolver") { |
| 5203 # Special case for XPathNSResolver. All other browsers accepts
a callable, | 5183 # Special case for XPathNSResolver. All other browsers accepts
a callable, |
| 5204 # so, even though it's against IDL, accept objects here. | 5184 # so, even though it's against IDL, accept objects here. |
| 5205 $code .= "v8::Handle<v8::FunctionTemplate>()"; | 5185 $code .= "v8::Handle<v8::FunctionTemplate>()"; |
| 5206 } else { | 5186 } else { |
| 5207 my $type = $parameter->type; | 5187 my $type = $parameter->type; |
| 5208 my $arrayOrSequenceType = GetArrayOrSequenceType($type); | 5188 my $arrayOrSequenceType = GetArrayOrSequenceType($type); |
| 5209 | 5189 |
| 5210 if ($arrayOrSequenceType) { | 5190 if ($arrayOrSequenceType) { |
| 5211 if (IsRefPtrType($arrayOrSequenceType)) { | 5191 if (IsRefPtrType($arrayOrSequenceType)) { |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5280 return 0 if IsEnumType($type); | 5260 return 0 if IsEnumType($type); |
| 5281 return 0 if IsPrimitiveType($type); | 5261 return 0 if IsPrimitiveType($type); |
| 5282 return 0 if $type eq "DOMString"; | 5262 return 0 if $type eq "DOMString"; |
| 5283 return !$nonWrapperTypes{$type}; | 5263 return !$nonWrapperTypes{$type}; |
| 5284 } | 5264 } |
| 5285 | 5265 |
| 5286 sub IsCallbackInterface | 5266 sub IsCallbackInterface |
| 5287 { | 5267 { |
| 5288 my $type = shift; | 5268 my $type = shift; |
| 5289 return 0 unless IsWrapperType($type); | 5269 return 0 unless IsWrapperType($type); |
| 5290 return 0 if $type eq "ArrayBuffer"; | 5270 return 0 if IsTypedArrayType($type); |
| 5291 | 5271 |
| 5292 my $idlFile = IDLFileForInterface($type) | 5272 my $idlFile = IDLFileForInterface($type) |
| 5293 or die("Could NOT find IDL file for interface \"$type\"!\n"); | 5273 or die("Could NOT find IDL file for interface \"$type\"!\n"); |
| 5294 | 5274 |
| 5295 open FILE, "<", $idlFile; | 5275 open FILE, "<", $idlFile; |
| 5296 my @lines = <FILE>; | 5276 my @lines = <FILE>; |
| 5297 close FILE; | 5277 close FILE; |
| 5298 | 5278 |
| 5299 my $fileContents = join('', @lines); | 5279 my $fileContents = join('', @lines); |
| 5300 return ($fileContents =~ /callback\s+interface\s+(\w+)/gs); | 5280 return ($fileContents =~ /callback\s+interface\s+(\w+)/gs); |
| (...skipping 719 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6020 if ($currentInterface->extendedAttributes->{$extendedAttribute}) { | 6000 if ($currentInterface->extendedAttributes->{$extendedAttribute}) { |
| 6021 $found = 1; | 6001 $found = 1; |
| 6022 } | 6002 } |
| 6023 return 1 if $found; | 6003 return 1 if $found; |
| 6024 }, 0); | 6004 }, 0); |
| 6025 | 6005 |
| 6026 return $found; | 6006 return $found; |
| 6027 } | 6007 } |
| 6028 | 6008 |
| 6029 1; | 6009 1; |
| OLD | NEW |