1N/A/* PL_maxo shouldn't differ from MAXO but leave room anyway (see BOOT:) */ 1N/A/* XXX op_named_bits and opset_all are never freed */ 1N/A/* Initialise our private op_named_bits HV. 1N/A * It is first loaded with the name and number of each perl operator. 1N/A * Then the builtin tags :none and :all are added. 1N/A * Opcode.pm loads the standard optags from __DATA__ 1N/A * XXX leak-alert: data allocated here is never freed, call this 1N/A i =
len-
1;
/* deal with last byte specially, see below */ 1N/A /* Take care to set the right number of bits in the last byte */ 1N/A/* Store a new tag definition. Always a mask. 1N/A * The tag must not already be defined. 1N/A * SV *mask is copied not referenced. 1N/A/* Fetch a 'bits' entry for an opname or optag (IV/PV). 1N/A * Note that we return the actual entry for speed. 1N/A * Always sv_mortalcopy() if returing it to user code. 1N/A if (*
opname ==
'!')
/* XXX here later, or elsewhere? */ 1N/A /* not mortalised here */ 1N/A warn(
"set_opset_bits bit %2d (off=%d, bit=%d) %s %s\n",
1N/A croak(
"panic: invalid bitspec for \"%s\" (type %u)",
1N/A croak(
"Can't add to uninitialised PL_op_mask");
1N/A /* OPCODES ALREADY MASKED ARE NEVER UNMASKED. See opmask_addlocal() */ 1N/A if (!
bits) {
/* optimise for sparse masks */ 1N/A /* XXX casting to an ordinary function ptr from a member function ptr 1N/A * is disallowed by Borland 1N/A /* the assignment to global defstash changes our sense of 'main' */ 1N/A /* defstash must itself contain a main:: so we'll add that now */ 1N/A /* take care with the ref counts (was cause of long standing bug) */ 1N/A /* XXX I'm still not sure if this is right, GV_ADDWARN should warn! */ 1N/A /* take care of extra bits beyond PL_maxo in last byte */ 1N/A /* invert if op has ! prefix (only one allowed) */ 1N/A /* copy args to a scratch area since we may push output values onto */ 1N/A /* the stack faster than we read values off it if masks are used. */ 1N/A croak(
"panic: invalid bitspec for \"%s\" (type %u)",
1N/A croak(
"opcodes in list context not yet implemented");
/* XXX */