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
--
2.20.1
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~
© 2016 - 2025 Red Hat, Inc.