-- the expander that do not correspond to static expressions.
procedure Eval_Integer_Literal (N : Node_Id) is
- function In_Any_Integer_Context (Context : Node_Id) return Boolean;
+ function In_Any_Integer_Context (K : Node_Kind) return Boolean;
-- If the literal is resolved with a specific type in a context where
-- the expected type is Any_Integer, there are no range checks on the
-- literal. By the time the literal is evaluated, it carries the type
-- In_Any_Integer_Context --
----------------------------
- function In_Any_Integer_Context (Context : Node_Id) return Boolean is
+ function In_Any_Integer_Context (K : Node_Kind) return Boolean is
begin
-- Any_Integer also appears in digits specifications for real types,
-- but those have bounds smaller that those of any integer base type,
-- so we can safely ignore these cases.
- return
- Nkind (Context) in N_Attribute_Definition_Clause
- | N_Attribute_Reference
- | N_Modular_Type_Definition
- | N_Number_Declaration
- | N_Signed_Integer_Type_Definition;
+ return K in N_Attribute_Definition_Clause
+ | N_Modular_Type_Definition
+ | N_Number_Declaration
+ | N_Signed_Integer_Type_Definition;
end In_Any_Integer_Context;
-- Local variables
- Par : constant Node_Id := Parent (N);
+ PK : constant Node_Kind := Nkind (Parent (N));
Typ : constant Entity_Id := Etype (N);
-- Start of processing for Eval_Integer_Literal
-- Check_Non_Static_Context on an expanded literal may lead to spurious
-- and misleading warnings.
- if (Nkind (Par) in N_Case_Expression_Alternative | N_If_Expression
- or else Nkind (Par) not in N_Subexpr)
- and then (Nkind (Par) not in N_Case_Expression_Alternative
- | N_If_Expression
- or else Comes_From_Source (N))
- and then not In_Any_Integer_Context (Par)
+ if (PK not in N_Subexpr
+ or else (PK in N_Case_Expression_Alternative | N_If_Expression
+ and then
+ Comes_From_Source (N)))
+ and then not In_Any_Integer_Context (PK)
then
Check_Non_Static_Context (N);
end if;
--
-- Note: most cases of non-static context checks are handled within
-- Sem_Eval itself, including all cases of expressions at the outer level
- -- (i.e. those that are not a subexpression). Currently the only outside
- -- customer for this procedure is Sem_Attr (because Eval_Attribute is
- -- there). There is also one special case arising from ranges (see body of
- -- Resolve_Range).
+ -- (i.e. those that are not a subexpression). The outside customers for
+ -- this procedure are Sem_Aggr, Sem_Attr (because Eval_Attribute is there)
+ -- and Sem_Res (for a special case arising from ranges, see Resolve_Range).
--
-- Note: this procedure is also called by GNATprove on real literals
-- that are not sub-expressions of static expressions, to convert them to