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 1624 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1635 END | 1635 END |
1636 } elsif ($attribute->signature->type eq "SerializedScriptValue" && $attrExt- >{"CachedAttribute"}) { | 1636 } elsif ($attribute->signature->type eq "SerializedScriptValue" && $attrExt- >{"CachedAttribute"}) { |
1637 my $getterFunc = ToMethodName($attribute->signature->name); | 1637 my $getterFunc = ToMethodName($attribute->signature->name); |
1638 $code .= <<END; | 1638 $code .= <<END; |
1639 RefPtr<SerializedScriptValue> serialized = imp->${getterFunc}(); | 1639 RefPtr<SerializedScriptValue> serialized = imp->${getterFunc}(); |
1640 value = serialized ? serialized->deserialize() : v8::Handle<v8::Value>(v8Nul l(info.GetIsolate())); | 1640 value = serialized ? serialized->deserialize() : v8::Handle<v8::Value>(v8Nul l(info.GetIsolate())); |
1641 info.Holder()->SetHiddenValue(propertyName, value); | 1641 info.Holder()->SetHiddenValue(propertyName, value); |
1642 return value; | 1642 return value; |
1643 END | 1643 END |
1644 } else { | 1644 } else { |
1645 $code .= " return " . NativeToJSValue($attribute->signature, $express ion, "info.Holder()", "info.GetIsolate()", "info", "imp", "ReturnUnsafeHandle", $forMainWorldSuffix).";\n"; | 1645 $code .= " return " . NativeToJSValue($attribute->signature->type, $a ttribute->signature->extendedAttributes, $expression, "info.Holder()", "info.Get Isolate()", "info", "imp", "ReturnUnsafeHandle", $forMainWorldSuffix).";\n"; |
1646 } | 1646 } |
1647 | 1647 |
1648 $code .= "}\n\n"; # end of getter | 1648 $code .= "}\n\n"; # end of getter |
1649 $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; | 1649 $code .= "#endif // ${conditionalString}\n\n" if $conditionalString; |
1650 $implementation{nameSpaceInternal}->add($code); | 1650 $implementation{nameSpaceInternal}->add($code); |
1651 } | 1651 } |
1652 | 1652 |
1653 sub ShouldKeepAttributeAlive | 1653 sub ShouldKeepAttributeAlive |
1654 { | 1654 { |
1655 my ($interface, $attribute, $returnType) = @_; | 1655 my ($interface, $attribute, $returnType) = @_; |
(...skipping 1490 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3146 $code .= " } else {\n"; | 3146 $code .= " } else {\n"; |
3147 $code .= " ${conditional}$template->Set(v8::String::NewSymbol(\"$ name\"), v8::FunctionTemplate::New(${implClassName}V8Internal::${name}MethodCall back, v8Undefined(), ${signature}, $functionLength)$property_attributes);\n"; | 3147 $code .= " ${conditional}$template->Set(v8::String::NewSymbol(\"$ name\"), v8::FunctionTemplate::New(${implClassName}V8Internal::${name}MethodCall back, v8Undefined(), ${signature}, $functionLength)$property_attributes);\n"; |
3148 $code .= " }\n"; | 3148 $code .= " }\n"; |
3149 } else { | 3149 } else { |
3150 $code .= " ${conditional}$template->Set(v8::String::NewSymbol(\"$name \"), v8::FunctionTemplate::New(${implClassName}V8Internal::${name}MethodCallback , v8Undefined(), ${signature}, $functionLength)$property_attributes);\n"; | 3150 $code .= " ${conditional}$template->Set(v8::String::NewSymbol(\"$name \"), v8::FunctionTemplate::New(${implClassName}V8Internal::${name}MethodCallback , v8Undefined(), ${signature}, $functionLength)$property_attributes);\n"; |
3151 } | 3151 } |
3152 $code .= "#endif // ${conditionalString}\n" if $conditionalString; | 3152 $code .= "#endif // ${conditionalString}\n" if $conditionalString; |
3153 return $code; | 3153 return $code; |
3154 } | 3154 } |
3155 | 3155 |
3156 sub GetIsNullExpression | |
3157 { | |
3158 my $type = shift; | |
3159 my $variableName = shift; | |
3160 if (IsRefPtrType($type)) { | |
3161 return "!${variableName}"; | |
3162 } else { | |
3163 return "${variableName}.isNull()"; | |
3164 } | |
3165 } | |
3166 | |
3167 sub GetCreateJSValueStatements | |
3168 { | |
3169 my $variableName = shift; | |
3170 my $type = shift; | |
3171 my $extendedAttributes = shift; | |
3172 my $value = shift; # expression of native value | |
3173 my $getCreationContext = shift; | |
3174 my $getIsolate = shift; | |
3175 my $getHolderContainer = shift; | |
3176 my $getHolderContainerArg = $getHolderContainer ? ", $getHolderContainer" : ""; | |
3177 my $getScriptWrappable = shift; | |
3178 my $getScriptWrappableArg = $getScriptWrappable ? ", $getScriptWrappable" : ""; | |
3179 my $returnHandleType = shift; | |
3180 my $returnHandleTypeArg = $returnHandleType ? ", $returnHandleType" : ""; | |
3181 my $forMainWorldSuffix = shift; | |
3182 | |
3183 # Union type | |
3184 if (ref $type) { | |
3185 my $types = $type->unionType->unionMemberTypes; | |
3186 die "Currently only 2 values of non-union type is supported as union typ e.\n" unless scalar(@$types)==2 && scalar(grep {ref $_} @$types)==0; | |
3187 my $code = ""; | |
3188 for my $i (0 .. scalar(@$types)-1) { | |
3189 my $unionMemberType = $types->[$i]; | |
3190 my $jsValue = NativeToJSValue($unionMemberType, $extendedAttributes, "$value.getValue${i}()", $getCreationContext, $getIsolate, $getHolderContainer, $getScriptWrappable, $returnHandleType, $forMainWorldSuffix); | |
3191 $code .= <<END | |
3192 if (${value}.isValue${i}Enabled()) | |
3193 ${variableName} = ${jsValue}; | |
3194 END | |
3195 } | |
3196 return $code; | |
3197 } else { | |
3198 my $jsValue = NativeToJSValue($type, $extendedAttributes, $value, $getCr eationContext, $getIsolate, $getHolderContainer, $getScriptWrappable, $returnHan dleType, $forMainWorldSuffix); | |
3199 return " ${variableName} = ${jsValue};"; | |
3200 } | |
3201 } | |
3202 | |
3156 sub GenerateImplementationIndexedProperty | 3203 sub GenerateImplementationIndexedProperty |
3157 { | 3204 { |
3158 my $interface = shift; | 3205 my $interface = shift; |
3159 my $interfaceName = $interface->name; | 3206 my $interfaceName = $interface->name; |
3160 my $implClassName = GetImplClassName($interface); | 3207 my $implClassName = GetImplClassName($interface); |
3161 my $v8ClassName = GetV8ClassName($interface); | 3208 my $v8ClassName = GetV8ClassName($interface); |
3162 | 3209 |
3163 my $indexedGetterfunction = GetIndexedGetterFunction($interface); | 3210 my $indexedGetterfunction = GetIndexedGetterFunction($interface); |
3164 my $hasCustomIndexedSetter = $interface->extendedAttributes->{"CustomIndexed Setter"}; | 3211 my $hasCustomIndexedSetter = $interface->extendedAttributes->{"CustomIndexed Setter"}; |
3165 my $hasCustomIndexedGetter = $interface->extendedAttributes->{"CustomIndexed Getter"}; | 3212 my $hasCustomIndexedGetter = $interface->extendedAttributes->{"CustomIndexed Getter"}; |
(...skipping 27 matching lines...) Expand all Loading... | |
3193 my $code = ""; | 3240 my $code = ""; |
3194 $code .= " desc->${setOn}Template()->SetIndexedPropertyHandler(${v8ClassN ame}::indexedPropertyGetter"; | 3241 $code .= " desc->${setOn}Template()->SetIndexedPropertyHandler(${v8ClassN ame}::indexedPropertyGetter"; |
3195 $code .= $hasCustomIndexedSetter ? ", ${v8ClassName}::indexedPropertySetter" : ", 0"; | 3242 $code .= $hasCustomIndexedSetter ? ", ${v8ClassName}::indexedPropertySetter" : ", 0"; |
3196 $code .= ", 0"; # IndexedPropertyQuery -- not being used at the moment. | 3243 $code .= ", 0"; # IndexedPropertyQuery -- not being used at the moment. |
3197 $code .= $hasDeleter ? ", ${v8ClassName}::indexedPropertyDeleter" : ", 0"; | 3244 $code .= $hasDeleter ? ", ${v8ClassName}::indexedPropertyDeleter" : ", 0"; |
3198 $code .= ", nodeCollectionIndexedPropertyEnumerator<${implClassName}>" if $h asEnumerator; | 3245 $code .= ", nodeCollectionIndexedPropertyEnumerator<${implClassName}>" if $h asEnumerator; |
3199 $code .= ");\n"; | 3246 $code .= ");\n"; |
3200 | 3247 |
3201 if ($indexedGetterfunction && !$hasCustomIndexedGetter) { | 3248 if ($indexedGetterfunction && !$hasCustomIndexedGetter) { |
3202 my $returnType = $indexedGetterfunction->signature->type; | 3249 my $returnType = $indexedGetterfunction->signature->type; |
3250 my $nativeType = GetNativeType($returnType); | |
3203 my $methodName = $indexedGetterfunction->signature->name; | 3251 my $methodName = $indexedGetterfunction->signature->name; |
3204 $methodName ||= $indexedGetterfunction->signature->extendedAttributes->{ "ImplementedAs"}; | 3252 $methodName ||= $indexedGetterfunction->signature->extendedAttributes->{ "ImplementedAs"}; |
3205 AddToImplIncludes("bindings/v8/V8Collection.h"); | 3253 AddToImplIncludes("bindings/v8/V8Collection.h"); |
3206 my $jsValue = ""; | 3254 my $nativeExpression = "element"; |
3207 my $nativeType = GetNativeType($returnType); | 3255 $nativeExpression .= ".release()" if (IsRefPtrType($returnType)); |
3208 my $isNull = ""; | 3256 my $isNull = GetIsNullExpression($returnType, "element"); |
3209 | 3257 my $genJSValueStatements = GetCreateJSValueStatements("jsValue", $return Type, $indexedGetterfunction->signature->extendedAttributes, $nativeExpression, "info.Holder()", "info.GetIsolate()", "info", "collection", "", ""); |
3210 if (IsRefPtrType($returnType)) { | |
3211 AddToImplIncludes("V8$returnType.h"); | |
3212 $isNull = "!element"; | |
3213 $jsValue = NativeToJSValue($indexedGetterfunction->signature, "eleme nt.release()", "info.Holder()", "info.GetIsolate()", "info", "collection", "", " "); | |
3214 } else { | |
3215 $isNull = "element.isNull()"; | |
3216 $jsValue = NativeToJSValue($indexedGetterfunction->signature, "eleme nt", "info.Holder()", "info.GetIsolate()"); | |
3217 } | |
3218 | 3258 |
3219 $implementation{nameSpaceWebCore}->add(<<END); | 3259 $implementation{nameSpaceWebCore}->add(<<END); |
3220 v8::Handle<v8::Value> ${v8ClassName}::indexedPropertyGetter(uint32_t index, cons t v8::AccessorInfo& info) | 3260 v8::Handle<v8::Value> ${v8ClassName}::indexedPropertyGetter(uint32_t index, cons t v8::AccessorInfo& info) |
3221 { | 3261 { |
3222 ASSERT(V8DOMWrapper::maybeDOMWrapper(info.Holder())); | 3262 ASSERT(V8DOMWrapper::maybeDOMWrapper(info.Holder())); |
3223 ${implClassName}* collection = toNative(info.Holder()); | 3263 ${implClassName}* collection = toNative(info.Holder()); |
3224 $nativeType element = collection->$methodName(index); | 3264 $nativeType element = collection->$methodName(index); |
3225 if ($isNull) | 3265 if (${isNull}) |
3226 return v8Undefined(); | 3266 return v8Undefined(); |
3227 return $jsValue; | 3267 |
3268 v8::Handle<v8::Value> jsValue; | |
3269 $genJSValueStatements | |
3270 return jsValue; | |
3228 } | 3271 } |
3229 | 3272 |
3230 END | 3273 END |
3231 } | 3274 } |
3232 return $code; | 3275 return $code; |
3233 } | 3276 } |
3234 | 3277 |
3235 sub GenerateImplementationNamedPropertyGetter | 3278 sub GenerateImplementationNamedPropertyGetter |
3236 { | 3279 { |
3237 my $interface = shift; | 3280 my $interface = shift; |
3238 | 3281 |
3239 my $subCode = ""; | 3282 my $subCode = ""; |
3240 my $interfaceName = $interface->name; | 3283 my $interfaceName = $interface->name; |
3241 my $implClassName = GetImplClassName($interface); | 3284 my $implClassName = GetImplClassName($interface); |
3242 my $v8ClassName = GetV8ClassName($interface); | 3285 my $v8ClassName = GetV8ClassName($interface); |
3243 | 3286 |
3244 my $namedGetterFunction = GetNamedGetterFunction($interface); | 3287 my $namedGetterFunction = GetNamedGetterFunction($interface); |
3245 my $hasCustomNamedGetter = $interface->extendedAttributes->{"CustomNamedGett er"}; | 3288 my $hasCustomNamedGetter = $interface->extendedAttributes->{"CustomNamedGett er"}; |
3246 | 3289 |
3247 if ($namedGetterFunction && !$hasCustomNamedGetter) { | 3290 if ($namedGetterFunction && !$hasCustomNamedGetter) { |
3291 $subCode .= <<END; | |
3292 desc->InstanceTemplate()->SetNamedPropertyHandler(${v8ClassName}::namedPrope rtyGetter, 0, 0, 0, 0); | |
3293 END | |
3248 my $returnType = $namedGetterFunction->signature->type; | 3294 my $returnType = $namedGetterFunction->signature->type; |
3295 my $nativeType = GetNativeType($namedGetterFunction->signature->type); | |
3249 my $methodName = $namedGetterFunction->signature->name; | 3296 my $methodName = $namedGetterFunction->signature->name; |
3250 $methodName ||= $namedGetterFunction->signature->extendedAttributes->{"I mplementedAs"}; | 3297 $methodName ||= $namedGetterFunction->signature->extendedAttributes->{"I mplementedAs"}; |
3251 AddToImplIncludes("bindings/v8/V8Collection.h"); | 3298 AddToImplIncludes("bindings/v8/V8Collection.h"); |
3252 $subCode .= <<END; | 3299 my $nativeExpression = "element"; |
3253 desc->InstanceTemplate()->SetNamedPropertyHandler(${v8ClassName}::namedPrope rtyGetter, 0, 0, 0, 0); | 3300 $nativeExpression .= ".release()" if (IsRefPtrType($returnType)); |
3254 END | 3301 my $isNull = GetIsNullExpression($returnType, "element"); |
3255 my $jsValue = ""; | 3302 my $genJSValueStatements = GetCreateJSValueStatements("jsValue", $return Type, $namedGetterFunction->signature->extendedAttributes, $nativeExpression, "i nfo.Holder()", "info.GetIsolate()", "info", "collection", "", ""); |
3256 my $nativeType = GetNativeType($returnType); | |
3257 my $isNull = ""; | |
3258 | |
3259 if (IsRefPtrType($returnType)) { | |
3260 AddToImplIncludes("V8$returnType.h"); | |
3261 $isNull = "!element"; | |
3262 $jsValue = NativeToJSValue($namedGetterFunction->signature, "element .release()", "info.Holder()", "info.GetIsolate()", "info", "collection", "", "") ; | |
3263 } else { | |
3264 $isNull = "element.isNull()"; | |
3265 $jsValue = NativeToJSValue($namedGetterFunction->signature, "element ", "info.Holder()", "info.GetIsolate()"); | |
3266 } | |
3267 | 3303 |
3268 $implementation{nameSpaceWebCore}->add(<<END); | 3304 $implementation{nameSpaceWebCore}->add(<<END); |
3269 v8::Handle<v8::Value> ${v8ClassName}::namedPropertyGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) | 3305 v8::Handle<v8::Value> ${v8ClassName}::namedPropertyGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) |
3270 { | 3306 { |
3271 if (!info.Holder()->GetRealNamedPropertyInPrototypeChain(name).IsEmpty()) | 3307 if (!info.Holder()->GetRealNamedPropertyInPrototypeChain(name).IsEmpty()) |
3272 return v8Undefined(); | 3308 return v8Undefined(); |
3273 if (info.Holder()->HasRealNamedCallbackProperty(name)) | 3309 if (info.Holder()->HasRealNamedCallbackProperty(name)) |
3274 return v8Undefined(); | 3310 return v8Undefined(); |
3275 | 3311 |
3276 ASSERT(V8DOMWrapper::maybeDOMWrapper(info.Holder())); | 3312 ASSERT(V8DOMWrapper::maybeDOMWrapper(info.Holder())); |
3277 ${implClassName}* collection = toNative(info.Holder()); | 3313 ${implClassName}* collection = toNative(info.Holder()); |
3278 AtomicString propertyName = toWebCoreAtomicString(name); | 3314 AtomicString propertyName = toWebCoreAtomicString(name); |
3279 ${nativeType} element = collection->${methodName}(propertyName); | 3315 ${nativeType} element = collection->${methodName}(propertyName); |
3280 if (${isNull}) | 3316 if (${isNull}) |
3281 return v8Undefined(); | 3317 return v8Undefined(); |
3282 return ${jsValue}; | 3318 |
3319 v8::Handle<v8::Value> jsValue; | |
3320 $genJSValueStatements | |
3321 return jsValue; | |
kojih
2013/05/15 09:28:26
I had to create "create and set JSValue" statement
| |
3283 } | 3322 } |
3284 | 3323 |
3285 END | 3324 END |
3286 } | 3325 } |
3287 | 3326 |
3288 if ($hasCustomNamedGetter) { | 3327 if ($hasCustomNamedGetter) { |
3289 my $hasCustomNamedSetter = $interface->extendedAttributes->{"CustomNamed Setter"}; | 3328 my $hasCustomNamedSetter = $interface->extendedAttributes->{"CustomNamed Setter"}; |
3290 my $hasDeleter = $interface->extendedAttributes->{"CustomDeleteProperty" }; | 3329 my $hasDeleter = $interface->extendedAttributes->{"CustomDeleteProperty" }; |
3291 my $hasEnumerator = $interface->extendedAttributes->{"CustomEnumeratePro perty"}; | 3330 my $hasEnumerator = $interface->extendedAttributes->{"CustomEnumeratePro perty"}; |
3292 my $setOn = "Instance"; | 3331 my $setOn = "Instance"; |
(...skipping 899 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4192 $code .= " return true;\n\n"; | 4231 $code .= " return true;\n\n"; |
4193 $code .= " v8::HandleScope handleScope;\n\n"; | 4232 $code .= " v8::HandleScope handleScope;\n\n"; |
4194 $code .= " v8::Handle<v8::Context> v8Context = toV8Context(script ExecutionContext(), m_world.get());\n"; | 4233 $code .= " v8::Handle<v8::Context> v8Context = toV8Context(script ExecutionContext(), m_world.get());\n"; |
4195 $code .= " if (v8Context.IsEmpty())\n"; | 4234 $code .= " if (v8Context.IsEmpty())\n"; |
4196 $code .= " return true;\n\n"; | 4235 $code .= " return true;\n\n"; |
4197 $code .= " v8::Context::Scope scope(v8Context);\n\n"; | 4236 $code .= " v8::Context::Scope scope(v8Context);\n\n"; |
4198 | 4237 |
4199 @args = (); | 4238 @args = (); |
4200 foreach my $param (@params) { | 4239 foreach my $param (@params) { |
4201 my $paramName = $param->name; | 4240 my $paramName = $param->name; |
4202 $code .= " v8::Handle<v8::Value> ${paramName}Handle = " . Nat iveToJSValue($param, $paramName, "v8::Handle<v8::Object>()", "v8Context->GetIsol ate()", "") . ";\n"; | 4241 $code .= " v8::Handle<v8::Value> ${paramName}Handle = " . Nat iveToJSValue($param->type, $param->extendedAttributes, $paramName, "v8::Handle<v 8::Object>()", "v8Context->GetIsolate()", "") . ";\n"; |
4203 $code .= " if (${paramName}Handle.IsEmpty()) {\n"; | 4242 $code .= " if (${paramName}Handle.IsEmpty()) {\n"; |
4204 $code .= " if (!isScriptControllerTerminating())\n"; | 4243 $code .= " if (!isScriptControllerTerminating())\n"; |
4205 $code .= " CRASH();\n"; | 4244 $code .= " CRASH();\n"; |
4206 $code .= " return true;\n"; | 4245 $code .= " return true;\n"; |
4207 $code .= " }\n"; | 4246 $code .= " }\n"; |
4208 push(@args, " ${paramName}Handle"); | 4247 push(@args, " ${paramName}Handle"); |
4209 } | 4248 } |
4210 | 4249 |
4211 if (scalar(@args) > 0) { | 4250 if (scalar(@args) > 0) { |
4212 $code .= "\n v8::Handle<v8::Value> argv[] = {\n"; | 4251 $code .= "\n v8::Handle<v8::Value> argv[] = {\n"; |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4565 # If the implementing class is a POD type, commit changes | 4604 # If the implementing class is a POD type, commit changes |
4566 if (IsSVGTypeNeedingTearOff($interfaceName) and not $interfaceName =~ /List$ /) { | 4605 if (IsSVGTypeNeedingTearOff($interfaceName) and not $interfaceName =~ /List$ /) { |
4567 $code .= $indent . "wrapper->commitChange();\n"; | 4606 $code .= $indent . "wrapper->commitChange();\n"; |
4568 } | 4607 } |
4569 | 4608 |
4570 $return .= ".release()" if ($returnIsRef); | 4609 $return .= ".release()" if ($returnIsRef); |
4571 | 4610 |
4572 my $nativeValue; | 4611 my $nativeValue; |
4573 # FIXME: Update for all ScriptWrappables. | 4612 # FIXME: Update for all ScriptWrappables. |
4574 if (IsDOMNodeType($interfaceName)) { | 4613 if (IsDOMNodeType($interfaceName)) { |
4575 $nativeValue = NativeToJSValue($function->signature, $return, "args.Hold er()", "args.GetIsolate()", "args", "imp", "ReturnUnsafeHandle", $forMainWorldSu ffix); | 4614 $nativeValue = NativeToJSValue($function->signature->type, $function->si gnature->extendedAttributes, $return, "args.Holder()", "args.GetIsolate()", "arg s", "imp", "ReturnUnsafeHandle", $forMainWorldSuffix); |
4576 } else { | 4615 } else { |
4577 $nativeValue = NativeToJSValue($function->signature, $return, "args.Hold er()", "args.GetIsolate()", 0, 0, "ReturnUnsafeHandle", $forMainWorldSuffix); | 4616 $nativeValue = NativeToJSValue($function->signature->type, $function->si gnature->extendedAttributes, $return, "args.Holder()", "args.GetIsolate()", 0, 0 , "ReturnUnsafeHandle", $forMainWorldSuffix); |
4578 } | 4617 } |
4579 | 4618 |
4580 $code .= $indent . "return " . $nativeValue . ";\n"; | 4619 $code .= $indent . "return " . $nativeValue . ";\n"; |
4581 | 4620 |
4582 return $code; | 4621 return $code; |
4583 } | 4622 } |
4584 | 4623 |
4585 sub GetNativeTypeFromSignature | 4624 sub GetNativeTypeFromSignature |
4586 { | 4625 { |
4587 my $signature = shift; | 4626 my $signature = shift; |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4642 return "double" if $type eq "Date"; | 4681 return "double" if $type eq "Date"; |
4643 return "ScriptValue" if $type eq "any"; | 4682 return "ScriptValue" if $type eq "any"; |
4644 return "Dictionary" if $type eq "Dictionary"; | 4683 return "Dictionary" if $type eq "Dictionary"; |
4645 | 4684 |
4646 return "RefPtr<DOMStringList>" if $type eq "DOMStringList"; | 4685 return "RefPtr<DOMStringList>" if $type eq "DOMStringList"; |
4647 return "RefPtr<MediaQueryListListener>" if $type eq "MediaQueryListListener" ; | 4686 return "RefPtr<MediaQueryListListener>" if $type eq "MediaQueryListListener" ; |
4648 return "RefPtr<NodeFilter>" if $type eq "NodeFilter"; | 4687 return "RefPtr<NodeFilter>" if $type eq "NodeFilter"; |
4649 return "RefPtr<SerializedScriptValue>" if $type eq "SerializedScriptValue"; | 4688 return "RefPtr<SerializedScriptValue>" if $type eq "SerializedScriptValue"; |
4650 return "RefPtr<XPathNSResolver>" if $type eq "XPathNSResolver"; | 4689 return "RefPtr<XPathNSResolver>" if $type eq "XPathNSResolver"; |
4651 | 4690 |
4691 # Union type | |
4692 if (ref $type) { | |
4693 my $types = $type->unionType->unionMemberTypes; | |
4694 die "Currently only 2 values of non-union type is supported as union typ e.\n" unless scalar(@$types)==2 && scalar(grep {ref $_} @$types)==0; | |
4695 return "WTF::UnionType2<" . (join ", ", @$types) . ">"; | |
4696 } | |
4697 | |
4652 # We need to check [ImplementedBy] extended attribute for wrapper types. | 4698 # We need to check [ImplementedBy] extended attribute for wrapper types. |
4653 if (IsWrapperType($type)) { | 4699 if (IsWrapperType($type)) { |
4654 my $interface = ParseInterface($type); | 4700 my $interface = ParseInterface($type); |
4655 my $implClassName = GetImplClassName($interface); | 4701 my $implClassName = GetImplClassName($interface); |
4656 return $isParameter ? "${implClassName}*" : "RefPtr<${implClassName}>"; | 4702 return $isParameter ? "${implClassName}*" : "RefPtr<${implClassName}>"; |
4657 } | 4703 } |
4658 return "RefPtr<${type}>" if IsRefPtrType($type) and not $isParameter; | 4704 return "RefPtr<${type}>" if IsRefPtrType($type) and not $isParameter; |
4659 | 4705 |
4660 my $arrayType = GetArrayType($type); | 4706 my $arrayType = GetArrayType($type); |
4661 my $sequenceType = GetSequenceType($type); | 4707 my $sequenceType = GetSequenceType($type); |
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4970 return 1 if $type =~ /^SVG.*Element$/; | 5016 return 1 if $type =~ /^SVG.*Element$/; |
4971 | 5017 |
4972 return 1 if $type eq 'TestNode'; | 5018 return 1 if $type eq 'TestNode'; |
4973 | 5019 |
4974 return 0; | 5020 return 0; |
4975 } | 5021 } |
4976 | 5022 |
4977 | 5023 |
4978 sub NativeToJSValue | 5024 sub NativeToJSValue |
4979 { | 5025 { |
4980 my $signature = shift; | 5026 my $type = shift; |
4981 my $value = shift; | 5027 my $extendedAttributes = shift; |
kojih
2013/05/15 09:28:26
Split signature into type and extendedAttributes
b
| |
5028 my $value = shift; # expression of native value | |
4982 my $getCreationContext = shift; | 5029 my $getCreationContext = shift; |
4983 my $getIsolate = shift; | 5030 my $getIsolate = shift; |
4984 die "An Isolate is mandatory for native value => JS value conversion." unles s $getIsolate; | 5031 die "An Isolate is mandatory for native value => JS value conversion." unles s $getIsolate; |
4985 my $getHolderContainer = shift; | 5032 my $getHolderContainer = shift; |
4986 my $getHolderContainerArg = $getHolderContainer ? ", $getHolderContainer" : ""; | 5033 my $getHolderContainerArg = $getHolderContainer ? ", $getHolderContainer" : ""; |
4987 my $getScriptWrappable = shift; | 5034 my $getScriptWrappable = shift; |
4988 my $getScriptWrappableArg = $getScriptWrappable ? ", $getScriptWrappable" : ""; | 5035 my $getScriptWrappableArg = $getScriptWrappable ? ", $getScriptWrappable" : ""; |
4989 my $returnHandleType = shift; | 5036 my $returnHandleType = shift; |
4990 my $returnHandleTypeArg = $returnHandleType ? ", $returnHandleType" : ""; | 5037 my $returnHandleTypeArg = $returnHandleType ? ", $returnHandleType" : ""; |
4991 my $forMainWorldSuffix = shift; | 5038 my $forMainWorldSuffix = shift; |
4992 | 5039 |
4993 my $type = $signature->type; | 5040 # Union type |
5041 if (ref $type) { | |
5042 my $types = $type->unionType->unionMemberTypes; | |
5043 die "JSValue of UnionType can not be obtained as expression. use GetCrea teJSValueStatements() instead.\n"; | |
5044 } | |
4994 | 5045 |
4995 return "v8Boolean($value, $getIsolate)" if $type eq "boolean"; | 5046 return "v8Boolean($value, $getIsolate)" if $type eq "boolean"; |
4996 return "v8Undefined()" if $type eq "void"; # equivalent to v8Undefined() | 5047 return "v8Undefined()" if $type eq "void"; # equivalent to v8Undefined() |
4997 | 5048 |
4998 # HTML5 says that unsigned reflected attributes should be in the range | 5049 # HTML5 says that unsigned reflected attributes should be in the range |
4999 # [0, 2^31). When a value isn't in this range, a default value (or 0) | 5050 # [0, 2^31). When a value isn't in this range, a default value (or 0) |
5000 # should be returned instead. | 5051 # should be returned instead. |
5001 if ($signature->extendedAttributes->{"Reflect"} and ($type eq "unsigned long " or $type eq "unsigned short")) { | 5052 if ($extendedAttributes->{"Reflect"} and ($type eq "unsigned long" or $type eq "unsigned short")) { |
5002 $value =~ s/getUnsignedIntegralAttribute/getIntegralAttribute/g; | 5053 $value =~ s/getUnsignedIntegralAttribute/getIntegralAttribute/g; |
5003 return "v8UnsignedInteger(std::max(0, " . $value . "), $getIsolate)"; | 5054 return "v8UnsignedInteger(std::max(0, " . $value . "), $getIsolate)"; |
5004 } | 5055 } |
5005 | 5056 |
5006 # For all the types where we use 'int' as the representation type, | 5057 # For all the types where we use 'int' as the representation type, |
5007 # we use v8Integer() which has a fast small integer conversion check. | 5058 # we use v8Integer() which has a fast small integer conversion check. |
5008 my $nativeType = GetNativeType($type); | 5059 my $nativeType = GetNativeType($type); |
5009 return "v8Integer($value, $getIsolate)" if $nativeType eq "int"; | 5060 return "v8Integer($value, $getIsolate)" if $nativeType eq "int"; |
5010 return "v8UnsignedInteger($value, $getIsolate)" if $nativeType eq "unsigned" ; | 5061 return "v8UnsignedInteger($value, $getIsolate)" if $nativeType eq "unsigned" ; |
5011 | 5062 |
5012 return "v8DateOrNull($value, $getIsolate)" if $type eq "Date"; | 5063 return "v8DateOrNull($value, $getIsolate)" if $type eq "Date"; |
5013 # long long and unsigned long long are not representable in ECMAScript. | 5064 # long long and unsigned long long are not representable in ECMAScript. |
5014 return "v8::Number::New(static_cast<double>($value))" if $type eq "long long " or $type eq "unsigned long long" or $type eq "DOMTimeStamp"; | 5065 return "v8::Number::New(static_cast<double>($value))" if $type eq "long long " or $type eq "unsigned long long" or $type eq "DOMTimeStamp"; |
5015 return "v8::Number::New($value)" if IsPrimitiveType($type); | 5066 return "v8::Number::New($value)" if IsPrimitiveType($type); |
5016 return "$value.v8Value()" if $nativeType eq "ScriptValue"; | 5067 return "$value.v8Value()" if $nativeType eq "ScriptValue"; |
5017 | 5068 |
5018 if ($type eq "DOMString" or IsEnumType($type)) { | 5069 if ($type eq "DOMString" or IsEnumType($type)) { |
5019 my $conv = $signature->extendedAttributes->{"TreatReturnedNullStringAs"} ; | 5070 my $conv = $extendedAttributes->{"TreatReturnedNullStringAs"}; |
5020 if (defined $conv) { | 5071 if (defined $conv) { |
5021 return "v8StringOrNull($value, $getIsolate$returnHandleTypeArg)" if $conv eq "Null"; | 5072 return "v8StringOrNull($value, $getIsolate$returnHandleTypeArg)" if $conv eq "Null"; |
5022 return "v8StringOrUndefined($value, $getIsolate$returnHandleTypeArg) " if $conv eq "Undefined"; | 5073 return "v8StringOrUndefined($value, $getIsolate$returnHandleTypeArg) " if $conv eq "Undefined"; |
5023 | 5074 |
5024 die "Unknown value for TreatReturnedNullStringAs extended attribute" ; | 5075 die "Unknown value for TreatReturnedNullStringAs extended attribute" ; |
5025 } | 5076 } |
5026 return "v8String($value, $getIsolate$returnHandleTypeArg)"; | 5077 return "v8String($value, $getIsolate$returnHandleTypeArg)"; |
5027 } | 5078 } |
5028 | 5079 |
5029 my $arrayType = GetArrayType($type); | 5080 my $arrayType = GetArrayType($type); |
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5338 | 5389 |
5339 sub IsRefPtrType | 5390 sub IsRefPtrType |
5340 { | 5391 { |
5341 my $type = shift; | 5392 my $type = shift; |
5342 | 5393 |
5343 return 0 if IsPrimitiveType($type); | 5394 return 0 if IsPrimitiveType($type); |
5344 return 0 if GetArrayType($type); | 5395 return 0 if GetArrayType($type); |
5345 return 0 if GetSequenceType($type); | 5396 return 0 if GetSequenceType($type); |
5346 return 0 if $type eq "DOMString"; | 5397 return 0 if $type eq "DOMString"; |
5347 return 0 if IsEnumType($type); | 5398 return 0 if IsEnumType($type); |
5399 return 0 if ref $type; # Union | |
5348 | 5400 |
5349 return 1; | 5401 return 1; |
5350 } | 5402 } |
5351 | 5403 |
5352 sub GetSVGTypeNeedingTearOff | 5404 sub GetSVGTypeNeedingTearOff |
5353 { | 5405 { |
5354 my $type = shift; | 5406 my $type = shift; |
5355 | 5407 |
5356 return $svgTypeNeedingTearOff{$type} if exists $svgTypeNeedingTearOff{$type} ; | 5408 return $svgTypeNeedingTearOff{$type} if exists $svgTypeNeedingTearOff{$type} ; |
5357 return undef; | 5409 return undef; |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5684 if ($currentInterface->extendedAttributes->{$extendedAttribute}) { | 5736 if ($currentInterface->extendedAttributes->{$extendedAttribute}) { |
5685 $found = 1; | 5737 $found = 1; |
5686 } | 5738 } |
5687 return 1 if $found; | 5739 return 1 if $found; |
5688 }, 0); | 5740 }, 0); |
5689 | 5741 |
5690 return $found; | 5742 return $found; |
5691 } | 5743 } |
5692 | 5744 |
5693 1; | 5745 1; |
OLD | NEW |