Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(175)

Unified Diff: Source/bindings/scripts/CodeGeneratorV8.pm

Issue 15877002: move constructors to new style callbacks (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | Source/bindings/v8/V8Binding.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/bindings/scripts/CodeGeneratorV8.pm
diff --git a/Source/bindings/scripts/CodeGeneratorV8.pm b/Source/bindings/scripts/CodeGeneratorV8.pm
index 4318a546a2f4038e172eeb3b2505e3be35567b71..8635c144274f76c0765e05b1399ff31a5b1a0f0a 100644
--- a/Source/bindings/scripts/CodeGeneratorV8.pm
+++ b/Source/bindings/scripts/CodeGeneratorV8.pm
@@ -699,11 +699,11 @@ END
}
if (IsConstructable($interface)) {
- $header{classPublic}->add(" static v8::Handle<v8::Value> constructorCallback(const v8::Arguments&);\n");
+ $header{classPublic}->add(" static void constructorCallback(const v8::FunctionCallbackInfo<v8::Value>&);\n");
END
}
if (HasCustomConstructor($interface)) {
- $header{classPublic}->add(" static v8::Handle<v8::Value> constructorCustom(const v8::Arguments&);\n");
+ $header{classPublic}->add(" static void constructorCustom(const v8::FunctionCallbackInfo<v8::Value>&);\n");
}
my @enabledPerContextAttributes;
@@ -2122,7 +2122,7 @@ END
return;
}
- $code .= GenerateArgumentsCountCheck($function, $interface);
+ $code .= GenerateArgumentsCountCheckOldStyle($function, $interface);
if ($name eq "set" and $interface->extendedAttributes->{"TypedArray"}) {
AddToImplIncludes("bindings/v8/custom/V8ArrayBufferViewCustom.h");
@@ -2190,7 +2190,7 @@ END
END
}
- my ($parameterCheckString, $paramIndex, %replacements) = GenerateParametersCheck($function, $interface, $forMainWorldSuffix);
+ my ($parameterCheckString, $paramIndex, %replacements) = GenerateParametersCheckOldStyle($function, $interface, $forMainWorldSuffix);
$code .= $parameterCheckString;
# Build the function call string.
@@ -2236,10 +2236,18 @@ sub GenerateCallWith
return ([@callWithArgs], $code);
}
+sub GenerateArgumentsCountCheckOldStyle
+{
+ my $function = shift;
+ my $interface = shift;
+ GenerateArgumentsCountCheck($function, $interface, "old");
+}
+
sub GenerateArgumentsCountCheck
{
my $function = shift;
my $interface = shift;
+ my $style = shift || "new";
my $numMandatoryParams = 0;
my $allowNonOptional = 1;
@@ -2254,17 +2262,39 @@ sub GenerateArgumentsCountCheck
my $argumentsCountCheckString = "";
if ($numMandatoryParams >= 1) {
- $argumentsCountCheckString .= " if (args.Length() < $numMandatoryParams)\n";
- $argumentsCountCheckString .= " return throwNotEnoughArgumentsError(args.GetIsolate());\n";
+ if ("old" eq $style) {
jochen (gone - plz use gerrit) 2013/05/23 14:20:19 nit $style eq "old"
+ $argumentsCountCheckString .= " if (args.Length() < $numMandatoryParams)\n";
+ $argumentsCountCheckString .= " return throwNotEnoughArgumentsError(args.GetIsolate());\n";
+ } else {
+ $argumentsCountCheckString .= " if (args.Length() < $numMandatoryParams) {\n";
+ $argumentsCountCheckString .= " throwNotEnoughArgumentsError(args.GetIsolate());\n";
+ $argumentsCountCheckString .= " return;\n";
+ $argumentsCountCheckString .= " }\n";
+ }
}
return $argumentsCountCheckString;
}
+sub GenerateParametersCheckOldStyle
+{
+ my $function = shift;
+ my $interface = shift;
+ my $forMainWorldSuffix = shift;
+ GenerateParametersCheck($function, $interface, $forMainWorldSuffix, "old");
+}
+
sub GenerateParametersCheck
{
my $function = shift;
my $interface = shift;
my $forMainWorldSuffix = shift;
+ my $style = shift || "new";
+
+ my $isOld = "old" eq $style;
jochen (gone - plz use gerrit) 2013/05/23 14:20:19 same here
+ my $trySuffix = "_VOID";
+ if ($isOld) {
+ $trySuffix = "";
+ }
my $parameterCheckString = "";
my $paramIndex = 0;
@@ -2299,8 +2329,14 @@ sub GenerateParametersCheck
if ($parameter->isOptional) {
$parameterCheckString .= " RefPtr<" . $parameter->type . "> $parameterName;\n";
$parameterCheckString .= " if (args.Length() > $paramIndex && !args[$paramIndex]->IsNull() && !args[$paramIndex]->IsUndefined()) {\n";
- $parameterCheckString .= " if (!args[$paramIndex]->IsFunction())\n";
- $parameterCheckString .= " return throwTypeError(0, args.GetIsolate());\n";
+ $parameterCheckString .= " if (!args[$paramIndex]->IsFunction()) {\n";
+ if ($isOld) {
+ $parameterCheckString .= " return throwTypeError(0, args.GetIsolate());\n";
+ } else {
+ $parameterCheckString .= " throwTypeError(0, args.GetIsolate());\n";
+ $parameterCheckString .= " return;\n";
+ }
+ $parameterCheckString .= " }\n";
$parameterCheckString .= " $parameterName = ${v8ClassName}::create(args[$paramIndex], getScriptExecutionContext());\n";
$parameterCheckString .= " }\n";
} else {
@@ -2312,15 +2348,20 @@ sub GenerateParametersCheck
my $nativeValue = "${parameterName}NativeValue";
my $paramType = $parameter->type;
$parameterCheckString .= " $paramType $parameterName = 0;\n";
- $parameterCheckString .= " V8TRYCATCH(double, $nativeValue, args[$paramIndex]->NumberValue());\n";
+ $parameterCheckString .= " V8TRYCATCH$trySuffix(double, $nativeValue, args[$paramIndex]->NumberValue());\n";
$parameterCheckString .= " if (!std::isnan($nativeValue))\n";
$parameterCheckString .= " $parameterName = clampTo<$paramType>($nativeValue);\n";
} elsif ($parameter->type eq "SerializedScriptValue") {
AddToImplIncludes("bindings/v8/SerializedScriptValue.h");
$parameterCheckString .= " bool ${parameterName}DidThrow = false;\n";
$parameterCheckString .= " $nativeType $parameterName = SerializedScriptValue::create(args[$paramIndex], 0, 0, ${parameterName}DidThrow, args.GetIsolate());\n";
- $parameterCheckString .= " if (${parameterName}DidThrow)\n";
- $parameterCheckString .= " return v8Undefined();\n";
+ $parameterCheckString .= " if (${parameterName}DidThrow) {\n";
+ if ($isOld) {
+ $parameterCheckString .= " return v8Undefined();\n";
+ } else {
+ $parameterCheckString .= " return;\n";
+ }
+ $parameterCheckString .= " }\n";
} elsif ($parameter->isVariadic) {
my $nativeElementType = GetNativeType($parameter->type);
if ($nativeElementType =~ />$/) {
@@ -2331,17 +2372,24 @@ sub GenerateParametersCheck
if (IsWrapperType($argType)) {
$parameterCheckString .= " Vector<$nativeElementType> $parameterName;\n";
$parameterCheckString .= " for (int i = $paramIndex; i < args.Length(); ++i) {\n";
- $parameterCheckString .= " if (!V8${argType}::HasInstance(args[i], args.GetIsolate(), worldType(args.GetIsolate())))\n";
- $parameterCheckString .= " return throwTypeError(0, args.GetIsolate());\n";
+ $parameterCheckString .= " if (!V8${argType}::HasInstance(args[i], args.GetIsolate(), worldType(args.GetIsolate()))) {\n";
+ if ($isOld) {
+ $parameterCheckString .= " return throwTypeError(0, args.GetIsolate());\n";
+ } else {
+ $parameterCheckString .= " throwTypeError(0, args.GetIsolate());\n";
+ $parameterCheckString .= " return;\n";
+ }
+ $parameterCheckString .= " }\n";
$parameterCheckString .= " $parameterName.append(V8${argType}::toNative(v8::Handle<v8::Object>::Cast(args[i])));\n";
$parameterCheckString .= " }\n";
} else {
- $parameterCheckString .= " V8TRYCATCH(Vector<$nativeElementType>, $parameterName, toNativeArguments<$nativeElementType>(args, $paramIndex));\n";
+ $parameterCheckString .= " V8TRYCATCH$trySuffix(Vector<$nativeElementType>, $parameterName, toNativeArguments<$nativeElementType>(args, $paramIndex));\n";
}
} elsif ($nativeType =~ /^V8StringResource/) {
my $default = defined $parameter->extendedAttributes->{"Default"} ? $parameter->extendedAttributes->{"Default"} : "";
my $value = JSValueToNative($parameter, $parameter->isOptional && $default eq "NullString" ? "argumentOrNull(args, $paramIndex)" : "args[$paramIndex]", "args.GetIsolate()");
- $parameterCheckString .= " " . ConvertToV8StringResource($parameter, $nativeType, $parameterName, $value) . "\n";
+ my $suffix = $isOld ? "" : "VOID";
+ $parameterCheckString .= " " . ConvertToV8StringResource($parameter, $nativeType, $parameterName, $value, $suffix) . "\n";
if (IsEnumType($parameter->type)) {
my @enumValues = ValidEnumValues($parameter->type);
my @validEqualities = ();
@@ -2350,8 +2398,14 @@ sub GenerateParametersCheck
}
my $enumValidationExpression = join(" || ", @validEqualities);
$parameterCheckString .= " String string = $parameterName;\n";
- $parameterCheckString .= " if (!($enumValidationExpression))\n";
- $parameterCheckString .= " return throwTypeError(0, args.GetIsolate());\n";
+ $parameterCheckString .= " if (!($enumValidationExpression)) {\n";
+ if ($isOld) {
+ $parameterCheckString .= " return throwTypeError(0, args.GetIsolate());\n";
+ } else {
+ $parameterCheckString .= " throwTypeError(0, args.GetIsolate());\n";
+ $parameterCheckString .= " return;\n";
+ }
+ $parameterCheckString .= " }\n";
}
} else {
# If the "StrictTypeChecking" extended attribute is present, and the argument's type is an
@@ -2364,26 +2418,44 @@ sub GenerateParametersCheck
my $argValue = "args[$paramIndex]";
my $argType = $parameter->type;
if (IsWrapperType($argType)) {
- $parameterCheckString .= " if (args.Length() > $paramIndex && !isUndefinedOrNull($argValue) && !V8${argType}::HasInstance($argValue, args.GetIsolate(), worldType(args.GetIsolate())))\n";
- $parameterCheckString .= " return throwTypeError(0, args.GetIsolate());\n";
+ $parameterCheckString .= " if (args.Length() > $paramIndex && !isUndefinedOrNull($argValue) && !V8${argType}::HasInstance($argValue, args.GetIsolate(), worldType(args.GetIsolate()))) {\n";
+ if ($isOld) {
+ $parameterCheckString .= " return throwTypeError(0, args.GetIsolate());\n";
+ } else {
+ $parameterCheckString .= " throwTypeError(0, args.GetIsolate());\n";
+ $parameterCheckString .= " return;\n";
+ }
+ $parameterCheckString .= " }\n";
}
}
my $default = defined $parameter->extendedAttributes->{"Default"} ? $parameter->extendedAttributes->{"Default"} : "";
my $value = JSValueToNative($parameter, $parameter->isOptional && $default eq "NullString" ? "argumentOrNull(args, $paramIndex)" : "args[$paramIndex]", "args.GetIsolate()");
if ($parameter->extendedAttributes->{"EnforceRange"}) {
- $parameterCheckString .= " V8TRYCATCH_WITH_TYPECHECK($nativeType, $parameterName, $value, args.GetIsolate());\n";
+ $parameterCheckString .= " V8TRYCATCH_WITH_TYPECHECK$trySuffix($nativeType, $parameterName, $value, args.GetIsolate());\n";
} else {
- $parameterCheckString .= " V8TRYCATCH($nativeType, $parameterName, $value);\n";
+ $parameterCheckString .= " V8TRYCATCH$trySuffix($nativeType, $parameterName, $value);\n";
}
if ($nativeType eq 'Dictionary') {
- $parameterCheckString .= " if (!$parameterName.isUndefinedOrNull() && !$parameterName.isObject())\n";
- $parameterCheckString .= " return throwTypeError(\"Not an object.\", args.GetIsolate());\n";
+ $parameterCheckString .= " if (!$parameterName.isUndefinedOrNull() && !$parameterName.isObject()) {\n";
+ if ($isOld) {
+ $parameterCheckString .= " return throwTypeError(\"Not an object.\", args.GetIsolate());\n";
+ } else {
+ $parameterCheckString .= " throwTypeError(\"Not an object.\", args.GetIsolate());\n";
+ $parameterCheckString .= " return;\n";
+ }
+ $parameterCheckString .= " }\n";
}
}
if ($parameter->extendedAttributes->{"IsIndex"}) {
- $parameterCheckString .= " if (UNLIKELY($parameterName < 0))\n";
- $parameterCheckString .= " return setDOMException(INDEX_SIZE_ERR, args.GetIsolate());\n";
+ $parameterCheckString .= " if (UNLIKELY($parameterName < 0)) {\n";
+ if ($isOld) {
+ $parameterCheckString .= " return setDOMException(INDEX_SIZE_ERR, args.GetIsolate());\n";
+ } else {
+ $parameterCheckString .= " setDOMException(INDEX_SIZE_ERR, args.GetIsolate());\n";
+ $parameterCheckString .= " return;\n";
+ }
+ $parameterCheckString .= " }\n";
}
$paramIndex++;
@@ -2396,9 +2468,10 @@ sub GenerateOverloadedConstructorCallback
my $interface = shift;
my $implClassName = GetImplName($interface);
+
jochen (gone - plz use gerrit) 2013/05/23 14:20:19 why the empty line?
my $code = "";
$code .= <<END;
-static v8::Handle<v8::Value> constructor(const v8::Arguments& args)
+static void constructor(const v8::FunctionCallbackInfo<v8::Value>& args)
{
END
my $leastNumMandatoryParams = 255;
@@ -2406,15 +2479,20 @@ END
my $name = "constructor" . $constructor->{overloadedIndex};
my ($numMandatoryParams, $parametersCheck) = GenerateFunctionParametersCheck($constructor);
$leastNumMandatoryParams = $numMandatoryParams if ($numMandatoryParams < $leastNumMandatoryParams);
- $code .= " if ($parametersCheck)\n";
- $code .= " return ${implClassName}V8Internal::${name}(args);\n";
+ $code .= " if ($parametersCheck) {\n";
+ $code .= " ${implClassName}V8Internal::${name}(args);\n";
+ $code .= " return;\n";
+ $code .= " }\n";
}
if ($leastNumMandatoryParams >= 1) {
- $code .= " if (args.Length() < $leastNumMandatoryParams)\n";
- $code .= " return throwNotEnoughArgumentsError(args.GetIsolate());\n";
+ $code .= " if (args.Length() < $leastNumMandatoryParams) {\n";
+ $code .= " throwNotEnoughArgumentsError(args.GetIsolate());\n";
+ $code .= " return;";
+ $code .= " }\n";
}
$code .= <<END;
- return throwTypeError(0, args.GetIsolate());
+ throwTypeError(0, args.GetIsolate());
+ return;
END
$code .= "}\n\n";
$implementation{nameSpaceInternal}->add($code);
@@ -2448,7 +2526,7 @@ sub GenerateSingleConstructorCallback
my @afterArgumentList;
my $code = "";
$code .= <<END;
-static v8::Handle<v8::Value> constructor${overloadedIndexString}(const v8::Arguments& args)
+static void constructor${overloadedIndexString}(const v8::FunctionCallbackInfo<v8::Value>& args)
{
END
@@ -2495,14 +2573,16 @@ END
$code .= " v8::Handle<v8::Object> wrapper = args.Holder();\n";
if ($interface->extendedAttributes->{"RaisesException"}) {
- $code .= " if (ec)\n";
- $code .= " return setDOMException(ec, args.GetIsolate());\n";
+ $code .= " if (ec) {\n";
+ $code .= " setDOMException(ec, args.GetIsolate());\n";
+ $code .= " return;\n";
+ $code .= " }\n";
}
$code .= <<END;
V8DOMWrapper::associateObjectWithWrapper(impl.release(), &${v8ClassName}::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent);
- return wrapper;
+ args.GetReturnValue().Set(wrapper);
}
END
@@ -2540,15 +2620,15 @@ sub GenerateConstructorCallback
my $implClassName = GetImplName($interface);
my $v8ClassName = GetV8ClassName($interface);
my $code = "";
- $code .= "v8::Handle<v8::Value> ${v8ClassName}::constructorCallback(const v8::Arguments& args)\n";
+ $code .= "void ${v8ClassName}::constructorCallback(const v8::FunctionCallbackInfo<v8::Value>& args)\n";
$code .= "{\n";
$code .= GenerateFeatureObservation($interface->extendedAttributes->{"MeasureAs"});
$code .= GenerateDeprecationNotification($interface->extendedAttributes->{"DeprecateAs"});
$code .= GenerateConstructorHeader();
if (HasCustomConstructor($interface)) {
- $code .= " return ${v8ClassName}::constructorCustom(args);\n";
+ $code .= " ${v8ClassName}::constructorCustom(args);\n";
} else {
- $code .= " return ${implClassName}V8Internal::constructor(args);\n";
+ $code .= " ${implClassName}V8Internal::constructor(args);\n";
}
$code .= "}\n\n";
$implementation{nameSpaceWebCore}->add($code);
@@ -2576,24 +2656,26 @@ sub GenerateEventConstructor
AddToImplIncludes("bindings/v8/Dictionary.h");
$implementation{nameSpaceInternal}->add(<<END);
-static v8::Handle<v8::Value> constructor(const v8::Arguments& args)
+static void constructor(const v8::FunctionCallbackInfo<v8::Value>& args)
{
- if (args.Length() < 1)
- return throwNotEnoughArgumentsError(args.GetIsolate());
+ if (args.Length() < 1) {
+ throwNotEnoughArgumentsError(args.GetIsolate());
+ return;
+ }
- V8TRYCATCH_FOR_V8STRINGRESOURCE(V8StringResource<>, type, args[0]);
+ V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, type, args[0]);
${implClassName}Init eventInit;
if (args.Length() >= 2) {
- V8TRYCATCH(Dictionary, options, Dictionary(args[1], args.GetIsolate()));
+ V8TRYCATCH_VOID(Dictionary, options, Dictionary(args[1], args.GetIsolate()));
if (!fill${implClassName}Init(eventInit, options))
- return v8Undefined();
+ return;
}
RefPtr<${implClassName}> event = ${implClassName}::create(type, eventInit);
v8::Handle<v8::Object> wrapper = args.Holder();
V8DOMWrapper::associateObjectWithWrapper(event.release(), &${v8ClassName}::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent);
- return wrapper;
+ args.GetReturnValue().Set(wrapper);
}
END
@@ -2638,9 +2720,9 @@ sub GenerateTypedArrayConstructor
AddToImplIncludes("bindings/v8/custom/V8ArrayBufferViewCustom.h");
$implementation{nameSpaceInternal}->add(<<END);
-static v8::Handle<v8::Value> constructor(const v8::Arguments& args)
+static void constructor(const v8::FunctionCallbackInfo<v8::Value>& args)
{
- return constructWebGLArray<$implClassName, ${v8ClassName}, $type>(args, &${v8ClassName}::info, $viewType);
+ constructWebGLArray<$implClassName, ${v8ClassName}, $type>(args, &${v8ClassName}::info, $viewType);
}
END
@@ -2689,7 +2771,7 @@ END
my $code = "";
$code .= <<END;
-static v8::Handle<v8::Value> ${v8ClassName}ConstructorCallback(const v8::Arguments& args)
+static void ${v8ClassName}ConstructorCallback(const v8::FunctionCallbackInfo<v8::Value>& args)
haraken 2013/05/23 15:04:38 Are you going to use FunctionCallbackInfo for DOM
dcarney 2013/05/24 08:11:48 No. Unification is not easy, since they are very
{
END
$code .= $maybeObserveFeature if $maybeObserveFeature;
@@ -2739,14 +2821,16 @@ END
$code .= " v8::Handle<v8::Object> wrapper = args.Holder();\n";
if ($interface->extendedAttributes->{"RaisesException"}) {
- $code .= " if (ec)\n";
- $code .= " return setDOMException(ec, args.GetIsolate());\n";
+ $code .= " if (ec) {\n";
+ $code .= " setDOMException(ec, args.GetIsolate());\n";
+ $code .= " return;\n";
+ $code .= " }\n";
}
$code .= <<END;
V8DOMWrapper::associateObjectWithWrapper(impl.release(), &${v8ClassName}Constructor::info, wrapper, args.GetIsolate(), WrapperConfiguration::Dependent);
- return wrapper;
+ args.GetReturnValue().Set(wrapper);
haraken 2013/05/23 15:04:38 Can't we write this as args.SetReturnValue(wrapper
dcarney 2013/05/24 08:11:48 The ReturnValue is mean to be stack passable, and
}
END
@@ -2779,11 +2863,15 @@ sub GenerateConstructorHeader
{
AddToImplIncludes("bindings/v8/V8ObjectConstructor.h");
my $content = <<END;
- if (!args.IsConstructCall())
- return throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate());
+ if (!args.IsConstructCall()) {
+ throwTypeError("DOM object constructor cannot be called as a function.", args.GetIsolate());
+ return;
+ }
- if (ConstructorMode::current() == ConstructorMode::WrapExistingObject)
- return args.Holder();
+ if (ConstructorMode::current() == ConstructorMode::WrapExistingObject) {
+ args.GetReturnValue().Set(args.Holder());
+ return;
+ }
END
return $content;
« no previous file with comments | « no previous file | Source/bindings/v8/V8Binding.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698