Gitweb links:
...log
http://git.netsurf-browser.org/netsurf.git/shortlog/d7c7ec5d4ad55819d61f8576249865269e3c9672
...commit
http://git.netsurf-browser.org/netsurf.git/commit/d7c7ec5d4ad55819d61f8576249865269e3c9672
...tree
http://git.netsurf-browser.org/netsurf.git/tree/d7c7ec5d4ad55819d61f8576249865269e3c9672
The branch, dsilvers/eventtarget has been updated
via d7c7ec5d4ad55819d61f8576249865269e3c9672 (commit)
from a611c5757ea6d98cca41b2ad08bc5fde39ef48dd (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff
http://git.netsurf-browser.org/netsurf.git/commit/?id=d7c7ec5d4ad55819d61f8576249865269e3c9672
commit d7c7ec5d4ad55819d61f8576249865269e3c9672
Author: Daniel Silverstone <[email protected]>
Commit: Daniel Silverstone <[email protected]>
foldme: Fix up shuffling for ELF_ONCE
diff --git a/content/handlers/javascript/duktape/EventTarget.bnd
b/content/handlers/javascript/duktape/EventTarget.bnd
index 9c66ba2..fe78194 100644
--- a/content/handlers/javascript/duktape/EventTarget.bnd
+++ b/content/handlers/javascript/duktape/EventTarget.bnd
@@ -122,13 +122,9 @@ static void event_target_unregister_listener(duk_context
*ctx,
idx = duk_to_int(ctx, -1);
duk_pop_2(ctx);
/* ... listeners */
- while (duk_get_prop_index(ctx, -1, idx + 1)) {
- duk_put_prop_index(ctx, -2, idx);
- idx++;
- }
- /* ... listeners undefined */
- duk_del_prop_index(ctx, -2, idx + 1);
- duk_pop_2(ctx);
+ dukky_shuffle_array(ctx, idx);
+ /* ... listeners */
+ duk_pop(ctx);
/* ... */
}
diff --git a/content/handlers/javascript/duktape/dukky.c
b/content/handlers/javascript/duktape/dukky.c
index 18e8387..b0bcc8a 100644
--- a/content/handlers/javascript/duktape/dukky.c
+++ b/content/handlers/javascript/duktape/dukky.c
@@ -911,8 +911,17 @@ handle_extras:
idx = 0;
while (duk_get_prop_index(ctx, -2, idx)) {
/* ... sublisteners copy handler */
- /* TODO check if the handler is ONCE, if so, remove it from
- * the sublisteners */
+ duk_get_prop_index(ctx, -1, 1);
+ /* ... sublisteners copy handler flags */
+ if ((event_listener_flags)duk_to_int(ctx, -1) & ELF_ONCE) {
+ duk_dup(ctx, -4);
+ /* ... subl copy handler flags subl */
+ dukky_shuffle_array(ctx, idx);
+ duk_pop(ctx);
+ /* ... subl copy handler flags */
+ }
+ duk_pop(ctx);
+ /* ... sublisteners copy handler */
duk_put_prop_index(ctx, -2, idx);
/* ... sublisteners copy */
idx++;
@@ -1078,6 +1087,23 @@ bool dukky_event_target_push_listeners(duk_context *ctx,
bool dont_create)
return ret;
}
+/* Shuffle a duktape array "down" one. This involves iterating from
+ * the index provided, shuffling elements down, until we reach an
+ * undefined
+ */
+void dukky_shuffle_array(duk_context *ctx, duk_uarridx_t idx)
+{
+ /* ... somearr */
+ while (duk_get_prop_index(ctx, -1, idx + 1)) {
+ duk_put_prop_index(ctx, -2, idx);
+ idx++;
+ }
+ /* ... somearr undefined */
+ duk_del_prop_index(ctx, -2, idx + 1);
+ duk_pop(ctx);
+}
+
+
void js_handle_new_element(jscontext *ctx, struct dom_element *node)
{
assert(ctx);
diff --git a/content/handlers/javascript/duktape/dukky.h
b/content/handlers/javascript/duktape/dukky.h
index 9177136..b5809aa 100644
--- a/content/handlers/javascript/duktape/dukky.h
+++ b/content/handlers/javascript/duktape/dukky.h
@@ -51,4 +51,6 @@ typedef enum {
ELF_NONE = 0
} event_listener_flags;
+void dukky_shuffle_array(duk_context *ctx, duk_uarridx_t idx);
+
#endif
-----------------------------------------------------------------------
Summary of changes:
.../handlers/javascript/duktape/EventTarget.bnd | 10 ++-----
content/handlers/javascript/duktape/dukky.c | 30 ++++++++++++++++++--
content/handlers/javascript/duktape/dukky.h | 2 ++
3 files changed, 33 insertions(+), 9 deletions(-)
diff --git a/content/handlers/javascript/duktape/EventTarget.bnd
b/content/handlers/javascript/duktape/EventTarget.bnd
index 9c66ba2..fe78194 100644
--- a/content/handlers/javascript/duktape/EventTarget.bnd
+++ b/content/handlers/javascript/duktape/EventTarget.bnd
@@ -122,13 +122,9 @@ static void event_target_unregister_listener(duk_context
*ctx,
idx = duk_to_int(ctx, -1);
duk_pop_2(ctx);
/* ... listeners */
- while (duk_get_prop_index(ctx, -1, idx + 1)) {
- duk_put_prop_index(ctx, -2, idx);
- idx++;
- }
- /* ... listeners undefined */
- duk_del_prop_index(ctx, -2, idx + 1);
- duk_pop_2(ctx);
+ dukky_shuffle_array(ctx, idx);
+ /* ... listeners */
+ duk_pop(ctx);
/* ... */
}
diff --git a/content/handlers/javascript/duktape/dukky.c
b/content/handlers/javascript/duktape/dukky.c
index 18e8387..b0bcc8a 100644
--- a/content/handlers/javascript/duktape/dukky.c
+++ b/content/handlers/javascript/duktape/dukky.c
@@ -911,8 +911,17 @@ handle_extras:
idx = 0;
while (duk_get_prop_index(ctx, -2, idx)) {
/* ... sublisteners copy handler */
- /* TODO check if the handler is ONCE, if so, remove it from
- * the sublisteners */
+ duk_get_prop_index(ctx, -1, 1);
+ /* ... sublisteners copy handler flags */
+ if ((event_listener_flags)duk_to_int(ctx, -1) & ELF_ONCE) {
+ duk_dup(ctx, -4);
+ /* ... subl copy handler flags subl */
+ dukky_shuffle_array(ctx, idx);
+ duk_pop(ctx);
+ /* ... subl copy handler flags */
+ }
+ duk_pop(ctx);
+ /* ... sublisteners copy handler */
duk_put_prop_index(ctx, -2, idx);
/* ... sublisteners copy */
idx++;
@@ -1078,6 +1087,23 @@ bool dukky_event_target_push_listeners(duk_context *ctx,
bool dont_create)
return ret;
}
+/* Shuffle a duktape array "down" one. This involves iterating from
+ * the index provided, shuffling elements down, until we reach an
+ * undefined
+ */
+void dukky_shuffle_array(duk_context *ctx, duk_uarridx_t idx)
+{
+ /* ... somearr */
+ while (duk_get_prop_index(ctx, -1, idx + 1)) {
+ duk_put_prop_index(ctx, -2, idx);
+ idx++;
+ }
+ /* ... somearr undefined */
+ duk_del_prop_index(ctx, -2, idx + 1);
+ duk_pop(ctx);
+}
+
+
void js_handle_new_element(jscontext *ctx, struct dom_element *node)
{
assert(ctx);
diff --git a/content/handlers/javascript/duktape/dukky.h
b/content/handlers/javascript/duktape/dukky.h
index 9177136..b5809aa 100644
--- a/content/handlers/javascript/duktape/dukky.h
+++ b/content/handlers/javascript/duktape/dukky.h
@@ -51,4 +51,6 @@ typedef enum {
ELF_NONE = 0
} event_listener_flags;
+void dukky_shuffle_array(duk_context *ctx, duk_uarridx_t idx);
+
#endif
--
NetSurf Browser
_______________________________________________
netsurf-commits mailing list
[email protected]
http://listmaster.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-commits-netsurf-browser.org