pike.git / src / peep.c

version» Context lines:

pike.git/src/peep.c:1:   /*   || This file is part of Pike. For copyright information see COPYRIGHT.   || Pike is distributed under GPL, LGPL and MPL. See the file COPYING   || for more information. - || $Id: peep.c,v 1.77 2002/10/11 01:39:34 nilsson Exp $ + || $Id: peep.c,v 1.78 2002/11/02 13:42:07 grubba Exp $   */      #include "global.h"   #include "language.h"   #include "stralloc.h"   #include "dynamic_buffer.h"   #include "program.h"   #include "las.h"   #include "docode.h"   #include "main.h"
pike.git/src/peep.c:19:   #include "peep.h"   #include "dmalloc.h"   #include "stuff.h"   #include "bignum.h"   #include "opcodes.h"   #include "builtin_functions.h"   #include "constants.h"   #include "interpret.h"   #include "pikecode.h"    - RCSID("$Id: peep.c,v 1.77 2002/10/11 01:39:34 nilsson Exp $"); + RCSID("$Id: peep.c,v 1.78 2002/11/02 13:42:07 grubba Exp $");      static void asm_opt(void);      dynamic_buffer instrbuf;      static int hasarg(int opcode)   {    return instrs[opcode-F_OFFSET].flags & I_HASARG;   }   
pike.git/src/peep.c:342:   #endif    FLUSH_CODE_GENERATOR_STATE();    labels[c->arg] = DO_NOT_WARN((INT32)PIKE_PC);    UPDATE_PC();    break;       case F_VOLATILE_RETURN:    ins_f_byte(F_RETURN);    break;    +  case F_POINTER: + #ifdef PIKE_DEBUG +  if(c->arg > max_label || c->arg < 0) +  Pike_fatal("Jump to unknown label?\n"); + #endif +  tmp = DO_NOT_WARN((INT32)PIKE_PC); +  ins_pointer(jumps[c->arg]); +  jumps[c->arg]=tmp; +  break; +     default:    switch(instrs[c->opcode - F_OFFSET].flags & I_IS_MASK)    {    case I_ISJUMP:   #ifdef INS_F_JUMP    tmp=INS_F_JUMP(c->opcode);    if(tmp != -1)    {    UPDATE_F_JUMP(tmp, jumps[c->arg]);    jumps[c->arg]=~tmp;    break;    }   #endif       ins_f_byte(c->opcode);    -  case I_ISPOINTER: +    #ifdef PIKE_DEBUG -  if(c->arg > max_label || c->arg < 0) Pike_fatal("Jump to unknown label?\n"); +  if(c->arg > max_label || c->arg < 0) +  Pike_fatal("Jump to unknown label?\n");   #endif    tmp = DO_NOT_WARN((INT32)PIKE_PC);    ins_pointer(jumps[c->arg]);    jumps[c->arg]=tmp;    break;    -  +  case I_ISJUMPARGS:    case I_TWO_ARGS:    ins_f_byte_with_2_args(c->opcode, c->arg, c->arg2);    break;    -  +  case I_ISJUMPARG:    case I_HASARG:    ins_f_byte_with_arg(c->opcode, c->arg);    break;       case 0:    ins_f_byte(c->opcode);    break;      #ifdef PIKE_DEBUG    default:    Pike_fatal("Unknown instruction type.\n");   #endif    }    }      #ifdef ADJUST_PIKE_PC    if (instrs[c->opcode - F_OFFSET].flags & I_PC_AT_NEXT)    ADJUST_PIKE_PC (PIKE_PC);   #endif    -  + #ifdef PIKE_DEBUG +  if (instrs[c->opcode - F_OFFSET].flags & I_HASPOINTER) { +  if ((e+1 < length) || c[1].opcode != F_POINTER) { +  Pike_fatal("Expected instruction %s to be followed by a pointer.\n" +  "Got %s\n.", +  instrs[c->opcode - F_OFFSET].name, +  (e+1 < length)?instrs[c[1]->opcode - F_OFFSET].name:"EOI"); +  } +  } + #endif /* PIKE_DEBUG */ +    #ifdef ALIGN_PIKE_JUMPS    if(e+1 < length)    {    switch(c->opcode)    {    case F_RETURN:    case F_VOLATILE_RETURN:    case F_BRANCH:    case F_RETURN_0:    case F_RETURN_1: