for review: hand define typeclass_info

Tyson Dowd trd at cs.mu.OZ.AU
Wed Oct 21 14:45:30 AEST 1998


Hi,

Zoltan mentioned that there was no support in the runtime for
manipulating typeclass_infos (e.g. copying them).  This is a
start on getting it working.

Zoltan and/or DJ might want to look at this.

===================================================================


Estimated hours taken: 3

Define the types typeclass_info and base_typeclass_info by hand,
so that they can be recognized as special cases in the runtime
system.  

At the same time, move the definitions of type_info and base_type_info
back into private_builtin.m.  They had been placed in
runtime/mercury_bootstrap for bootstrapping purposes, but have now been
bootstrapped (and will be replaced by typeclass_info which will undergo
the same process).

compiler/base_type_layout.m:
	Add typeclass_info to the special cases.

compiler/type_util.m:
	Turn off base_type_info generation for typeclass_info
	and base_typeclass_info.

library/private_builtin.m:
	Move the definitions of type_info and base_type_info to here.

runtime/mercury_bootstrap.c:
	Add handwritten definitions of the typeclass_info and
	base_typeclass_info types.

runtime/mercury_type_info.c:
runtime/mercury_type_info.h:
	Rename all the TYPELAYOUT_*_VALUE #defines as
	MR_TYPELAYOUT_*_VALUE enum values.  Leave forwarding
	definitions for backwards compatability (temporary).

	Add MR_TYPELAYOUT_TYPECLASSINFO_VALUE to the MR_TypeLayoutValue.
	Add MR_DATAREP_TYPECLASSINFO.
	

Index: compiler/base_type_layout.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/base_type_layout.m,v
retrieving revision 1.34
diff -u -r1.34 base_type_layout.m
--- base_type_layout.m	1998/09/10 06:50:53	1.34
+++ base_type_layout.m	1998/10/14 07:08:45
@@ -66,7 +66,8 @@
 % Tag 0 - 	CONST   Word = 9	- array
 % Tag 0 - 	CONST   Word = 10	- type_info
 % Tag 0 - 	CONST   Word = 11	- c_pointer
-% 			Words 12 - 1024 reserved for future use
+% Tag 0 - 	CONST   Word = 12	- type_class_info
+% 			Words 13 - 1024 reserved for future use
 % Tag 0 - 	CONST   Word = 1024+	- constant(s) 
 % 					  word is pointer to enum
 % 					  vector.
Index: compiler/type_util.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/type_util.m,v
retrieving revision 1.59
diff -u -r1.59 type_util.m
--- type_util.m	1998/09/18 02:20:35	1.59
+++ type_util.m	1998/10/14 07:49:25
@@ -262,6 +262,10 @@
 	mercury_private_builtin_module(PrivateBuiltin).
 type_id_is_hand_defined(qualified(PrivateBuiltin, "base_type_info") - 1) :-
 	mercury_private_builtin_module(PrivateBuiltin).
+type_id_is_hand_defined(qualified(PrivateBuiltin, "typeclass_info") - 1) :-
+	mercury_private_builtin_module(PrivateBuiltin).
+type_id_is_hand_defined(qualified(PrivateBuiltin, "base_typeclass_info") - 1) :-
+	mercury_private_builtin_module(PrivateBuiltin).
 
 %-----------------------------------------------------------------------------%
 
Index: library/private_builtin.m
===================================================================
RCS file: /home/mercury1/repository/mercury/library/private_builtin.m,v
retrieving revision 1.9
diff -u -r1.9 private_builtin.m
--- private_builtin.m	1998/09/21 06:30:22	1.9
+++ private_builtin.m	1998/10/14 07:53:13
@@ -1300,6 +1300,152 @@
 
 ").
 
+
+	% The definitions for base_type_info/1 and type_info/1.
+
+:- pragma c_code("
+
+Define_extern_entry(mercury____Unify___private_builtin__type_info_1_0);
+Define_extern_entry(mercury____Index___private_builtin__type_info_1_0);
+Define_extern_entry(mercury____Compare___private_builtin__type_info_1_0);
+
+extern const struct
+	mercury_data_private_builtin__base_type_layout_type_info_1_struct 
+	mercury_data_private_builtin__base_type_layout_type_info_1;
+extern const struct
+	mercury_data_private_builtin__base_type_functors_type_info_1_struct
+	mercury_data_private_builtin__base_type_functors_type_info_1;
+
+	/*
+	** For most purposes, base_type_info can be treated just like
+	** type_info.  The code that handles type_infos can also handle
+	** base_type_infos.
+	*/
+
+MR_STATIC_CODE_CONST struct
+mercury_data_private_builtin__base_type_info_base_type_info_1_struct {
+	Integer f1;
+	Code *f2;
+	Code *f3;
+	Code *f4;
+	const Word *f5;
+	const Word *f6;
+	const Word *f7;
+	const Word *f8;
+} mercury_data_private_builtin__base_type_info_base_type_info_1 = {
+	((Integer) 1),
+	MR_MAYBE_STATIC_CODE(ENTRY(
+		mercury____Unify___private_builtin__type_info_1_0)),
+	MR_MAYBE_STATIC_CODE(ENTRY(
+		mercury____Index___private_builtin__type_info_1_0)),
+	MR_MAYBE_STATIC_CODE(ENTRY(
+		mercury____Compare___private_builtin__type_info_1_0)),
+	(const Word *) &
+		mercury_data_private_builtin__base_type_layout_type_info_1,
+	(const Word *) &
+		mercury_data_private_builtin__base_type_functors_type_info_1,
+	(const Word *) string_const(""private_builtin"", 15),
+	(const Word *) string_const(""base_type_info"", 14)
+};
+
+MR_STATIC_CODE_CONST struct
+mercury_data_private_builtin__base_type_info_type_info_1_struct {
+	Integer f1;
+	Code *f2;
+	Code *f3;
+	Code *f4;
+	const Word *f5;
+	const Word *f6;
+	const Word *f7;
+	const Word *f8;
+} mercury_data_private_builtin__base_type_info_type_info_1 = {
+	((Integer) 1),
+	MR_MAYBE_STATIC_CODE(ENTRY(
+		mercury____Unify___private_builtin__type_info_1_0)),
+	MR_MAYBE_STATIC_CODE(ENTRY(
+		mercury____Index___private_builtin__type_info_1_0)),
+	MR_MAYBE_STATIC_CODE(ENTRY(
+		mercury____Compare___private_builtin__type_info_1_0)),
+	(const Word *) &
+		mercury_data_private_builtin__base_type_layout_type_info_1,
+	(const Word *) &
+		mercury_data_private_builtin__base_type_functors_type_info_1,
+	(const Word *) string_const(""private_builtin"", 15),
+	(const Word *) string_const(""type_info"", 9)
+};
+
+
+const struct mercury_data_private_builtin__base_type_layout_type_info_1_struct {
+	TYPE_LAYOUT_FIELDS
+} mercury_data_private_builtin__base_type_layout_type_info_1 = {
+	make_typelayout_for_all_tags(TYPELAYOUT_CONST_TAG, 
+		mkbody(MR_TYPELAYOUT_TYPEINFO_VALUE))
+};
+
+const struct mercury_data_private_builtin__base_type_functors_type_info_1_struct {
+	Integer f1;
+} mercury_data_private_builtin__base_type_functors_type_info_1 = {
+	MR_TYPEFUNCTORS_SPECIAL
+};
+
+
+MR_MAKE_STACK_LAYOUT_ENTRY(mercury____Unify___private_builtin__type_info_1_0)
+MR_MAKE_STACK_LAYOUT_ENTRY(mercury____Index___private_builtin__type_info_1_0)
+MR_MAKE_STACK_LAYOUT_ENTRY(mercury____Compare___private_builtin__type_info_1_0)
+BEGIN_MODULE(type_info_module)
+	init_entry_sl(mercury____Unify___private_builtin__type_info_1_0);
+	init_entry_sl(mercury____Index___private_builtin__type_info_1_0);
+	init_entry_sl(mercury____Compare___private_builtin__type_info_1_0);
+BEGIN_CODE
+Define_entry(mercury____Unify___private_builtin__type_info_1_0);
+{
+	/*
+	** Unification for type_info.
+	**
+	** The two inputs are in the registers named by unify_input[12].
+	** The success/failure indication should go in unify_output.
+	*/
+	int comp;
+	save_transient_registers();
+	comp = MR_compare_type_info(unify_input1, unify_input2);
+	restore_transient_registers();
+	unify_output = (comp == COMPARE_EQUAL);
+	proceed();
+}
+
+Define_entry(mercury____Index___private_builtin__type_info_1_0);
+	index_output = -1;
+	proceed();
+
+Define_entry(mercury____Compare___private_builtin__type_info_1_0);
+{
+	/*
+	** Comparison for type_info:
+	**
+	** The two inputs are in the registers named by compare_input[12].
+	** The result should go in compare_output.
+	*/
+	int comp;
+	save_transient_registers();
+	comp = MR_compare_type_info(unify_input1, unify_input2);
+	restore_transient_registers();
+	compare_output = comp;
+	proceed();
+}
+END_MODULE
+
+/* Ensure that the initialization code for the above module gets run. */
+/*
+INIT sys_init_type_info_module
+*/
+extern ModuleFunc type_info_module;
+void sys_init_type_info_module(void); /* suppress gcc -Wmissing-decl warning */
+void sys_init_type_info_module(void) {
+	type_info_module();
+}
+
+").
+
 :- pragma c_code(table_new_ans_slot(T::in, Slot::out), 
 		will_not_call_mercury, "
 	Word ListNode;
Index: runtime/mercury_bootstrap.c
===================================================================
RCS file: /home/mercury1/repository/mercury/runtime/mercury_bootstrap.c,v
retrieving revision 1.4
diff -u -r1.4 mercury_bootstrap.c
--- mercury_bootstrap.c	1998/08/06 07:59:07	1.4
+++ mercury_bootstrap.c	1998/10/21 04:35:06
@@ -22,24 +22,25 @@
 #include "mercury_imp.h"
 
 /*
-** Bootstrapping the hand-definition of private_builtin:type_info/1
+** Bootstrapping the hand-definition of private_builtin:typeclass_info/1
+** and private_builtin:base_typeclass_info/1
 ** means that the stage 1 compiler has a compiler generated definition,
 ** while stage 2 doesn't.
 */
 
-Define_extern_entry(mercury____Unify___private_builtin__type_info_1_0);
-Define_extern_entry(mercury____Index___private_builtin__type_info_1_0);
-Define_extern_entry(mercury____Compare___private_builtin__type_info_1_0);
+Define_extern_entry(mercury____Unify___private_builtin__typeclass_info_1_0);
+Define_extern_entry(mercury____Index___private_builtin__typeclass_info_1_0);
+Define_extern_entry(mercury____Compare___private_builtin__typeclass_info_1_0);
 
 extern const struct
-	mercury_data_private_builtin__base_type_layout_type_info_1_struct 
-	mercury_data_private_builtin__base_type_layout_type_info_1;
+	mercury_data_private_builtin__base_type_layout_typeclass_info_1_struct 
+	mercury_data_private_builtin__base_type_layout_typeclass_info_1;
 extern const struct
-	mercury_data_private_builtin__base_type_functors_type_info_1_struct
-	mercury_data_private_builtin__base_type_functors_type_info_1;
+	mercury_data_private_builtin__base_type_functors_typeclass_info_1_struct
+	mercury_data_private_builtin__base_type_functors_typeclass_info_1;
 
 MR_STATIC_CODE_CONST struct
-mercury_data_private_builtin__base_type_info_type_info_1_struct {
+mercury_data_private_builtin__base_type_info_base_typeclass_info_1_struct {
 	Integer f1;
 	Code *f2;
 	Code *f3;
@@ -48,89 +49,100 @@
 	const Word *f6;
 	const Word *f7;
 	const Word *f8;
-} mercury_data_private_builtin__base_type_info_type_info_1 = {
+} mercury_data_private_builtin__base_type_info_base_typeclass_info_1 = {
 	((Integer) 1),
 	MR_MAYBE_STATIC_CODE(ENTRY(
-		mercury____Unify___private_builtin__type_info_1_0)),
+		mercury____Unify___private_builtin__typeclass_info_1_0)),
 	MR_MAYBE_STATIC_CODE(ENTRY(
-		mercury____Index___private_builtin__type_info_1_0)),
+		mercury____Index___private_builtin__typeclass_info_1_0)),
 	MR_MAYBE_STATIC_CODE(ENTRY(
-		mercury____Compare___private_builtin__type_info_1_0)),
+		mercury____Compare___private_builtin__typeclass_info_1_0)),
 	(const Word *) &
-		mercury_data_private_builtin__base_type_layout_type_info_1,
+	    mercury_data_private_builtin__base_type_layout_typeclass_info_1,
 	(const Word *) &
-		mercury_data_private_builtin__base_type_functors_type_info_1,
+	    mercury_data_private_builtin__base_type_functors_typeclass_info_1,
 	(const Word *) string_const("private_builtin", 15),
-	(const Word *) string_const("type_info", 9)
+	(const Word *) string_const("base_typeclass_info", 19)
 };
 
 
-const struct mercury_data_private_builtin__base_type_layout_type_info_1_struct {
+MR_STATIC_CODE_CONST struct
+mercury_data_private_builtin__base_type_info_typeclass_info_1_struct {
+	Integer f1;
+	Code *f2;
+	Code *f3;
+	Code *f4;
+	const Word *f5;
+	const Word *f6;
+	const Word *f7;
+	const Word *f8;
+} mercury_data_private_builtin__base_type_info_typeclass_info_1 = {
+	((Integer) 1),
+	MR_MAYBE_STATIC_CODE(ENTRY(
+		mercury____Unify___private_builtin__typeclass_info_1_0)),
+	MR_MAYBE_STATIC_CODE(ENTRY(
+		mercury____Index___private_builtin__typeclass_info_1_0)),
+	MR_MAYBE_STATIC_CODE(ENTRY(
+		mercury____Compare___private_builtin__typeclass_info_1_0)),
+	(const Word *) &
+	    mercury_data_private_builtin__base_type_layout_typeclass_info_1,
+	(const Word *) &
+	    mercury_data_private_builtin__base_type_functors_typeclass_info_1,
+	(const Word *) string_const("private_builtin", 15),
+	(const Word *) string_const("typeclass_info", 14)
+};
+
+
+const struct
+mercury_data_private_builtin__base_type_layout_typeclass_info_1_struct {
 	TYPE_LAYOUT_FIELDS
-} mercury_data_private_builtin__base_type_layout_type_info_1 = {
+} mercury_data_private_builtin__base_type_layout_typeclass_info_1 = {
 	make_typelayout_for_all_tags(TYPELAYOUT_CONST_TAG, 
-		mkbody(TYPELAYOUT_TYPEINFO_VALUE))
+		mkbody(MR_TYPELAYOUT_TYPECLASSINFO_VALUE))
 };
 
-const struct mercury_data_private_builtin__base_type_functors_type_info_1_struct {
+const struct mercury_data_private_builtin__base_type_functors_typeclass_info_1_struct {
 	Integer f1;
-} mercury_data_private_builtin__base_type_functors_type_info_1 = {
+} mercury_data_private_builtin__base_type_functors_typeclass_info_1 = {
 	MR_TYPEFUNCTORS_SPECIAL
 };
 
 
-MR_MAKE_STACK_LAYOUT_ENTRY(mercury____Unify___private_builtin__type_info_1_0)
-MR_MAKE_STACK_LAYOUT_ENTRY(mercury____Index___private_builtin__type_info_1_0)
-MR_MAKE_STACK_LAYOUT_ENTRY(mercury____Compare___private_builtin__type_info_1_0)
-BEGIN_MODULE(type_info_module)
-	init_entry_sl(mercury____Unify___private_builtin__type_info_1_0);
-	init_entry_sl(mercury____Index___private_builtin__type_info_1_0);
-	init_entry_sl(mercury____Compare___private_builtin__type_info_1_0);
+MR_MAKE_STACK_LAYOUT_ENTRY(
+	mercury____Unify___private_builtin__typeclass_info_1_0)
+MR_MAKE_STACK_LAYOUT_ENTRY(
+	mercury____Index___private_builtin__typeclass_info_1_0)
+MR_MAKE_STACK_LAYOUT_ENTRY(
+	mercury____Compare___private_builtin__typeclass_info_1_0)
+BEGIN_MODULE(typeclass_info_module)
+	init_entry_sl(mercury____Unify___private_builtin__typeclass_info_1_0);
+	init_entry_sl(mercury____Index___private_builtin__typeclass_info_1_0);
+	init_entry_sl(mercury____Compare___private_builtin__typeclass_info_1_0);
 BEGIN_CODE
-Define_entry(mercury____Unify___private_builtin__type_info_1_0);
+Define_entry(mercury____Unify___private_builtin__typeclass_info_1_0);
 {
-	/*
-	** Unification for type_info.
-	**
-	** The two inputs are in the registers named by unify_input[12].
-	** The success/failure indication should go in unify_output.
-	*/
-	int comp;
-	save_transient_registers();
-	comp = MR_compare_type_info(unify_input1, unify_input2);
-	restore_transient_registers();
-	unify_output = (comp == COMPARE_EQUAL);
-	proceed();
+	fatal_error("attempt to unify typeclass_info");
 }
 
-Define_entry(mercury____Index___private_builtin__type_info_1_0);
+Define_entry(mercury____Index___private_builtin__typeclass_info_1_0);
 	index_output = -1;
 	proceed();
 
-Define_entry(mercury____Compare___private_builtin__type_info_1_0);
+Define_entry(mercury____Compare___private_builtin__typeclass_info_1_0);
 {
-	/*
-	** Comparison for type_info:
-	**
-	** The two inputs are in the registers named by compare_input[12].
-	** The result should go in compare_output.
-	*/
-	int comp;
-	save_transient_registers();
-	comp = MR_compare_type_info(unify_input1, unify_input2);
-	restore_transient_registers();
-	compare_output = comp;
-	proceed();
+	fatal_error("attempt to compare typeclass_info");
 }
 END_MODULE
 
 /* Ensure that the initialization code for the above module gets run. */
 /*
-INIT sys_init_type_info_module
+INIT sys_init_typeclass_info_module
 */
-extern ModuleFunc type_info_module;
-void sys_init_type_info_module(void); /* suppress gcc -Wmissing-decl warning */
-void sys_init_type_info_module(void) {
-	type_info_module();
+extern ModuleFunc typeclass_info_module;
+	/* suppress gcc -Wmissing-decl warning */
+void sys_init_typeclass_info_module(void);
+void sys_init_typeclass_info_module(void) {
+	typeclass_info_module();
 }
+
 
Index: runtime/mercury_type_info.c
===================================================================
RCS file: /home/mercury1/repository/mercury/runtime/mercury_type_info.c,v
retrieving revision 1.10
diff -u -r1.10 mercury_type_info.c
--- mercury_type_info.c	1998/07/22 07:53:29	1.10
+++ mercury_type_info.c	1998/10/16 06:48:49
@@ -572,28 +572,30 @@
 			int builtin_type = unmkbody(strip_tag(layout_entry));
 
 			switch (builtin_type) {
-				case TYPELAYOUT_UNASSIGNED_VALUE:
+				case MR_TYPELAYOUT_UNASSIGNED_VALUE:
 					return MR_DATAREP_UNKNOWN;
-				case TYPELAYOUT_UNUSED_VALUE:
+				case MR_TYPELAYOUT_UNUSED_VALUE:
 					return MR_DATAREP_UNKNOWN;
-				case TYPELAYOUT_STRING_VALUE:
+				case MR_TYPELAYOUT_STRING_VALUE:
 					return MR_DATAREP_STRING;
-				case TYPELAYOUT_FLOAT_VALUE:
+				case MR_TYPELAYOUT_FLOAT_VALUE:
 					return MR_DATAREP_FLOAT;
-				case TYPELAYOUT_INT_VALUE:
+				case MR_TYPELAYOUT_INT_VALUE:
 					return MR_DATAREP_INT;
-				case TYPELAYOUT_CHARACTER_VALUE:
+				case MR_TYPELAYOUT_CHARACTER_VALUE:
 					return MR_DATAREP_CHAR;
-				case TYPELAYOUT_PREDICATE_VALUE:
+				case MR_TYPELAYOUT_PREDICATE_VALUE:
 					return MR_DATAREP_PRED;
-				case TYPELAYOUT_VOID_VALUE:
+				case MR_TYPELAYOUT_VOID_VALUE:
 					return MR_DATAREP_VOID;
-				case TYPELAYOUT_ARRAY_VALUE:
+				case MR_TYPELAYOUT_ARRAY_VALUE:
 					return MR_DATAREP_ARRAY;
-				case TYPELAYOUT_TYPEINFO_VALUE:
+				case MR_TYPELAYOUT_TYPEINFO_VALUE:
 					return MR_DATAREP_TYPEINFO;
-				case TYPELAYOUT_C_POINTER_VALUE:
+				case MR_TYPELAYOUT_C_POINTER_VALUE:
 					return MR_DATAREP_C_POINTER;
+				case MR_TYPELAYOUT_TYPECLASSINFO_VALUE:
+					return MR_DATAREP_TYPECLASSINFO;
 				default: 
 					return MR_DATAREP_UNKNOWN;
 			}
Index: runtime/mercury_type_info.h
===================================================================
RCS file: /home/mercury1/repository/mercury/runtime/mercury_type_info.h,v
retrieving revision 1.12
diff -u -r1.12 mercury_type_info.h
--- mercury_type_info.h	1998/09/10 06:53:56	1.12
+++ mercury_type_info.h	1998/10/14 07:33:19
@@ -226,23 +226,48 @@
 **
 ** Also intended for use in handwritten C code.
 **
-** Note that TYPELAYOUT_UNASSIGNED_VALUE is not yet
+** Note that MR_TYPELAYOUT_UNASSIGNED_VALUE is not yet
 ** used for anything.
 **
+** Changes in this type may need to be reflected in
+** compiler/base_type_layout.m.
+**
+*/
+
+
+/* 
+** Defintions for backwards compatibility.
+** These will go away eventually.
 */
 
-#define TYPELAYOUT_UNASSIGNED_VALUE	((Integer) 0)
-#define TYPELAYOUT_UNUSED_VALUE		((Integer) 1)
-#define TYPELAYOUT_STRING_VALUE		((Integer) 2)
-#define TYPELAYOUT_FLOAT_VALUE		((Integer) 3)
-#define TYPELAYOUT_INT_VALUE		((Integer) 4)
-#define TYPELAYOUT_CHARACTER_VALUE	((Integer) 5)
-#define TYPELAYOUT_UNIV_VALUE		((Integer) 6)
-#define TYPELAYOUT_PREDICATE_VALUE	((Integer) 7)
-#define TYPELAYOUT_VOID_VALUE		((Integer) 8)
-#define TYPELAYOUT_ARRAY_VALUE		((Integer) 9)
-#define TYPELAYOUT_TYPEINFO_VALUE	((Integer) 10)
-#define TYPELAYOUT_C_POINTER_VALUE	((Integer) 11)
+#define TYPELAYOUT_UNASSIGNED_VALUE	(MR_TYPELAYOUT_UNASSIGNED_VALUE)
+#define TYPELAYOUT_UNUSED_VALUE		(MR_TYPELAYOUT_UNUSED_VALUE)
+#define TYPELAYOUT_STRING_VALUE		(MR_TYPELAYOUT_STRING_VALUE)
+#define TYPELAYOUT_FLOAT_VALUE		(MR_TYPELAYOUT_FLOAT_VALUE)
+#define TYPELAYOUT_INT_VALUE		(MR_TYPELAYOUT_INT_VALUE)
+#define TYPELAYOUT_CHARACTER_VALUE	(MR_TYPELAYOUT_CHARACTER_VALUE)
+#define TYPELAYOUT_UNIV_VALUE		(MR_TYPELAYOUT_UNIV_VALUE)
+#define TYPELAYOUT_PREDICATE_VALUE	(MR_TYPELAYOUT_PREDICATE_VALUE)
+#define TYPELAYOUT_VOID_VALUE		(MR_TYPELAYOUT_VOID_VALUE)
+#define TYPELAYOUT_ARRAY_VALUE		(MR_TYPELAYOUT_ARRAY_VALUE)
+#define TYPELAYOUT_TYPEINFO_VALUE	(MR_TYPELAYOUT_TYPEINFO_VALUE)
+#define TYPELAYOUT_C_POINTER_VALUE	(MR_TYPELAYOUT_C_POINTER_VALUE)
+
+enum MR_TypeLayoutValue {
+	MR_TYPELAYOUT_UNASSIGNED_VALUE,
+	MR_TYPELAYOUT_UNUSED_VALUE,
+	MR_TYPELAYOUT_STRING_VALUE,
+	MR_TYPELAYOUT_FLOAT_VALUE,
+	MR_TYPELAYOUT_INT_VALUE,
+	MR_TYPELAYOUT_CHARACTER_VALUE,
+	MR_TYPELAYOUT_UNIV_VALUE,
+	MR_TYPELAYOUT_PREDICATE_VALUE,
+	MR_TYPELAYOUT_VOID_VALUE,
+	MR_TYPELAYOUT_ARRAY_VALUE,
+	MR_TYPELAYOUT_TYPEINFO_VALUE,
+	MR_TYPELAYOUT_C_POINTER_VALUE,
+	MR_TYPELAYOUT_TYPECLASSINFO_VALUE
+};
 
 /* 
 ** Highest allowed type variable number
@@ -818,7 +843,8 @@
 	MR_DATAREP_ARRAY,
 	MR_DATAREP_TYPEINFO,
 	MR_DATAREP_C_POINTER,
-	MR_DATAREP_UNKNOWN
+	MR_DATAREP_UNKNOWN,
+	MR_DATAREP_TYPECLASSINFO
 };
 
 /*


-- 
       Tyson Dowd           # There isn't any reason why Linux can't be
                            # implemented as an enterprise computing solution.
     trd at cs.mu.oz.au        # Find out what you've been missing while you've
http://www.cs.mu.oz.au/~trd # been rebooting Windows NT. -- InfoWorld, 1998.



More information about the developers mailing list