START_EXTERN_C
-#define OP_NAME(o) (o->op_type == OP_CUSTOM ? custom_op_name(o) : \\
- PL_op_name[o->op_type])
-#define OP_DESC(o) (o->op_type == OP_CUSTOM ? custom_op_desc(o) : \\
- PL_op_desc[o->op_type])
+#define OP_NAME(o) ((o)->op_type == OP_CUSTOM ? custom_op_name(o) : \\
+ PL_op_name[(o)->op_type])
+#define OP_DESC(o) ((o)->op_type == OP_CUSTOM ? custom_op_desc(o) : \\
+ PL_op_desc[(o)->op_type])
#ifndef DOINIT
EXT char *PL_op_name[];
regcomp regexp compilation ck_null s| S
match pattern match (m//) ck_match d/
qr pattern quote (qr//) ck_match s/
-subst substitution (s///) ck_null dis/ S
+subst substitution (s///) ck_match dis/ S
substcont substitution iterator ck_null dis|
-trans transliteration (tr///) ck_null is" S
+trans transliteration (tr///) ck_match is" S
# Lvalue operators.
# sassign is special-cased for op class
# Explosives and implosives.
-unpack unpack ck_fun @ S S?
+unpack unpack ck_unpack @ S S?
pack pack ck_fun mst@ S L
split split ck_split t@ S S S
join join or string ck_join mst@ S L
splice splice ck_fun m@ A S? S? L
push push ck_fun imsT@ A L
-pop pop ck_shift s% A
-shift shift ck_shift s% A
+pop pop ck_shift s% A?
+shift shift ck_shift s% A?
unshift unshift ck_fun imsT@ A L
sort sort ck_sort m@ C? L
reverse reverse ck_fun mt@ L