pike.git / src / builtin_functions.c

version» Context lines:

pike.git/src/builtin_functions.c:4749:    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);   }      PMOD_EXPORT 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) -  ret = 1; +  return 1;    break;    case T_PROGRAM: -  ret = 1; +  return 1;    break;    case T_OBJECT:    {    struct program *p;    if((p = s->u.object->prog) &&    FIND_LFUN(p->inherits[SUBTYPEOF(*s)].prog,    LFUN_CALL ) != -1) -  ret = 1; +  return 1;    }    break;    case T_ARRAY: -  +  { +  int ret = 0; +  DECLARE_CYCLIC(); +  +  if (BEGIN_CYCLIC(s, NULL)) { +  END_CYCLIC(); +  return 1; +  } +  +  SET_CYCLIC_RET((ptrdiff_t)1); +     array_fix_type_field(s->u.array);    if( !s->u.array->type_field) {    ret = 1; -  break; +     } -  if( !(s->u.array->type_field & ~(BIT_CALLABLE|BIT_INT)) ) { +  else 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]) ) -  +  {    ret = 0; -  } +     break;    } -  +  }    END_CYCLIC();    return ret; -  +  break;    } -  +  }    -  +  return 0; + } +    /*! @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()]    */   PMOD_EXPORT void f_callablep(INT32 args)   {