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

Reply via email to