Bug 507180 - Fix imacros (r=waldo)
authorLuke Wagner <lw@mozilla.com>
Wed, 19 Aug 2009 09:06:22 -0700
changeset 31889 a10a85319c3b4c2205e815024fbfb851411973a6
parent 31888 7d788206e2ae7d98e462dab72c99061565f44e8d
child 31890 40db1206d791574e2650f19d69b314707969100b
push idunknown
push userunknown
push dateunknown
reviewerswaldo
bugs507180
milestone1.9.3a1pre
Bug 507180 - Fix imacros (r=waldo)
js/src/imacros.c.out
js/src/imacros.jsasm
--- a/js/src/imacros.c.out
+++ b/js/src/imacros.c.out
@@ -1,77 +1,83 @@
 /* GENERATED BY imacro_asm.js -- DO NOT EDIT!!! */
 static struct {
-    jsbytecode any_obj[34];
-    jsbytecode obj_any[36];
+    jsbytecode any_obj[36];
+    jsbytecode obj_any[38];
 } equality_imacros = {
     {
 /* 0*/  JSOP_DUP,
 /* 1*/  JSOP_DUP,
 /* 2*/  JSOP_GETPROP, 0, COMMON_ATOM_INDEX(valueOf),
-/* 5*/  JSOP_IFPRIMTOP, 0, 16,
+/* 5*/  JSOP_IFPRIMTOP, 0, 18,
 /* 8*/  JSOP_SWAP,
 /* 9*/  JSOP_STRING, 0, COMMON_TYPE_ATOM_INDEX(JSTYPE_VOID),
 /*12*/  JSOP_CALL, 0, 1,
-/*15*/  JSOP_IFPRIMTOP, 0, 15,
-/*18*/  JSOP_GOTO, 0, 4,
-/*21*/  JSOP_POP,
-/*22*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(toString),
-/*25*/  JSOP_CALL, 0, 0,
-/*28*/  JSOP_PRIMTOP, (JSTYPE_NUMBER),
-/*30*/  JSOP_SWAP,
-/*31*/  JSOP_POP,
-/*32*/  JSOP_IMACOP,
-/*33*/  JSOP_STOP,
+/*15*/  JSOP_IFPRIMTOP, 0, 17,
+/*18*/  JSOP_POP,
+/*19*/  JSOP_DUP,
+/*20*/  JSOP_GOTO, 0, 4,
+/*23*/  JSOP_POP,
+/*24*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(toString),
+/*27*/  JSOP_CALL, 0, 0,
+/*30*/  JSOP_PRIMTOP, (JSTYPE_NUMBER),
+/*32*/  JSOP_SWAP,
+/*33*/  JSOP_POP,
+/*34*/  JSOP_IMACOP,
+/*35*/  JSOP_STOP,
     },
     {
 /* 0*/  JSOP_SWAP,
 /* 1*/  JSOP_DUP,
 /* 2*/  JSOP_DUP,
 /* 3*/  JSOP_GETPROP, 0, COMMON_ATOM_INDEX(valueOf),
-/* 6*/  JSOP_IFPRIMTOP, 0, 16,
+/* 6*/  JSOP_IFPRIMTOP, 0, 18,
 /* 9*/  JSOP_SWAP,
 /*10*/  JSOP_STRING, 0, COMMON_TYPE_ATOM_INDEX(JSTYPE_VOID),
 /*13*/  JSOP_CALL, 0, 1,
-/*16*/  JSOP_IFPRIMTOP, 0, 15,
-/*19*/  JSOP_GOTO, 0, 4,
-/*22*/  JSOP_POP,
-/*23*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(toString),
-/*26*/  JSOP_CALL, 0, 0,
-/*29*/  JSOP_PRIMTOP, (JSTYPE_NUMBER),
-/*31*/  JSOP_SWAP,
-/*32*/  JSOP_POP,
+/*16*/  JSOP_IFPRIMTOP, 0, 17,
+/*19*/  JSOP_POP,
+/*20*/  JSOP_DUP,
+/*21*/  JSOP_GOTO, 0, 4,
+/*24*/  JSOP_POP,
+/*25*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(toString),
+/*28*/  JSOP_CALL, 0, 0,
+/*31*/  JSOP_PRIMTOP, (JSTYPE_NUMBER),
 /*33*/  JSOP_SWAP,
-/*34*/  JSOP_IMACOP,
-/*35*/  JSOP_STOP,
+/*34*/  JSOP_POP,
+/*35*/  JSOP_SWAP,
+/*36*/  JSOP_IMACOP,
+/*37*/  JSOP_STOP,
     },
 };
 static struct {
-    jsbytecode any_obj[34];
+    jsbytecode any_obj[36];
     jsbytecode obj_any[38];
-    jsbytecode obj_obj[68];
+    jsbytecode obj_obj[72];
 } binary_imacros = {
     {
 /* 0*/  JSOP_DUP,
 /* 1*/  JSOP_DUP,
 /* 2*/  JSOP_GETPROP, 0, COMMON_ATOM_INDEX(valueOf),
-/* 5*/  JSOP_IFPRIMTOP, 0, 16,
+/* 5*/  JSOP_IFPRIMTOP, 0, 18,
 /* 8*/  JSOP_SWAP,
 /* 9*/  JSOP_STRING, 0, COMMON_TYPE_ATOM_INDEX(JSTYPE_NUMBER),
 /*12*/  JSOP_CALL, 0, 1,
-/*15*/  JSOP_IFPRIMTOP, 0, 15,
-/*18*/  JSOP_GOTO, 0, 4,
-/*21*/  JSOP_POP,
-/*22*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(toString),
-/*25*/  JSOP_CALL, 0, 0,
-/*28*/  JSOP_PRIMTOP, (JSTYPE_NUMBER),
-/*30*/  JSOP_SWAP,
-/*31*/  JSOP_POP,
-/*32*/  JSOP_IMACOP,
-/*33*/  JSOP_STOP,
+/*15*/  JSOP_IFPRIMTOP, 0, 17,
+/*18*/  JSOP_POP,
+/*19*/  JSOP_DUP,
+/*20*/  JSOP_GOTO, 0, 4,
+/*23*/  JSOP_POP,
+/*24*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(toString),
+/*27*/  JSOP_CALL, 0, 0,
+/*30*/  JSOP_PRIMTOP, (JSTYPE_NUMBER),
+/*32*/  JSOP_SWAP,
+/*33*/  JSOP_POP,
+/*34*/  JSOP_IMACOP,
+/*35*/  JSOP_STOP,
     },
     {
 /* 0*/  JSOP_SWAP,
 /* 1*/  JSOP_DUP,
 /* 2*/  JSOP_DUP,
 /* 3*/  JSOP_GETPROP, 0, COMMON_ATOM_INDEX(valueOf),
 /* 6*/  JSOP_IFPRIMTOP, 0, 18,
 /* 9*/  JSOP_SWAP,
@@ -91,200 +97,218 @@ static struct {
 /*36*/  JSOP_IMACOP,
 /*37*/  JSOP_STOP,
     },
     {
 /* 0*/  JSOP_SWAP,
 /* 1*/  JSOP_DUP,
 /* 2*/  JSOP_DUP,
 /* 3*/  JSOP_GETPROP, 0, COMMON_ATOM_INDEX(valueOf),
-/* 6*/  JSOP_IFPRIMTOP, 0, 16,
+/* 6*/  JSOP_IFPRIMTOP, 0, 18,
 /* 9*/  JSOP_SWAP,
 /*10*/  JSOP_STRING, 0, COMMON_TYPE_ATOM_INDEX(JSTYPE_NUMBER),
 /*13*/  JSOP_CALL, 0, 1,
-/*16*/  JSOP_IFPRIMTOP, 0, 15,
-/*19*/  JSOP_GOTO, 0, 4,
-/*22*/  JSOP_POP,
-/*23*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(toString),
-/*26*/  JSOP_CALL, 0, 0,
-/*29*/  JSOP_PRIMTOP, (JSTYPE_NUMBER),
-/*31*/  JSOP_SWAP,
-/*32*/  JSOP_POP,
+/*16*/  JSOP_IFPRIMTOP, 0, 17,
+/*19*/  JSOP_POP,
+/*20*/  JSOP_DUP,
+/*21*/  JSOP_GOTO, 0, 4,
+/*24*/  JSOP_POP,
+/*25*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(toString),
+/*28*/  JSOP_CALL, 0, 0,
+/*31*/  JSOP_PRIMTOP, (JSTYPE_NUMBER),
 /*33*/  JSOP_SWAP,
-/*34*/  JSOP_DUP,
-/*35*/  JSOP_DUP,
-/*36*/  JSOP_GETPROP, 0, COMMON_ATOM_INDEX(valueOf),
-/*39*/  JSOP_IFPRIMTOP, 0, 16,
-/*42*/  JSOP_SWAP,
-/*43*/  JSOP_STRING, 0, COMMON_TYPE_ATOM_INDEX(JSTYPE_NUMBER),
-/*46*/  JSOP_CALL, 0, 1,
-/*49*/  JSOP_IFPRIMTOP, 0, 15,
-/*52*/  JSOP_GOTO, 0, 4,
-/*55*/  JSOP_POP,
-/*56*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(toString),
-/*59*/  JSOP_CALL, 0, 0,
-/*62*/  JSOP_PRIMTOP, (JSTYPE_NUMBER),
-/*64*/  JSOP_SWAP,
-/*65*/  JSOP_POP,
-/*66*/  JSOP_IMACOP,
-/*67*/  JSOP_STOP,
+/*34*/  JSOP_POP,
+/*35*/  JSOP_SWAP,
+/*36*/  JSOP_DUP,
+/*37*/  JSOP_DUP,
+/*38*/  JSOP_GETPROP, 0, COMMON_ATOM_INDEX(valueOf),
+/*41*/  JSOP_IFPRIMTOP, 0, 18,
+/*44*/  JSOP_SWAP,
+/*45*/  JSOP_STRING, 0, COMMON_TYPE_ATOM_INDEX(JSTYPE_NUMBER),
+/*48*/  JSOP_CALL, 0, 1,
+/*51*/  JSOP_IFPRIMTOP, 0, 17,
+/*54*/  JSOP_POP,
+/*55*/  JSOP_DUP,
+/*56*/  JSOP_GOTO, 0, 4,
+/*59*/  JSOP_POP,
+/*60*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(toString),
+/*63*/  JSOP_CALL, 0, 0,
+/*66*/  JSOP_PRIMTOP, (JSTYPE_NUMBER),
+/*68*/  JSOP_SWAP,
+/*69*/  JSOP_POP,
+/*70*/  JSOP_IMACOP,
+/*71*/  JSOP_STOP,
     },
 };
 static struct {
-    jsbytecode any_obj[34];
-    jsbytecode obj_any[36];
-    jsbytecode obj_obj[68];
+    jsbytecode any_obj[36];
+    jsbytecode obj_any[38];
+    jsbytecode obj_obj[72];
 } add_imacros = {
     {
 /* 0*/  JSOP_DUP,
 /* 1*/  JSOP_DUP,
 /* 2*/  JSOP_GETPROP, 0, COMMON_ATOM_INDEX(valueOf),
-/* 5*/  JSOP_IFPRIMTOP, 0, 16,
+/* 5*/  JSOP_IFPRIMTOP, 0, 18,
 /* 8*/  JSOP_SWAP,
 /* 9*/  JSOP_STRING, 0, COMMON_TYPE_ATOM_INDEX(JSTYPE_VOID),
 /*12*/  JSOP_CALL, 0, 1,
-/*15*/  JSOP_IFPRIMTOP, 0, 15,
-/*18*/  JSOP_GOTO, 0, 4,
-/*21*/  JSOP_POP,
-/*22*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(toString),
-/*25*/  JSOP_CALL, 0, 0,
-/*28*/  JSOP_PRIMTOP, (JSTYPE_VOID),
-/*30*/  JSOP_SWAP,
-/*31*/  JSOP_POP,
-/*32*/  JSOP_ADD,
-/*33*/  JSOP_STOP,
-    },
-    {
-/* 0*/  JSOP_SWAP,
-/* 1*/  JSOP_DUP,
-/* 2*/  JSOP_DUP,
-/* 3*/  JSOP_GETPROP, 0, COMMON_ATOM_INDEX(valueOf),
-/* 6*/  JSOP_IFPRIMTOP, 0, 16,
-/* 9*/  JSOP_SWAP,
-/*10*/  JSOP_STRING, 0, COMMON_TYPE_ATOM_INDEX(JSTYPE_VOID),
-/*13*/  JSOP_CALL, 0, 1,
-/*16*/  JSOP_IFPRIMTOP, 0, 15,
-/*19*/  JSOP_GOTO, 0, 4,
-/*22*/  JSOP_POP,
-/*23*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(toString),
-/*26*/  JSOP_CALL, 0, 0,
-/*29*/  JSOP_PRIMTOP, (JSTYPE_VOID),
-/*31*/  JSOP_SWAP,
-/*32*/  JSOP_POP,
-/*33*/  JSOP_SWAP,
+/*15*/  JSOP_IFPRIMTOP, 0, 17,
+/*18*/  JSOP_POP,
+/*19*/  JSOP_DUP,
+/*20*/  JSOP_GOTO, 0, 4,
+/*23*/  JSOP_POP,
+/*24*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(toString),
+/*27*/  JSOP_CALL, 0, 0,
+/*30*/  JSOP_PRIMTOP, (JSTYPE_VOID),
+/*32*/  JSOP_SWAP,
+/*33*/  JSOP_POP,
 /*34*/  JSOP_ADD,
 /*35*/  JSOP_STOP,
     },
     {
 /* 0*/  JSOP_SWAP,
 /* 1*/  JSOP_DUP,
 /* 2*/  JSOP_DUP,
 /* 3*/  JSOP_GETPROP, 0, COMMON_ATOM_INDEX(valueOf),
-/* 6*/  JSOP_IFPRIMTOP, 0, 16,
+/* 6*/  JSOP_IFPRIMTOP, 0, 18,
+/* 9*/  JSOP_SWAP,
+/*10*/  JSOP_STRING, 0, COMMON_TYPE_ATOM_INDEX(JSTYPE_VOID),
+/*13*/  JSOP_CALL, 0, 1,
+/*16*/  JSOP_IFPRIMTOP, 0, 17,
+/*19*/  JSOP_POP,
+/*20*/  JSOP_DUP,
+/*21*/  JSOP_GOTO, 0, 4,
+/*24*/  JSOP_POP,
+/*25*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(toString),
+/*28*/  JSOP_CALL, 0, 0,
+/*31*/  JSOP_PRIMTOP, (JSTYPE_VOID),
+/*33*/  JSOP_SWAP,
+/*34*/  JSOP_POP,
+/*35*/  JSOP_SWAP,
+/*36*/  JSOP_ADD,
+/*37*/  JSOP_STOP,
+    },
+    {
+/* 0*/  JSOP_SWAP,
+/* 1*/  JSOP_DUP,
+/* 2*/  JSOP_DUP,
+/* 3*/  JSOP_GETPROP, 0, COMMON_ATOM_INDEX(valueOf),
+/* 6*/  JSOP_IFPRIMTOP, 0, 18,
 /* 9*/  JSOP_SWAP,
 /*10*/  JSOP_STRING, 0, COMMON_TYPE_ATOM_INDEX(JSTYPE_VOID),
 /*13*/  JSOP_CALL, 0, 1,
-/*16*/  JSOP_IFPRIMTOP, 0, 15,
-/*19*/  JSOP_GOTO, 0, 4,
-/*22*/  JSOP_POP,
-/*23*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(toString),
-/*26*/  JSOP_CALL, 0, 0,
-/*29*/  JSOP_PRIMTOP, (JSTYPE_VOID),
-/*31*/  JSOP_SWAP,
-/*32*/  JSOP_POP,
+/*16*/  JSOP_IFPRIMTOP, 0, 17,
+/*19*/  JSOP_POP,
+/*20*/  JSOP_DUP,
+/*21*/  JSOP_GOTO, 0, 4,
+/*24*/  JSOP_POP,
+/*25*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(toString),
+/*28*/  JSOP_CALL, 0, 0,
+/*31*/  JSOP_PRIMTOP, (JSTYPE_VOID),
 /*33*/  JSOP_SWAP,
-/*34*/  JSOP_DUP,
-/*35*/  JSOP_DUP,
-/*36*/  JSOP_GETPROP, 0, COMMON_ATOM_INDEX(valueOf),
-/*39*/  JSOP_IFPRIMTOP, 0, 16,
-/*42*/  JSOP_SWAP,
-/*43*/  JSOP_STRING, 0, COMMON_TYPE_ATOM_INDEX(JSTYPE_VOID),
-/*46*/  JSOP_CALL, 0, 1,
-/*49*/  JSOP_IFPRIMTOP, 0, 15,
-/*52*/  JSOP_GOTO, 0, 4,
-/*55*/  JSOP_POP,
-/*56*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(toString),
-/*59*/  JSOP_CALL, 0, 0,
-/*62*/  JSOP_PRIMTOP, (JSTYPE_VOID),
-/*64*/  JSOP_SWAP,
-/*65*/  JSOP_POP,
-/*66*/  JSOP_ADD,
-/*67*/  JSOP_STOP,
+/*34*/  JSOP_POP,
+/*35*/  JSOP_SWAP,
+/*36*/  JSOP_DUP,
+/*37*/  JSOP_DUP,
+/*38*/  JSOP_GETPROP, 0, COMMON_ATOM_INDEX(valueOf),
+/*41*/  JSOP_IFPRIMTOP, 0, 18,
+/*44*/  JSOP_SWAP,
+/*45*/  JSOP_STRING, 0, COMMON_TYPE_ATOM_INDEX(JSTYPE_VOID),
+/*48*/  JSOP_CALL, 0, 1,
+/*51*/  JSOP_IFPRIMTOP, 0, 17,
+/*54*/  JSOP_POP,
+/*55*/  JSOP_DUP,
+/*56*/  JSOP_GOTO, 0, 4,
+/*59*/  JSOP_POP,
+/*60*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(toString),
+/*63*/  JSOP_CALL, 0, 0,
+/*66*/  JSOP_PRIMTOP, (JSTYPE_VOID),
+/*68*/  JSOP_SWAP,
+/*69*/  JSOP_POP,
+/*70*/  JSOP_ADD,
+/*71*/  JSOP_STOP,
     },
 };
 static struct {
-    jsbytecode sign[39];
+    jsbytecode sign[41];
 } unary_imacros = {
     {
 /* 0*/  JSOP_DUP,
 /* 1*/  JSOP_DUP,
 /* 2*/  JSOP_GETPROP, 0, COMMON_ATOM_INDEX(valueOf),
-/* 5*/  JSOP_IFPRIMTOP, 0, 21,
+/* 5*/  JSOP_IFPRIMTOP, 0, 23,
 /* 8*/  JSOP_SWAP,
 /* 9*/  JSOP_STRING, 0, COMMON_TYPE_ATOM_INDEX(JSTYPE_NUMBER),
 /*12*/  JSOP_CALL, 0, 1,
-/*15*/  JSOP_IFPRIMTOP, 0, 6,
-/*18*/  JSOP_GOTO, 0, 9,
-/*21*/  JSOP_SWAP,
-/*22*/  JSOP_POP,
-/*23*/  JSOP_GOTO, 0, 14,
-/*26*/  JSOP_POP,
-/*27*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(toString),
-/*30*/  JSOP_CALL, 0, 0,
-/*33*/  JSOP_PRIMTOP, (JSTYPE_NUMBER),
-/*35*/  JSOP_SWAP,
-/*36*/  JSOP_POP,
-/*37*/  JSOP_IMACOP,
-/*38*/  JSOP_STOP,
+/*15*/  JSOP_IFPRIMTOP, 0, 8,
+/*18*/  JSOP_POP,
+/*19*/  JSOP_DUP,
+/*20*/  JSOP_GOTO, 0, 9,
+/*23*/  JSOP_SWAP,
+/*24*/  JSOP_POP,
+/*25*/  JSOP_GOTO, 0, 14,
+/*28*/  JSOP_POP,
+/*29*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(toString),
+/*32*/  JSOP_CALL, 0, 0,
+/*35*/  JSOP_PRIMTOP, (JSTYPE_NUMBER),
+/*37*/  JSOP_SWAP,
+/*38*/  JSOP_POP,
+/*39*/  JSOP_IMACOP,
+/*40*/  JSOP_STOP,
     },
 };
 static struct {
-    jsbytecode String[36];
+    jsbytecode String[38];
 } call_imacros = {
     {
 /* 0*/  JSOP_DUP,
 /* 1*/  JSOP_DUP,
 /* 2*/  JSOP_GETPROP, 0, COMMON_ATOM_INDEX(toString),
-/* 5*/  JSOP_IFPRIMTOP, 0, 13,
+/* 5*/  JSOP_IFPRIMTOP, 0, 15,
 /* 8*/  JSOP_SWAP,
 /* 9*/  JSOP_CALL, 0, 0,
-/*12*/  JSOP_IFPRIMTOP, 0, 18,
-/*15*/  JSOP_GOTO, 0, 4,
-/*18*/  JSOP_POP,
-/*19*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(valueOf),
-/*22*/  JSOP_STRING, 0, COMMON_TYPE_ATOM_INDEX(JSTYPE_STRING),
-/*25*/  JSOP_CALL, 0, 1,
-/*28*/  JSOP_PRIMTOP, (JSTYPE_STRING),
-/*30*/  JSOP_SWAP,
-/*31*/  JSOP_POP,
-/*32*/  JSOP_CALL, 0, 1,
-/*35*/  JSOP_STOP,
+/*12*/  JSOP_IFPRIMTOP, 0, 20,
+/*15*/  JSOP_POP,
+/*16*/  JSOP_DUP,
+/*17*/  JSOP_GOTO, 0, 4,
+/*20*/  JSOP_POP,
+/*21*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(valueOf),
+/*24*/  JSOP_STRING, 0, COMMON_TYPE_ATOM_INDEX(JSTYPE_STRING),
+/*27*/  JSOP_CALL, 0, 1,
+/*30*/  JSOP_PRIMTOP, (JSTYPE_STRING),
+/*32*/  JSOP_SWAP,
+/*33*/  JSOP_POP,
+/*34*/  JSOP_CALL, 0, 1,
+/*37*/  JSOP_STOP,
     },
 };
 static struct {
-    jsbytecode String[36];
+    jsbytecode String[38];
 } new_imacros = {
     {
 /* 0*/  JSOP_DUP,
 /* 1*/  JSOP_DUP,
 /* 2*/  JSOP_GETPROP, 0, COMMON_ATOM_INDEX(toString),
-/* 5*/  JSOP_IFPRIMTOP, 0, 13,
+/* 5*/  JSOP_IFPRIMTOP, 0, 15,
 /* 8*/  JSOP_SWAP,
 /* 9*/  JSOP_CALL, 0, 0,
-/*12*/  JSOP_IFPRIMTOP, 0, 18,
-/*15*/  JSOP_GOTO, 0, 4,
-/*18*/  JSOP_POP,
-/*19*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(valueOf),
-/*22*/  JSOP_STRING, 0, COMMON_TYPE_ATOM_INDEX(JSTYPE_STRING),
-/*25*/  JSOP_CALL, 0, 1,
-/*28*/  JSOP_PRIMTOP, (JSTYPE_STRING),
-/*30*/  JSOP_SWAP,
-/*31*/  JSOP_POP,
-/*32*/  JSOP_NEW, 0, 1,
-/*35*/  JSOP_STOP,
+/*12*/  JSOP_IFPRIMTOP, 0, 20,
+/*15*/  JSOP_POP,
+/*16*/  JSOP_DUP,
+/*17*/  JSOP_GOTO, 0, 4,
+/*20*/  JSOP_POP,
+/*21*/  JSOP_CALLPROP, 0, COMMON_ATOM_INDEX(valueOf),
+/*24*/  JSOP_STRING, 0, COMMON_TYPE_ATOM_INDEX(JSTYPE_STRING),
+/*27*/  JSOP_CALL, 0, 1,
+/*30*/  JSOP_PRIMTOP, (JSTYPE_STRING),
+/*32*/  JSOP_SWAP,
+/*33*/  JSOP_POP,
+/*34*/  JSOP_NEW, 0, 1,
+/*37*/  JSOP_STOP,
     },
 };
 static struct {
     jsbytecode apply0[8];
     jsbytecode apply1[12];
     jsbytecode apply2[16];
     jsbytecode apply3[21];
     jsbytecode apply4[26];
@@ -886,27 +910,27 @@ uint8 js_opcode2extra[JSOP_LIMIT] = {
  || x == JSOP_CALL \
  || x == JSOP_ITER \
  || x == JSOP_NEXTITER \
  || x == JSOP_APPLY \
  || x == JSOP_NEW \
 )
 jsbytecode*
 js_GetImacroStart(jsbytecode* pc) {
-    if (size_t(pc - equality_imacros.any_obj) < 34) return equality_imacros.any_obj;
-    if (size_t(pc - equality_imacros.obj_any) < 36) return equality_imacros.obj_any;
-    if (size_t(pc - binary_imacros.any_obj) < 34) return binary_imacros.any_obj;
+    if (size_t(pc - equality_imacros.any_obj) < 36) return equality_imacros.any_obj;
+    if (size_t(pc - equality_imacros.obj_any) < 38) return equality_imacros.obj_any;
+    if (size_t(pc - binary_imacros.any_obj) < 36) return binary_imacros.any_obj;
     if (size_t(pc - binary_imacros.obj_any) < 38) return binary_imacros.obj_any;
-    if (size_t(pc - binary_imacros.obj_obj) < 68) return binary_imacros.obj_obj;
-    if (size_t(pc - add_imacros.any_obj) < 34) return add_imacros.any_obj;
-    if (size_t(pc - add_imacros.obj_any) < 36) return add_imacros.obj_any;
-    if (size_t(pc - add_imacros.obj_obj) < 68) return add_imacros.obj_obj;
-    if (size_t(pc - unary_imacros.sign) < 39) return unary_imacros.sign;
-    if (size_t(pc - call_imacros.String) < 36) return call_imacros.String;
-    if (size_t(pc - new_imacros.String) < 36) return new_imacros.String;
+    if (size_t(pc - binary_imacros.obj_obj) < 72) return binary_imacros.obj_obj;
+    if (size_t(pc - add_imacros.any_obj) < 36) return add_imacros.any_obj;
+    if (size_t(pc - add_imacros.obj_any) < 38) return add_imacros.obj_any;
+    if (size_t(pc - add_imacros.obj_obj) < 72) return add_imacros.obj_obj;
+    if (size_t(pc - unary_imacros.sign) < 41) return unary_imacros.sign;
+    if (size_t(pc - call_imacros.String) < 38) return call_imacros.String;
+    if (size_t(pc - new_imacros.String) < 38) return new_imacros.String;
     if (size_t(pc - apply_imacros.apply0) < 8) return apply_imacros.apply0;
     if (size_t(pc - apply_imacros.apply1) < 12) return apply_imacros.apply1;
     if (size_t(pc - apply_imacros.apply2) < 16) return apply_imacros.apply2;
     if (size_t(pc - apply_imacros.apply3) < 21) return apply_imacros.apply3;
     if (size_t(pc - apply_imacros.apply4) < 26) return apply_imacros.apply4;
     if (size_t(pc - apply_imacros.apply5) < 31) return apply_imacros.apply5;
     if (size_t(pc - apply_imacros.apply6) < 36) return apply_imacros.apply6;
     if (size_t(pc - apply_imacros.apply7) < 41) return apply_imacros.apply7;
--- a/js/src/imacros.jsasm
+++ b/js/src/imacros.jsasm
@@ -42,16 +42,18 @@
         dup                             # any obj obj
         dup                             # any obj obj obj
         getprop valueOf                 # any obj obj valueOf
         ifprimtop 1                     # any obj obj valueOf
         swap                            # any obj valueOf obj
         string void                     # any obj valueOf obj "void"
         call 1                          # any obj rval
         ifprimtop 3                     # any obj rval
+        pop                             # any obj
+        dup                             # any obj obj
         goto 2
 1:      pop                             # any obj obj
 2:      callprop toString               # any obj toString obj
         call 0                          # any obj rval
         primtop (JSTYPE_NUMBER)         # any obj rval
 3:      swap                            # any rval obj
         pop                             # any rval
         imacop                          # eqval
@@ -63,16 +65,18 @@ 3:      swap                            
         dup                             # any obj obj
         dup                             # any obj obj obj
         getprop valueOf                 # any obj obj valueOf
         ifprimtop 1                     # any obj obj valueOf
         swap                            # any obj valueOf obj
         string void                     # any obj valueOf obj "void"
         call 1                          # any obj lval
         ifprimtop 3                     # any obj lval
+        pop                             # any obj
+        dup                             # any obj obj
         goto 2
 1:      pop                             # any obj obj
 2:      callprop toString               # any obj toString obj
         call 0                          # any obj lval
         primtop (JSTYPE_NUMBER)         # any obj rval
 3:      swap                            # any lval obj
         pop                             # any lval
         swap                            # lval any
@@ -88,16 +92,18 @@ 3:      swap                            
         dup                             # any obj obj
         dup                             # any obj obj obj
         getprop valueOf                 # any obj obj valueOf
         ifprimtop 1                     # any obj obj valueOf
         swap                            # any obj valueOf obj
         string number                   # any obj valueOf obj "number"
         call 1                          # any obj rval
         ifprimtop 3                     # any obj rval
+        pop                             # any obj
+        dup                             # any obj obj
         goto 2
 1:      pop                             # any obj obj
 2:      callprop toString               # any obj toString obj
         call 0                          # any obj rval
         primtop (JSTYPE_NUMBER)         # any obj rval
 3:      swap                            # any rval obj
         pop                             # any rval
         imacop                          # bval
@@ -133,32 +139,36 @@ 3:      swap                            
         dup                             # obj2 obj1 obj1
         dup                             # obj2 obj1 obj1 obj1
         getprop valueOf                 # obj2 obj1 obj1 valueOf
         ifprimtop 1                     # obj2 obj1 obj1 valueOf
         swap                            # obj2 obj1 valueOf obj1
         string number                   # obj2 obj1 valueOf obj1 "number"
         call 1                          # obj2 obj1 lval
         ifprimtop 3                     # obj2 obj1 lval
+        pop                             # obj2 obj1
+        dup                             # obj2 obj1 obj1
         goto 2
 1:      pop                             # obj2 obj1 obj1
 2:      callprop toString               # obj2 obj1 toString obj1
         call 0                          # obj2 obj1 lval
         primtop (JSTYPE_NUMBER)         # obj2 obj1 lval
 3:      swap                            # obj2 lval obj1
         pop                             # obj2 lval
         swap                            # lval obj2
         dup                             # lval obj1 obj1
         dup                             # lval obj obj obj
         getprop valueOf                 # lval obj obj valueOf
         ifprimtop 4                     # lval obj obj valueOf
         swap                            # lval obj valueOf obj
         string number                   # lval obj valueOf obj "number"
         call 1                          # lval obj rval
         ifprimtop 6                     # lval obj rval
+        pop                             # lval obj
+        dup                             # lval obj obj
         goto 5
 4:      pop                             # lval obj obj
 5:      callprop toString               # lval obj toString obj
         call 0                          # lval obj rval
         primtop (JSTYPE_NUMBER)         # lval obj rval
 6:      swap                            # lval rval obj
         pop                             # lval rval
         imacop                          # bval
@@ -170,19 +180,21 @@ 6:      swap                            
 .igroup add JSOP_ADD
 
     .imacro any_obj                     # any obj
         dup                             # any obj obj
         dup                             # any obj obj obj
         getprop valueOf                 # any obj obj valueOf
         ifprimtop 1                     # any obj obj valueOf
         swap                            # any obj valueOf obj
-        string void                     # lval obj valueOf obj "void"
+        string void                     # any obj valueOf obj "void"
         call 1                          # any obj rval
         ifprimtop 3                     # any obj rval
+        pop                             # any obj
+        dup                             # any obj obj
         goto 2
 1:      pop                             # any obj obj
 2:      callprop toString               # any obj toString obj
         call 0                          # any obj rval
         primtop (JSTYPE_VOID)           # any obj rval
 3:      swap                            # any rval obj
         pop                             # any rval
         add                             # aval
@@ -191,19 +203,21 @@ 3:      swap                            
 
     .imacro obj_any                     # obj any
         swap                            # any obj
         dup                             # any obj obj
         dup                             # any obj obj obj
         getprop valueOf                 # any obj obj valueOf
         ifprimtop 1                     # any obj obj valueOf
         swap                            # any obj valueOf obj
-        string void                     # lval obj valueOf obj "void"
+        string void                     # any obj valueOf obj "void"
         call 1                          # any obj lval
         ifprimtop 3                     # any obj lval
+        pop                             # any obj
+        dup                             # any obj obj
         goto 2
 1:      pop                             # any obj obj
 2:      callprop toString               # any obj toString obj
         call 0                          # any obj lval
         primtop (JSTYPE_VOID)           # any obj lval
 3:      swap                            # any lval obj
         pop                             # any lval
         swap                            # lval any
@@ -213,35 +227,39 @@ 3:      swap                            
 
     .imacro obj_obj                     # obj1 obj2
         swap                            # obj2 obj1
         dup                             # obj2 obj1 obj1
         dup                             # obj2 obj1 obj1 obj1
         getprop valueOf                 # obj2 obj1 obj1 valueOf
         ifprimtop 1                     # obj2 obj1 obj1 valueOf
         swap                            # obj2 obj1 valueOf obj1
-        string void                     # lval obj valueOf obj "void"
+        string void                     # obj2 obj1 valueOf obj1 "void"
         call 1                          # obj2 obj1 lval
         ifprimtop 3                     # obj2 obj1 lval
+        pop                             # obj2 obj1
+        dup                             # obj2 obj1 obj1
         goto 2
 1:      pop                             # obj2 obj1 obj1
-2:      callprop toString               # obj2 obj toString obj1
-        call 0                          # obj2 obj lval
-        primtop (JSTYPE_VOID)           # obj2 obj lval
+2:      callprop toString               # obj2 obj1 toString obj1
+        call 0                          # obj2 obj1 lval
+        primtop (JSTYPE_VOID)           # obj2 obj1 lval
 3:      swap                            # obj2 lval obj1
         pop                             # obj2 lval
         swap                            # lval obj2
-        dup                             # lval obj1 obj1
+        dup                             # lval obj obj
         dup                             # lval obj obj obj
         getprop valueOf                 # lval obj obj valueOf
         ifprimtop 4                     # lval obj obj valueOf
         swap                            # lval obj valueOf obj
         string void                     # lval obj valueOf obj "void"
         call 1                          # lval obj rval
         ifprimtop 6                     # lval obj rval
+        pop                             # lval obj
+        dup                             # lval obj obj
         goto 5
 4:      pop                             # lval obj obj
 5:      callprop toString               # lval obj toString obj
         call 0                          # lval obj rval
         primtop (JSTYPE_VOID)           # lval obj rval
 6:      swap                            # lval rval obj
         pop                             # lval rval
         add                             # aval
@@ -256,16 +274,18 @@ 6:      swap                            
         dup                             # obj obj
         dup                             # obj obj obj
         getprop valueOf                 # obj obj valueOf
         ifprimtop 2                     # obj obj valueOf
         swap                            # obj valueOf obj
         string number                   # obj valueOf obj "number"
         call 1                          # obj lval
         ifprimtop 1                     # obj lval
+        pop                             # obj
+        dup                             # obj obj
         goto 3
 1:      swap                            # lval obj
         pop                             # lval
         goto 4
 2:      pop                             # obj obj
 3:      callprop toString               # obj toString obj
         call 0                          # obj lval
         primtop (JSTYPE_NUMBER)         # obj lval
@@ -282,16 +302,18 @@ 4:      imacop                          
     .imacro String                          # String this obj
         dup                                 # String this obj obj
         dup                                 # String this obj obj obj
         getprop toString                    # String this obj obj toString
         ifprimtop 1                         # String this obj obj toString
         swap                                # String this obj toString obj
         call 0                              # String this obj rval
         ifprimtop 3                         # String this obj rval
+        pop                                 # String this obj
+        dup                                 # String this obj obj
         goto 2
 1:      pop                                 # String this obj obj
 2:      callprop valueOf                    # String this obj valueOf obj
         string string                       # String this obj valueOf obj "string"
         call 1                              # String this obj rval
         primtop (JSTYPE_STRING)             # String this obj rval
 3:      swap                                # String this rval obj
         pop                                 # String this rval
@@ -306,16 +328,18 @@ 3:      swap                            
     .imacro String                          # String this obj
         dup                                 # String this obj obj
         dup                                 # String this obj obj obj
         getprop toString                    # String this obj obj toString
         ifprimtop 1                         # String this obj obj toString
         swap                                # String this obj toString obj
         call 0                              # String this obj rval
         ifprimtop 3                         # String this obj rval
+        pop                                 # String this obj
+        dup                                 # String this obj obj
         goto 2
 1:      pop                                 # String this obj obj
 2:      callprop valueOf                    # String this obj valueOf obj
         string string                       # String this obj valueOf obj "string"
         call 1                              # String this obj rval
         primtop (JSTYPE_STRING)             # String this obj rval
 3:      swap                                # String this rval obj
         pop                                 # String this rval