Lines Matching defs:code

7  * 1999-10-24 fl  created (based on existing template matcher code)
444 /* <LITERAL> <code> */
451 /* <CATEGORY> <code> */
459 /* <CHARSET> <bitmap> (16 bits per code word) */
465 /* <CHARSET> <bitmap> (32 bits per code word) */
876 /* <LITERAL> <code> */
887 /* <NOT_LITERAL> <code> */
904 /* <AT> <code> */
913 /* <CATEGORY> <code> */
991 /* <BRANCH> <0=skip> code <JUMP> ... <NULL> */
2677 PyObject* code;
2682 &PyList_Type, &code, &groups,
2686 n = PyList_GET_SIZE(code);
2699 PyObject *o = PyList_GET_ITEM(code, i);
2702 self->code[i] = (SRE_CODE) value;
2703 if ((unsigned long) self->code[i] != value) {
2705 "regular expression code size limit exceeded");
2741 /* To learn more about this code, have a look at the _compile() function in
2742 Lib/sre_compile.py. The validation functions below checks the code array
2743 for conformance with the code patterns generated there.
2745 The nice thing about the generated code is that it is position-independent:
2777 /* Extract opcode, argument, or skip count from code array */
2780 VTRACE(("%p: ", code)); \
2781 if (code >= end) FAIL; \
2782 op = *code++; \
2787 VTRACE(("%p= ", code)); \
2788 if (code >= end) FAIL; \
2789 arg = *code++; \
2794 VTRACE(("%p= ", code)); \
2795 if (code >= end) FAIL; \
2796 skip = *code; \
2798 (unsigned long)skip, code+skip)); \
2799 if (code+skip-adj < code || code+skip-adj > end)\
2801 code++; \
2806 _validate_charset(SRE_CODE *code, SRE_CODE *end)
2814 while (code < end) {
2832 if (code+offset < code || code+offset > end)
2834 code += offset;
2840 if (code+offset < code || code+offset > end)
2844 if (((unsigned char *)code)[i] >= arg)
2847 code += offset;
2849 if (code+offset < code || code+offset > end)
2851 code += offset;
2891 _validate_inner(SRE_CODE *code, SRE_CODE *end, Py_ssize_t groups)
2898 VTRACE(("code=%p, end=%p\n", code, end));
2900 if (code > end)
2903 while (code < end) {
2909 sre_match() code is robust even if they don't, and the worst
2961 if (!_validate_charset(code, code+skip-2))
2963 if (code[skip-2] != SRE_OP_FAILURE)
2965 code += skip-1;
2977 newcode = code+skip-1;
3000 if (code+prefix_len < code || code+prefix_len > newcode)
3002 code += prefix_len;
3004 if (code+prefix_len < code || code+prefix_len > newcode)
3008 if (code[i] >= prefix_len)
3011 code += prefix_len;
3015 if (!_validate_charset(code, newcode-1))
3019 code = newcode;
3021 else if (code != newcode) {
3022 VTRACE(("code=%p, newcode=%p\n", code, newcode));
3036 if (!_validate_inner(code, code+skip-3, groups))
3038 code += skip-3;
3046 target = code+skip-1;
3047 else if (code+skip-1 != target)
3066 if (!_validate_inner(code, code+skip-4, groups))
3068 code += skip-4;
3087 if (!_validate_inner(code, code+skip-3, groups))
3089 code += skip-3;
3111 code--; /* The skip is relative to the first arg! */
3113 part and an 'else' part, the generated code looks like:
3134 to allow arbitrary jumps anywhere in the code; so we just look
3137 if (skip >= 3 && code+skip-3 >= code &&
3138 code[skip-3] == SRE_OP_JUMP)
3141 if (!_validate_inner(code+1, code+skip-3, groups))
3143 code += skip-2; /* Position after JUMP, at <skipno> */
3145 if (!_validate_inner(code, code+skip-1, groups))
3147 code += skip-1;
3151 if (!_validate_inner(code+1, code+skip-1, groups))
3153 code += skip-1;
3161 code--; /* Back up over arg to simplify math below */
3165 if (!_validate_inner(code+1, code+skip-2, groups))
3167 code += skip-2;
3184 _validate_outer(SRE_CODE *code, SRE_CODE *end, Py_ssize_t groups)
3186 if (groups < 0 || groups > 100 || code >= end || end[-1] != SRE_OP_SUCCESS)
3190 return _validate_inner(code, end-1, groups);
3196 if (!_validate_outer(self->code, self->code+self->codesize, self->groups))
3198 PyErr_SetString(PyExc_RuntimeError, "invalid SRE code");
3275 /* delegate to Python code */