Lines Matching refs:state
77 #define SRE_ERROR_STATE -2 /* illegal state */
89 /* search engine state */
198 data_stack_dealloc(SRE_STATE* state)
200 if (state->data_stack) {
201 PyMem_Free(state->data_stack);
202 state->data_stack = NULL;
204 state->data_stack_size = state->data_stack_base = 0;
208 data_stack_grow(SRE_STATE* state, Py_ssize_t size)
211 minsize = state->data_stack_base+size;
212 cursize = state->data_stack_size;
217 stack = PyMem_Realloc(state->data_stack, cursize);
219 data_stack_dealloc(state);
222 state->data_stack = (char *)stack;
223 state->data_stack_size = cursize;
252 /* module state */
262 _sremodulestate *state = (_sremodulestate *)_PyModule_GetState(m);
263 assert(state);
264 return state;
357 state_reset(SRE_STATE* state)
359 /* state->mark will be set to 0 in SRE_OP_MARK dynamically. */
360 /*memset(state->mark, 0, sizeof(*state->mark) * SRE_MARK_SIZE);*/
362 state->lastmark = -1;
363 state->lastindex = -1;
365 state->repeat = NULL;
367 data_stack_dealloc(state);
411 state_init(SRE_STATE* state, PatternObject* pattern, PyObject* string,
414 /* prepare state object */
420 memset(state, 0, sizeof(SRE_STATE));
422 state->mark = PyMem_New(const void *, pattern->groups * 2);
423 if (!state->mark) {
427 state->lastmark = -1;
428 state->lastindex = -1;
430 state->buffer.buf = NULL;
431 ptr = getstring(string, &length, &isbytes, &charsize, &state->buffer);
457 state->isbytes = isbytes;
458 state->charsize = charsize;
459 state->match_all = 0;
460 state->must_advance = 0;
462 state->beginning = ptr;
464 state->start = (void*) ((char*) ptr + start * state->charsize);
465 state->end = (void*) ((char*) ptr + end * state->charsize);
468 state->string = string;
469 state->pos = start;
470 state->endpos = end;
477 PyMem_Free((void*) state->mark);
478 state->mark = NULL;
479 if (state->buffer.buf)
480 PyBuffer_Release(&state->buffer);
485 state_fini(SRE_STATE* state)
487 if (state->buffer.buf)
488 PyBuffer_Release(&state->buffer);
489 Py_XDECREF(state->string);
490 data_stack_dealloc(state);
492 PyMem_Free((void*) state->mark);
493 state->mark = NULL;
497 #define STATE_OFFSET(state, member)\
498 (((char*)(member) - (char*)(state)->beginning) / (state)->charsize)
519 state_getslice(SRE_STATE* state, Py_ssize_t index, PyObject* string, int empty)
525 if (string == Py_None || index >= state->lastmark || !state->mark[index] || !state->mark[index+1]) {
533 i = STATE_OFFSET(state, state->mark[index]);
534 j = STATE_OFFSET(state, state->mark[index+1]);
545 return getslice(state->isbytes, state->beginning, string, i, j);
608 sre_match(SRE_STATE* state, SRE_CODE* pattern)
610 if (state->charsize == 1)
611 return sre_ucs1_match(state, pattern, 1);
612 if (state->charsize == 2)
613 return sre_ucs2_match(state, pattern, 1);
614 assert(state->charsize == 4);
615 return sre_ucs4_match(state, pattern, 1);
619 sre_search(SRE_STATE* state, SRE_CODE* pattern)
621 if (state->charsize == 1)
622 return sre_ucs1_search(state, pattern);
623 if (state->charsize == 2)
624 return sre_ucs2_search(state, pattern);
625 assert(state->charsize == 4);
626 return sre_ucs4_search(state, pattern);
648 SRE_STATE state;
652 if (!state_init(&state, (PatternObject *)self, string, pos, endpos))
655 state.ptr = state.start;
657 TRACE(("|%p|%p|MATCH\n", PatternObject_GetCode(self), state.ptr));
659 status = sre_match(&state, PatternObject_GetCode(self));
661 TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr));
663 state_fini(&state);
667 match = pattern_new_match(module_state, self, &state, status);
668 state_fini(&state);
691 SRE_STATE state;
695 if (!state_init(&state, self, string, pos, endpos))
698 state.ptr = state.start;
700 TRACE(("|%p|%p|FULLMATCH\n", PatternObject_GetCode(self), state.ptr));
702 state.match_all = 1;
703 status = sre_match(&state, PatternObject_GetCode(self));
705 TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr));
707 state_fini(&state);
711 match = pattern_new_match(module_state, self, &state, status);
712 state_fini(&state);
737 SRE_STATE state;
741 if (!state_init(&state, self, string, pos, endpos))
744 TRACE(("|%p|%p|SEARCH\n", PatternObject_GetCode(self), state.ptr));
746 status = sre_search(&state, PatternObject_GetCode(self));
748 TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr));
751 state_fini(&state);
755 match = pattern_new_match(module_state, self, &state, status);
756 state_fini(&state);
802 SRE_STATE state;
807 if (!state_init(&state, self, string, pos, endpos))
812 state_fini(&state);
816 while (state.start <= state.end) {
820 state_reset(&state);
822 state.ptr = state.start;
824 status = sre_search(&state, PatternObject_GetCode(self));
838 b = STATE_OFFSET(&state, state.start);
839 e = STATE_OFFSET(&state, state.ptr);
840 item = getslice(state.isbytes, state.beginning,
846 item = state_getslice(&state, 1, string, 1);
855 PyObject* o = state_getslice(&state, i+1, string, 1);
870 state.must_advance = (state.ptr == state.start);
871 state.start = state.ptr;
874 state_fini(&state);
879 state_fini(&state);
960 SRE_STATE state;
970 if (!state_init(&state, self, string, 0, PY_SSIZE_T_MAX))
975 state_fini(&state);
980 last = state.start;
984 state_reset(&state);
986 state.ptr = state.start;
988 status = sre_search(&state, PatternObject_GetCode(self));
1000 item = getslice(state.isbytes, state.beginning,
1001 string, STATE_OFFSET(&state, last),
1002 STATE_OFFSET(&state, state.start)
1013 item = state_getslice(&state, i+1, string, 0);
1023 state.must_advance = (state.ptr == state.start);
1024 last = state.start = state.ptr;
1029 item = getslice(state.isbytes, state.beginning,
1030 string, STATE_OFFSET(&state, last), state.endpos
1039 state_fini(&state);
1044 state_fini(&state);
1057 SRE_STATE state;
1108 if (!state_init(&state, self, string, 0, PY_SSIZE_T_MAX)) {
1116 state_fini(&state);
1124 state_reset(&state);
1126 state.ptr = state.start;
1128 status = sre_search(&state, PatternObject_GetCode(self));
1139 b = STATE_OFFSET(&state, state.start);
1140 e = STATE_OFFSET(&state, state.ptr);
1144 item = getslice(state.isbytes, state.beginning,
1157 match = pattern_new_match(module_state, self, &state, 1);
1180 state.must_advance = (state.ptr == state.start);
1181 state.start = state.ptr;
1185 if (i < state.endpos) {
1186 item = getslice(state.isbytes, state.beginning,
1187 string, i, state.endpos);
1196 state_fini(&state);
1201 joiner = getslice(state.isbytes, state.beginning, string, 0, 0);
1211 if (state.isbytes)
1228 state_fini(&state);
2449 SRE_STATE* state,
2452 /* create match object (from state object) */
2472 Py_INCREF(state->string);
2473 match->string = state->string;
2480 base = (char*) state->beginning;
2481 n = state->charsize;
2483 match->mark[0] = ((char*) state->start - base) / n;
2484 match->mark[1] = ((char*) state->ptr - base) / n;
2487 if (j+1 <= state->lastmark && state->mark[j] && state->mark[j+1]) {
2488 match->mark[j+2] = ((char*) state->mark[j] - base) / n;
2489 match->mark[j+3] = ((char*) state->mark[j+1] - base) / n;
2502 match->pos = state->pos;
2503 match->endpos = state->endpos;
2505 match->lastindex = state->lastindex;
2547 state_fini(&self->state);
2585 SRE_STATE* state = &self->state;
2592 if (state->start == NULL) {
2597 state_reset(state);
2599 state->ptr = state->start;
2601 status = sre_match(state, PatternObject_GetCode(self->pattern));
2608 state, status);
2611 state->start = NULL;
2613 state->must_advance = (state->ptr == state->start);
2614 state->start = state->ptr;
2635 SRE_STATE* state = &self->state;
2642 if (state->start == NULL) {
2647 state_reset(state);
2649 state->ptr = state->start;
2651 status = sre_search(state, PatternObject_GetCode(self->pattern));
2658 state, status);
2661 state->start = NULL;
2663 state->must_advance = (state->ptr == state->start);
2664 state->start = state->ptr;
2687 /* create search state object */
2688 if (!state_init(&scanner->state, self, string, pos, endpos)) {
2942 _sremodulestate *state = get_sre_module_state(module);
2944 Py_VISIT(state->Pattern_Type);
2945 Py_VISIT(state->Match_Type);
2946 Py_VISIT(state->Scanner_Type);
2954 _sremodulestate *state = get_sre_module_state(module);
2956 Py_CLEAR(state->Pattern_Type);
2957 Py_CLEAR(state->Match_Type);
2958 Py_CLEAR(state->Scanner_Type);
2992 _sremodulestate *state;
2995 state = get_sre_module_state(m);
2996 CREATE_TYPE(m, state->Pattern_Type, &pattern_spec);
2997 CREATE_TYPE(m, state->Match_Type, &match_spec);
2998 CREATE_TYPE(m, state->Scanner_Type, &scanner_spec);