Changes: Carolyn Oates
Edwin Steiner
- $Id: parse.c 878 2004-01-12 12:03:11Z twisti $
+ $Id: parse.c 893 2004-01-19 12:53:24Z edwin $
*/
/* intermediate code generating macros */
#define PINC iptr++;ipc++
-#define LOADCONST_I(v) iptr->opc=ICMD_ICONST;iptr->op1=0;iptr->val.i=(v);PINC
-#define LOADCONST_L(v) iptr->opc=ICMD_LCONST;iptr->op1=0;iptr->val.l=(v);PINC
-#define LOADCONST_F(v) iptr->opc=ICMD_FCONST;iptr->op1=0;iptr->val.f=(v);PINC
-#define LOADCONST_D(v) iptr->opc=ICMD_DCONST;iptr->op1=0;iptr->val.d=(v);PINC
-#define LOADCONST_A(v) iptr->opc=ICMD_ACONST;iptr->op1=0;iptr->val.a=(v);PINC
+#define LOADCONST_I(v) iptr->opc=ICMD_ICONST;/*iptr->op1=0*/;iptr->val.i=(v);PINC
+#define LOADCONST_L(v) iptr->opc=ICMD_LCONST;/*iptr->op1=0*/;iptr->val.l=(v);PINC
+#define LOADCONST_F(v) iptr->opc=ICMD_FCONST;/*iptr->op1=0*/;iptr->val.f=(v);PINC
+#define LOADCONST_D(v) iptr->opc=ICMD_DCONST;/*iptr->op1=0*/;iptr->val.d=(v);PINC
+#define LOADCONST_A(v) iptr->opc=ICMD_ACONST;/*iptr->op1=0*/;iptr->val.a=(v);PINC
/* ACONST instructions generated as arguments for builtin functions
* have op1 set to non-zero. This is used for stack overflow checking
#define LOADCONST_A_BUILTIN(v) \
iptr->opc=ICMD_ACONST;iptr->op1=1;iptr->val.a=(v);PINC
-#define OP(o) iptr->opc=(o);iptr->op1=0;iptr->val.l=0;PINC
-#define OP1(o,o1) iptr->opc=(o);iptr->op1=(o1);iptr->val.l=(0);PINC
+#define OP(o) iptr->opc=(o);/*iptr->op1=0*/;/*iptr->val.l=0*/;PINC
+#define OP1(o,o1) iptr->opc=(o);iptr->op1=(o1);/*iptr->val.l=(0)*/;PINC
#define OP2I(o,o1,v) iptr->opc=(o);iptr->op1=(o1);iptr->val.i=(v);PINC
#define OP2A(o,o1,v) iptr->opc=(o);iptr->op1=(o1);iptr->val.a=(v);PINC
#define BUILTIN1(v,t) isleafmethod=false;iptr->opc=ICMD_BUILTIN1;iptr->op1=t;\
#define BUILTIN3(v,t) isleafmethod=false;iptr->opc=ICMD_BUILTIN3;iptr->op1=t;\
iptr->val.a=(v);PINC
+/* We have to check local variables indices here because they are
+ * used in stack.c to index the locals array. */
+
#define INDEX_ONEWORD(num) \
do { if((num)<0 || (num)>=maxlocals) \
panic("Invalid local variable index"); } while (0)
iptr = instr = DMNEW(instruction, cumjcodelength + 5);
- /* XXX zero fields in the instructions loop? */
+ /* Zero the intermediate instructions array so we don't have any
+ * invalid pointers in it if we cannot finish analyse_stack(). */
memset(iptr,0,sizeof(instruction) * (cumjcodelength + 5));
/* initialize block_index table (unrolled four times) */
for (p = 0, gp = 0; p < jcodelength; gp += (nextp - p), p = nextp) {
- /* DEBUG XXX */ /*printf("p:%d gp:%d ",p,gp);*/
+ /* DEBUG */ /*printf("p:%d gp:%d ",p,gp);*/
/* mark this position as a valid instruction start */
if (!iswide)
} /* end for */
if (p != jcodelength)
- panic("Command-sequence crosses code-boundary"); /* XXX change message */
+ panic("Command-sequence crosses code-boundary");
if (!blockend)
panic("Code does not end with branch/return/athrow - stmt");
Changes: Carolyn Oates
Edwin Steiner
- $Id: parse.c 878 2004-01-12 12:03:11Z twisti $
+ $Id: parse.c 893 2004-01-19 12:53:24Z edwin $
*/
/* intermediate code generating macros */
#define PINC iptr++;ipc++
-#define LOADCONST_I(v) iptr->opc=ICMD_ICONST;iptr->op1=0;iptr->val.i=(v);PINC
-#define LOADCONST_L(v) iptr->opc=ICMD_LCONST;iptr->op1=0;iptr->val.l=(v);PINC
-#define LOADCONST_F(v) iptr->opc=ICMD_FCONST;iptr->op1=0;iptr->val.f=(v);PINC
-#define LOADCONST_D(v) iptr->opc=ICMD_DCONST;iptr->op1=0;iptr->val.d=(v);PINC
-#define LOADCONST_A(v) iptr->opc=ICMD_ACONST;iptr->op1=0;iptr->val.a=(v);PINC
+#define LOADCONST_I(v) iptr->opc=ICMD_ICONST;/*iptr->op1=0*/;iptr->val.i=(v);PINC
+#define LOADCONST_L(v) iptr->opc=ICMD_LCONST;/*iptr->op1=0*/;iptr->val.l=(v);PINC
+#define LOADCONST_F(v) iptr->opc=ICMD_FCONST;/*iptr->op1=0*/;iptr->val.f=(v);PINC
+#define LOADCONST_D(v) iptr->opc=ICMD_DCONST;/*iptr->op1=0*/;iptr->val.d=(v);PINC
+#define LOADCONST_A(v) iptr->opc=ICMD_ACONST;/*iptr->op1=0*/;iptr->val.a=(v);PINC
/* ACONST instructions generated as arguments for builtin functions
* have op1 set to non-zero. This is used for stack overflow checking
#define LOADCONST_A_BUILTIN(v) \
iptr->opc=ICMD_ACONST;iptr->op1=1;iptr->val.a=(v);PINC
-#define OP(o) iptr->opc=(o);iptr->op1=0;iptr->val.l=0;PINC
-#define OP1(o,o1) iptr->opc=(o);iptr->op1=(o1);iptr->val.l=(0);PINC
+#define OP(o) iptr->opc=(o);/*iptr->op1=0*/;/*iptr->val.l=0*/;PINC
+#define OP1(o,o1) iptr->opc=(o);iptr->op1=(o1);/*iptr->val.l=(0)*/;PINC
#define OP2I(o,o1,v) iptr->opc=(o);iptr->op1=(o1);iptr->val.i=(v);PINC
#define OP2A(o,o1,v) iptr->opc=(o);iptr->op1=(o1);iptr->val.a=(v);PINC
#define BUILTIN1(v,t) isleafmethod=false;iptr->opc=ICMD_BUILTIN1;iptr->op1=t;\
#define BUILTIN3(v,t) isleafmethod=false;iptr->opc=ICMD_BUILTIN3;iptr->op1=t;\
iptr->val.a=(v);PINC
+/* We have to check local variables indices here because they are
+ * used in stack.c to index the locals array. */
+
#define INDEX_ONEWORD(num) \
do { if((num)<0 || (num)>=maxlocals) \
panic("Invalid local variable index"); } while (0)
iptr = instr = DMNEW(instruction, cumjcodelength + 5);
- /* XXX zero fields in the instructions loop? */
+ /* Zero the intermediate instructions array so we don't have any
+ * invalid pointers in it if we cannot finish analyse_stack(). */
memset(iptr,0,sizeof(instruction) * (cumjcodelength + 5));
/* initialize block_index table (unrolled four times) */
for (p = 0, gp = 0; p < jcodelength; gp += (nextp - p), p = nextp) {
- /* DEBUG XXX */ /*printf("p:%d gp:%d ",p,gp);*/
+ /* DEBUG */ /*printf("p:%d gp:%d ",p,gp);*/
/* mark this position as a valid instruction start */
if (!iswide)
} /* end for */
if (p != jcodelength)
- panic("Command-sequence crosses code-boundary"); /* XXX change message */
+ panic("Command-sequence crosses code-boundary");
if (!blockend)
panic("Code does not end with branch/return/athrow - stmt");