pike.git / src / peep.c

version» Context lines:

pike.git/src/peep.c:102:   void ins_f_byte(unsigned int b)   {    if(store_linenumbers && b<F_MAX_OPCODE)    ADD_COMPILED(b);       b-=F_OFFSET;   #ifdef DEBUG    if(b>255)    error("Instruction too big %d\n",b);   #endif -  ins_byte((unsigned char)b,A_PROGRAM); +  add_to_program((unsigned char)b);   }      static void ins_f_byte_with_arg(unsigned int a,unsigned INT32 b)   {    switch(b >> 8)    {    case 0 : break;    case 1 : ins_f_byte(F_PREFIX_256); break;    case 2 : ins_f_byte(F_PREFIX_512); break;    case 3 : ins_f_byte(F_PREFIX_768); break;    case 4 : ins_f_byte(F_PREFIX_1024); break;    default:    if( b < 256*256)    {    ins_f_byte(F_PREFIX_CHARX256); -  ins_byte(b>>8, A_PROGRAM); +  add_to_program(b>>8);    }else if(b < 256*256*256) {    ins_f_byte(F_PREFIX_WORDX256); -  ins_byte(b >> 16, A_PROGRAM); -  ins_byte(b >> 8, A_PROGRAM); +  add_to_program(b >> 16); +  add_to_program(b >> 8);    }else{    ins_f_byte(F_PREFIX_24BITX256); -  ins_byte(b >> 24, A_PROGRAM); -  ins_byte(b >> 16, A_PROGRAM); -  ins_byte(b >> 8, A_PROGRAM); +  add_to_program(b >> 24); +  add_to_program(b >> 16); +  add_to_program(b >> 8);    }    }    ins_f_byte(a); -  ins_byte(b, A_PROGRAM); +  add_to_program(b);   }      void assemble(void)   {    INT32 e,d,length,max_label,tmp;    INT32 *labels, *jumps, *uses;    p_instr *c;       c=(p_instr *)instrbuf.s.str;    length=instrbuf.s.len / sizeof(p_instr);
pike.git/src/peep.c:237:    }   #endif       if(store_linenumbers)    store_linenumber(c->line, c->file);       switch(c->opcode)    {    case F_NOP: break;    case F_ALIGN: -  while(PC % c->arg) ins_byte(0, A_PROGRAM); +  while(PC % c->arg) add_to_program(0);    break;       case F_BYTE: -  ins_byte(c->arg, A_PROGRAM); +  add_to_program(c->arg);    break;       case F_LABEL:   #ifdef DEBUG    if(c->arg > max_label || c->arg < 0)    fatal("max_label calculation failed!\n");       if(labels[c->arg] != -1)    fatal("Duplicate label!\n");   #endif
pike.git/src/peep.c:265:    default:    switch(instrs[c->opcode - F_OFFSET].flags)    {    case I_ISJUMP:    ins_f_byte(c->opcode);    case I_ISPOINTER:   #ifdef DEBUG    if(c->arg > max_label || c->arg < 0) fatal("Jump to unknown label?\n");   #endif    tmp=PC; -  ins_int(jumps[c->arg],A_PROGRAM); +  ins_int(jumps[c->arg],(void(*)(char))add_to_program);    jumps[c->arg]=tmp;    break;       case I_HASARG:    ins_f_byte_with_arg(c->opcode, c->arg);    break;       case 0:    ins_f_byte(c->opcode);    break;
pike.git/src/peep.c:341:    fifo_len++;    }      #ifdef DEBUG    if(!instrbuf.s.len)    fatal("Low make buf space failed!!!!!!\n");   #endif       p->opcode=f;    p->line=cl; -  copy_shared_string(p->file, current_file); +  copy_shared_string(p->file, lex.current_file);    p->arg=b;       return p - (p_instr *)instrbuf.s.str;   }      int insopt2(int f, int cl, struct pike_string *cf)   {   #ifdef DEBUG    if(hasarg(f))    fatal("hasarg() is wrong!\n");