changed this a bit to be nicer
authorDavid Anderson <dvander@alliedmods.net>
Thu Sep 14 07:02:02 2006 +0000 (2006-09-14)
changeset 65eaa4964fd916
parent 64 cc302adaac00
child 66 97899d3a3f01
changed this a bit to be nicer
sourcepawn/compiler/sc3.c
sourcepawn/compiler/sc4.c
sourcepawn/compiler/sc6.c
     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 },