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