Lines Matching defs:code

16  * 1999-10-24 fl  created (based on existing template matcher code)
453 /* <LITERAL> <code> */
460 /* <CATEGORY> <code> */
468 /* <CHARSET> <bitmap> (16 bits per code word) */
474 /* <CHARSET> <bitmap> (32 bits per code word) */
885 /* <LITERAL> <code> */
896 /* <NOT_LITERAL> <code> */
913 /* <AT> <code> */
922 /* <CATEGORY> <code> */
1000 /* <BRANCH> <0=skip> code <JUMP> ... <NULL> */
2666 PyObject* code;
2671 &PyList_Type, &code, &groups,
2675 n = PyList_GET_SIZE(code);
2688 PyObject *o = PyList_GET_ITEM(code, i);
2691 self->code[i] = (SRE_CODE) value;
2692 if ((unsigned long) self->code[i] != value) {
2694 "regular expression code size limit exceeded");
2730 /* To learn more about this code, have a look at the _compile() function in
2731 Lib/sre_compile.py. The validation functions below checks the code array
2732 for conformance with the code patterns generated there.
2734 The nice thing about the generated code is that it is position-independent:
2766 /* Extract opcode, argument, or skip count from code array */
2769 VTRACE(("%p: ", code)); \
2770 if (code >= end) FAIL; \
2771 op = *code++; \
2776 VTRACE(("%p= ", code)); \
2777 if (code >= end) FAIL; \
2778 arg = *code++; \
2783 VTRACE(("%p= ", code)); \
2784 if (code >= end) FAIL; \
2785 skip = *code; \
2787 (unsigned long)skip, code+skip)); \
2788 if (code+skip-adj < code || code+skip-adj > end)\
2790 code++; \
2795 _validate_charset(SRE_CODE *code, SRE_CODE *end)
2803 while (code < end) {
2821 if (code+offset < code || code+offset > end)
2823 code += offset;
2829 if (code+offset < code || code+offset > end)
2833 if (((unsigned char *)code)[i] >= arg)
2836 code += offset;
2838 if (code+offset < code || code+offset > end)
2840 code += offset;
2880 _validate_inner(SRE_CODE *code, SRE_CODE *end, Py_ssize_t groups)
2887 VTRACE(("code=%p, end=%p\n", code, end));
2889 if (code > end)
2892 while (code < end) {
2898 sre_match() code is robust even if they don't, and the worst
2950 if (!_validate_charset(code, code+skip-2))
2952 if (code[skip-2] != SRE_OP_FAILURE)
2954 code += skip-1;
2966 newcode = code+skip-1;
2989 if (code+prefix_len < code || code+prefix_len > newcode)
2991 code += prefix_len;
2993 if (code+prefix_len < code || code+prefix_len > newcode)
2997 if (code[i] >= prefix_len)
3000 code += prefix_len;
3004 if (!_validate_charset(code, newcode-1))
3008 code = newcode;
3010 else if (code != newcode) {
3011 VTRACE(("code=%p, newcode=%p\n", code, newcode));
3025 if (!_validate_inner(code, code+skip-3, groups))
3027 code += skip-3;
3035 target = code+skip-1;
3036 else if (code+skip-1 != target)
3055 if (!_validate_inner(code, code+skip-4, groups))
3057 code += skip-4;
3076 if (!_validate_inner(code, code+skip-3, groups))
3078 code += skip-3;
3100 code--; /* The skip is relative to the first arg! */
3102 part and an 'else' part, the generated code looks like:
3123 to allow arbitrary jumps anywhere in the code; so we just look
3126 if (skip >= 3 && code+skip-3 >= code &&
3127 code[skip-3] == SRE_OP_JUMP)
3130 if (!_validate_inner(code+1, code+skip-3, groups))
3132 code += skip-2; /* Position after JUMP, at <skipno> */
3134 if (!_validate_inner(code, code+skip-1, groups))
3136 code += skip-1;
3140 if (!_validate_inner(code+1, code+skip-1, groups))
3142 code += skip-1;
3150 code--; /* Back up over arg to simplify math below */
3154 if (!_validate_inner(code+1, code+skip-2, groups))
3156 code += skip-2;
3173 _validate_outer(SRE_CODE *code, SRE_CODE *end, Py_ssize_t groups)
3175 if (groups < 0 || groups > 100 || code >= end || end[-1] != SRE_OP_SUCCESS)
3179 return _validate_inner(code, end-1, groups);
3185 if (!_validate_outer(self->code, self->code+self->codesize, self->groups))
3187 PyErr_SetString(PyExc_RuntimeError, "invalid SRE code");
3264 /* delegate to Python code */