Language Change Specification for Extended Ranges / Operations on Ranges

LCS Number: LCS-2016-099a
Version: 1
Date: 22-Mar-2017
Status: Voting
Author: Patrick Lehmann
Lieven Lemiengre
Email: Main.PatrickLehmann
Main.LievenLemiengre
Source Doc: Extended Ranges
Operations on Ranges
Summary: Allow all operators be to locally static.

Voting Results: Cast your votes here

Yes:

  1. Lieven Lemiengre - 2017-03-22 - ver 1
  2. Patrick Lehmann - 2017-03-22 - ver 1

No:

Abstain:

Style Notes

Changes are shown in red font.
Deletions are crossed out.
Editing or reviewing notes in green font.

Reviewing Notes

Version 1:
  • Refactored the locally static change from LCS 099

Details of Language Change

9.4.2 Locally static primaries

An expression is said to be locally static if and only if every operator in the expression denotes an implicitly defined operator or an operator defined in
one of the packages STD_LOGIC_1164, NUMERIC_BIT, NUMERIC_STD, NUMERIC_BIT_UNSIGNED, or NUMERIC_STD_UNSIGNED in library IEEE, and if
every primary in the
expression is a locally static primary, where a locally static primary is defined to be one of the following:
  1. A literal of any type other than type TIME
  2. A constant (other than a deferred constant) explicitly declared by a constant declaration with a locally static subtype or with an unconstrained or partially constrained composite subtype for which the applicable constraints are locally static, and initialized with a locally static expression
  3. A formal generic constant of a generic-mapped subprogram or package (whether explicitly declared or equivalent to a subprogram or package instance, respectively), declared with a locally static subtype and for which the associated actual is a locally static expression
  4. An alias whose aliased name (given in the corresponding alias declaration) is a locally static primary and for which the subtype with which the aliased object is viewed is a locally static subtype
  5. A function call whose function name denotes an implicitly defined operation or an operation defined in one of the packages STD_LOGIC_1164, NUMERIC_BIT, NUMERIC_STD, NUMERIC_BIT_UNSIGNED, or NUMERIC_STD_UNSIGNED in library IEEE and whose actual parameters are each locally static expressions
    [Reviewer note: I haven't found any tool which enforces that rule.]
  6. A predefined attribute that is a value, other than the predefined attributes 'INSTANCE_NAME and 'PATH_NAME, and whose prefix is either a locally static subtype or is an object name that is of a locally static subtype
  7. A predefined attribute that is a function, other than the predefined attribute 'VALUE with a prefix whose base type is the predefined type TIME, and other than the predefined attributes 'EVENT, 'ACTIVE, 'LAST_EVENT, 'LAST_ACTIVE, 'LAST_VALUE, 'DRIVING, and 'DRIVING_VALUE, whose prefix is either a locally static subtype or is an object that is of a locally static subtype, and whose actual parameter (if any) is a locally static expression
  8. A user-defined attribute whose value is defined by a locally static expression
  9. A qualified expression whose type mark denotes a locally static subtype and whose operand is a locally static expression
  10. A type conversion whose type mark denotes a locally static subtype and whose expression is a locally static expression
  11. A locally static expression enclosed in parentheses
  12. An array aggregate in which all expressions in element associations are locally static expressions, all simple expressions in choices are locally static expressions, all discrete ranges in choices are locally static discrete ranges, and the others choice, if present, is locally static
  13. A record aggregate in which all expressions in element associations are locally static expressions
  14. An indexed name whose prefix is a locally static primary and whose index expressions are all locally static expressions
  15. A slice name whose prefix is a locally static primary and whose discrete range is a locally static discrete range
  16. A selected name whose prefix is a locally static primary

A locally static range is either a range of the second form (see 5.2.1) whose bounds are locally static expressions, or a range of the first form whose prefix denotes either a locally static subtype or an object that is of a locally static subtype. A locally static range constraint is a range constraint whose range is locally static. A locally static scalar subtype is either a scalar base type or a scalar subtype formed by imposing on a locally static subtype a locally static range constraint. A locally static discrete range is either a locally static subtype or a locally static range.

[...]

Comments

Version 1

Topic revision: r3 - 2020-02-17 - 15:34:42 - JimLewis
 
Copyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback