[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.16-1409-g5afdf4d
snej at chromium.org
snej at chromium.org
Thu Dec 3 13:32:53 UTC 2009
The following commit has been merged in the webkit-1.1 branch:
commit 781a98c285aef9160e723cbf58032029bc983d3c
Author: snej at chromium.org <snej at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Wed Nov 11 22:54:31 2009 +0000
More V8 de-inlining (outlining?) Abstracted a chunk of boilerplate code from every
event-listener setter into a new subroutine transferHiddenDependency().
https://bugs.webkit.org/show_bug.cgi?id=31377
Reviewed by Dimitri Glazkov.
* bindings/scripts/CodeGeneratorV8.pm: Replace boilerplate with call to transferHiddenDependency().
* bindings/v8/V8Utilities.cpp:
(WebCore::transferHiddenDependency): New.
* bindings/v8/V8Utilities.h: Declaration of transferHiddenDependency.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@50844 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 5b28586..12ad15d 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,16 @@
+2009-11-11 Jens Alfke <snej at chromium.org>
+
+ Reviewed by Dimitri Glazkov.
+
+ More V8 de-inlining (outlining?) Abstracted a chunk of boilerplate code from every
+ event-listener setter into a new subroutine transferHiddenDependency().
+ https://bugs.webkit.org/show_bug.cgi?id=31377
+
+ * bindings/scripts/CodeGeneratorV8.pm: Replace boilerplate with call to transferHiddenDependency().
+ * bindings/v8/V8Utilities.cpp:
+ (WebCore::transferHiddenDependency): New.
+ * bindings/v8/V8Utilities.h: Declaration of transferHiddenDependency.
+
2009-11-11 Brian Weinstein <bweinstein at apple.com>
Reviewed by Beth Dakin.
diff --git a/WebCore/bindings/scripts/CodeGeneratorV8.pm b/WebCore/bindings/scripts/CodeGeneratorV8.pm
index fc3b29c..6bc74f3 100644
--- a/WebCore/bindings/scripts/CodeGeneratorV8.pm
+++ b/WebCore/bindings/scripts/CodeGeneratorV8.pm
@@ -724,7 +724,6 @@ END
push(@implContentDecls, " if (!imp->document())\n");
push(@implContentDecls, " return;\n");
}
- push(@implContentDecls, " $nativeType v = V8DOMWrapper::getEventListener(imp, value, true, ListenerFindOrCreate);\n");
} else {
push(@implContentDecls, " $nativeType v = " . JSValueToNative($attribute->signature, "value") . ";\n");
}
@@ -764,18 +763,10 @@ END
$implIncludes{"V8AbstractEventListener.h"} = 1;
$implIncludes{"V8CustomBinding.h"} = 1;
$cacheIndex = GetHiddenDependencyIndex($dataNode, $attrName);
- push(@implContentDecls, " $nativeType old = imp->$attrName();\n");
- push(@implContentDecls, " V8AbstractEventListener* oldListener = old ? V8AbstractEventListener::cast(old.get()) : 0;\n");
- push(@implContentDecls, " if (oldListener) {\n");
- push(@implContentDecls, " v8::Local<v8::Object> oldListenerObject = oldListener->getExistingListenerObject();\n");
- push(@implContentDecls, " if (!oldListenerObject.IsEmpty())\n");
- push(@implContentDecls, " removeHiddenDependency(holder, oldListenerObject, $cacheIndex);\n");
- push(@implContentDecls, " }\n");
- push(@implContentDecls, " imp->set$implSetterFunctionName($result);\n");
- push(@implContentDecls, " if ($result)\n");
- push(@implContentDecls, " createHiddenDependency(holder, value, $cacheIndex");
+ push(@implContentDecls, " transferHiddenDependency(holder, imp->$attrName(), value, $cacheIndex);\n");
+ push(@implContentDecls, " imp->set$implSetterFunctionName(V8DOMWrapper::getEventListener(imp, value, true, ListenerFindOrCreate)");
} else {
- push(@implContentDecls, " imp->set$implSetterFunctionName(" . $result);
+ push(@implContentDecls, " imp->set$implSetterFunctionName($result");
}
push(@implContentDecls, ", ec") if $useExceptions;
push(@implContentDecls, ");\n");
diff --git a/WebCore/bindings/v8/V8Utilities.cpp b/WebCore/bindings/v8/V8Utilities.cpp
index b01399d..0373aee 100644
--- a/WebCore/bindings/v8/V8Utilities.cpp
+++ b/WebCore/bindings/v8/V8Utilities.cpp
@@ -76,6 +76,24 @@ void removeHiddenDependency(v8::Handle<v8::Object> object, v8::Local<v8::Value>
}
}
}
+
+void transferHiddenDependency(v8::Handle<v8::Object> object,
+ EventListener* oldValue,
+ v8::Local<v8::Value> newValue,
+ int cacheIndex)
+{
+ if (oldValue) {
+ V8AbstractEventListener* oldListener = V8AbstractEventListener::cast(oldValue);
+ if (oldListener) {
+ v8::Local<v8::Object> oldListenerObject = oldListener->getExistingListenerObject();
+ if (!oldListenerObject.IsEmpty())
+ removeHiddenDependency(object, oldListenerObject, cacheIndex);
+ }
+ }
+ if (!newValue->IsNull() && !newValue->IsUndefined())
+ createHiddenDependency(object, newValue, cacheIndex);
+}
+
bool processingUserGesture()
{
diff --git a/WebCore/bindings/v8/V8Utilities.h b/WebCore/bindings/v8/V8Utilities.h
index 36dce24..944823a 100644
--- a/WebCore/bindings/v8/V8Utilities.h
+++ b/WebCore/bindings/v8/V8Utilities.h
@@ -35,6 +35,7 @@
namespace WebCore {
+ class EventListener;
class Frame;
class KURL;
class ScriptExecutionContext;
@@ -44,7 +45,10 @@ namespace WebCore {
// Use an array to hold dependents. It works like a ref-counted scheme. A value can be added more than once to the DOM object.
void createHiddenDependency(v8::Handle<v8::Object>, v8::Local<v8::Value>, int cacheIndex);
void removeHiddenDependency(v8::Handle<v8::Object>, v8::Local<v8::Value>, int cacheIndex);
-
+
+ // Combo create/remove, for generated event-handler-setter bindings:
+ void transferHiddenDependency(v8::Handle<v8::Object>, EventListener* oldValue, v8::Local<v8::Value> newValue, int cacheIndex);
+
bool processingUserGesture();
bool shouldAllowNavigation(Frame*);
KURL completeURL(const String& relativeURL);
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list