pike.git / src / operators.c

version» Context lines:

pike.git/src/operators.c:30:   #include "cyclic.h"   #include "pike_compiler.h"      #define sp Pike_sp      #define OP_DIVISION_BY_ZERO_ERROR(FUNC) \    math_error(FUNC, sp-2, 2, 0, "Division by zero.\n")   #define OP_MODULO_BY_ZERO_ERROR(FUNC) \    math_error(FUNC, sp-2, 2, 0, "Modulo by zero.\n")    - /* The destructive multiset merge code is broken. -  * l->msd gets -1 refs. -  * -  * Disable it for now. -  * /grubba 2008-07-08 -  */ - #undef PIKE_MERGE_DESTR_A - #define PIKE_MERGE_DESTR_A 0 -  +     /* This calculation should always give some margin based on the size. */    /* It utilizes that log10(256) ~= 2.4 < 5/2. */    /* One extra char for the sign and one for the \0 terminator. */   #define MAX_INT_SPRINTF_LEN (2 + (SIZEOF_INT_TYPE * 5 + 1) / 2)       /* Enough to hold a Pike float or int in textform    */   #define MAX_NUM_BUF (MAXIMUM(MAX_INT_SPRINTF_LEN,MAX_FLOAT_SPRINTF_LEN))      void index_no_free(struct svalue *to,struct svalue *what,struct svalue *ind)
pike.git/src/operators.c:2340:    struct mapping *m;    m=merge_mappings(sp[-2].u.mapping, sp[-1].u.mapping,PIKE_ARRAY_OP_SUB);    pop_n_elems(2);    push_mapping(m);    return;    }       case T_MULTISET:    {    struct multiset *l; -  if (sp[-2].u.multiset->refs == 1) { +     l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, -  PIKE_ARRAY_OP_SUB | PIKE_MERGE_DESTR_A); -  } else { -  l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, +     PIKE_ARRAY_OP_SUB); -  } +     pop_n_elems(2);    push_multiset(l);    return;    }       case T_FLOAT:    sp--;    sp[-1].u.float_number -= sp[0].u.float_number;    return;   
pike.git/src/operators.c:2639:    struct mapping *m;    m=merge_mappings(sp[-2].u.mapping, sp[-1].u.mapping, PIKE_ARRAY_OP_AND);    pop_n_elems(2);    push_mapping(m);    return;    }       case T_MULTISET:    {    struct multiset *l; -  if (sp[-2].u.multiset->refs == 1) { +     l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, -  PIKE_ARRAY_OP_AND | PIKE_MERGE_DESTR_A); -  } else { -  l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, +     PIKE_ARRAY_OP_AND); -  } +     pop_n_elems(2);    push_multiset(l);    return;    }       case T_ARRAY:    {    struct array *a;    a=and_arrays(sp[-2].u.array, sp[-1].u.array);    pop_n_elems(2);
pike.git/src/operators.c:2937:    struct mapping *m;    m=merge_mappings(sp[-2].u.mapping, sp[-1].u.mapping, PIKE_ARRAY_OP_OR);    pop_n_elems(2);    push_mapping(m);    return;    }       case T_MULTISET:    {    struct multiset *l; -  if (sp[-2].u.multiset->refs == 1) { +     l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, -  PIKE_ARRAY_OP_OR_LEFT | PIKE_MERGE_DESTR_A); -  } else { -  l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, +     PIKE_ARRAY_OP_OR_LEFT); -  } +     pop_n_elems(2);    push_multiset(l);    return;    }       case T_ARRAY:    {    if (sp[-1].u.array->size == 1) {    /* Common case (typically the |= operator). */    int i = array_search(sp[-2].u.array, sp[-1].u.array->item, 0);
pike.git/src/operators.c:3193:    struct mapping *m;    m=merge_mappings(sp[-2].u.mapping, sp[-1].u.mapping, PIKE_ARRAY_OP_XOR);    pop_n_elems(2);    push_mapping(m);    return;    }       case T_MULTISET:    {    struct multiset *l; -  if (sp[-2].u.multiset->refs == 1) { +     l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, -  PIKE_ARRAY_OP_XOR | PIKE_MERGE_DESTR_A); -  } else { -  l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, +     PIKE_ARRAY_OP_XOR); -  } +     pop_n_elems(2);    push_multiset(l);    return;    }       case T_ARRAY:    {    struct array *a;    a=merge_array_with_order(sp[-2].u.array, sp[-1].u.array, PIKE_ARRAY_OP_XOR);    pop_n_elems(2);