next up previous
Next: Blocks and statements Up: Classes Previous: Method throws

Initializers

Initializers[13]:
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