Difference between revisions of "Language Reference/Attributes"
(Initial) |
(Initial) |
||
Line 2: | Line 2: | ||
Various declarations can be annotated with attributes. This section describes the general syntax of attributes and where they can be placed. It also describes the meaning of the specific attributes. | Various declarations can be annotated with attributes. This section describes the general syntax of attributes and where they can be placed. It also describes the meaning of the specific attributes. | ||
=== Syntax === | |||
<vipbnf><Attributes> : | <vipbnf><Attributes> : | ||
Line 12: | Line 14: | ||
Where the literals must either be numbers or string literals. | Where the literals must either be numbers or string literals. | ||
=== deprecated === | === Insertion Points === | ||
The attributes of interfaces, classes and implementations is right before the scope qualifications. | |||
<vipbnf><InterfaceDeclaration> : | |||
interface <IinterfaceName> <ScopeQualifications> <Sections> end interface <IinterfaceName>-opt</vipbnf> | |||
<vipbnf><ClassDeclaration> : | |||
class <ClassName> <ConstructionType>-opt <Attributes> <ScopeQualifications> <Sections> end class <ClassName>-opt</vipbnf> | |||
<vipbnf><ClassImplementation> : | |||
implement <ClassName> <Attributes> <ScopeQualifications> <Sections> end implement <ClassName>-opt</vipbnf> | |||
The attributes of constants, domains, predicates, properties and facts is at the end (i.e. right before the terminating dot). | |||
<vipbnf><ConstantDefinition>: one of | |||
<ConstantName> = <ConstantValue> <Attributes> | |||
<ConstantName> : <TypeName> = <ConstantValue> <Attributes></vipbnf> | |||
<vipbnf><DomainDefinition>: | |||
<DomainName> <FormalTypeParameterList>-opt = <TypeExpression> <Attributes></vipbnf> | |||
<vipbnf><PredicateDeclaration> : | |||
<PredicateName> : <PredicateDomain> <LinkName>-opt <Attributes> | |||
<PredicateName> : <PredicateDomainName> <LinkName>-opt <Attributes></vipbnf> | |||
<vipbnf><PropertyDeclaration> : | |||
<PropertyName> : <PropertyType> <FlowPattern>-list-opt <Attributes></vipbnf> | |||
=== Specific Attributes === | |||
==== deprecated ==== | |||
The declared entity is deprecated the string literal describes how to migrate from it. The entity still exist, but usage will cause a warning. | The declared entity is deprecated the string literal describes how to migrate from it. The entity still exist, but usage will cause a warning. | ||
Line 22: | Line 55: | ||
}} | }} | ||
=== retired === | ==== retired ==== | ||
The declared entity is retired the string literal describes how to migrate from it. The entity does not exist anymore. | The declared entity is retired the string literal describes how to migrate from it. The entity does not exist anymore. | ||
Line 31: | Line 64: | ||
}} | }} | ||
=== inline === | ==== inline ==== | ||
inline alters the memory layout of a struct (i.e. a single alternative functor domain with an align qualification). The corresponding field is inlined instead of being pointed to. | inline alters the memory layout of a struct (i.e. a single alternative functor domain with an align qualification). The corresponding field is inlined instead of being pointed to. |
Revision as of 15:48, 15 March 2010
Various declarations can be annotated with attributes. This section describes the general syntax of attributes and where they can be placed. It also describes the meaning of the specific attributes.
Syntax
Attributes : [ Attribute-comma-sep-list ]
Attribute : one of LowerCaseIdentifier LowerCaseIdentifier ( Literal-comma-sep-list )
Where the literals must either be numbers or string literals.
Insertion Points
The attributes of interfaces, classes and implementations is right before the scope qualifications.
InterfaceDeclaration : interface IinterfaceName ScopeQualifications Sections end interface IinterfaceName-opt
ClassDeclaration : class ClassName ConstructionType-opt Attributes ScopeQualifications Sections end class ClassName-opt
ClassImplementation : implement ClassName Attributes ScopeQualifications Sections end implement ClassName-opt
The attributes of constants, domains, predicates, properties and facts is at the end (i.e. right before the terminating dot).
ConstantDefinition: one of ConstantName = ConstantValue Attributes ConstantName : TypeName = ConstantValue Attributes
DomainDefinition: DomainName FormalTypeParameterList-opt = TypeExpression Attributes
PredicateDeclaration : PredicateName : PredicateDomain LinkName-opt Attributes PredicateName : PredicateDomainName LinkName-opt Attributes
PropertyDeclaration : PropertyName : PropertyType FlowPattern-list-opt Attributes
Specific Attributes
deprecated
The declared entity is deprecated the string literal describes how to migrate from it. The entity still exist, but usage will cause a warning. The entity will not exist in future versions of Visual Prolog.
predicates oldFasioned : (string Arg) [deprecated("Use newFasion instead")].
retired
The declared entity is retired the string literal describes how to migrate from it. The entity does not exist anymore.
predicates veryOldFasioned : (string Arg) [retired("Use newFasion instead")].
inline
inline alters the memory layout of a struct (i.e. a single alternative functor domain with an align qualification). The corresponding field is inlined instead of being pointed to.
domains point = align 4 p(integer X, integer Y). domains rectangle = align 4 r( point UpperLeft [inline], point LowerRight [inline] ).
It is also possible to inline fixed size string and string8 fields in structs:
domains device = align 4 device( integer Id, string DeviceName [inline(32)] ).