@@ -47,34 +47,37 @@ fun fully_expanded_name(name, canonical_indexes) =
47
47
else fully_expanded_name(name.f_prefix, canonical_indexes) & ".") &
48
48
fully_expanded_name(name.f_suffix, canonical_indexes)
49
49
| 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])) & ")")
78
81
| Name =>
79
82
(match name.p_referenced_decl()
80
83
# Follow renamings
0 commit comments