m3tools/src/M3Const.i3


 Copyright 1996-2000 Critical Mass, Inc. All rights reserved.    
 See file COPYRIGHT-CMASS for details. 

INTERFACE M3Const;

IMPORT M3ID, M3AST, M3Type, Target;

TYPE
  T = RECORD
    class : Class;
    info  : INTEGER;
    int   : Target.Int;
    float : Target.Float;
    type  : M3Type.T;
    ref   : REFANY;
  END;

  Class = {     (* other fields... *)
    Integer,    (* t.int == value,             t.type == TYPEOF(value) *)
    Float,      (* t.float == value,           t.type == TYPEOF(value) *)
    Enum,       (* t.info == ORD (value),      t.type == TYPEOF(value) *)
    Text,       (* t.ref == value:TEXT,        t.type == TYPEOF(value) *)
    Type,       (* t.type == value                                     *)
    Addr,       (* t.info == value,            t.type == TYPEOF(value) *)
    Set,        (* t.ref == value:M3SetVal.T,  t.type == TYPEOF(value) *)
    Record,     (* t.ref == value:M3RecVal.T,  t.type == TYPEOF(value) *)
    Array,      (* t.ref == value:M3ArrVal.T,  t.type == TYPEOF(value) *)
    Exception,  (* t.{info,ref} == {NodeIndex,M3AST} of decl           *)
    Proc,       (* t.{info,ref} == {NodeIndex,M3AST} of decl           *)
    Var,        (* t.{info,ref} == {NodeIndex,M3AST} of decl           *)
    GenericArg, (* t.{info,ref} == {NodeIndex,M3AST} of decl           *)
    Formal,     (* t.{info,ref} == {NodeIndex,M3AST} of decl           *)
    Module,     (* t.{info,ref} == {NodeIndex,M3AST} of decl           *)
    Builtin     (* t.info == ORD (M3Builtin.Proc)                      *)
  };

TYPE
  ImportOracle = OBJECT METHODS
    find (interface: M3ID.T): M3AST.T;
  END;

PROCEDURE Eval (ast: M3AST.T;  loc: M3AST.NodeIndex;  env: ImportOracle;
                VAR(*OUT*) val: T) RAISES {Error};
Evaluate and return in val the constant at node loc in ast using env to resolve any imported symbols.

PROCEDURE IsEQ (READONLY a, b: T): BOOLEAN;
Return a = b.

EXCEPTION Error (TEXT);

END M3Const.

interface M3ID is in:


interface M3AST is in: