(* Copyright (C) 1989, Digital Equipment Corporation *) (* All rights reserved. *) (* See the file COPYRIGHT for a full description. *) (* File: EnumElt.m3 *) (* Last modified on Fri Apr 20 06:45:16 1990 by muller *) (* modified on Sat Feb 10 21:29:56 1990 by kalsow *) MODULE EnumElt; IMPORT Type, String, Value, ValueRep, Expr, Error; IMPORT Fmt, Emit, EnumExpr, Temp, Wr; TYPE T = Value.T BRANDED OBJECT value : INTEGER; parent : Type.T; METHODS bind := Bind; typeCheck := Check; class := MyClass; fingerprint := FPrinter; load := Load; write := Write; select := ValueRep.NoDuplicates; declare0 := Declarer; declare1 := Compile; needsDecl := ValueRep.Never; toExpr := ToExpr; toType := ValueRep.NoType; END; PROCEDURE Create (name: String.T): T = VAR t: T; BEGIN t := NEW (T); ValueRep.Init (t, name); t.readonly := TRUE; t.value := 0; t.parent := NIL; RETURN t; END Create; PROCEDURE New (name: String.T; value: INTEGER; parent: Type.T): Value.T = VAR t: T; BEGIN t := Create (name); t.value := value; t.parent := parent; t.type := parent; RETURN t; END New; PROCEDURE OrdValue (v: Value.T): INTEGER = BEGIN RETURN NARROW (v, T).value; END OrdValue; PROCEDURE Bind (<*UNUSED*> t: T) = BEGIN (* no binding needed *) END Bind; PROCEDURE Check (<*UNUSED*> t: T) = BEGIN (* no checking needed *) END Check; PROCEDURE Load (t: T): Temp.T = BEGIN RETURN Temp.FromValue (t); END Load; PROCEDURE Write (t: T) = BEGIN Emit.OpI (" @ ", t.value); END Write; PROCEDURE Compile (<*UNUSED*> t: T) = BEGIN END Compile; PROCEDURE MyClass (<*UNUSED*> t: T): Value.Class = BEGIN RETURN Value.Class.Expr; END MyClass; PROCEDURE ToExpr (t: T): Expr.T = BEGIN RETURN EnumExpr.New (t.parent, t.value); END ToExpr; PROCEDURE Declarer (t: T): BOOLEAN = BEGIN Error.Str (t.name, "enumeration element declared??"); <* ASSERT FALSE *> RETURN FALSE; END Declarer; PROCEDURE FPrinter (t: T; <*UNUSED*> map: Type.Map; wr: Wr.T) = BEGIN Wr.PutText (wr, Fmt.Int (t.value)); END FPrinter; BEGIN END EnumElt.