Chromium Code Reviews| 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 |