Message ID | 20200518164052.18689-8-richard.henderson@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | decodetree: Add non-overlapping groups | expand |
On 5/18/20 6:40 PM, Richard Henderson wrote: > Intended to be nested within overlapping groups. > > Suggested-by: Peter Maydell <peter.maydell@linaro.org> > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > scripts/decodetree.py | 21 ++++++++++++++------- > 1 file changed, 14 insertions(+), 7 deletions(-) > > diff --git a/scripts/decodetree.py b/scripts/decodetree.py > index 0ba01e049c..a9739f671d 100755 > --- a/scripts/decodetree.py > +++ b/scripts/decodetree.py > @@ -1021,21 +1021,22 @@ def parse_file(f, parent_pat): > del toks[0] > > # End nesting? > - if name == '}': > + if name == '}' or name == ']': > if len(toks) != 0: > error(start_lineno, 'extra tokens after close brace') > if len(parent_pat.pats) < 2: > error(lineno, 'less than two patterns within braces') > > + # Make sure { } and [ ] nest properly. > + if (name == '}') != isinstance(parent_pat, IncMultiPattern): > + error(lineno, 'mismatched close brace') > + > try: > parent_pat = nesting_pats.pop() > except: > - error(lineno, 'mismatched close brace') > + error(lineno, 'extra close brace') > > nesting -= 2 > - if indent != nesting: > - error(lineno, 'indentation ', indent, ' != ', nesting) > - > toks = [] > continue > > @@ -1044,11 +1045,14 @@ def parse_file(f, parent_pat): > error(start_lineno, 'indentation ', indent, ' != ', nesting) > > # Start nesting? > - if name == '{': > + if name == '{' or name == '[': > if len(toks) != 0: > error(start_lineno, 'extra tokens after open brace') > > - nested_pat = IncMultiPattern(start_lineno) > + if name == '{': > + nested_pat = IncMultiPattern(start_lineno) > + else: > + nested_pat = ExcMultiPattern(start_lineno) > parent_pat.pats.append(nested_pat) > nesting_pats.append(parent_pat) > parent_pat = nested_pat > @@ -1067,6 +1071,9 @@ def parse_file(f, parent_pat): > else: > parse_generic(start_lineno, parent_pat, name, toks) > toks = [] > + > + if nesting != 0: > + error(lineno, 'missing close brace') > # end parse_file > > > Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
On Mon, 18 May 2020 at 17:41, Richard Henderson <richard.henderson@linaro.org> wrote: > > Intended to be nested within overlapping groups. > > Suggested-by: Peter Maydell <peter.maydell@linaro.org> > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > scripts/decodetree.py | 21 ++++++++++++++------- > 1 file changed, 14 insertions(+), 7 deletions(-) > > diff --git a/scripts/decodetree.py b/scripts/decodetree.py > index 0ba01e049c..a9739f671d 100755 > --- a/scripts/decodetree.py > +++ b/scripts/decodetree.py > @@ -1021,21 +1021,22 @@ def parse_file(f, parent_pat): > del toks[0] > > # End nesting? > - if name == '}': > + if name == '}' or name == ']': > if len(toks) != 0: > error(start_lineno, 'extra tokens after close brace') > if len(parent_pat.pats) < 2: > error(lineno, 'less than two patterns within braces') > > + # Make sure { } and [ ] nest properly. > + if (name == '}') != isinstance(parent_pat, IncMultiPattern): > + error(lineno, 'mismatched close brace') > + > try: > parent_pat = nesting_pats.pop() > except: > - error(lineno, 'mismatched close brace') > + error(lineno, 'extra close brace') > > nesting -= 2 > - if indent != nesting: > - error(lineno, 'indentation ', indent, ' != ', nesting) > - Why do we lose this error check ? > toks = [] > continue thanks -- PMM
On 6/2/20 12:13 PM, Peter Maydell wrote: > On Mon, 18 May 2020 at 17:41, Richard Henderson > <richard.henderson@linaro.org> wrote: >> >> Intended to be nested within overlapping groups. >> >> Suggested-by: Peter Maydell <peter.maydell@linaro.org> >> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> >> --- >> scripts/decodetree.py | 21 ++++++++++++++------- >> 1 file changed, 14 insertions(+), 7 deletions(-) >> >> diff --git a/scripts/decodetree.py b/scripts/decodetree.py >> index 0ba01e049c..a9739f671d 100755 >> --- a/scripts/decodetree.py >> +++ b/scripts/decodetree.py >> @@ -1021,21 +1021,22 @@ def parse_file(f, parent_pat): >> del toks[0] >> >> # End nesting? >> - if name == '}': >> + if name == '}' or name == ']': >> if len(toks) != 0: >> error(start_lineno, 'extra tokens after close brace') >> if len(parent_pat.pats) < 2: >> error(lineno, 'less than two patterns within braces') >> >> + # Make sure { } and [ ] nest properly. >> + if (name == '}') != isinstance(parent_pat, IncMultiPattern): >> + error(lineno, 'mismatched close brace') >> + >> try: >> parent_pat = nesting_pats.pop() >> except: >> - error(lineno, 'mismatched close brace') >> + error(lineno, 'extra close brace') >> >> nesting -= 2 >> - if indent != nesting: >> - error(lineno, 'indentation ', indent, ' != ', nesting) >> - > > Why do we lose this error check ? Hmm, wasn't supposed to. Will fix. r~
diff --git a/scripts/decodetree.py b/scripts/decodetree.py index 0ba01e049c..a9739f671d 100755 --- a/scripts/decodetree.py +++ b/scripts/decodetree.py @@ -1021,21 +1021,22 @@ def parse_file(f, parent_pat): del toks[0] # End nesting? - if name == '}': + if name == '}' or name == ']': if len(toks) != 0: error(start_lineno, 'extra tokens after close brace') if len(parent_pat.pats) < 2: error(lineno, 'less than two patterns within braces') + # Make sure { } and [ ] nest properly. + if (name == '}') != isinstance(parent_pat, IncMultiPattern): + error(lineno, 'mismatched close brace') + try: parent_pat = nesting_pats.pop() except: - error(lineno, 'mismatched close brace') + error(lineno, 'extra close brace') nesting -= 2 - if indent != nesting: - error(lineno, 'indentation ', indent, ' != ', nesting) - toks = [] continue @@ -1044,11 +1045,14 @@ def parse_file(f, parent_pat): error(start_lineno, 'indentation ', indent, ' != ', nesting) # Start nesting? - if name == '{': + if name == '{' or name == '[': if len(toks) != 0: error(start_lineno, 'extra tokens after open brace') - nested_pat = IncMultiPattern(start_lineno) + if name == '{': + nested_pat = IncMultiPattern(start_lineno) + else: + nested_pat = ExcMultiPattern(start_lineno) parent_pat.pats.append(nested_pat) nesting_pats.append(parent_pat) parent_pat = nested_pat @@ -1067,6 +1071,9 @@ def parse_file(f, parent_pat): else: parse_generic(start_lineno, parent_pat, name, toks) toks = [] + + if nesting != 0: + error(lineno, 'missing close brace') # end parse_file
Intended to be nested within overlapping groups. Suggested-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- scripts/decodetree.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) -- 2.20.1