pike.git
/
src
/
operators.c
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/src/operators.c:1:
/* || This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information.
-
|| $Id: operators.c,v 1.
235
2008/
06
/
28
22
:
05
:
04
mast
Exp $
+
|| $Id: operators.c,v 1.
236
2008/
07
/
08
13
:
34
:
53
grubba
Exp $
*/ #include "global.h" #include <math.h> #include "interpret.h" #include "svalue.h" #include "multiset.h" #include "mapping.h" #include "array.h" #include "stralloc.h"
pike.git/src/operators.c:2247:
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;
-
l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, PIKE_ARRAY_OP_SUB);
+
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:2509:
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;
-
l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, PIKE_ARRAY_OP_AND);
+
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:2802:
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;
-
l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, PIKE_ARRAY_OP_OR_LEFT);
+
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: { struct array *a; a=merge_array_with_order(sp[-2].u.array, sp[-1].u.array, PIKE_ARRAY_OP_OR_LEFT); pop_n_elems(2);
pike.git/src/operators.c:3038:
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;
-
l=merge_multisets(sp[-2].u.multiset, sp[-1].u.multiset, PIKE_ARRAY_OP_XOR);
+
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);