pike.git / src / builtin_functions.c

version» Context lines:

pike.git/src/builtin_functions.c:4659:    if( TYPEOF(Pike_sp[-args]) == T_FUNCTION &&    (SUBTYPEOF(Pike_sp[-args]) == FUNCTION_BUILTIN ||    Pike_sp[-args].u.object->prog))    res=1;    pop_n_elems(args);    push_int(res);   }      static int callablep(struct svalue *s)   { +  int ret = 0; +  DECLARE_CYCLIC(); +  +  if (BEGIN_CYCLIC(s, NULL)) { +  END_CYCLIC(); +  return 1; +  } +  +  SET_CYCLIC_RET((ptrdiff_t)1); +     switch( TYPEOF(*s) )    {    case T_FUNCTION: -  if( SUBTYPEOF(*s) != FUNCTION_BUILTIN -  && !s->u.object->prog) -  return 0; -  return 1; +  if( SUBTYPEOF(*s) == FUNCTION_BUILTIN +  || s->u.object->prog) +  ret = 1;    break;    case T_PROGRAM: -  return 1; +  ret = 1;    break;    case T_OBJECT:    {    struct program *p;    if((p = s->u.object->prog) &&    FIND_LFUN(p->inherits[SUBTYPEOF(*s)].prog,    LFUN_CALL ) != -1) -  return 1; +  ret = 1;    }    break;    case T_ARRAY:    array_fix_type_field(s->u.array);    if( !s->u.array->type_field) { -  return 1; +  ret = 1; +  break;    }    if( !(s->u.array->type_field & ~(BIT_CALLABLE|BIT_INT)) ) {    struct array *a = s->u.array;    int i; -  +  ret = 1;    for(i=0; i<a->size; i++)    if( TYPEOF(ITEM(a)[i])!=T_INT && !callablep(&ITEM(a)[i]) ) -  return 0; -  return 1; +  ret = 0;    } -  return 0; +     break;    } -  return 0; +  +  END_CYCLIC(); +  return ret;   }      /*! @decl int callablep(mixed arg)    *!    *! Returns @expr{1@} if @[arg] is a callable, @expr{0@} (zero) otherwise.    *!    *! @seealso    *! @[mappingp()], @[programp()], @[arrayp()], @[stringp()], @[objectp()],    *! @[multisetp()], @[floatp()], @[intp()]    */