]> granicus.if.org Git - re2c/commit
Estimate maximal path length in skeleton and abort if it overflows.
authorUlya Trofimovich <skvadrik@gmail.com>
Wed, 9 Sep 2015 21:43:31 +0000 (22:43 +0100)
committerUlya Trofimovich <skvadrik@gmail.com>
Wed, 9 Sep 2015 21:43:31 +0000 (22:43 +0100)
commit73cbfc9300cc170d65ddd0899144a882630556ef
tree9d03af0adc8a18f3ca1442bd9f7146f61f4ac2d5
parentf742edb9b984c91b53c93a3fb8057f870b25f4c5
Estimate maximal path length in skeleton and abort if it overflows.

Maximal skeleton path length is a bit different from YYMAXFILL:
it assumes that loops are iterated once (unlike YYMAXFILL calculation,
which disregards loops) and returns zero for empty regexp.

We need to know it in order:
    - to be sure it won't overflow
    - to store keys in a compact form (yet to be done)

This commit also makes DFA and skeleton store condition name and
source file line corresponding to current condition: it gets quite
annoying to pass these things around. This change caused another
change of test results (line numbers in error messages changed
for tests that use '-r' and reuse old DFA (don't reconstruct DFA
in 'use:re2c' blocks).
16 files changed:
re2c/Makefile.am
re2c/bootstrap/src/parse/parser.cc
re2c/src/codegen/emit_dfa.cc
re2c/src/codegen/skeleton/control_flow.cc
re2c/src/codegen/skeleton/generate_data.cc
re2c/src/codegen/skeleton/maxlen.cc [new file with mode: 0644]
re2c/src/codegen/skeleton/skeleton.cc
re2c/src/codegen/skeleton/skeleton.h
re2c/src/ir/bytecode/bytecode.cc
re2c/src/ir/bytecode/bytecode.h
re2c/src/ir/dfa/dfa.cc
re2c/src/ir/dfa/dfa.h
re2c/src/parse/parser.ypp
re2c/test/repeat-01.cgir.c
re2c/test/repeat-02.cgir.c
re2c/test/repeat-04.cgir.c