From 3d143e1c07af88c284e0727ca332beb00e84682b Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Wed, 2 Sep 2026 10:59:22 +0200 Subject: [PATCH] Unified: Make pattern a subtype of expr. --- unified/extractor/ast_types.yml | 4 +--- unified/ql/lib/codeql/unified/internal/Ast.qll | 10 +++------- unified/ql/lib/unified.dbscheme | 6 ++---- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/unified/extractor/ast_types.yml b/unified/extractor/ast_types.yml index 1c98bdeefe61..dd17a9d584bf 100644 --- a/unified/extractor/ast_types.yml +++ b/unified/extractor/ast_types.yml @@ -33,8 +33,6 @@ supertypes: - switch_expr - unresolved_operator_sequence - unsupported_node - expr_or_pattern: - - expr - pattern expr_or_type: - expr @@ -164,7 +162,7 @@ named: # Plain assignment assign_expr: - target: expr_or_pattern + target: expr value: expr # Compound assignment diff --git a/unified/ql/lib/codeql/unified/internal/Ast.qll b/unified/ql/lib/codeql/unified/internal/Ast.qll index eb02d0434837..cf927e257a9c 100644 --- a/unified/ql/lib/codeql/unified/internal/Ast.qll +++ b/unified/ql/lib/codeql/unified/internal/Ast.qll @@ -189,7 +189,7 @@ module Unified { final override string getAPrimaryQlClass() { result = "AssignExpr" } /** Gets the node corresponding to the field `target`. */ - final F::ExprOrPattern getTarget() { unified_assign_expr_def(this, result, _) } + final F::Expr getTarget() { unified_assign_expr_def(this, result, _) } /** Gets the node corresponding to the field `value`. */ final F::Expr getValue() { unified_assign_expr_def(this, _, result) } @@ -658,7 +658,7 @@ module Unified { } } - class Expr extends @unified_expr, F::ExprOrOperator, F::ExprOrPattern, F::ExprOrType, F::Stmt { } + class Expr extends @unified_expr, F::ExprOrOperator, F::ExprOrType, F::Stmt { } /** A class representing `expr_equality_pattern` nodes. */ class ExprEqualityPattern extends @unified_expr_equality_pattern, F::Pattern { @@ -674,8 +674,6 @@ module Unified { class ExprOrOperator extends @unified_expr_or_operator, F::AstNode { } - class ExprOrPattern extends @unified_expr_or_pattern, F::AstNode { } - class ExprOrType extends @unified_expr_or_type, F::AstNode { } /** A class representing `fixity` tokens. */ @@ -1201,7 +1199,7 @@ module Unified { } } - class Pattern extends @unified_pattern, F::ExprOrPattern { } + class Pattern extends @unified_pattern, F::Expr { } /** A class representing `pattern_element` nodes. */ class PatternElement extends @unified_pattern_element, F::AstNode { @@ -2107,8 +2105,6 @@ module UnifiedFinal { final class ExprOrOperator = F::ExprOrOperator; - final class ExprOrPattern = F::ExprOrPattern; - final class ExprOrType = F::ExprOrType; final class Fixity = F::Fixity; diff --git a/unified/ql/lib/unified.dbscheme b/unified/ql/lib/unified.dbscheme index 825d9fd0ff61..56312bb69d2c 100644 --- a/unified/ql/lib/unified.dbscheme +++ b/unified/ql/lib/unified.dbscheme @@ -196,7 +196,7 @@ unified_array_literal_def( unified_assign_expr_def( unique int id: @unified_assign_expr, - int target: @unified_expr_or_pattern ref, + int target: @unified_expr ref, int value: @unified_expr ref ); @@ -462,7 +462,7 @@ unified_equality_type_constraint_def( int right: @unified_type_expr ref ); -@unified_expr = @unified_array_literal | @unified_assign_expr | @unified_binary_expr | @unified_block | @unified_break_expr | @unified_call_expr | @unified_compound_assign_expr | @unified_continue_expr | @unified_function_expr | @unified_if_expr | @unified_key_value_pair | @unified_map_literal | @unified_member_access_expr | @unified_name_expr | @unified_pattern_guard_expr | @unified_return_expr | @unified_switch_expr | @unified_throw_expr | @unified_token_boolean_literal | @unified_token_builtin_expr | @unified_token_empty_expr | @unified_token_float_literal | @unified_token_int_literal | @unified_token_regex_literal | @unified_token_string_literal | @unified_token_super_expr | @unified_token_unsupported_node | @unified_try_expr | @unified_tuple_expr | @unified_type_cast_expr | @unified_type_test_expr | @unified_unary_expr | @unified_unresolved_operator_sequence +@unified_expr = @unified_array_literal | @unified_assign_expr | @unified_binary_expr | @unified_block | @unified_break_expr | @unified_call_expr | @unified_compound_assign_expr | @unified_continue_expr | @unified_function_expr | @unified_if_expr | @unified_key_value_pair | @unified_map_literal | @unified_member_access_expr | @unified_name_expr | @unified_pattern | @unified_pattern_guard_expr | @unified_return_expr | @unified_switch_expr | @unified_throw_expr | @unified_token_boolean_literal | @unified_token_builtin_expr | @unified_token_empty_expr | @unified_token_float_literal | @unified_token_int_literal | @unified_token_regex_literal | @unified_token_string_literal | @unified_token_super_expr | @unified_token_unsupported_node | @unified_try_expr | @unified_tuple_expr | @unified_type_cast_expr | @unified_type_test_expr | @unified_unary_expr | @unified_unresolved_operator_sequence unified_expr_equality_pattern_def( unique int id: @unified_expr_equality_pattern, @@ -471,8 +471,6 @@ unified_expr_equality_pattern_def( @unified_expr_or_operator = @unified_expr | @unified_token_infix_operator -@unified_expr_or_pattern = @unified_expr | @unified_pattern - @unified_expr_or_type = @unified_expr | @unified_type_expr unified_for_each_stmt_body(