pike.git
/
src
/
operators.c
version
»
Context lines:
10
20
40
80
file
none
3
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);