Fix syntax error false positive on alternative match patterns (#21362)
Summary -- Fixes #21360 by using the union of names instead of overwriting them, as Micha suggested originally on #21104. This avoids overwriting the `n` name in the `Subscript` by the empty set of names visited in the nested OR pattern before visiting the other arm of the outer OR pattern. Test Plan -- A new inline test case taken from the issue
This commit is contained in:
@@ -1868,6 +1868,8 @@ impl<'a, Ctx: SemanticSyntaxContext> MatchPatternVisitor<'a, Ctx> {
|
||||
// case [[x] | [x]] | x: ...
|
||||
// match 42:
|
||||
// case [[x | x] | [x]] | x: ...
|
||||
// match 42:
|
||||
// case ast.Subscript(n, ast.Constant() | ast.Slice()) | ast.Attribute(n): ...
|
||||
SemanticSyntaxChecker::add_error(
|
||||
self.ctx,
|
||||
SemanticSyntaxErrorKind::DifferentMatchPatternBindings,
|
||||
@@ -1875,7 +1877,7 @@ impl<'a, Ctx: SemanticSyntaxContext> MatchPatternVisitor<'a, Ctx> {
|
||||
);
|
||||
break;
|
||||
}
|
||||
self.names = visitor.names;
|
||||
self.names.extend(visitor.names);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user