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 |