cvsuser 03/07/06 02:24:02
Modified: languages/imcc ChangeLog imcc.y instructions.c
instructions.h parser_util.c
languages/imcc/docs syntax.pod
Log:
new_p_ic_p
Revision Changes Path
1.17 +5 -0 parrot/languages/imcc/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /cvs/public/parrot/languages/imcc/ChangeLog,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -w -r1.16 -r1.17
--- ChangeLog 4 Jul 2003 08:24:52 -0000 1.16
+++ ChangeLog 6 Jul 2003 09:23:59 -0000 1.17
@@ -1,3 +1,8 @@
+- 2003-07-06 leo
+
+ * new instruction:
+ $Preg = new classname, $Pinitializer
+
- 2003-07-03 leo
* switch to PASM/PIR mode, when reading .pasm/.imc include files
1.65 +3 -2 parrot/languages/imcc/imcc.y
Index: imcc.y
===================================================================
RCS file: /cvs/public/parrot/languages/imcc/imcc.y,v
retrieving revision 1.64
retrieving revision 1.65
diff -u -w -r1.64 -r1.65
--- imcc.y 2 Jul 2003 13:37:20 -0000 1.64
+++ imcc.y 6 Jul 2003 09:23:59 -0000 1.65
@@ -262,7 +262,7 @@
}
}
/* make a new undef */
- iNEW(interpreter, preg[0], str_dup("PerlUndef"), 1);
+ iNEW(interpreter, preg[0], str_dup("PerlUndef"), NULL, 1);
/* emit the operand */
nargs = 3;
keyvec = 0;
@@ -564,7 +564,8 @@
| target '=' var '~' var { $$ = MK_I(interp, "bxor", R3($1, $3,
$5)); }
| target '=' var '[' keylist ']' { $$ = iINDEXFETCH(interp, $1, $3, $5); }
| var '[' keylist ']' '=' var { $$ = iINDEXSET(interp, $1, $3, $6); }
- | target '=' NEW classname { $$ = iNEW(interp, $1, $4, 1); }
+ | target '=' NEW classname COMMA var { $$ = iNEW(interp, $1, $4, $6, 1); }
+ | target '=' NEW classname { $$ = iNEW(interp, $1, $4, NULL,1); }
| target '=' DEFINED var { $$ = MK_I(interp,
"defined",R2($1,$4)); }
| target '=' DEFINED var '[' keylist ']' { keyvec=KEY_BIT(2);
$$ = MK_I(interp, "defined", R3($1, $4, $6));}
1.33 +1 -1 parrot/languages/imcc/instructions.c
Index: instructions.c
===================================================================
RCS file: /cvs/public/parrot/languages/imcc/instructions.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -w -r1.32 -r1.33
--- instructions.c 21 Jun 2003 11:33:37 -0000 1.32
+++ instructions.c 6 Jul 2003 09:23:59 -0000 1.33
@@ -532,7 +532,7 @@
|| strcmp(ins->fmt, "saveall") == 0)) {
ins = ins->next;
}
- spill_ins = iNEW(interpreter, p31, str_dup("PerlArray"), 0);
+ spill_ins = iNEW(interpreter, p31, str_dup("PerlArray"), NULL, 0);
insert_ins(ins, spill_ins);
}
if (emitters[emitter].new_sub)
1.23 +2 -1 parrot/languages/imcc/instructions.h
Index: instructions.h
===================================================================
RCS file: /cvs/public/parrot/languages/imcc/instructions.h,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -w -r1.22 -r1.23
--- instructions.h 21 Jun 2003 11:33:37 -0000 1.22
+++ instructions.h 6 Jul 2003 09:23:59 -0000 1.23
@@ -78,7 +78,8 @@
char *fmt, SymReg **regs, int nargs, int keyv, int emit);
Instruction * INS_LABEL(SymReg * r0, int emit);
-Instruction * iNEW(struct Parrot_Interp *,SymReg * r0, char * type, int emit);
+Instruction * iNEW(struct Parrot_Interp *,SymReg * r0, char * type,
+ SymReg *init, int emit);
Instruction * emitb(Instruction *);
int instruction_reads(Instruction *, SymReg *);
1.15 +8 -2 parrot/languages/imcc/parser_util.c
Index: parser_util.c
===================================================================
RCS file: /cvs/public/parrot/languages/imcc/parser_util.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -w -r1.14 -r1.15
--- parser_util.c 31 May 2003 23:37:42 -0000 1.14
+++ parser_util.c 6 Jul 2003 09:23:59 -0000 1.15
@@ -26,7 +26,8 @@
* new P, .SomeThing
*/
Instruction *
-iNEW(struct Parrot_Interp *interpreter, SymReg * r0, char * type, int emit)
+iNEW(struct Parrot_Interp *interpreter, SymReg * r0, char * type,
+ SymReg *init, int emit)
{
char fmt[256];
SymReg *pmc;
@@ -42,6 +43,11 @@
free(type);
regs[0] = r0;
regs[1] = pmc;
+ if (init) {
+ regs[2] = init;
+ nargs = 3;
+ }
+ else
nargs = 2;
return iANY(interpreter, "new", fmt, regs, emit);
}
1.3 +4 -0 parrot/languages/imcc/docs/syntax.pod
Index: syntax.pod
===================================================================
RCS file: /cvs/public/parrot/languages/imcc/docs/syntax.pod,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -w -r1.2 -r1.3
--- syntax.pod 12 Dec 2002 09:05:25 -0000 1.2
+++ syntax.pod 6 Jul 2003 09:24:02 -0000 1.3
@@ -196,6 +196,10 @@
B<new var, .type>
+=item <var> = new <type>, <var>
+
+B<new var, .type, var>
+
=item <var> = defined <var>
B<defined var, var>