Skip to content

Commit 7d5220f

Browse files
committed
parameters_aliasing: avoid p_kind()
Since p_kind is too fragile for now, replace by equivalent code and avoids internal errors. TN: W313-005 Change-Id: Ie35a48977c7a40ddcc74db7a9a4d09204e4712a2
1 parent eda0d15 commit 7d5220f

File tree

1 file changed

+31
-28
lines changed

1 file changed

+31
-28
lines changed

lkql_checker/share/lkql/parameters_aliasing.lkql

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -47,34 +47,37 @@ fun fully_expanded_name(name, canonical_indexes) =
4747
else fully_expanded_name(name.f_prefix, canonical_indexes) & ".") &
4848
fully_expanded_name(name.f_suffix, canonical_indexes)
4949
| CallExpr =>
50-
(match name.p_kind()
51-
| "array_index" =>
52-
fully_expanded_name(name.f_name, canonical_indexes) & "(" &
53-
(if canonical_indexes
54-
# The code below may generate false positives and false
55-
# negatives, which is OK for now and avoids frequent false
56-
# positives on e.g. A(2) vs A(3).
57-
then img([(if can_eval_as_int(n.f_r_expr)
58-
then img(n.f_r_expr.p_eval_as_int())
59-
else 0)
60-
for n in name.f_suffix.children])
61-
else img([fully_expanded_name(n.f_r_expr, canonical_indexes)
62-
for n in name.f_suffix.children])) & ")"
63-
| "array_slice" =>
64-
fully_expanded_name(name.f_name, canonical_indexes) & "(" &
65-
(if canonical_indexes
66-
then img([0])
67-
else if name.f_suffix is BinOp
68-
then (fully_expanded_name(name.f_suffix.f_left, canonical_indexes)
69-
& ".."
70-
& fully_expanded_name(name.f_suffix.f_right, canonical_indexes))
71-
else fully_expanded_name(name.f_suffix, canonical_indexes))
72-
& ")"
73-
# Punt on subprogram calls
74-
| "call" => "NO MATCH"
75-
# Strip type conversions
76-
| "type_conversion" =>
77-
fully_expanded_name(name.f_suffix[1].f_r_expr, canonical_indexes))
50+
# Note: we cannot use name.p_kind() pending W313-005
51+
52+
# Punt on subprogram calls ("call")
53+
(if name.p_is_call()
54+
then "NO MATCH"
55+
else if name.f_name is Name(p_referenced_decl() is BaseTypeDecl)
56+
# Strip type conversions ("type_conversion")
57+
then fully_expanded_name(name.f_suffix[1].f_r_expr, canonical_indexes)
58+
else if name.p_is_array_slice()
59+
# "array_slice"
60+
then fully_expanded_name(name.f_name, canonical_indexes) & "(" &
61+
(if canonical_indexes
62+
then img([0])
63+
else if name.f_suffix is BinOp
64+
then (fully_expanded_name(name.f_suffix.f_left, canonical_indexes)
65+
& ".."
66+
& fully_expanded_name(name.f_suffix.f_right, canonical_indexes))
67+
else fully_expanded_name(name.f_suffix, canonical_indexes))
68+
& ")"
69+
# "array_index"
70+
else fully_expanded_name(name.f_name, canonical_indexes) & "(" &
71+
(if canonical_indexes
72+
# The code below may generate false positives and false
73+
# negatives, which is OK for now and avoids frequent false
74+
# positives on e.g. A(2) vs A(3).
75+
then img([(if can_eval_as_int(n.f_r_expr)
76+
then img(n.f_r_expr.p_eval_as_int())
77+
else 0)
78+
for n in name.f_suffix.children])
79+
else img([fully_expanded_name(n.f_r_expr, canonical_indexes)
80+
for n in name.f_suffix.children])) & ")")
7881
| Name =>
7982
(match name.p_referenced_decl()
8083
# Follow renamings

0 commit comments

Comments
 (0)