pike.git / src / opcodes.c

version» Context lines:

pike.git/src/opcodes.c:166:    default:    error("Cannot cast to string.\n");    }       sp[-1].type=T_STRING;    sp[-1].u.string=make_shared_string(buf);    break;    }       case T_OBJECT: +  {    switch(sp[-1].type)    {    case T_STRING:    APPLY_MASTER("cast_to_object",1);    break;       case T_FUNCTION:    sp[-1].type = T_OBJECT;    break;    }    break; -  +  }       case T_PROGRAM: -  +  { +  switch(sp[-1].type) +  { +  case T_STRING:    APPLY_MASTER("cast_to_program",1);    break;       case T_FUNCTION:    { -  +  struct program *p=program_from_function(sp-1); +  if(p) +  { +  p->refs++; +  pop_stack(); +  push_program(p); +  }else{ +  pop_stack(); +  push_int(0); +  } +  } +  } +  return; +  } +  +  case T_FUNCTION: +  {    INT32 i;    if(fp->current_object->prog)    error("Cast to function in destructed object.\n");    i=find_shared_string_identifier(sp[-1].u.string,fp->current_object->prog);    free_string(sp[-1].u.string);    /* FIXME, check that it is a indeed a function */    if(i==-1)    {    sp[-1].type=T_FUNCTION;    sp[-1].subtype=i;