VHDL Issue Number: 1111 Classification: Language Definition Problem Language Version: VHDL-93 Summary: Is a user-defined attribute an object? Related Issues: 1109, 1110 Relevant LRM Sections: 4.3, 4.4, 7.4.1 Key Words and Phrases: user-defined attributes, objects, named entities Current Status: Submitted 1076-1993 Disposition: N/A Disposition Rationale: N/A Superseded By: N/A ----------------------- Date Submitted: 1995/04/06 Author of Submission: Daniel S. Barclay Author's Affiliation: COMPASS Design Automation, Inc. Author's Post Address: 5457 Twin Knolls Rd. Suite 100 Columbia, MD 21045 USA Author's Phone Number: 410-992-5700 Author's Fax Number: 410-992-3536 Author's Net Address: daniel@compass-da.com ----------------------- Date Analyzed: TBD Author of Analysis: TBD Revision Number: $Revision: 1.5 $ Date Last Revised: $Date: 1995/05/15 21:26:37 $ Description of Problem ---------------------- The LRM is hopeless. Specifically (in this one case out of probably thou- sands), a whole chain of problems leaves it undefined whether certain attribute names are locally-static primaries or not. If an attribute name appears as a primary, the attribute name denotes a predefined attribute that is a value and that is not 'PATH_NAME, and the prefix denotes a user-defined attribute that was declared with a locally static subtype, is that attribute name a locally-static primary or not? The answer is unclear. Section 7.4.1 defines "locally static primary" to include: e) A predefined attribute that is a value, other than the pre- defined attribute 'PATH_NAME, and whose prefix is either a locally static subtype or is an object name that is of a locally static subtype First of all, why is something that is not a primary defined to be a locally static primary? (A primary is a piece of syntax, as is an attribute name; an attribute is not.) The wording "a predefined attribute..." here should be "an attribute name that denotes a predefined attribute..." Second, consider "an object name that is of a locally static subtype." How can a name be of a subtype? It is the denoted object that is of a subtype. Finally, the main problem: This definition refers to "object name," but "object name" is never defined explicitly. It is clear that "object name" is not defined directly. Neither does it appear to be defined indirectly. Specifically, it does not seem to be covered by any wording similar to the following wording from section 3 covering the use of type class names as modifiers: The name of a class of types is used in this manual as a qualifier for objects and values that have a type of the class considered. For example, the term array object is used for an object whose type is an array type; similarly, the term access value is used for a value of an access type. In any case, it does appear that "object name" is meant to mean "name that denotes an object." So, the current question is: is a user-defined attribute an object? LRM Section 4.3 defines the term "object" as follows: An object is a named entity that contains (has) a value of a given type. An object is one of the following: -- An object declared by an object declaration (see 4.3.1) -- A loop or generate parameter (see 8.9 and 9.7) -- A formal parameter of a subprogram (see 2.1.1) -- A formal port (see 1.1.1.2 and 9.1) -- A formal generic (see 1.1.1.1 and 9.1) -- A local port (see 4.5) -- A local generic (see 4.5) -- An implicit signal GUARD defined by the guard expression of a block statement (see 9.1) In addition, the following are objects, but are not named entities: -- An implicit signal defined by any of the predefined attributes 'DELAYED, 'STABLE, 'QUIET, and 'TRANSACTION (see 14.1) -- An element or slice of another object (see 6.3, 6.4, and 6.5) -- An object designated by a value of an access type (see 3.3) (See IR 1110 regarding other problems in this definition.) According to the first sentence, a user-defined attribute is an object if it is a named entity, but that is unknown because the term "named entity" is never defined. (See IR 1109 regarding this lack of definition.) According to the second sentence with its list of cases, a user-defined attribute is not an object. (A user-defined attribute is not declared or otherwise defined by an object declaration, and obviously it is not any of the other listed cases.) But this contradicts other definitions: Section 4.4 defines that user-defined attributes are constants: User-defined attributes are constants of arbitrary type. Section 4.3 defines that constant are objects: There are four classes of objects: constants, signals, variables, and files. (By the way, does this wording actually define that a constant is a object?) So...user-defined attributes are objects and user-defined attributes are not objects. Great. Proposed Resolution ------------------- Define the term "locally static primary" so that only primaries can be locally static primaries. Explicitly define (directly or indirectly) the term "object name." After otherwise resolving the definitions of object (for IR 1110) and named entity (for IR 1109), resolve the definition of object to cover user-defined attribute names. VASG-ISAC Analysis & Rationale ------------------------------ TBD VASG-ISAC Recommendation for IEEE Std 1076-1993 ----------------------------------------------- TBD VASG-ISAC Recommendation for Future Revisions --------------------------------------------- TBD