public override AstNode Visit(FieldDeclaration node) { // Get the field. FieldVariable field = (FieldVariable)node.GetVariable(); // Get the field type. IChelaType fieldType = field.GetVariableType(); if (!fieldType.IsConstant() || field.IsExternal()) { return(node); // Ignore not constant fields. } // Get the initializer. Expression initializer = node.GetDefaultValue(); if (initializer == null) { Error(node, "constants must have initializers."); } // Don't allow multiple definitions. if (constants.ContainsKey(field)) { Error(node, "multiples definitions of a constant."); } // Store the constant. ConstantData data = new ConstantData(field, initializer); this.constants.Add(field, data); // Return the node. return(node); }