INTERFACEIn this view, syntactic nodes are revealed to be object types with fields whose values are either lexical entities or references to other nodes in the AST.M3AST_AS_F ; IMPORT AST_LAST, M3AST, M3AST_LX, M3AST_AS, M3AST_PG, M3CPragma, M3CComment; IMPORT SeqM3AST_AS_IMPORTED, SeqM3AST_AS_Import_item, SeqM3AST_AS_Used_interface_id, SeqM3AST_AS_Used_def_id, SeqM3AST_AS_REVELATION, SeqM3AST_AS_DECL_REVL, SeqM3AST_AS_Const_decl, SeqM3AST_AS_TYPE_DECL, SeqM3AST_AS_Var_decl, SeqM3AST_AS_Exc_decl, SeqM3AST_AS_F_Interface_id, SeqM3AST_AS_Var_id, SeqM3AST_AS_Enum_id, SeqM3AST_AS_Field_id, SeqM3AST_AS_FORMAL_ID, SeqM3AST_AS_Qual_used_id, SeqM3AST_AS_Fields, SeqM3AST_AS_Method, SeqM3AST_AS_Override, SeqM3AST_AS_M3TYPE, SeqM3AST_AS_Formal_param, SeqM3AST_AS_CONS_ELEM, SeqM3AST_AS_EXP, SeqM3AST_AS_Actual, SeqM3AST_AS_Case, SeqM3AST_AS_STM, SeqM3AST_AS_Elsif, SeqM3AST_AS_Tcase, SeqM3AST_AS_Handler, SeqM3AST_AS_Binding, SeqM3AST_AS_RANGE_EXP; IMPORT M3AST_LX_F AS Previous_View;
TYPE NODE = AST_LAST.NODE OBJECT METHODS IsA_USED_ID(VAR (*out*) used_id: M3AST_AS.USED_ID ): BOOLEAN := NotA_USED_ID; IsA_ID(VAR (*out*) id: M3AST_AS.ID): BOOLEAN := NotA_ID; END; REVEAL M3AST.NODE <: NODE; TYPE ID = Previous_View.ID OBJECT OVERRIDES IsA_ID := A_ID; END; DEF_ID = M3AST_AS.ID OBJECT END; UNIT_ID = M3AST_AS.DEF_ID OBJECT END; Module_id = M3AST_AS.UNIT_ID OBJECT END; Interface_id = M3AST_AS.UNIT_ID OBJECT END; Interface_AS_id = M3AST_AS.DEF_ID OBJECT END; F_Interface_id = M3AST_AS.DEF_ID OBJECT END; TYPED_ID = M3AST_AS.DEF_ID OBJECT END; FORMAL_ID = M3AST_AS.TYPED_ID OBJECT END; F_Value_id = M3AST_AS.FORMAL_ID OBJECT END; F_Var_id = M3AST_AS.FORMAL_ID OBJECT END; F_Readonly_id = M3AST_AS.FORMAL_ID OBJECT END; Type_id = M3AST_AS.TYPED_ID OBJECT END; Const_id = M3AST_AS.TYPED_ID OBJECT END; Exc_id = M3AST_AS.TYPED_ID OBJECT END; Var_id = M3AST_AS.TYPED_ID OBJECT END; Proc_id = M3AST_AS.TYPED_ID OBJECT END; Enum_id = M3AST_AS.TYPED_ID OBJECT END; METHOD_OVERRIDE_ID = M3AST_AS.TYPED_ID OBJECT END; Method_id = M3AST_AS.METHOD_OVERRIDE_ID OBJECT END; Override_id = M3AST_AS.METHOD_OVERRIDE_ID OBJECT END; Field_id = M3AST_AS.TYPED_ID OBJECT END; For_id = M3AST_AS.TYPED_ID OBJECT END; Handler_id = M3AST_AS.TYPED_ID OBJECT END; Tcase_id = M3AST_AS.TYPED_ID OBJECT END; With_id = M3AST_AS.TYPED_ID OBJECT END; USED_ID = M3AST_AS.ID OBJECT OVERRIDES IsA_USED_ID := A_USED_ID; END; Used_interface_id = M3AST_AS.USED_ID OBJECT END; Used_def_id = M3AST_AS.USED_ID OBJECT END; Qual_used_id = M3AST_AS.SRC_NODE_C OBJECT as_intf_id: M3AST_AS.Used_interface_id_NULL := NIL; as_id: M3AST_AS.Used_def_id := NIL; END; REVEAL M3AST_AS.ID <: ID; M3AST_AS.DEF_ID <: DEF_ID; M3AST_AS.UNIT_ID <: UNIT_ID; M3AST_AS.Module_id <: Module_id; M3AST_AS.Interface_id <: Interface_id; M3AST_AS.Interface_AS_id <: Interface_AS_id; M3AST_AS.F_Interface_id <: F_Interface_id; M3AST_AS.FORMAL_ID <: FORMAL_ID; M3AST_AS.F_Value_id <: F_Value_id; M3AST_AS.F_Var_id <: F_Var_id; M3AST_AS.F_Readonly_id <: F_Readonly_id; M3AST_AS.Type_id <: Type_id; M3AST_AS.Const_id <: Const_id; M3AST_AS.Exc_id <: Exc_id; M3AST_AS.Var_id <: Var_id; M3AST_AS.Proc_id <: Proc_id; M3AST_AS.Enum_id <: Enum_id; M3AST_AS.METHOD_OVERRIDE_ID <: METHOD_OVERRIDE_ID; M3AST_AS.Method_id <: Method_id; M3AST_AS.Override_id <: Override_id; M3AST_AS.Field_id <: Field_id; M3AST_AS.For_id <: For_id; M3AST_AS.Handler_id <: Handler_id; M3AST_AS.Tcase_id <: Tcase_id; M3AST_AS.With_id <: With_id; M3AST_AS.USED_ID <: USED_ID; M3AST_AS.Used_interface_id <: Used_interface_id; M3AST_AS.Used_def_id <: Used_def_id; M3AST_AS.Qual_used_id <: Qual_used_id; TYPE Compilation_Unit = M3AST_AS.SRC_NODE_C OBJECT as_root: M3AST_AS.UNIT := NIL; lx_pragmas: M3CPragma.Store := NIL; lx_comments: M3CComment.Store := NIL; END; Unsafe = M3AST_AS.SRC_NODE_C OBJECT END; UNIT = M3AST_AS.SRC_NODE_C OBJECT as_id: M3AST_AS.UNIT_ID := NIL; END; UNIT_WITH_BODY = M3AST_AS.UNIT OBJECT as_import_s := SeqM3AST_AS_IMPORTED.Null; as_block: M3AST_AS.Block := NIL; END; UNIT_GEN_DEF = M3AST_AS.UNIT_WITH_BODY OBJECT as_id_s := SeqM3AST_AS_F_Interface_id.Null; END; Interface_gen_def = M3AST_AS.UNIT_GEN_DEF OBJECT vEXTERNAL_DECL: M3AST_PG.EXTERNAL_DECL := NIL; END; Module_gen_def = M3AST_AS.UNIT_GEN_DEF OBJECT END; UNIT_NORMAL = M3AST_AS.UNIT_WITH_BODY OBJECT as_unsafe: M3AST_AS.Unsafe_NULL := NIL; END; Interface = M3AST_AS.UNIT_NORMAL OBJECT vEXTERNAL_DECL: M3AST_PG.EXTERNAL_DECL := NIL; END; Module = M3AST_AS.UNIT_NORMAL OBJECT as_export_s := SeqM3AST_AS_Used_interface_id.Null; END; UNIT_GEN_INS = M3AST_AS.UNIT OBJECT as_unsafe: M3AST_AS.Unsafe_NULL := NIL; as_gen_id: M3AST_AS.Used_interface_id := NIL; as_id_s := SeqM3AST_AS_Used_interface_id.Null END; Interface_gen_ins = M3AST_AS.UNIT_GEN_INS OBJECT END; Module_gen_ins = M3AST_AS.UNIT_GEN_INS OBJECT as_export_s := SeqM3AST_AS_Used_interface_id.Null; END; IMPORTED = M3AST_AS.SRC_NODE_C OBJECT END; Simple_import = M3AST_AS.IMPORTED OBJECT as_import_item_s := SeqM3AST_AS_Import_item.Null; END; Import_item = M3AST_AS.SRC_NODE_C OBJECT as_intf_id: M3AST_AS.Used_interface_id := NIL; as_id: M3AST_AS.Interface_AS_id := NIL; END; From_import = M3AST_AS.IMPORTED OBJECT as_intf_id: M3AST_AS.Used_interface_id := NIL; as_id_s := SeqM3AST_AS_Used_def_id.Null; END; DECL_REVL = M3AST_AS.SRC_NODE_C OBJECT END; DECL = M3AST_AS.DECL_REVL OBJECT vEXTERNAL_DECL: M3AST_PG.EXTERNAL_DECL := NIL; END; Revelation_s = M3AST_AS.DECL_REVL OBJECT as_reveal_s := SeqM3AST_AS_REVELATION.Null; END; Const_decl_s = M3AST_AS.DECL OBJECT as_const_decl_s := SeqM3AST_AS_Const_decl.Null; END; Type_decl_s = M3AST_AS.DECL OBJECT as_type_decl_s := SeqM3AST_AS_TYPE_DECL.Null; END; Var_decl_s = M3AST_AS.DECL OBJECT as_var_decl_s := SeqM3AST_AS_Var_decl.Null; END; Exc_decl_s = M3AST_AS.DECL OBJECT as_exc_decl_s := SeqM3AST_AS_Exc_decl.Null; END; Const_decl = M3AST_AS.SRC_NODE_C OBJECT as_id: M3AST_AS.Const_id := NIL; as_type: M3AST_AS.M3TYPE_NULL := NIL; as_exp: M3AST_AS.EXP := NIL; END; TYPE_DECL = M3AST_AS.SRC_NODE_C OBJECT as_id: M3AST_AS.Type_id := NIL; as_type: M3AST_AS.M3TYPE := NIL; END; Subtype_decl = M3AST_AS.TYPE_DECL OBJECT END; Concrete_decl = M3AST_AS.TYPE_DECL OBJECT END; Var_decl = M3AST_AS.SRC_NODE_C OBJECT as_id_s := SeqM3AST_AS_Var_id.Null; as_type: M3AST_AS.M3TYPE_NULL := NIL; as_default: M3AST_AS.EXP_NULL := NIL; END; Exc_decl = M3AST_AS.SRC_NODE_C OBJECT as_id: M3AST_AS.Exc_id := NIL; as_type: M3AST_AS.M3TYPE_NULL := NIL; END; Proc_decl = M3AST_AS.DECL OBJECT as_id: M3AST_AS.Proc_id := NIL; pg_inline: M3AST_PG.Inline_NULL := NIL; as_type: M3AST_AS.Procedure_type := NIL; as_body: M3AST_AS.Block_NULL := NIL; END; REVELATION = M3AST_AS.SRC_NODE_C OBJECT as_qual_id: M3AST_AS.Qual_used_id := NIL; as_type: M3AST_AS.M3TYPE := NIL; END; Subtype_reveal = M3AST_AS.REVELATION OBJECT END; Concrete_reveal = M3AST_AS.REVELATION OBJECT END; REVEAL M3AST_AS.Compilation_Unit <: Compilation_Unit; M3AST_AS.UNIT <: UNIT; M3AST_AS.UNIT_WITH_BODY <: UNIT_WITH_BODY; M3AST_AS.UNIT_GEN_DEF <: UNIT_GEN_DEF; M3AST_AS.UNIT_NORMAL <: UNIT_NORMAL; M3AST_AS.UNIT_GEN_INS <: UNIT_GEN_INS; M3AST_AS.Interface_gen_def <: Interface_gen_def; M3AST_AS.Module_gen_def <: Module_gen_def; M3AST_AS.Interface <: Interface; M3AST_AS.Module <: Module; M3AST_AS.Interface_gen_ins <: Interface_gen_ins; M3AST_AS.Module_gen_ins <: Module_gen_ins; M3AST_AS.Unsafe <: Unsafe; M3AST_AS.IMPORTED <: IMPORTED; M3AST_AS.Import_item <: Import_item; M3AST_AS.Simple_import <: Simple_import; M3AST_AS.From_import <: From_import; M3AST_AS.DECL_REVL <: DECL_REVL; M3AST_AS.DECL <: DECL; M3AST_AS.Revelation_s <: Revelation_s; M3AST_AS.Const_decl_s <: Const_decl_s; M3AST_AS.Type_decl_s <: Type_decl_s; M3AST_AS.Var_decl_s <: Var_decl_s; M3AST_AS.Exc_decl_s <: Exc_decl_s; M3AST_AS.Const_decl <: Const_decl; M3AST_AS.Var_decl <: Var_decl; M3AST_AS.Exc_decl <: Exc_decl; M3AST_AS.TYPE_DECL <: TYPE_DECL; M3AST_AS.Subtype_decl <: Subtype_decl; M3AST_AS.Concrete_decl <: Concrete_decl; M3AST_AS.Proc_decl <: Proc_decl; M3AST_AS.REVELATION <: REVELATION; M3AST_AS.Subtype_reveal <: Subtype_reveal; M3AST_AS.Concrete_reveal <: Concrete_reveal; TYPE M3TYPE = M3AST_AS.EXP_TYPE OBJECT END; Named_type = M3AST_AS.M3TYPE OBJECT as_qual_id: M3AST_AS.Qual_used_id := NIL; END; TYPE_SPEC = M3AST_AS.M3TYPE OBJECT END; INT_TYPE = M3AST_AS.TYPE_SPEC OBJECT END; Integer_type = M3AST_AS.INT_TYPE OBJECT END; Longint_type = M3AST_AS.INT_TYPE OBJECT END; WideChar_type = M3AST_AS.INT_TYPE OBJECT END; FLOAT_TYPE = M3AST_AS.TYPE_SPEC OBJECT END; Real_type = M3AST_AS.FLOAT_TYPE OBJECT END; LongReal_type = M3AST_AS.FLOAT_TYPE OBJECT END; Extended_type = M3AST_AS.FLOAT_TYPE OBJECT END; Null_type = M3AST_AS.TYPE_SPEC OBJECT END; RefAny_type = M3AST_AS.TYPE_SPEC OBJECT END; Address_type = M3AST_AS.TYPE_SPEC OBJECT END; Root_type = M3AST_AS.TYPE_SPEC OBJECT as_trace_mode: M3AST_AS.Untraced_NULL := NIL; END; Array_type = M3AST_AS.TYPE_SPEC OBJECT as_indextype_s := SeqM3AST_AS_M3TYPE.Null; as_elementtype: M3AST_AS.M3TYPE := NIL; END; Enumeration_type = M3AST_AS.TYPE_SPEC OBJECT as_id_s := SeqM3AST_AS_Enum_id.Null; END; Set_type = M3AST_AS.TYPE_SPEC OBJECT as_type: M3AST_AS.M3TYPE := NIL; END; Subrange_type = M3AST_AS.TYPE_SPEC OBJECT as_range: M3AST_AS.Range := NIL; END; Packed_type = M3AST_AS.TYPE_SPEC OBJECT as_exp: M3AST_AS.EXP := NIL; as_type: M3AST_AS.M3TYPE := NIL; END; Record_type = M3AST_AS.TYPE_SPEC OBJECT as_fields_s := SeqM3AST_AS_Fields.Null; END; BRANDED_TYPE = M3AST_AS.TYPE_SPEC OBJECT as_brand: M3AST_AS.Brand_NULL := NIL; END; Brand = M3AST_AS.SRC_NODE_C OBJECT as_exp: M3AST_AS.EXP_NULL := NIL; END; Untraced = M3AST_AS.SRC_NODE_C OBJECT END; Ref_type = M3AST_AS.BRANDED_TYPE OBJECT as_trace_mode: M3AST_AS.Untraced_NULL := NIL; as_type: M3AST_AS.M3TYPE := NIL; END; Object_type = M3AST_AS.BRANDED_TYPE OBJECT as_ancestor: M3AST_AS.M3TYPE_NULL := NIL; (* will be void if Untraced *) as_fields_s := SeqM3AST_AS_Fields.Null; as_method_s := SeqM3AST_AS_Method.Null; as_override_s := SeqM3AST_AS_Override.Null; END; Fields = M3AST_AS.SRC_NODE_C OBJECT as_id_s := SeqM3AST_AS_Field_id.Null; as_type: M3AST_AS.M3TYPE_NULL := NIL; as_default: M3AST_AS.EXP_NULL := NIL; END; METHOD_OVERRIDE = M3AST_AS.SRC_NODE_C OBJECT as_id: M3AST_AS.METHOD_OVERRIDE_ID := NIL; as_default: M3AST_AS.EXP_NULL := NIL; (* not NIL for Override *) END; Method = M3AST_AS.METHOD_OVERRIDE OBJECT as_type: M3AST_AS.Procedure_type := NIL; END; Override = M3AST_AS.METHOD_OVERRIDE OBJECT END; Procedure_type = M3AST_AS.TYPE_SPEC OBJECT as_formal_param_s := SeqM3AST_AS_Formal_param.Null; as_result_type: M3AST_AS.M3TYPE_NULL := NIL; as_raises: M3AST_AS.RAISEES_NULL := NIL; END; Formal_param = M3AST_AS.SRC_NODE_C OBJECT as_id_s := SeqM3AST_AS_FORMAL_ID.Null; as_formal_type: M3AST_AS.M3TYPE_NULL := NIL; as_default: M3AST_AS.EXP_NULL := NIL; END; RAISEES = M3AST_AS.SRC_NODE_C OBJECT END; Raisees_some = M3AST_AS.RAISEES OBJECT as_raisees_s := SeqM3AST_AS_Qual_used_id.Null; END; Raisees_any = M3AST_AS.RAISEES OBJECT END; RANGE_EXP = M3AST_AS.SRC_NODE_C OBJECT END; Range_EXP = M3AST_AS.RANGE_EXP OBJECT as_exp: M3AST_AS.EXP := NIL; END; Range = M3AST_AS.RANGE_EXP OBJECT as_exp1, as_exp2: M3AST_AS.EXP := NIL; END; Opaque_type = M3AST_AS.TYPE_SPEC OBJECT as_type: M3AST_AS.M3TYPE := NIL; END; REVEAL M3AST_AS.M3TYPE <: M3TYPE; M3AST_AS.Named_type <: Named_type; M3AST_AS.TYPE_SPEC <: TYPE_SPEC; M3AST_AS.INT_TYPE <: INT_TYPE; M3AST_AS.Integer_type <: Integer_type; M3AST_AS.Longint_type <: Longint_type; M3AST_AS.WideChar_type <: WideChar_type; M3AST_AS.FLOAT_TYPE <: FLOAT_TYPE; M3AST_AS.Real_type <: Real_type; M3AST_AS.LongReal_type <: LongReal_type; M3AST_AS.Extended_type <: Extended_type; M3AST_AS.Null_type <: Null_type; M3AST_AS.RefAny_type <: RefAny_type; M3AST_AS.Address_type <: Address_type; M3AST_AS.Root_type <: Root_type; M3AST_AS.Array_type <: Array_type; M3AST_AS.Enumeration_type <: Enumeration_type; M3AST_AS.Set_type <: Set_type; M3AST_AS.Subrange_type <: Subrange_type; M3AST_AS.Packed_type <: Packed_type; M3AST_AS.Record_type <: Record_type; M3AST_AS.BRANDED_TYPE <: BRANDED_TYPE; M3AST_AS.Brand <: Brand; M3AST_AS.Untraced <: Untraced; M3AST_AS.Ref_type <: Ref_type; M3AST_AS.Object_type <: Object_type; M3AST_AS.Fields <: Fields; M3AST_AS.METHOD_OVERRIDE <: METHOD_OVERRIDE; M3AST_AS.Method <: Method; M3AST_AS.Override <: Override; M3AST_AS.Procedure_type <: Procedure_type; M3AST_AS.Formal_param <: Formal_param; M3AST_AS.RAISEES <: RAISEES; M3AST_AS.Raisees_some <: Raisees_some; M3AST_AS.Raisees_any <: Raisees_any; M3AST_AS.RANGE_EXP <: RANGE_EXP; M3AST_AS.Range_EXP <: Range_EXP; M3AST_AS.Range <: Range; M3AST_AS.Opaque_type <: Opaque_type; TYPE EXP_TYPE = M3AST_AS.SRC_NODE_C OBJECT END; EXP = M3AST_AS.EXP_TYPE OBJECT END; LITERAL = M3AST_AS.EXP OBJECT lx_litrep: M3AST_LX.Literal_rep := NIL; END; NUMERIC_LITERAL = M3AST_LX.LITERAL OBJECT END; Integer_literal = M3AST_AS.NUMERIC_LITERAL OBJECT END; Longint_literal = M3AST_AS.NUMERIC_LITERAL OBJECT END; Real_literal = M3AST_AS.NUMERIC_LITERAL OBJECT END; LongReal_literal = M3AST_AS.NUMERIC_LITERAL OBJECT END; Extended_literal = M3AST_AS.NUMERIC_LITERAL OBJECT END; Nil_literal = M3AST_LX.LITERAL OBJECT END; Char_literal = M3AST_LX.LITERAL OBJECT END; WideChar_literal = M3AST_LX.LITERAL OBJECT END; Text_literal = M3AST_LX.LITERAL OBJECT END; WideText_literal = M3AST_LX.LITERAL OBJECT END; Exp_used_id = M3AST_AS.EXP OBJECT vUSED_ID: M3AST_AS.USED_ID := NIL (* MULTIPLE INHERITANCE *) OVERRIDES IsA_ID := A_Exp_ID; IsA_USED_ID := A_Exp_USED_ID; END; Constructor = M3AST_AS.EXP OBJECT as_type: M3AST_AS.M3TYPE := NIL; as_element_s := SeqM3AST_AS_CONS_ELEM.Null; as_propagate: M3AST_AS.Propagate_NULL := NIL; END; CONS_ELEM = M3AST_AS.SRC_NODE_C OBJECT END; RANGE_EXP_elem = M3AST_AS.CONS_ELEM OBJECT as_range_exp: M3AST_AS.RANGE_EXP := NIL; END; Actual_elem = M3AST_AS.CONS_ELEM OBJECT as_actual: M3AST_AS.Actual := NIL; END; Propagate = M3AST_AS.SRC_NODE_C OBJECT END; BINARY = M3AST_AS.EXP OBJECT as_exp1: M3AST_AS.EXP := NIL; as_exp2: M3AST_AS.EXP := NIL; END; Plus = M3AST_AS.BINARY OBJECT END; Minus = M3AST_AS.BINARY OBJECT END; Times = M3AST_AS.BINARY OBJECT END; Rdiv = M3AST_AS.BINARY OBJECT END; Textcat = M3AST_AS.BINARY OBJECT END; Div = M3AST_AS.BINARY OBJECT END; Mod = M3AST_AS.BINARY OBJECT END; Eq = M3AST_AS.BINARY OBJECT END; Ne = M3AST_AS.BINARY OBJECT END; Gt = M3AST_AS.BINARY OBJECT END; Lt = M3AST_AS.BINARY OBJECT END; Ge = M3AST_AS.BINARY OBJECT END; Le = M3AST_AS.BINARY OBJECT END; And = M3AST_AS.BINARY OBJECT END; Or = M3AST_AS.BINARY OBJECT END; In = M3AST_AS.BINARY OBJECT END; UNARY = M3AST_AS.EXP OBJECT as_exp: M3AST_AS.EXP := NIL; END; Not = M3AST_AS.UNARY OBJECT END; Unaryplus = M3AST_AS.UNARY OBJECT END; Unaryminus = M3AST_AS.UNARY OBJECT END; Deref = M3AST_AS.UNARY OBJECT END; Select = M3AST_AS.EXP OBJECT as_exp: M3AST_AS.EXP; as_id: M3AST_AS.Exp_used_id; END; Call = M3AST_AS.EXP OBJECT as_callexp: M3AST_AS.EXP := NIL; as_param_s := SeqM3AST_AS_Actual.Null; END; NEWCall = M3AST_AS.Call OBJECT END; (* syntactically identical to a Call, but separated to allow the desugaring of method bindings to be represented later as an attribute. *) Actual = M3AST_AS.SRC_NODE_C OBJECT as_id: M3AST_AS.EXP_NULL := NIL; as_exp_type: M3AST_AS.EXP_TYPE := NIL; END; Index = M3AST_AS.EXP OBJECT as_array: M3AST_AS.EXP := NIL; as_exp_s := SeqM3AST_AS_EXP.Null; END; REVEAL M3AST_AS.EXP_TYPE <: EXP_TYPE; M3AST_AS.EXP <: EXP; M3AST_AS.Exp_used_id <: Exp_used_id; M3AST_LX.LITERAL <: LITERAL; M3AST_AS.NUMERIC_LITERAL <: NUMERIC_LITERAL; M3AST_AS.Integer_literal <: Integer_literal; M3AST_AS.Longint_literal <: Longint_literal; M3AST_AS.Real_literal <: Real_literal; M3AST_AS.LongReal_literal <: LongReal_literal; M3AST_AS.Extended_literal <: Extended_literal; M3AST_AS.Nil_literal <: Nil_literal; M3AST_AS.Char_literal <: Char_literal; M3AST_AS.WideChar_literal <: WideChar_literal; M3AST_AS.Text_literal <: Text_literal; M3AST_AS.WideText_literal <: WideText_literal; M3AST_AS.Constructor <: Constructor; M3AST_AS.CONS_ELEM <: CONS_ELEM; M3AST_AS.RANGE_EXP_elem <: RANGE_EXP_elem; M3AST_AS.Actual_elem <: Actual_elem; M3AST_AS.Propagate <: Propagate; M3AST_AS.BINARY <: BINARY; M3AST_AS.Plus <: Plus; M3AST_AS.Minus <: Minus; M3AST_AS.Times <: Times; M3AST_AS.Rdiv <: Rdiv; M3AST_AS.Textcat <: Textcat; M3AST_AS.Div <: Div; M3AST_AS.Mod <: Mod; M3AST_AS.Eq <: Eq; M3AST_AS.Ne <: Ne; M3AST_AS.Gt <: Gt; M3AST_AS.Lt <: Lt; M3AST_AS.Ge <: Ge; M3AST_AS.And <: And; M3AST_AS.Or <: Or; M3AST_AS.In <: In; M3AST_AS.Select <: Select; M3AST_AS.UNARY <: UNARY; M3AST_AS.Not <: Not; M3AST_AS.Unaryplus <: Unaryplus; M3AST_AS.Unaryminus <: Unaryminus; M3AST_AS.Deref <: Deref; M3AST_AS.Call <: Call; M3AST_AS.NEWCall <: NEWCall; M3AST_AS.Actual <: Actual; M3AST_AS.Index <: Index; TYPE STM = M3AST_AS.SRC_NODE_C OBJECT END; STM_WSS = M3AST_AS.STM OBJECT as_stm_s := SeqM3AST_AS_STM.Null; END; SUBSTM_WSS = M3AST_AS.SRC_NODE_C OBJECT as_stm_s := SeqM3AST_AS_STM.Null; END; Assign_st = M3AST_AS.STM OBJECT as_lhs_exp: M3AST_AS.EXP := NIL; as_rhs_exp: M3AST_AS.EXP := NIL; END; Call_st = M3AST_AS.STM OBJECT as_call: M3AST_AS.Call := NIL; END; Case_st = M3AST_AS.STM OBJECT as_exp: M3AST_AS.EXP := NIL; as_case_s := SeqM3AST_AS_Case.Null; as_else: M3AST_AS.Else_stm_NULL := NIL; END; Case = M3AST_AS.SUBSTM_WSS OBJECT as_case_label_s := SeqM3AST_AS_RANGE_EXP.Null; END; Else_stm = M3AST_AS.SUBSTM_WSS OBJECT END; Exit_st = M3AST_AS.STM OBJECT END; Eval_st = M3AST_AS.STM OBJECT as_exp: M3AST_AS.EXP := NIL; END; For_st = M3AST_AS.STM_WSS OBJECT as_id: M3AST_AS.For_id := NIL; as_from: M3AST_AS.EXP := NIL; as_to: M3AST_AS.EXP := NIL; as_by: M3AST_AS.By_NULL := NIL; END; By = M3AST_AS.SRC_NODE_C OBJECT as_exp: M3AST_AS.EXP := NIL; END; If_st = M3AST_AS.STM_WSS OBJECT as_exp: M3AST_AS.EXP := NIL; as_elsif_s := SeqM3AST_AS_Elsif.Null; as_else: M3AST_AS.Else_stm_NULL := NIL; END; Elsif = M3AST_AS.SUBSTM_WSS OBJECT as_exp: M3AST_AS.EXP := NIL; END; Lock_st = M3AST_AS.STM_WSS OBJECT as_exp: M3AST_AS.EXP := NIL; END; Loop_st = M3AST_AS.STM_WSS OBJECT END; Return_st = M3AST_AS.STM OBJECT as_exp: M3AST_AS.EXP_NULL := NIL; END; Repeat_st = M3AST_AS.STM_WSS OBJECT as_exp: M3AST_AS.EXP := NIL; END; Raise_st = M3AST_AS.STM OBJECT as_qual_id: M3AST_AS.Qual_used_id := NIL; as_exp_void: M3AST_AS.EXP_NULL := NIL; END; Try_st = M3AST_AS.STM_WSS OBJECT as_try_tail: M3AST_AS.TRY_TAIL := NIL; END; TRY_TAIL = M3AST_AS.SUBSTM_WSS OBJECT END; Try_finally = M3AST_AS.TRY_TAIL OBJECT END; Try_except = M3AST_AS.TRY_TAIL OBJECT as_handler_s := SeqM3AST_AS_Handler.Null; as_else: M3AST_AS.Else_stm_NULL := NIL; END; Handler = M3AST_AS.SUBSTM_WSS OBJECT as_qual_id_s := SeqM3AST_AS_Qual_used_id.Null; as_id: M3AST_AS.Handler_id_NULL := NIL; END; Typecase_st = M3AST_AS.STM OBJECT as_exp: M3AST_AS.EXP := NIL; as_tcase_s := SeqM3AST_AS_Tcase.Null; as_else: M3AST_AS.Else_stm_NULL := NIL; END; Tcase = M3AST_AS.SUBSTM_WSS OBJECT as_type_s := SeqM3AST_AS_M3TYPE.Null; as_id: M3AST_AS.Tcase_id_NULL := NIL; END; While_st = M3AST_AS.STM_WSS OBJECT as_exp: M3AST_AS.EXP := NIL; END; With_st = M3AST_AS.STM_WSS OBJECT as_binding_s := SeqM3AST_AS_Binding.Null; END; Binding = M3AST_AS.SRC_NODE_C OBJECT as_id: M3AST_AS.With_id := NIL; as_exp: M3AST_AS.EXP := NIL; END; Block = M3AST_AS.STM_WSS OBJECT as_decl_s := SeqM3AST_AS_DECL_REVL.Null; END; REVEAL M3AST_AS.STM <: STM; M3AST_AS.STM_WSS <: STM_WSS; M3AST_AS.SUBSTM_WSS <: SUBSTM_WSS; M3AST_AS.Assign_st <: Assign_st; M3AST_AS.Call_st <: Call_st; M3AST_AS.Case_st <: Case_st; M3AST_AS.Case <: Case; M3AST_AS.Else_stm <: Else_stm; M3AST_AS.Exit_st <: Exit_st; M3AST_AS.Eval_st <: Eval_st; M3AST_AS.For_st <: For_st; M3AST_AS.By <: By; M3AST_AS.If_st <: If_st; M3AST_AS.Elsif <: Elsif; M3AST_AS.Lock_st <: Lock_st; M3AST_AS.Loop_st <: Loop_st; M3AST_AS.Return_st <: Return_st; M3AST_AS.Repeat_st <: Repeat_st; M3AST_AS.Raise_st <: Raise_st; M3AST_AS.Try_st <: Try_st; M3AST_AS.TRY_TAIL <: TRY_TAIL; M3AST_AS.Try_finally <: Try_finally; M3AST_AS.Try_except <: Try_except; M3AST_AS.Handler <: Handler; M3AST_AS.Typecase_st <: Typecase_st; M3AST_AS.Tcase <: Tcase; M3AST_AS.While_st <: While_st; M3AST_AS.With_st <: With_st; M3AST_AS.Binding <: Binding; M3AST_AS.Block <: Block; TYPE Bad_EXP = M3AST_AS.EXP OBJECT END; Bad_M3TYPE = M3AST_AS.M3TYPE OBJECT END; Bad_STM = M3AST_AS.STM OBJECT END; REVEAL M3AST_AS.Bad_EXP <: Bad_EXP; M3AST_AS.Bad_M3TYPE <: Bad_M3TYPE; M3AST_AS.Bad_STM <: Bad_STM;Pass throughs; everything from
M3AST_LX
except for LITERAL
which was actually defined here.
TYPE SRC_NODE = Previous_View.SRC_NODE; SRC_NODE_C = Previous_View.SRC_NODE_C; Whitespace = Previous_View.Whitespace; Comment = Previous_View.Comment; Pragma = Previous_View.Pragma; BadChar = Previous_View.BadChar; Token = Previous_View.Token; PROCEDURE NotA_USED_ID(n: NODE; VAR (*out*) used_id: M3AST_AS.USED_ID): BOOLEAN; PROCEDURE A_USED_ID(n: NODE; VAR (*out*) used_id: M3AST_AS.USED_ID): BOOLEAN; PROCEDURE A_Exp_USED_ID(n: NODE; VAR (*out*) used_id: M3AST_AS.USED_ID): BOOLEAN; PROCEDURE NotA_ID(n: NODE; VAR (*out*) id: M3AST_AS.ID): BOOLEAN; PROCEDURE A_ID(n: NODE; VAR (*out*) id: M3AST_AS.ID): BOOLEAN; PROCEDURE A_Exp_ID(n: NODE; VAR (*out*) id: M3AST_AS.ID): BOOLEAN; END M3AST_AS_F.