cvsuser     02/08/09 13:11:18

  Modified:    languages/imcc imcc.l imcc.y
  Log:
  Some mods from Leopold (result,return, pow and unless) added to imcc.
  
  Revision  Changes    Path
  1.6       +4 -0      parrot/languages/imcc/imcc.l
  
  Index: imcc.l
  ===================================================================
  RCS file: /cvs/public/parrot/languages/imcc/imcc.l,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -w -r1.5 -r1.6
  --- imcc.l    24 Jul 2002 14:19:27 -0000      1.5
  +++ imcc.l    9 Aug 2002 20:11:18 -0000       1.6
  @@ -59,6 +59,8 @@
   ".sym"          return(SYM);
   ".arg"          return(ARG);
   ".sub"          return(SUB);
  +".result"       return(RESULT);
  +".return"       return(RETURN);
   ".class"        return(CLASS);
   ".endclass"     return(ENDCLASS);
   ".namespace"    return(NAMESPACE);
  @@ -68,6 +70,7 @@
   "end"           return(END);
   "goto"          return(GOTO);
   "if"            return(IF);
  +"unless"        return(UNLESS);
   "int"           return(INT);
   "inc"           return(INC);
   "dec"           return(DEC);
  @@ -94,6 +97,7 @@
   ">="            return(RELOP_GTE);
   "=="            return(RELOP_EQ);
   "!="            return(RELOP_NE);
  +"**"            return(POW);
   
   {LETTER}{LETTERDIGIT}*":" {
        yytext[yyleng-1] = 0;  /* trim last ':' */
  
  
  
  1.13      +22 -5     parrot/languages/imcc/imcc.y
  
  Index: imcc.y
  ===================================================================
  RCS file: /cvs/public/parrot/languages/imcc/imcc.y,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -w -r1.12 -r1.13
  --- imcc.y    8 Aug 2002 13:37:52 -0000       1.12
  +++ imcc.y    9 Aug 2002 20:11:18 -0000       1.13
  @@ -82,6 +82,10 @@
       return r0;
   }
   
  +SymReg * iPOW(SymReg *r0, SymReg*r1, SymReg *r2) {
  +    emitb(mk_instruction("pow %s, %s, %s", r0, r1, r2, NULL, IF_binary));
  +    return r0;
  +}
   SymReg * iDIV(SymReg *r0, SymReg*r1, SymReg *r2) {
       emitb(mk_instruction("div %s, %s, %s", r0, r1, r2, NULL, IF_binary));
       return r0;
  @@ -176,6 +180,14 @@
       return r0;
   }
   
  +SymReg * iRESULT(SymReg * r0) {
  +    return iPOP(r0);
  +}
  +
  +SymReg * iRETURN(SymReg * r0) {
  +    return iPUSH(r0);
  +}
  +
   SymReg * iSAVEALL() {
       emitb(mk_instruction("saveall", NULL, NULL, NULL, NULL, 0));
       return 0;
  @@ -244,11 +256,11 @@
       return 0;
   }
   
  -SymReg * iIF1(SymReg * r0, SymReg * dest)
  +SymReg * iIF1(char *f, SymReg * r0, SymReg * dest)
   {
       Instruction * i;
       char op[256];
  -    strcpy(op, "if %s, %s");
  +    sprintf(op, "%s %%s, %%s", f);
       i = emitb(mk_instruction(op, r0, dest, 0, NULL, IF_r0_read | IF_r1_branch));
       i->type = ITBRANCH;
       return 0;
  @@ -358,11 +370,11 @@
       SymReg * sr;
   }
   
  -%token <i> CALL GOTO BRANCH ARG RET PRINT IF NEW END SAVEALL RESTOREALL
  +%token <i> CALL GOTO BRANCH ARG RET PRINT IF UNLESS NEW END SAVEALL RESTOREALL
   %token <i> SUB NAMESPACE CLASS ENDCLASS SYM LOCAL PARAM PUSH POP INC DEC
   %token <i> SHIFT_LEFT SHIFT_RIGHT INT FLOAT STRING DEFINED LOG_XOR
   %token <i> RELOP_EQ RELOP_NE RELOP_GT RELOP_GTE RELOP_LT RELOP_LTE
  -%token <i> GLOBAL ADDR CLONE
  +%token <i> GLOBAL ADDR CLONE RESULT RETURN POW
   %token <s> EMIT LABEL
   %token <s> IREG NREG SREG PREG IDENTIFIER STRINGC INTC FLOATC
   %type <i> type program subs sub sub_start relop
  @@ -434,6 +446,8 @@
       |   labels PARAM type IDENTIFIER            { $$ = iPOP(mk_ident($4, $3));}
       |   labels PARAM reg                        { $$ = iPOP($3); }
       |   labels ARG var                          { $$ = iARG($3); }
  +    |   labels RESULT var                       { $$ = iRESULT($3); }
  +    |   labels RETURN var                       { $$ = iRETURN($3); }
       |   labels CALL IDENTIFIER                  { $$ = iCALL(mk_address($3)); }
       |   labels GOTO IDENTIFIER                  { $$ = iBRANCH(mk_address($3));}
       |   labels PUSH var                         { $$ = iPUSH($3); }
  @@ -464,6 +478,7 @@
       |  labels target '=' var '+' var            { $$ = iADD($2, $4, $6); } 
       |  labels target '=' var '-' var            { $$ = iSUB($2, $4, $6); } 
       |  labels target '=' var '*' var            { $$ = iMUL($2, $4, $6); } 
  +    |  labels target '=' var POW var            { $$ = iPOW($2, $4, $6); }
       |  labels target '=' var '/' var            { $$ = iDIV($2, $4, $6); } 
       |  labels target '=' var '%' var            { $$ = iMOD($2, $4, $6); } 
       |  labels target '=' var '.' var            { $$ = iCONCAT($2, $4, $6); } 
  @@ -487,7 +502,9 @@
          labels IF var relop var GOTO IDENTIFIER
          { $$ = iIF($4, $3, $5, mk_address($7)); }
       |  labels IF var GOTO IDENTIFIER
  -       { $$ = iIF1($3, mk_address($5)); }
  +       { $$ = iIF1("if",$3, mk_address($5)); }
  +    |  labels UNLESS var GOTO IDENTIFIER
  +       { $$ = iIF1("unless", $3, mk_address($5)); }
       ;
   
   relop:
  
  
  


Reply via email to