pike.git / src / operators.c

version» Context lines:

pike.git/src/operators.c:1515:    return;    }    }    }    }       switch(TYPEOF(sp[-args]))    {    case T_PROGRAM:    case T_FUNCTION: -  SIMPLE_BAD_ARG_ERROR("`+", 1, +  SIMPLE_ARG_TYPE_ERROR("`+", 1,    "string|object|int|float|array|mapping|multiset");    }    bad_arg_error("`+", sp-args, args, 1,    "string|object|int|float|array|mapping|multiset", sp-args,    "Incompatible types\n");    return; /* compiler hint */       case BIT_STRING:    {    struct pike_string *r;
pike.git/src/operators.c:2387:    sp[-2].u.string=ret;    sp--;    return;    }       /* FIXME: Support types? */       default:    {    int args = 2; -  SIMPLE_BAD_ARG_ERROR("`-", 1, +  SIMPLE_ARG_TYPE_ERROR("`-", 1,    "int|float|string|mapping|multiset|array|object");    }    }   }      /*! @decl mixed `-(mixed arg1)    *! @decl mixed `-(mixed arg1, mixed arg2, mixed ... extras)    *! @decl mixed `-(object arg1, mixed arg2)    *! @decl mixed `-(mixed arg1, object arg2)    *! @decl int `-(int arg1, int arg2)
pike.git/src/operators.c:2547:    else if (((TYPEOF(sp[-1]) == T_TYPE) || (TYPEOF(sp[-1]) == T_PROGRAM) ||    (TYPEOF(sp[-1]) == T_FUNCTION)) &&    ((TYPEOF(sp[-2]) == T_TYPE) || (TYPEOF(sp[-2]) == T_PROGRAM) ||    (TYPEOF(sp[-2]) == T_FUNCTION)))    {    if (TYPEOF(sp[-2]) != T_TYPE)    {    struct program *p = program_from_svalue(sp - 2);    if (!p) {    int args = 2; -  SIMPLE_BAD_ARG_ERROR("`&", 1, "type"); +  SIMPLE_ARG_TYPE_ERROR("`&", 1, "type");    }    type_stack_mark();    push_object_type(0, p->id);    free_svalue(sp - 2);    SET_SVAL(sp[-2], T_TYPE, 0, type, pop_unfinished_type());    }    if (TYPEOF(sp[-1]) != T_TYPE)    {    struct program *p = program_from_svalue(sp - 1);    if (!p)    {    int args = 2; -  SIMPLE_BAD_ARG_ERROR("`&", 2, "type"); +  SIMPLE_ARG_TYPE_ERROR("`&", 2, "type");    }    type_stack_mark();    push_object_type(0, p->id);    free_svalue(sp - 1);    SET_SVAL(sp[-1], T_TYPE, 0, type, pop_unfinished_type());    }    }    else if (TYPEOF(sp[-2]) == T_MAPPING)    switch (TYPEOF(sp[-1]))    {
pike.git/src/operators.c:2605:    m=merge_mapping_array_ordered(sp[-2].u.mapping,    sp[-1].u.array,    PIKE_ARRAY_OP_AND);    pop_n_elems(2);    push_mapping(m);    return;    }    default:    {    int args = 2; -  SIMPLE_BAD_ARG_ERROR("`&", 2, "mapping"); +  SIMPLE_ARG_TYPE_ERROR("`&", 2, "mapping");    }    }    else    {    int args = 2; -  SIMPLE_BAD_ARG_ERROR("`&", 2, get_name_of_type(TYPEOF(sp[-2]))); +  SIMPLE_ARG_TYPE_ERROR("`&", 2, get_name_of_type(TYPEOF(sp[-2])));    }    }       switch(TYPEOF(sp[-2]))    {    case T_OBJECT:    CALL_OPERATOR(LFUN_AND,2);    break;       case T_INT:
pike.git/src/operators.c:2680:    case T_PROGRAM:    {    struct program *p;    struct pike_type *a;    struct pike_type *b;    struct pike_type *t;       p = program_from_svalue(sp - 2);    if (!p) {    int args = 2; -  SIMPLE_BAD_ARG_ERROR("`&", 1, "type"); +  SIMPLE_ARG_TYPE_ERROR("`&", 1, "type");    }    type_stack_mark();    push_object_type(0, p->id);    a = pop_unfinished_type();       p = program_from_svalue(sp - 1);    if (!p) {    int args = 2; -  SIMPLE_BAD_ARG_ERROR("`&", 2, "type"); +  SIMPLE_ARG_TYPE_ERROR("`&", 2, "type");    }    type_stack_mark();    push_object_type(0, p->id);    b = pop_unfinished_type();       t = and_pike_types(a, b);       pop_n_elems(2);    push_type_value(t);    free_type(a);
pike.git/src/operators.c:2889:    if(call_lfun(LFUN_OR, LFUN_ROR)) {    return;    } else if (((TYPEOF(sp[-1]) == T_TYPE) || (TYPEOF(sp[-1]) == T_PROGRAM) ||    (TYPEOF(sp[-1]) == T_FUNCTION)) &&    ((TYPEOF(sp[-2]) == T_TYPE) || (TYPEOF(sp[-2]) == T_PROGRAM) ||    (TYPEOF(sp[-2]) == T_FUNCTION))) {    if (TYPEOF(sp[-2]) != T_TYPE) {    struct program *p = program_from_svalue(sp - 2);    if (!p) {    int args = 2; -  SIMPLE_BAD_ARG_ERROR("`|", 1, "type"); +  SIMPLE_ARG_TYPE_ERROR("`|", 1, "type");    }    type_stack_mark();    push_object_type(0, p->id);    free_svalue(sp - 2);    SET_SVAL(sp[-2], T_TYPE, 0, type, pop_unfinished_type());    }    if (TYPEOF(sp[-1]) != T_TYPE) {    struct program *p = program_from_svalue(sp - 1);    if (!p) {    int args = 2; -  SIMPLE_BAD_ARG_ERROR("`|", 2, "type"); +  SIMPLE_ARG_TYPE_ERROR("`|", 2, "type");    }    type_stack_mark();    push_object_type(0, p->id);    free_svalue(sp - 1);    SET_SVAL(sp[-1], T_TYPE, 0, type, pop_unfinished_type());    }    } else {    int args = 2; -  SIMPLE_BAD_ARG_ERROR("`|", 2, get_name_of_type(TYPEOF(sp[-2]))); +  SIMPLE_ARG_TYPE_ERROR("`|", 2, get_name_of_type(TYPEOF(sp[-2])));    }    }       switch(TYPEOF(sp[-2]))    {    case T_OBJECT:    CALL_OPERATOR(LFUN_OR,2);    break;       case T_INT:
pike.git/src/operators.c:2993:    case T_PROGRAM:    {    struct program *p;    struct pike_type *a;    struct pike_type *b;    struct pike_type *t;       p = program_from_svalue(sp - 2);    if (!p) {    int args = 2; -  SIMPLE_BAD_ARG_ERROR("`|", 1, "type"); +  SIMPLE_ARG_TYPE_ERROR("`|", 1, "type");    }    type_stack_mark();    push_object_type(0, p->id);    a = pop_unfinished_type();       p = program_from_svalue(sp - 1);    if (!p) {    int args = 2; -  SIMPLE_BAD_ARG_ERROR("`|", 2, "type"); +  SIMPLE_ARG_TYPE_ERROR("`|", 2, "type");    }    type_stack_mark();    push_object_type(0, p->id);    b = pop_unfinished_type();       t = or_pike_types(a, b, 0);       pop_n_elems(2);    push_type_value(t);    free_type(a);
pike.git/src/operators.c:3145:    if(call_lfun(LFUN_XOR, LFUN_RXOR)) {    return;    } else if (((TYPEOF(sp[-1]) == T_TYPE) || (TYPEOF(sp[-1]) == T_PROGRAM) ||    (TYPEOF(sp[-1]) == T_FUNCTION)) &&    ((TYPEOF(sp[-2]) == T_TYPE) || (TYPEOF(sp[-2]) == T_PROGRAM) ||    (TYPEOF(sp[-2]) == T_FUNCTION))) {    if (TYPEOF(sp[-2]) != T_TYPE) {    struct program *p = program_from_svalue(sp - 2);    if (!p) {    int args = 2; -  SIMPLE_BAD_ARG_ERROR("`^", 1, "type"); +  SIMPLE_ARG_TYPE_ERROR("`^", 1, "type");    }    type_stack_mark();    push_object_type(0, p->id);    free_svalue(sp - 2);    SET_SVAL(sp[-2], T_TYPE, 0, type, pop_unfinished_type());    }    if (TYPEOF(sp[-1]) != T_TYPE) {    struct program *p = program_from_svalue(sp - 1);    if (!p) {    int args = 2; -  SIMPLE_BAD_ARG_ERROR("`^", 2, "type"); +  SIMPLE_ARG_TYPE_ERROR("`^", 2, "type");    }    type_stack_mark();    push_object_type(0, p->id);    free_svalue(sp - 1);    SET_SVAL(sp[-1], T_TYPE, 0, type, pop_unfinished_type());    }    } else {    int args = 2; -  SIMPLE_BAD_ARG_ERROR("`^", 2, get_name_of_type(TYPEOF(sp[-2]))); +  SIMPLE_ARG_TYPE_ERROR("`^", 2, get_name_of_type(TYPEOF(sp[-2])));    }    }       switch(TYPEOF(sp[-2]))    {    case T_OBJECT:    CALL_OPERATOR(LFUN_XOR,2);    break;       case T_INT:
pike.git/src/operators.c:3222:    }       case T_FUNCTION:    case T_PROGRAM:    {    struct program *p;       p = program_from_svalue(sp - 1);    if (!p) {    int args = 2; -  SIMPLE_BAD_ARG_ERROR("`^", 2, "type"); +  SIMPLE_ARG_TYPE_ERROR("`^", 2, "type");    }    type_stack_mark();    push_object_type(0, p->id);    pop_stack();    push_type_value(pop_unfinished_type());       stack_swap();       p = program_from_svalue(sp - 1);    if (!p) {    int args = 2;    stack_swap(); -  SIMPLE_BAD_ARG_ERROR("`^", 1, "type"); +  SIMPLE_ARG_TYPE_ERROR("`^", 1, "type");    }    type_stack_mark();    push_object_type(0, p->id);    pop_stack();    push_type_value(pop_unfinished_type());    }    /* FALL_THROUGH */    case T_TYPE:    {    /* a ^ b == (a&~b)|(~a&b) */
pike.git/src/operators.c:3383:   }      PMOD_EXPORT void o_lsh(void)   {    int args = 2;    if ((TYPEOF(sp[-2]) == T_OBJECT) ||    (TYPEOF(sp[-1]) == T_OBJECT))    goto call_lfun;       if ((TYPEOF(sp[-1]) != T_INT) || (sp[-1].u.integer < 0)) { -  SIMPLE_BAD_ARG_ERROR("`<<", 2, "int(0..)|object"); +  SIMPLE_ARG_TYPE_ERROR("`<<", 2, "int(0..)|object");    }       switch(TYPEOF(sp[-2])) {    case T_INT:    if (!INT_TYPE_LSH_OVERFLOW(sp[-2].u.integer, sp[-1].u.integer))    break;    convert_stack_top_to_bignum();       /* FALL_THROUGH */       case T_OBJECT:    call_lfun:    if(call_lfun(LFUN_LSH, LFUN_RLSH))    return;       if(TYPEOF(sp[-2]) != T_INT) -  SIMPLE_BAD_ARG_ERROR("`<<", 1, "int|float|object"); -  SIMPLE_BAD_ARG_ERROR("`<<", 2, "int(0..)|object"); +  SIMPLE_ARG_TYPE_ERROR("`<<", 1, "int|float|object"); +  SIMPLE_ARG_TYPE_ERROR("`<<", 2, "int(0..)|object");    break;       case T_FLOAT:    sp--;    sp[-1].u.float_number = ldexp(sp[-1].u.float_number, sp->u.integer);    return;       default: -  SIMPLE_BAD_ARG_ERROR("`<<", 1, "int|float|object"); +  SIMPLE_ARG_TYPE_ERROR("`<<", 1, "int|float|object");    break;    }       sp--;    SET_SVAL(sp[-1], T_INT, NUMBER_NUMBER, integer,    sp[-1].u.integer << sp->u.integer);   }      /*! @decl int `<<(int arg1, int(0..) arg2)    *! @decl mixed `<<(object arg1, int(0..)|object arg2)
pike.git/src/operators.c:3474:   }      PMOD_EXPORT void o_rsh(void)   {    int args = 2;    if ((TYPEOF(sp[-2]) == T_OBJECT) || (TYPEOF(sp[-1]) == T_OBJECT))    {    if(call_lfun(LFUN_RSH, LFUN_RRSH))    return;    if(TYPEOF(sp[-2]) != T_INT) -  SIMPLE_BAD_ARG_ERROR("`>>", 1, "int|object"); -  SIMPLE_BAD_ARG_ERROR("`>>", 2, "int(0..)|object"); +  SIMPLE_ARG_TYPE_ERROR("`>>", 1, "int|object"); +  SIMPLE_ARG_TYPE_ERROR("`>>", 2, "int(0..)|object");    }       if ((TYPEOF(sp[-1]) != T_INT) || (sp[-1].u.integer < 0)) { -  SIMPLE_BAD_ARG_ERROR("`>>", 2, "int(0..)|object"); +  SIMPLE_ARG_TYPE_ERROR("`>>", 2, "int(0..)|object");    }       sp--;    switch(TYPEOF(sp[-1])) {    case T_INT:    if( INT_TYPE_RSH_OVERFLOW(sp[-1].u.integer, sp->u.integer) )    {    if (sp[-1].u.integer < 0) {    SET_SVAL(sp[-1], T_INT, NUMBER_NUMBER, integer, -1);    } else {    SET_SVAL(sp[-1], T_INT, NUMBER_NUMBER, integer, 0);    }    return;    }    break;    case T_FLOAT:    sp[-1].u.float_number = ldexp(sp[-1].u.float_number, -sp->u.integer);    return;    default: -  SIMPLE_BAD_ARG_ERROR("`>>", 1, "int|float|object"); +  SIMPLE_ARG_TYPE_ERROR("`>>", 1, "int|float|object");    break;    }       SET_SVAL(sp[-1], T_INT, NUMBER_NUMBER, integer,    sp[-1].u.integer >> sp->u.integer);   }      /*! @decl int `>>(int arg1, int(0..) arg2)    *! @decl mixed `>>(object arg1, int(0..)|object arg2)    *! @decl mixed `>>(int arg1, object arg2)
pike.git/src/operators.c:3567:   {    int args = 2;    switch(TWO_TYPES(TYPEOF(sp[-2]), TYPEOF(sp[-1])))    {    case TWO_TYPES(T_ARRAY, T_INT):    {    struct array *ret;    struct svalue *pos;    INT32 e;    if(sp[-1].u.integer < 0) -  SIMPLE_BAD_ARG_ERROR("`*", 2, "int(0..)"); +  SIMPLE_ARG_TYPE_ERROR("`*", 2, "int(0..)");    ret=allocate_array(sp[-2].u.array->size * sp[-1].u.integer);    pos=ret->item;    for(e=0;e<sp[-1].u.integer;e++,pos+=sp[-2].u.array->size)    assign_svalues_no_free(pos,    sp[-2].u.array->item,    sp[-2].u.array->size,    sp[-2].u.array->type_field);    ret->type_field=sp[-2].u.array->type_field;    pop_n_elems(2);    push_array(ret);    return;    }       case TWO_TYPES(T_ARRAY, T_FLOAT):    {    struct array *src;    struct array *ret;    struct svalue *pos;    ptrdiff_t asize, delta;    if(sp[-1].u.float_number < 0) -  SIMPLE_BAD_ARG_ERROR("`*", 2, "float(0..)"); +  SIMPLE_ARG_TYPE_ERROR("`*", 2, "float(0..)");       src = sp[-2].u.array;    delta = src->size;    asize = (ptrdiff_t)floor(delta * sp[-1].u.float_number + 0.5);    ret = allocate_array(asize);    pos = ret->item;    if (asize > delta) {    ret->type_field = src->type_field;    assign_svalues_no_free(pos,    src->item,
pike.git/src/operators.c:3632:    }       case TWO_TYPES(T_STRING, T_FLOAT):    {    struct pike_string *src;    struct pike_string *ret;    char *pos;    ptrdiff_t len, delta;       if(sp[-1].u.float_number < 0) -  SIMPLE_BAD_ARG_ERROR("`*", 2, "float(0..)"); +  SIMPLE_ARG_TYPE_ERROR("`*", 2, "float(0..)");    src = sp[-2].u.string;    len = (ptrdiff_t)floor(src->len * sp[-1].u.float_number + 0.5);    ret = begin_wide_shared_string(len, src->size_shift);    len <<= src->size_shift;    delta = src->len << src->size_shift;    pos = ret->str;       if (len > delta) {    memcpy(pos, src->str, delta);    pos += delta;
pike.git/src/operators.c:3669:    }          case TWO_TYPES(T_STRING, T_INT):    {    struct pike_string *ret;    char *pos;    INT_TYPE e;    ptrdiff_t len;    if(sp[-1].u.integer < 0) -  SIMPLE_BAD_ARG_ERROR("`*", 2, "int(0..)"); +  SIMPLE_ARG_TYPE_ERROR("`*", 2, "int(0..)");    ret=begin_wide_shared_string(sp[-2].u.string->len * sp[-1].u.integer,    sp[-2].u.string->size_shift);    pos=ret->str;    len=sp[-2].u.string->len << sp[-2].u.string->size_shift;    for(e=0;e<sp[-1].u.integer;e++,pos+=len)    memcpy(pos,sp[-2].u.string->str,len);    pop_n_elems(2);    push_string(low_end_shared_string(ret));    return;    }