1.1 --- a/sourcepawn/compiler/sc3.c Thu Sep 14 05:34:02 2006 +0000
1.2 +++ b/sourcepawn/compiler/sc3.c Thu Sep 14 07:02:02 2006 +0000
1.3 @@ -1165,7 +1165,7 @@
1.4 }
1.5 free(heap);
1.6 if (total)
1.7 - setheap_save(total);
1.8 + setheap_save(-total*sizeof(cell));
1.9 }
1.10
1.11 static int hier13(value *lval)
1.12 @@ -1193,11 +1193,11 @@
1.13 if (lval->ident==iCONSTEXPR) /* load constant here */
1.14 ldconst(lval->constval,sPRI);
1.15 sc_allowtags=(short)POPSTK_I(); /* restore */
1.16 - jumplabel(flab2);
1.17 - setlabel(flab1);
1.18 heap=popsaveheaplist();
1.19 dynarray_from_heaplist(heap);
1.20 pushheaplist();
1.21 + jumplabel(flab2);
1.22 + setlabel(flab1);
1.23 needtoken(':');
1.24 if (hier13(&lval2))
1.25 rvalue(&lval2);
1.26 @@ -1215,9 +1215,9 @@
1.27 /* ??? if both are arrays, should check dimensions */
1.28 if (!matchtag(lval->tag,lval2.tag,FALSE))
1.29 error(213); /* tagname mismatch ('true' and 'false' expressions) */
1.30 - setlabel(flab2);
1.31 heap=popsaveheaplist();
1.32 dynarray_from_heaplist(heap);
1.33 + setlabel(flab2);
1.34 if (array1 && array2) {
1.35 markheap(HEAPUSE_DYNAMIC, 0);
1.36 }
2.1 --- a/sourcepawn/compiler/sc4.c Thu Sep 14 05:34:02 2006 +0000
2.2 +++ b/sourcepawn/compiler/sc4.c Thu Sep 14 07:02:02 2006 +0000
2.3 @@ -846,22 +846,21 @@
2.4
2.5 SC_FUNC void modheap_i()
2.6 {
2.7 - stgwrite("\theap.i\n");
2.8 - code_idx+=opcodes(1);
2.9 + pushreg(sPRI);
2.10 + pushreg(sALT);
2.11 + stgwrite("\tpop.h.pri\n");
2.12 + stgwrite("\theap.pri\n");
2.13 + code_idx+=opcodes(2);
2.14 + popreg(sALT);
2.15 + popreg(sPRI);
2.16 }
2.17
2.18 SC_FUNC void setheap_save(cell value)
2.19 {
2.20 - pushreg(sPRI);
2.21 - pushreg(sALT);
2.22 - stgwrite("\tconst.pri ");
2.23 + assert(value);
2.24 + stgwrite("\tpush.h.c ");
2.25 outval(value, TRUE);
2.26 code_idx+=opcodes(1)+opargs(1);
2.27 - stgwrite("\theap ");
2.28 - outval(sizeof(cell), TRUE);
2.29 - stgwrite("\tstor.pri\n");
2.30 - popreg(sALT);
2.31 - popreg(sPRI);
2.32 }
2.33
2.34 SC_FUNC void setheap_pri(void)
3.1 --- a/sourcepawn/compiler/sc6.c Thu Sep 14 05:34:02 2006 +0000
3.2 +++ b/sourcepawn/compiler/sc6.c Thu Sep 14 07:02:02 2006 +0000
3.3 @@ -493,7 +493,7 @@
3.4 { 99, "grtr", sIN_CSEG, parm0 },
3.5 {120, "halt", sIN_CSEG, parm1 },
3.6 { 45, "heap", sIN_CSEG, parm1 },
3.7 - {160, "heap.i", sIN_CSEG, parm0 },
3.8 + {160, "heap.pri", sIN_CSEG, parm0 },
3.9 { 27, "idxaddr", sIN_CSEG, parm0 },
3.10 { 28, "idxaddr.b", sIN_CSEG, parm1 },
3.11 {109, "inc", sIN_CSEG, parm1 },
3.12 @@ -544,12 +544,14 @@
3.13 { 84, "not", sIN_CSEG, parm0 },
3.14 { 82, "or", sIN_CSEG, parm0 },
3.15 { 43, "pop.alt", sIN_CSEG, parm0 },
3.16 + {162, "pop.h.pri", sIN_CSEG, parm0 },
3.17 { 42, "pop.pri", sIN_CSEG, parm0 },
3.18 { 46, "proc", sIN_CSEG, parm0 },
3.19 { 40, "push", sIN_CSEG, parm1 },
3.20 {133, "push.adr", sIN_CSEG, parm1 }, /* version 4 */
3.21 { 37, "push.alt", sIN_CSEG, parm0 },
3.22 { 39, "push.c", sIN_CSEG, parm1 },
3.23 + {161, "push.h.c", sIN_CSEG, parm1 },
3.24 { 36, "push.pri", sIN_CSEG, parm0 },
3.25 { 38, "push.r", sIN_CSEG, parm1 }, /* obsolete (never generated) */
3.26 { 41, "push.s", sIN_CSEG, parm1 },