Next: Blocks and statements
Up: Classes
Previous: Method throws
ATTR ElementType: DefTableKey;
ATTR ComponentTypes: DefTableKeyList;
RULE: Initializer ::= Expression COMPUTE
RootContext(Initializer.ElementType,,Expression);
Indication(castInd);
IF(NoAssign(Expression.Type,Initializer.ElementType,Expression.Constant),
message(ERROR,"Incorrect type for this context",0,COORDREF));
END;
RULE: Initializer ::= '{' Initializers '}' COMPUTE
.ComponentTypes=
GetComponentTypes(Initializer.ElementType,NULLDefTableKeyList);
Initializers.ElementType=
IF(EQ(.ComponentTypes,NULLDefTableKeyList),
NoKey,
HeadDefTableKeyList(.ComponentTypes));
IF(AND(
NE(Initializer.ElementType,NoKey),
EQ(Initializers.ElementType,NoKey)),
message(ERROR,"Invalid initializer for this array",0,COORDREF));
END;
RULE: InitialElement ::= Initializer COMPUTE
Initializer.ElementType=INCLUDING Initializers.ElementType;
END;
RULE: FieldDeclarator ::= FieldDeclaratorId '=' Initializer COMPUTE
Initializer.ElementType=FieldDeclaratorId.ElementType;
END;
RULE: VariableDeclarator ::= VariableDeclaratorId '=' Initializer COMPUTE
Initializer.ElementType=VariableDeclaratorId.ElementType;
END;
RULE: FieldDeclaratorId ::= FieldIdDef COMPUTE
FieldDeclaratorId.ElementType=FieldIdDef.Type;
END;
RULE: VariableDeclaratorId ::= VariableDeclaratorId '[' ']' COMPUTE
VariableDeclaratorId[1].ElementType=VariableDeclaratorId[2].ElementType;
END;
RULE: VariableDeclaratorId ::= VariableIdDef COMPUTE
VariableDeclaratorId.ElementType=VariableIdDef.Type;
END;
This macro is invoked in definition 11.
2008-09-11