5.2.3.1.4 Variable Type Declarations

A type specification determines the specified type of a declaration.

as-auto-object = "as" "new" class-type-name
as-type = "as" type-spec 
type-spec = fixed-length-string-spec  / type-expression 
fixed-length-string-spec = "string" "*" string-length 
string-length = constant-name / INTEGER   
constant-name = simple-name-expression 

Static Semantics

§ The specified type of an <as-auto-object> element is the specified type of its <class-type-name> element.

§ The specified type of an <as-auto-object> element MUST be a named class.

§ The instancing mode of the specified type of an <as-auto-object> MUST NOT be Public Not Creatable unless that type is defined in the same project as that which contains the module containing the <as-auto-object> element.

§ The specified type of an <as-type> is the specified type of its <type-spec> element.

§ The specified type of a <type-spec> is the specified type of its constituent element.

§ The specified type of a <fixed-length-string-spec> is String*n where n is the data value of its <string-length> element.

§ The specified type of a <type-expression> is the declared type referenced by the < type-expression>.

§ A <constant-name> that is an element of a <string-length> MUST reference an explicitly-declared constant data value that is Let-coercible to the declared type Long.

§ The data value of a <string-length> element is the data value of its <INTEGER> element or the data value referenced by its <constant-name> Let-coerced to declared type Long.

§ The data value of a <string-length> element MUST be less than or equal to 65,526.

§ The <simple-name-expression> element of <constant-name> MUST be classified as a value.