ref: a859bc67d575b3f509b0e52a2a929d3d1d1841b6
parent: 47e88ac80569849e458b22b67341e19acd9af5a7
author: Tor Andersson <tor@ccxvii.net>
date: Tue Jan 14 21:21:34 EST 2014
Don't bother setting undefined slots in array literal elisions.
--- a/jscompile.c
+++ b/jscompile.c
@@ -172,12 +172,16 @@
{
int i = 0;
while (list) {
- emit(J, F, OP_DUP);
- emit(J, F, OP_NUMBER_X);
- emit(J, F, i++);
- cexp(J, F, list->a);
- emit(J, F, OP_SETPROP);
- emit(J, F, OP_POP);
+ if (list->a->type != EXP_UNDEF) {
+ emit(J, F, OP_DUP);
+ emit(J, F, OP_NUMBER_X);
+ emit(J, F, i++);
+ cexp(J, F, list->a);
+ emit(J, F, OP_SETPROP);
+ emit(J, F, OP_POP);
+ } else {
+ ++i;
+ }
list = list->b;
}
}
@@ -538,7 +542,6 @@
break;
case EXP_LOGOR:
- /* if a == true then a else b */
cexp(J, F, exp->a);
emit(J, F, OP_DUP);
end = jump(J, F, OP_JTRUE);
@@ -548,7 +551,6 @@
break;
case EXP_LOGAND:
- /* if a == false then a else b */
cexp(J, F, exp->a);
emit(J, F, OP_DUP);
end = jump(J, F, OP_JFALSE);