pike.git
/
src
/
operators.c
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/src/operators.c:2734:
pop_n_elems(2); push_type_value(t); free_type(a); free_type(b); return; } #define STRING_BITOP(OP,STROP) \ case T_STRING: \ { \
-
struct pike_string *s
;
\
+
struct pike_string *s
,
*a,
*b;
\
ptrdiff_t len, i; \
-
\
-
len =
sp[
-
2].u.string-
>len; \
-
if (len !=
sp[
-
1].u.string-
>len) \
+
a
=
sp[-2].u.string;
\
+
b
=
sp[-1].u.string;
\
+
len =
a
->len;
\
+
if (len !=
b
->len)
\
PIKE_ERROR("`" #OP, "Bitwise "STROP \ " on strings of different lengths.\n", sp, 2); \
-
if(!
sp[
-
2].u.string-
>size_shift && !
sp[
-
1].u.string-
>size_shift) \
+
if(!
a
->size_shift && !
b
->size_shift)
\
{ \ s = begin_shared_string(len); \ for (i=0; i<len; i++) \
-
s->str[i] =
sp[
-
2].u.string-
>str[i] OP
sp[
-
1].u.string-
>str[i]; \
+
s->str[i] =
a
->str[i] OP
b
->str[i];
\
}else{ \ s = begin_wide_shared_string(len, \
-
MAXIMUM(
sp[
-
2].u.string-
>size_shift, \
-
sp[
-
1].u.string-
>size_shift)); \
+
MAXIMUM(
a
->size_shift,
\
+
b
->size_shift));
\
for (i=0; i<len; i++) \
-
low_set_index(s,i,index_shared_string(
sp[-2].u.string
,i) OP \
-
index_shared_string(
sp[-1].u.string
,i)); \
+
low_set_index(s,i,index_shared_string(
a
,i) OP
\
+
index_shared_string(
b
,i));
\
} \
-
+
s = end_shared_string(s); \
+
s->flags |= (a->flags | b->flags) & STRING_CLEAR_ON_EXIT; \
pop_n_elems(2); \
-
push_string(
end_shared_string(
s)
)
; \
+
push_string(s);
\
return; \ } STRING_BITOP(&,"AND") default: PIKE_ERROR("`&", "Bitwise AND on illegal type.\n", sp, 2); } }