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 1585 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1596 $code .= " return toV8Fast$forMainWorldSuffix($wrappedValue, info, im p);\n"; | 1596 $code .= " return toV8Fast$forMainWorldSuffix($wrappedValue, info, im p);\n"; |
1597 } elsif ($attribute->signature->type eq "SerializedScriptValue" && $attrExt- >{"CachedAttribute"}) { | 1597 } elsif ($attribute->signature->type eq "SerializedScriptValue" && $attrExt- >{"CachedAttribute"}) { |
1598 my $getterFunc = ToMethodName($attribute->signature->name); | 1598 my $getterFunc = ToMethodName($attribute->signature->name); |
1599 $code .= <<END; | 1599 $code .= <<END; |
1600 RefPtr<SerializedScriptValue> serialized = imp->${getterFunc}(); | 1600 RefPtr<SerializedScriptValue> serialized = imp->${getterFunc}(); |
1601 value = serialized ? serialized->deserialize() : v8::Handle<v8::Value>(v8Nul l(info.GetIsolate())); | 1601 value = serialized ? serialized->deserialize() : v8::Handle<v8::Value>(v8Nul l(info.GetIsolate())); |
1602 info.Holder()->SetHiddenValue(propertyName, value); | 1602 info.Holder()->SetHiddenValue(propertyName, value); |
1603 return value; | 1603 return value; |
1604 END | 1604 END |
1605 } else { | 1605 } else { |
1606 $code .= " return " . NativeToJSValue($attribute->signature, $express ion, "info.Holder()", "info.GetIsolate()", "info", "imp", "ReturnUnsafeHandle", $forMainWorldSuffix).";\n"; | 1606 $code .= NativeToJSValue($attribute->signature->type, $attribute->signat ure->extendedAttributes, $expression, " ", "return", "info.Holder()", "info.G etIsolate()", "info", "imp", "ReturnUnsafeHandle", $forMainWorldSuffix) . "\n"; |
kojih
2013/05/16 05:22:58
I have to split signature into signature->type and
| |
1607 } | 1607 } |
1608 | 1608 |
1609 $code .= "}\n\n"; # end of getter | 1609 $code .= "}\n\n"; # end of getter |
1610 $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; | 1610 $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; |
1611 $implementation{nameSpaceInternal}->add($code); | 1611 $implementation{nameSpaceInternal}->add($code); |
1612 } | 1612 } |
1613 | 1613 |
1614 sub ShouldKeepAttributeAlive | 1614 sub ShouldKeepAttributeAlive |
1615 { | 1615 { |
1616 my ($interface, $attribute, $returnType) = @_; | 1616 my ($interface, $attribute, $returnType) = @_; |
(...skipping 1489 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3106 $code .= " } else {\n"; | 3106 $code .= " } else {\n"; |
3107 $code .= " ${conditional}$template->Set(v8::String::NewSymbol(\"$ name\"), v8::FunctionTemplate::New(${implClassName}V8Internal::${name}MethodCall back, v8Undefined(), ${signature}, $functionLength)$property_attributes);\n"; | 3107 $code .= " ${conditional}$template->Set(v8::String::NewSymbol(\"$ name\"), v8::FunctionTemplate::New(${implClassName}V8Internal::${name}MethodCall back, v8Undefined(), ${signature}, $functionLength)$property_attributes);\n"; |
3108 $code .= " }\n"; | 3108 $code .= " }\n"; |
3109 } else { | 3109 } else { |
3110 $code .= " ${conditional}$template->Set(v8::String::NewSymbol(\"$name \"), v8::FunctionTemplate::New(${implClassName}V8Internal::${name}MethodCallback , v8Undefined(), ${signature}, $functionLength)$property_attributes);\n"; | 3110 $code .= " ${conditional}$template->Set(v8::String::NewSymbol(\"$name \"), v8::FunctionTemplate::New(${implClassName}V8Internal::${name}MethodCallback , v8Undefined(), ${signature}, $functionLength)$property_attributes);\n"; |
3111 } | 3111 } |
3112 $code .= "#endif // ${conditionalString}\n" if $conditionalString; | 3112 $code .= "#endif // ${conditionalString}\n" if $conditionalString; |
3113 return $code; | 3113 return $code; |
3114 } | 3114 } |
3115 | 3115 |
3116 sub GetIsNullExpression | |
3117 { | |
3118 my $type = shift; | |
3119 my $variableName = shift; | |
3120 if (IsRefPtrType($type)) { | |
3121 return "!${variableName}"; | |
3122 } else { | |
3123 return "${variableName}.isNull()"; | |
3124 } | |
3125 } | |
3126 | |
3116 sub GenerateImplementationIndexedProperty | 3127 sub GenerateImplementationIndexedProperty |
3117 { | 3128 { |
3118 my $interface = shift; | 3129 my $interface = shift; |
3119 my $interfaceName = $interface->name; | 3130 my $interfaceName = $interface->name; |
3120 my $implClassName = GetImplClassName($interface); | 3131 my $implClassName = GetImplClassName($interface); |
3121 my $v8ClassName = GetV8ClassName($interface); | 3132 my $v8ClassName = GetV8ClassName($interface); |
3122 | 3133 |
3123 my $indexedGetterfunction = GetIndexedGetterFunction($interface); | 3134 my $indexedGetterfunction = GetIndexedGetterFunction($interface); |
3124 my $hasCustomIndexedSetter = $interface->extendedAttributes->{"CustomIndexed Setter"}; | 3135 my $hasCustomIndexedSetter = $interface->extendedAttributes->{"CustomIndexed Setter"}; |
3125 my $hasCustomIndexedGetter = $interface->extendedAttributes->{"CustomIndexed Getter"}; | 3136 my $hasCustomIndexedGetter = $interface->extendedAttributes->{"CustomIndexed Getter"}; |
(...skipping 27 matching lines...) Expand all Loading... | |
3153 my $code = ""; | 3164 my $code = ""; |
3154 $code .= " desc->${setOn}Template()->SetIndexedPropertyHandler(${v8ClassN ame}::indexedPropertyGetter"; | 3165 $code .= " desc->${setOn}Template()->SetIndexedPropertyHandler(${v8ClassN ame}::indexedPropertyGetter"; |
3155 $code .= $hasCustomIndexedSetter ? ", ${v8ClassName}::indexedPropertySetter" : ", 0"; | 3166 $code .= $hasCustomIndexedSetter ? ", ${v8ClassName}::indexedPropertySetter" : ", 0"; |
3156 $code .= ", 0"; # IndexedPropertyQuery -- not being used at the moment. | 3167 $code .= ", 0"; # IndexedPropertyQuery -- not being used at the moment. |
3157 $code .= $hasDeleter ? ", ${v8ClassName}::indexedPropertyDeleter" : ", 0"; | 3168 $code .= $hasDeleter ? ", ${v8ClassName}::indexedPropertyDeleter" : ", 0"; |
3158 $code .= ", nodeCollectionIndexedPropertyEnumerator<${implClassName}>" if $h asEnumerator; | 3169 $code .= ", nodeCollectionIndexedPropertyEnumerator<${implClassName}>" if $h asEnumerator; |
3159 $code .= ");\n"; | 3170 $code .= ");\n"; |
3160 | 3171 |
3161 if ($indexedGetterfunction && !$hasCustomIndexedGetter) { | 3172 if ($indexedGetterfunction && !$hasCustomIndexedGetter) { |
3162 my $returnType = $indexedGetterfunction->signature->type; | 3173 my $returnType = $indexedGetterfunction->signature->type; |
3174 my $nativeType = GetNativeType($returnType); | |
3163 my $methodName = $indexedGetterfunction->signature->name; | 3175 my $methodName = $indexedGetterfunction->signature->name; |
3164 $methodName ||= $indexedGetterfunction->signature->extendedAttributes->{ "ImplementedAs"}; | 3176 $methodName ||= $indexedGetterfunction->signature->extendedAttributes->{ "ImplementedAs"}; |
3165 AddToImplIncludes("bindings/v8/V8Collection.h"); | 3177 AddToImplIncludes("bindings/v8/V8Collection.h"); |
3166 my $jsValue = ""; | 3178 my $nativeExpression = "element"; |
3167 my $nativeType = GetNativeType($returnType); | 3179 $nativeExpression .= ".release()" if (IsRefPtrType($returnType)); |
3168 my $isNull = ""; | 3180 my $isNull = GetIsNullExpression($returnType, "element"); |
3169 | 3181 my $returnJSValueCode = NativeToJSValue($indexedGetterfunction->signatur e->type, $indexedGetterfunction->signature->extendedAttributes, $nativeExpressio n, " ", "return", "info.Holder()", "info.GetIsolate()", "info", "collection", "", ""); |
3170 if (IsRefPtrType($returnType)) { | |
3171 AddToImplIncludes("V8$returnType.h"); | |
3172 $isNull = "!element"; | |
3173 $jsValue = NativeToJSValue($indexedGetterfunction->signature, "eleme nt.release()", "info.Holder()", "info.GetIsolate()", "info", "collection", "", " "); | |
3174 } else { | |
3175 $isNull = "element.isNull()"; | |
3176 $jsValue = NativeToJSValue($indexedGetterfunction->signature, "eleme nt", "info.Holder()", "info.GetIsolate()"); | |
3177 } | |
3178 | 3182 |
3179 $implementation{nameSpaceWebCore}->add(<<END); | 3183 $implementation{nameSpaceWebCore}->add(<<END); |
3180 v8::Handle<v8::Value> ${v8ClassName}::indexedPropertyGetter(uint32_t index, cons t v8::AccessorInfo& info) | 3184 v8::Handle<v8::Value> ${v8ClassName}::indexedPropertyGetter(uint32_t index, cons t v8::AccessorInfo& info) |
3181 { | 3185 { |
3182 ASSERT(V8DOMWrapper::maybeDOMWrapper(info.Holder())); | 3186 ASSERT(V8DOMWrapper::maybeDOMWrapper(info.Holder())); |
3183 ${implClassName}* collection = toNative(info.Holder()); | 3187 ${implClassName}* collection = toNative(info.Holder()); |
3184 $nativeType element = collection->$methodName(index); | 3188 $nativeType element = collection->$methodName(index); |
3185 if ($isNull) | 3189 if (${isNull}) |
3186 return v8Undefined(); | 3190 return v8Undefined(); |
3187 return $jsValue; | 3191 ${returnJSValueCode} |
3188 } | 3192 } |
3189 | 3193 |
3190 END | 3194 END |
3191 } | 3195 } |
3192 return $code; | 3196 return $code; |
3193 } | 3197 } |
3194 | 3198 |
3195 sub GenerateImplementationNamedPropertyGetter | 3199 sub GenerateImplementationNamedPropertyGetter |
3196 { | 3200 { |
3197 my $interface = shift; | 3201 my $interface = shift; |
3198 | 3202 |
3199 my $subCode = ""; | 3203 my $subCode = ""; |
3200 my $interfaceName = $interface->name; | 3204 my $interfaceName = $interface->name; |
3201 my $implClassName = GetImplClassName($interface); | 3205 my $implClassName = GetImplClassName($interface); |
3202 my $v8ClassName = GetV8ClassName($interface); | 3206 my $v8ClassName = GetV8ClassName($interface); |
3203 | 3207 |
3204 my $namedGetterFunction = GetNamedGetterFunction($interface); | 3208 my $namedGetterFunction = GetNamedGetterFunction($interface); |
3205 my $hasCustomNamedGetter = $interface->extendedAttributes->{"CustomNamedGett er"}; | 3209 my $hasCustomNamedGetter = $interface->extendedAttributes->{"CustomNamedGett er"}; |
3206 | 3210 |
3207 if ($namedGetterFunction && !$hasCustomNamedGetter) { | 3211 if ($namedGetterFunction && !$hasCustomNamedGetter) { |
3212 $subCode .= <<END; | |
3213 desc->InstanceTemplate()->SetNamedPropertyHandler(${v8ClassName}::namedPrope rtyGetter, 0, 0, 0, 0); | |
3214 END | |
3208 my $returnType = $namedGetterFunction->signature->type; | 3215 my $returnType = $namedGetterFunction->signature->type; |
3216 my $nativeType = GetNativeType($namedGetterFunction->signature->type); | |
3209 my $methodName = $namedGetterFunction->signature->name; | 3217 my $methodName = $namedGetterFunction->signature->name; |
3210 $methodName ||= $namedGetterFunction->signature->extendedAttributes->{"I mplementedAs"}; | 3218 $methodName ||= $namedGetterFunction->signature->extendedAttributes->{"I mplementedAs"}; |
3211 AddToImplIncludes("bindings/v8/V8Collection.h"); | 3219 AddToImplIncludes("bindings/v8/V8Collection.h"); |
3212 $subCode .= <<END; | 3220 my $nativeExpression = "element"; |
3213 desc->InstanceTemplate()->SetNamedPropertyHandler(${v8ClassName}::namedPrope rtyGetter, 0, 0, 0, 0); | 3221 $nativeExpression .= ".release()" if (IsRefPtrType($returnType)); |
3214 END | 3222 my $isNull = GetIsNullExpression($returnType, "element"); |
3215 my $jsValue = ""; | 3223 my $returnJSValueCode = NativeToJSValue($namedGetterFunction->signature- >type, $namedGetterFunction->signature->extendedAttributes, $nativeExpression, " ", "return", "info.Holder()", "info.GetIsolate()", "info", "collection", "", ""); |
3216 my $nativeType = GetNativeType($returnType); | |
3217 my $isNull = ""; | |
3218 | |
3219 if (IsRefPtrType($returnType)) { | |
3220 AddToImplIncludes("V8$returnType.h"); | |
3221 $isNull = "!element"; | |
3222 $jsValue = NativeToJSValue($namedGetterFunction->signature, "element .release()", "info.Holder()", "info.GetIsolate()", "info", "collection", "", "") ; | |
3223 } else { | |
3224 $isNull = "element.isNull()"; | |
3225 $jsValue = NativeToJSValue($namedGetterFunction->signature, "element ", "info.Holder()", "info.GetIsolate()"); | |
3226 } | |
3227 | 3224 |
3228 $implementation{nameSpaceWebCore}->add(<<END); | 3225 $implementation{nameSpaceWebCore}->add(<<END); |
3229 v8::Handle<v8::Value> ${v8ClassName}::namedPropertyGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) | 3226 v8::Handle<v8::Value> ${v8ClassName}::namedPropertyGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) |
3230 { | 3227 { |
3231 if (!info.Holder()->GetRealNamedPropertyInPrototypeChain(name).IsEmpty()) | 3228 if (!info.Holder()->GetRealNamedPropertyInPrototypeChain(name).IsEmpty()) |
3232 return v8Undefined(); | 3229 return v8Undefined(); |
3233 if (info.Holder()->HasRealNamedCallbackProperty(name)) | 3230 if (info.Holder()->HasRealNamedCallbackProperty(name)) |
3234 return v8Undefined(); | 3231 return v8Undefined(); |
3235 | 3232 |
3236 ASSERT(V8DOMWrapper::maybeDOMWrapper(info.Holder())); | 3233 ASSERT(V8DOMWrapper::maybeDOMWrapper(info.Holder())); |
3237 ${implClassName}* collection = toNative(info.Holder()); | 3234 ${implClassName}* collection = toNative(info.Holder()); |
3238 AtomicString propertyName = toWebCoreAtomicString(name); | 3235 AtomicString propertyName = toWebCoreAtomicString(name); |
3239 ${nativeType} element = collection->${methodName}(propertyName); | 3236 ${nativeType} element = collection->${methodName}(propertyName); |
3240 if (${isNull}) | 3237 if (${isNull}) |
3241 return v8Undefined(); | 3238 return v8Undefined(); |
3242 return ${jsValue}; | 3239 ${returnJSValueCode} |
3243 } | 3240 } |
3244 | 3241 |
3245 END | 3242 END |
3246 } | 3243 } |
3247 | 3244 |
3248 if ($hasCustomNamedGetter) { | 3245 if ($hasCustomNamedGetter) { |
3249 my $hasCustomNamedSetter = $interface->extendedAttributes->{"CustomNamed Setter"}; | 3246 my $hasCustomNamedSetter = $interface->extendedAttributes->{"CustomNamed Setter"}; |
3250 my $hasDeleter = $interface->extendedAttributes->{"CustomDeleteProperty" }; | 3247 my $hasDeleter = $interface->extendedAttributes->{"CustomDeleteProperty" }; |
3251 my $hasEnumerator = $interface->extendedAttributes->{"CustomEnumeratePro perty"}; | 3248 my $hasEnumerator = $interface->extendedAttributes->{"CustomEnumeratePro perty"}; |
3252 my $setOn = "Instance"; | 3249 my $setOn = "Instance"; |
(...skipping 859 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4112 $code .= " return true;\n\n"; | 4109 $code .= " return true;\n\n"; |
4113 $code .= " v8::HandleScope handleScope;\n\n"; | 4110 $code .= " v8::HandleScope handleScope;\n\n"; |
4114 $code .= " v8::Handle<v8::Context> v8Context = toV8Context(script ExecutionContext(), m_world.get());\n"; | 4111 $code .= " v8::Handle<v8::Context> v8Context = toV8Context(script ExecutionContext(), m_world.get());\n"; |
4115 $code .= " if (v8Context.IsEmpty())\n"; | 4112 $code .= " if (v8Context.IsEmpty())\n"; |
4116 $code .= " return true;\n\n"; | 4113 $code .= " return true;\n\n"; |
4117 $code .= " v8::Context::Scope scope(v8Context);\n\n"; | 4114 $code .= " v8::Context::Scope scope(v8Context);\n\n"; |
4118 | 4115 |
4119 @args = (); | 4116 @args = (); |
4120 foreach my $param (@params) { | 4117 foreach my $param (@params) { |
4121 my $paramName = $param->name; | 4118 my $paramName = $param->name; |
4122 $code .= " v8::Handle<v8::Value> ${paramName}Handle = " . Nat iveToJSValue($param, $paramName, "v8::Handle<v8::Object>()", "v8Context->GetIsol ate()", "") . ";\n"; | 4119 $code .= NativeToJSValue($param->type, $param->extendedAttribute s, $paramName, " ", "v8::Handle<v8::Value> ${paramName}Handle =", "v8::Handle <v8::Object>()", "v8Context->GetIsolate()", "") . "\n"; |
4123 $code .= " if (${paramName}Handle.IsEmpty()) {\n"; | 4120 $code .= " if (${paramName}Handle.IsEmpty()) {\n"; |
4124 $code .= " if (!isScriptControllerTerminating())\n"; | 4121 $code .= " if (!isScriptControllerTerminating())\n"; |
4125 $code .= " CRASH();\n"; | 4122 $code .= " CRASH();\n"; |
4126 $code .= " return true;\n"; | 4123 $code .= " return true;\n"; |
4127 $code .= " }\n"; | 4124 $code .= " }\n"; |
4128 push(@args, " ${paramName}Handle"); | 4125 push(@args, " ${paramName}Handle"); |
4129 } | 4126 } |
4130 | 4127 |
4131 if (scalar(@args) > 0) { | 4128 if (scalar(@args) > 0) { |
4132 $code .= "\n v8::Handle<v8::Value> argv[] = {\n"; | 4129 $code .= "\n v8::Handle<v8::Value> argv[] = {\n"; |
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4370 # If the implementing class is a POD type, commit changes | 4367 # If the implementing class is a POD type, commit changes |
4371 if (IsSVGTypeNeedingTearOff($interfaceName) and not $interfaceName =~ /List$ /) { | 4368 if (IsSVGTypeNeedingTearOff($interfaceName) and not $interfaceName =~ /List$ /) { |
4372 $code .= $indent . "wrapper->commitChange();\n"; | 4369 $code .= $indent . "wrapper->commitChange();\n"; |
4373 } | 4370 } |
4374 | 4371 |
4375 $return .= ".release()" if ($returnIsRef); | 4372 $return .= ".release()" if ($returnIsRef); |
4376 | 4373 |
4377 my $nativeValue; | 4374 my $nativeValue; |
4378 # FIXME: Update for all ScriptWrappables. | 4375 # FIXME: Update for all ScriptWrappables. |
4379 if (IsDOMNodeType($interfaceName)) { | 4376 if (IsDOMNodeType($interfaceName)) { |
4380 $nativeValue = NativeToJSValue($function->signature, $return, "args.Hold er()", "args.GetIsolate()", "args", "imp", "ReturnUnsafeHandle", $forMainWorldSu ffix); | 4377 $nativeValue = NativeToJSValue($function->signature->type, $function->si gnature->extendedAttributes, $return, $indent, "return", "args.Holder()", "args. GetIsolate()", "args", "imp", "ReturnUnsafeHandle", $forMainWorldSuffix); |
4381 } else { | 4378 } else { |
4382 $nativeValue = NativeToJSValue($function->signature, $return, "args.Hold er()", "args.GetIsolate()", 0, 0, "ReturnUnsafeHandle", $forMainWorldSuffix); | 4379 $nativeValue = NativeToJSValue($function->signature->type, $function->si gnature->extendedAttributes, $return, $indent, "return", "args.Holder()", "args. GetIsolate()", 0, 0, "ReturnUnsafeHandle", $forMainWorldSuffix); |
4383 } | 4380 } |
4384 | 4381 |
4385 $code .= $indent . "return " . $nativeValue . ";\n"; | 4382 $code .= $nativeValue . "\n"; |
4386 | 4383 |
4387 return $code; | 4384 return $code; |
4388 } | 4385 } |
4389 | 4386 |
4390 sub GetNativeTypeFromSignature | 4387 sub GetNativeTypeFromSignature |
4391 { | 4388 { |
4392 my $signature = shift; | 4389 my $signature = shift; |
4393 my $parameterIndex = shift; | 4390 my $parameterIndex = shift; |
4394 | 4391 |
4395 my $type = $signature->type; | 4392 my $type = $signature->type; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4447 return "double" if $type eq "Date"; | 4444 return "double" if $type eq "Date"; |
4448 return "ScriptValue" if $type eq "any"; | 4445 return "ScriptValue" if $type eq "any"; |
4449 return "Dictionary" if $type eq "Dictionary"; | 4446 return "Dictionary" if $type eq "Dictionary"; |
4450 | 4447 |
4451 return "RefPtr<DOMStringList>" if $type eq "DOMStringList"; | 4448 return "RefPtr<DOMStringList>" if $type eq "DOMStringList"; |
4452 return "RefPtr<MediaQueryListListener>" if $type eq "MediaQueryListListener" ; | 4449 return "RefPtr<MediaQueryListListener>" if $type eq "MediaQueryListListener" ; |
4453 return "RefPtr<NodeFilter>" if $type eq "NodeFilter"; | 4450 return "RefPtr<NodeFilter>" if $type eq "NodeFilter"; |
4454 return "RefPtr<SerializedScriptValue>" if $type eq "SerializedScriptValue"; | 4451 return "RefPtr<SerializedScriptValue>" if $type eq "SerializedScriptValue"; |
4455 return "RefPtr<XPathNSResolver>" if $type eq "XPathNSResolver"; | 4452 return "RefPtr<XPathNSResolver>" if $type eq "XPathNSResolver"; |
4456 | 4453 |
4454 # Union type | |
4455 if (IsUnionType($type)) { | |
4456 my $types = $type->unionMemberTypes; | |
4457 die "Currently only 2 values of non-union type is supported as union typ e.\n" unless scalar(@$types)==2; | |
4458 return "WTF::UnionType2<" . (join ", ", @$types) . ">"; | |
4459 } | |
4460 | |
4457 # We need to check [ImplementedBy] extended attribute for wrapper types. | 4461 # We need to check [ImplementedBy] extended attribute for wrapper types. |
4458 if (IsWrapperType($type)) { | 4462 if (IsWrapperType($type)) { |
4459 my $interface = ParseInterface($type); | 4463 my $interface = ParseInterface($type); |
4460 my $implClassName = GetImplClassName($interface); | 4464 my $implClassName = GetImplClassName($interface); |
4461 return $isParameter ? "${implClassName}*" : "RefPtr<${implClassName}>"; | 4465 return $isParameter ? "${implClassName}*" : "RefPtr<${implClassName}>"; |
4462 } | 4466 } |
4463 return "RefPtr<${type}>" if IsRefPtrType($type) and not $isParameter; | 4467 return "RefPtr<${type}>" if IsRefPtrType($type) and not $isParameter; |
4464 | 4468 |
4465 my $arrayType = GetArrayType($type); | 4469 my $arrayType = GetArrayType($type); |
4466 my $sequenceType = GetSequenceType($type); | 4470 my $sequenceType = GetSequenceType($type); |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4679 'long long' => 1, | 4683 'long long' => 1, |
4680 'long' => 1, | 4684 'long' => 1, |
4681 'short' => 1, | 4685 'short' => 1, |
4682 'unsigned int' => 1, | 4686 'unsigned int' => 1, |
4683 'unsigned long long' => 1, | 4687 'unsigned long long' => 1, |
4684 'unsigned long' => 1, | 4688 'unsigned long' => 1, |
4685 'unsigned short' => 1, | 4689 'unsigned short' => 1, |
4686 'void' => 1 | 4690 'void' => 1 |
4687 ); | 4691 ); |
4688 | 4692 |
4693 sub IsUnionType | |
4694 { | |
4695 my $type = shift; # string or UnionType | |
4696 return 1 if ref($type) eq "UnionType"; | |
4697 return 0; | |
4698 } | |
4689 | 4699 |
4690 sub IsWrapperType | 4700 sub IsWrapperType |
4691 { | 4701 { |
4692 my $type = shift; | 4702 my $type = shift; |
4693 return 0 if GetArrayType($type); | 4703 return 0 if GetArrayType($type); |
4694 return 0 if GetSequenceType($type); | 4704 return 0 if GetSequenceType($type); |
4695 return 0 if IsEnumType($type); | 4705 return 0 if IsEnumType($type); |
4696 return !($non_wrapper_types{$type}); | 4706 return !($non_wrapper_types{$type}); |
4697 } | 4707 } |
4698 | 4708 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4755 return 1 if $type =~ /^SVG.*Element$/; | 4765 return 1 if $type =~ /^SVG.*Element$/; |
4756 | 4766 |
4757 return 1 if $type eq 'TestNode'; | 4767 return 1 if $type eq 'TestNode'; |
4758 | 4768 |
4759 return 0; | 4769 return 0; |
4760 } | 4770 } |
4761 | 4771 |
4762 | 4772 |
4763 sub NativeToJSValue | 4773 sub NativeToJSValue |
4764 { | 4774 { |
4765 my $signature = shift; | 4775 my $type = shift; |
4766 my $value = shift; | 4776 my $extendedAttributes = shift; |
4777 my $nativeValue = shift; | |
4778 my $indent = shift; # added before every line | |
4779 my $receiver = shift; # "return" or "<variableName> =" | |
4767 my $getCreationContext = shift; | 4780 my $getCreationContext = shift; |
4768 my $getIsolate = shift; | 4781 my $getIsolate = shift; |
4769 die "An Isolate is mandatory for native value => JS value conversion." unles s $getIsolate; | 4782 die "An Isolate is mandatory for native value => JS value conversion." unles s $getIsolate; |
4770 my $getHolderContainer = shift; | 4783 my $getHolderContainer = shift; |
4771 my $getHolderContainerArg = $getHolderContainer ? ", $getHolderContainer" : ""; | 4784 my $getHolderContainerArg = $getHolderContainer ? ", $getHolderContainer" : ""; |
4772 my $getScriptWrappable = shift; | 4785 my $getScriptWrappable = shift; |
4773 my $getScriptWrappableArg = $getScriptWrappable ? ", $getScriptWrappable" : ""; | 4786 my $getScriptWrappableArg = $getScriptWrappable ? ", $getScriptWrappable" : ""; |
4774 my $returnHandleType = shift; | 4787 my $returnHandleType = shift; |
4775 my $returnHandleTypeArg = $returnHandleType ? ", $returnHandleType" : ""; | 4788 my $returnHandleTypeArg = $returnHandleType ? ", $returnHandleType" : ""; |
4776 my $forMainWorldSuffix = shift; | 4789 my $forMainWorldSuffix = shift; |
4777 | 4790 |
4778 my $type = $signature->type; | 4791 # Union type |
4792 if (IsUnionType($type)) { | |
4793 my $types = $type->unionMemberTypes; | |
4794 die "Currently only 2 values of non-union type is supported as union typ e.\n" unless scalar(@$types)==2; | |
4795 my $code = ""; | |
4796 for my $i (0 .. scalar(@$types)-1) { | |
4797 my $unionMemberType = $types->[$i]; | |
4798 my $memberNumber = $i + 1; | |
4799 my $returnJSValueCode = NativeToJSValue($unionMemberType, $extendedA ttributes, "${nativeValue}.member${memberNumber}()", $indent . " ", $receiver , $getCreationContext, $getIsolate, $getHolderContainer, $getScriptWrappable, $r eturnHandleType, $forMainWorldSuffix); | |
4800 $code .= <<END; | |
4801 ${indent}if (${nativeValue}.member${memberNumber}()) | |
4802 ${returnJSValueCode} | |
4803 END | |
4804 } | |
4805 $code .= $indent . "ASSERT_NOT_REACHED();\n"; | |
4806 $code .= $indent . "return v8Undefined();"; | |
4807 return $code; | |
4808 } | |
4779 | 4809 |
4780 return "v8Boolean($value, $getIsolate)" if $type eq "boolean"; | 4810 return "$indent$receiver v8Boolean($nativeValue, $getIsolate);" if $type eq "boolean"; |
4781 return "v8Undefined()" if $type eq "void"; # equivalent to v8Undefined() | 4811 return "$indent$receiver v8Undefined();" if $type eq "void"; # equivalen t to v8Undefined() |
4782 | 4812 |
4783 # HTML5 says that unsigned reflected attributes should be in the range | 4813 # HTML5 says that unsigned reflected attributes should be in the range |
4784 # [0, 2^31). When a value isn't in this range, a default value (or 0) | 4814 # [0, 2^31). When a value isn't in this range, a default value (or 0) |
4785 # should be returned instead. | 4815 # should be returned instead. |
4786 if ($signature->extendedAttributes->{"Reflect"} and ($type eq "unsigned long " or $type eq "unsigned short")) { | 4816 if ($extendedAttributes->{"Reflect"} and ($type eq "unsigned long" or $type eq "unsigned short")) { |
4787 $value =~ s/getUnsignedIntegralAttribute/getIntegralAttribute/g; | 4817 $nativeValue =~ s/getUnsignedIntegralAttribute/getIntegralAttribute/g; |
4788 return "v8UnsignedInteger(std::max(0, " . $value . "), $getIsolate)"; | 4818 return "$indent$receiver v8UnsignedInteger(std::max(0, " . $nativeValue . "), $getIsolate);"; |
4789 } | 4819 } |
4790 | 4820 |
4791 # For all the types where we use 'int' as the representation type, | 4821 # For all the types where we use 'int' as the representation type, |
4792 # we use v8Integer() which has a fast small integer conversion check. | 4822 # we use v8Integer() which has a fast small integer conversion check. |
4793 my $nativeType = GetNativeType($type); | 4823 my $nativeType = GetNativeType($type); |
4794 return "v8Integer($value, $getIsolate)" if $nativeType eq "int"; | 4824 return "$indent$receiver v8Integer($nativeValue, $getIsolate);" if $nativeTy pe eq "int"; |
4795 return "v8UnsignedInteger($value, $getIsolate)" if $nativeType eq "unsigned" ; | 4825 return "$indent$receiver v8UnsignedInteger($nativeValue, $getIsolate);" if $ nativeType eq "unsigned"; |
4796 | 4826 |
4797 return "v8DateOrNull($value, $getIsolate)" if $type eq "Date"; | 4827 return "$indent$receiver v8DateOrNull($nativeValue, $getIsolate);" if $type eq "Date"; |
4798 # long long and unsigned long long are not representable in ECMAScript. | 4828 # long long and unsigned long long are not representable in ECMAScript. |
4799 return "v8::Number::New(static_cast<double>($value))" if $type eq "long long " or $type eq "unsigned long long" or $type eq "DOMTimeStamp"; | 4829 return "$indent$receiver v8::Number::New(static_cast<double>($nativeValue)); " if $type eq "long long" or $type eq "unsigned long long" or $type eq "DOMTimeS tamp"; |
4800 return "v8::Number::New($value)" if IsPrimitiveType($type); | 4830 return "$indent$receiver v8::Number::New($nativeValue);" if IsPrimitiveType( $type); |
4801 return "$value.v8Value()" if $nativeType eq "ScriptValue"; | 4831 return "$indent$receiver $nativeValue.v8Value();" if $nativeType eq "ScriptV alue"; |
4802 | 4832 |
4803 if ($type eq "DOMString" or IsEnumType($type)) { | 4833 if ($type eq "DOMString" or IsEnumType($type)) { |
4804 my $conv = $signature->extendedAttributes->{"TreatReturnedNullStringAs"} ; | 4834 my $conv = $extendedAttributes->{"TreatReturnedNullStringAs"}; |
4805 if (defined $conv) { | 4835 if (defined $conv) { |
4806 return "v8StringOrNull($value, $getIsolate$returnHandleTypeArg)" if $conv eq "Null"; | 4836 return "$indent$receiver v8StringOrNull($nativeValue, $getIsolate$re turnHandleTypeArg);" if $conv eq "Null"; |
4807 return "v8StringOrUndefined($value, $getIsolate$returnHandleTypeArg) " if $conv eq "Undefined"; | 4837 return "$indent$receiver v8StringOrUndefined($nativeValue, $getIsola te$returnHandleTypeArg);" if $conv eq "Undefined"; |
4808 | 4838 |
4809 die "Unknown value for TreatReturnedNullStringAs extended attribute" ; | 4839 die "Unknown value for TreatReturnedNullStringAs extended attribute" ; |
4810 } | 4840 } |
4811 return "v8String($value, $getIsolate$returnHandleTypeArg)"; | 4841 return "$indent$receiver v8String($nativeValue, $getIsolate$returnHandle TypeArg);"; |
4812 } | 4842 } |
4813 | 4843 |
4814 my $arrayType = GetArrayType($type); | 4844 my $arrayType = GetArrayType($type); |
4815 my $sequenceType = GetSequenceType($type); | 4845 my $sequenceType = GetSequenceType($type); |
4816 my $arrayOrSequenceType = $arrayType || $sequenceType; | 4846 my $arrayOrSequenceType = $arrayType || $sequenceType; |
4817 | 4847 |
4818 if ($arrayOrSequenceType) { | 4848 if ($arrayOrSequenceType) { |
4819 if (IsRefPtrType($arrayOrSequenceType)) { | 4849 if (IsRefPtrType($arrayOrSequenceType)) { |
4820 AddIncludesForType($arrayOrSequenceType); | 4850 AddIncludesForType($arrayOrSequenceType); |
4821 } | 4851 } |
4822 return "v8Array($value, $getIsolate)"; | 4852 return "$indent$receiver v8Array($nativeValue, $getIsolate);"; |
4823 } | 4853 } |
4824 | 4854 |
4825 AddIncludesForType($type); | 4855 AddIncludesForType($type); |
4826 | 4856 |
4827 if (IsDOMNodeType($type) || $type eq "EventTarget") { | 4857 if (IsDOMNodeType($type) || $type eq "EventTarget") { |
4828 if ($getScriptWrappable) { | 4858 if ($getScriptWrappable) { |
4829 return "toV8Fast${forMainWorldSuffix}($value$getHolderContainerArg$get ScriptWrappableArg)"; | 4859 return "$indent$receiver toV8Fast${forMainWorldSuffix}($nativeValue$ge tHolderContainerArg$getScriptWrappableArg);"; |
4830 } | 4860 } |
4831 return "toV8($value, $getCreationContext, $getIsolate)"; | 4861 return "$indent$receiver toV8($nativeValue, $getCreationContext, $getIsola te);"; |
4832 } | 4862 } |
4833 | 4863 |
4834 if ($type eq "EventListener") { | 4864 if ($type eq "EventListener") { |
4835 AddToImplIncludes("bindings/v8/V8AbstractEventListener.h"); | 4865 AddToImplIncludes("bindings/v8/V8AbstractEventListener.h"); |
4836 return "${value} ? v8::Handle<v8::Value>(static_cast<V8AbstractEventList ener*>(${value})->getListenerObject(imp->scriptExecutionContext())) : v8::Handle <v8::Value>(v8Null($getIsolate))"; | 4866 return "$indent$receiver $nativeValue ? v8::Handle<v8::Value>(static_cas t<V8AbstractEventListener*>(${nativeValue})->getListenerObject(imp->scriptExecut ionContext())) : v8::Handle<v8::Value>(v8Null($getIsolate));"; |
4837 } | 4867 } |
4838 | 4868 |
4839 if ($type eq "SerializedScriptValue") { | 4869 if ($type eq "SerializedScriptValue") { |
4840 AddToImplIncludes("$type.h"); | 4870 AddToImplIncludes("$type.h"); |
4841 return "$value ? $value->deserialize() : v8::Handle<v8::Value>(v8Null($g etIsolate))"; | 4871 return "$indent$receiver $nativeValue ? $nativeValue->deserialize() : v8 ::Handle<v8::Value>(v8Null($getIsolate));"; |
4842 } | 4872 } |
4843 | 4873 |
4844 AddToImplIncludes("wtf/RefCounted.h"); | 4874 AddToImplIncludes("wtf/RefCounted.h"); |
4845 AddToImplIncludes("wtf/RefPtr.h"); | 4875 AddToImplIncludes("wtf/RefPtr.h"); |
4846 AddToImplIncludes("wtf/GetPtr.h"); | 4876 AddToImplIncludes("wtf/GetPtr.h"); |
4847 | 4877 |
4848 if ($getScriptWrappable) { | 4878 if ($getScriptWrappable) { |
4849 return "toV8Fast$forMainWorldSuffix($value$getHolderContainerArg$getSc riptWrappableArg)"; | 4879 return "$indent$receiver toV8Fast$forMainWorldSuffix($nativeValue$getH olderContainerArg$getScriptWrappableArg);"; |
4850 } | 4880 } |
4851 return "toV8($value, $getCreationContext, $getIsolate)"; | 4881 return "$indent$receiver toV8($nativeValue, $getCreationContext, $getIsolate );"; |
4852 } | 4882 } |
4853 | 4883 |
4854 sub WriteData | 4884 sub WriteData |
4855 { | 4885 { |
4856 my $object = shift; | 4886 my $object = shift; |
4857 my $interface = shift; | 4887 my $interface = shift; |
4858 my $outputDirectory = shift; | 4888 my $outputDirectory = shift; |
4859 my $outputHeadersDirectory = shift; | 4889 my $outputHeadersDirectory = shift; |
4860 | 4890 |
4861 my $name = $interface->name; | 4891 my $name = $interface->name; |
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5113 | 5143 |
5114 sub IsRefPtrType | 5144 sub IsRefPtrType |
5115 { | 5145 { |
5116 my $type = shift; | 5146 my $type = shift; |
5117 | 5147 |
5118 return 0 if IsPrimitiveType($type); | 5148 return 0 if IsPrimitiveType($type); |
5119 return 0 if GetArrayType($type); | 5149 return 0 if GetArrayType($type); |
5120 return 0 if GetSequenceType($type); | 5150 return 0 if GetSequenceType($type); |
5121 return 0 if $type eq "DOMString"; | 5151 return 0 if $type eq "DOMString"; |
5122 return 0 if IsEnumType($type); | 5152 return 0 if IsEnumType($type); |
5153 return 0 if IsUnionType($type); | |
5123 | 5154 |
5124 return 1; | 5155 return 1; |
5125 } | 5156 } |
5126 | 5157 |
5127 sub GetSVGTypeNeedingTearOff | 5158 sub GetSVGTypeNeedingTearOff |
5128 { | 5159 { |
5129 my $type = shift; | 5160 my $type = shift; |
5130 | 5161 |
5131 return $svgTypeNeedingTearOff{$type} if exists $svgTypeNeedingTearOff{$type} ; | 5162 return $svgTypeNeedingTearOff{$type} if exists $svgTypeNeedingTearOff{$type} ; |
5132 return undef; | 5163 return undef; |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5459 if ($currentInterface->extendedAttributes->{$extendedAttribute}) { | 5490 if ($currentInterface->extendedAttributes->{$extendedAttribute}) { |
5460 $found = 1; | 5491 $found = 1; |
5461 } | 5492 } |
5462 return 1 if $found; | 5493 return 1 if $found; |
5463 }, 0); | 5494 }, 0); |
5464 | 5495 |
5465 return $found; | 5496 return $found; |
5466 } | 5497 } |
5467 | 5498 |
5468 1; | 5499 1; |
OLD | NEW |