Branch: Tag:

2000-04-19

2000-04-19 14:14:29 by Henrik Grubbström (Grubba) <grubba@grubba.org>

More opcodes converted.

Rev: src/interpret_functions.h:1.8
Rev: src/lex.c:1.72

1:   /* -  * $Id: interpret_functions.h,v 1.7 2000/04/18 20:23:59 grubba Exp $ +  * $Id: interpret_functions.h,v 1.8 2000/04/19 14:14:12 grubba Exp $    *    * Opcode definitions for the interpreter.    */
543:    break;    }    -  CASE(F_INC); + OPCODE0(F_INC, "++x")    {    union anything *u=get_pointer_if_this_type(Pike_sp-2, PIKE_T_INT);    if(u
555:    instr=++ u->integer;    pop_n_elems(2);    push_int(u->integer); -  break; -  } +  } else {    lvalue_to_svalue_no_free(Pike_sp, Pike_sp-2); Pike_sp++;    push_int(1);    f_add(2);    assign_lvalue(Pike_sp-3, Pike_sp-1);    assign_svalue(Pike_sp-3, Pike_sp-1);    pop_n_elems(2); -  break; +     } -  + } + BREAK;    -  CASE(F_DEC); + OPCODE0(F_DEC, "--x")    {    union anything *u=get_pointer_if_this_type(Pike_sp-2, PIKE_T_INT);    if(u
578:    instr=-- u->integer;    pop_n_elems(2);    push_int(u->integer); -  break; -  } +  } else {    lvalue_to_svalue_no_free(Pike_sp, Pike_sp-2); Pike_sp++;    push_int(1);    o_subtract();    assign_lvalue(Pike_sp-3, Pike_sp-1);    assign_svalue(Pike_sp-3, Pike_sp-1);    pop_n_elems(2); -  break; +     } -  + } + BREAK;    -  CASE(F_DEC_AND_POP); + OPCODE0(F_DEC_AND_POP, "x-- and pop")    {    union anything *u=get_pointer_if_this_type(Pike_sp-2, PIKE_T_INT);    if(u
607:    assign_lvalue(Pike_sp-3, Pike_sp-1);    pop_n_elems(3);    } -  break; +    } -  + BREAK;    -  CASE(F_INC_AND_POP); + OPCODE0(F_INC_AND_POP, "x++ and pop")    {    union anything *u=get_pointer_if_this_type(Pike_sp-2, PIKE_T_INT);    if(u
621:    {    instr=++ u->integer;    pop_n_elems(2); -  break; -  } +  } else {    lvalue_to_svalue_no_free(Pike_sp, Pike_sp-2); Pike_sp++;    push_int(1);    f_add(2);    assign_lvalue(Pike_sp-3, Pike_sp-1);    pop_n_elems(3); -  break; +     } -  + } + BREAK;    -  CASE(F_POST_INC); + OPCODE0(F_POST_INC, "x++")    {    union anything *u=get_pointer_if_this_type(Pike_sp-2, PIKE_T_INT);    if(u
643:    instr=u->integer ++;    pop_n_elems(2);    push_int(instr); -  break; -  } +  } else {    lvalue_to_svalue_no_free(Pike_sp, Pike_sp-2); Pike_sp++;    assign_svalue_no_free(Pike_sp,Pike_sp-1); Pike_sp++;    push_int(1);
652:    assign_lvalue(Pike_sp-4, Pike_sp-1);    assign_svalue(Pike_sp-4, Pike_sp-2);    pop_n_elems(3); -  break; +     } -  + } + BREAK;    -  CASE(F_POST_DEC); + OPCODE0(F_POST_DEC, "x--")    {    union anything *u=get_pointer_if_this_type(Pike_sp-2, PIKE_T_INT);    if(u
667:    instr=u->integer --;    pop_n_elems(2);    push_int(instr); -  break; -  } +  } else {    lvalue_to_svalue_no_free(Pike_sp, Pike_sp-2); Pike_sp++;    assign_svalue_no_free(Pike_sp,Pike_sp-1); Pike_sp++;    push_int(1);
676:    assign_lvalue(Pike_sp-4, Pike_sp-1);    assign_svalue(Pike_sp-4, Pike_sp-2);    pop_n_elems(3); -  break; +     } -  + } + BREAK;    -  CASE(F_ASSIGN); + OPCODE0(F_ASSIGN, "assign")    assign_lvalue(Pike_sp-3,Pike_sp-1);    free_svalue(Pike_sp-3);    free_svalue(Pike_sp-2);    Pike_sp[-3]=Pike_sp[-1];    Pike_sp-=2; -  break; + BREAK;    -  CASE(F_ASSIGN_AND_POP); -  assign_lvalue(Pike_sp-3,Pike_sp-1); + OPCODE0(F_ASSIGN_AND_POP, "assign and pop") +  assign_lvalue(Pike_sp-3, Pike_sp-1);    pop_n_elems(3); -  break; + BREAK;       CASE(F_APPLY_ASSIGN_LOCAL);    strict_apply_svalue(Pike_fp->context.prog->constants + GET_ARG(), Pike_sp - *--Pike_mark_sp );
711:    Pike_sp--;    break;    -  CASE(F_ASSIGN_GLOBAL) + OPCODE1(F_ASSIGN_GLOBAL, "assign global")   {    struct identifier *i; -  INT32 tmp=GET_ARG() + Pike_fp->context.identifier_level; +  INT32 tmp=arg1 + Pike_fp->context.identifier_level;    if(!Pike_fp->current_object->prog)    error("Cannot access global variables in destructed object.\n");   
730:    Pike_sp-1);    }    } -  break; + BREAK;    -  CASE(F_ASSIGN_GLOBAL_AND_POP) + OPCODE1(F_ASSIGN_GLOBAL_AND_POP, "assign global and pop")   {    struct identifier *i; -  INT32 tmp=GET_ARG() + Pike_fp->context.identifier_level; +  INT32 tmp=arg1 + Pike_fp->context.identifier_level;    if(!Pike_fp->current_object->prog)    error("Cannot access global variables in destructed object.\n");   
756:    pop_stack();    }    } -  break; + BREAK;      /* Stack machine stuff */ -  CASE(F_POP_VALUE); pop_stack(); break; -  CASE(F_POP_N_ELEMS); pop_n_elems(GET_ARG()); break; +  + OPCODE0(F_POP_VALUE, "pop") +  pop_stack(); + BREAK; +  + OPCODE1(F_POP_N_ELEMS, "pop_n_elems") +  pop_n_elems(arg1); + BREAK; +     CASE(F_MARK2); *(Pike_mark_sp++)=Pike_sp;    CASE(F_MARK); *(Pike_mark_sp++)=Pike_sp; break; -  CASE(F_MARK_X); *(Pike_mark_sp++)=Pike_sp-GET_ARG(); break; -  CASE(F_POP_MARK); --Pike_mark_sp; break; +     -  CASE(F_CLEAR_STRING_SUBTYPE); + OPCODE1(F_MARK_X, "mark sp-X") +  *(Pike_mark_sp++)=Pike_sp-arg1; + BREAK; +  + OPCODE0(F_POP_MARK, "pop mark") +  --Pike_mark_sp; + BREAK; +  + OPCODE0(F_CLEAR_STRING_SUBTYPE, "clear string subtype")    if(Pike_sp[-1].type==PIKE_T_STRING) Pike_sp[-1].subtype=0; -  break; + BREAK;       /* Jumps */    CASE(F_BRANCH);
908:    pc+=EXTRACT_INT(pc);    break;    -  CASE(F_THROW_ZERO); + OPCODE0(F_THROW_ZERO, "throw(0)")    push_int(0);    f_throw(1); -  break; + BREAK;    -  CASE(F_SWITCH) + OPCODE1(F_SWITCH, "switch")   {    INT32 tmp;    tmp=switch_lookup(Pike_fp->context.prog-> -  constants[GET_ARG()].sval.u.array,Pike_sp-1); +  constants[arg1].sval.u.array,Pike_sp-1);    pc=(unsigned char *)DO_ALIGN(pc,sizeof(INT32));    pc+=(tmp>=0 ? 1+tmp*2 : 2*~tmp) * sizeof(INT32);    if(*(INT32*)pc < 0) fast_check_threads_etc(7);    pc+=*(INT32*)pc;    pop_stack(); -  break; +    } -  + BREAK;       /* FIXME: Does this need bignum tests? /Fixed - Hubbe */    LOOP(F_INC_LOOP, 1, <, is_lt);
1030:    CASE(F_DUMB_RETURN);    return -1;    -  CASE(F_NEGATE); + OPCODE0(F_NEGATE, "unary minus")    if(Pike_sp[-1].type == PIKE_T_INT)    {   #ifdef AUTO_BIGNUM
1049:    }else{    o_negate();    } -  break; + BREAK;    -  CASE(F_COMPL); o_compl(); break; + OPCODE0(F_COMPL, "~") +  o_compl(); + BREAK;    -  CASE(F_NOT); + OPCODE0(F_NOT, "!")    switch(Pike_sp[-1].type)    {    case PIKE_T_INT:
1077:    Pike_sp[-1].type=PIKE_T_INT;    Pike_sp[-1].u.integer=0;    } -  break; + BREAK;    -  CASE(F_LSH); o_lsh(); break; -  CASE(F_RSH); o_rsh(); break; + OPCODE0(F_LSH, "<<") +  o_lsh(); + BREAK;    -  + OPCODE0(F_RSH, ">>") +  o_rsh(); + BREAK; +     COMPARISMENT(F_EQ, is_eq(Pike_sp-2,Pike_sp-1));    COMPARISMENT(F_NE,!is_eq(Pike_sp-2,Pike_sp-1));    COMPARISMENT(F_GT, is_gt(Pike_sp-2,Pike_sp-1));
1232:    f_cast();   BREAK;    -  CASE(F_SOFT_CAST); + OPCODE0(F_SOFT_CAST, "soft cast")    /* Stack: type_string, value */   #ifdef PIKE_DEBUG    if (Pike_sp[-2].type != T_STRING) {
1293:    }    stack_swap();    pop_stack(); -  break; + BREAK;      OPCODE0(F_RANGE, "range")    o_range();