[m-rev.] For review: Fix dummy type handling in the IL backend
Jonathan Morgan
jonmmorgan at gmail.com
Wed Sep 27 22:43:35 AEST 2006
With the below patch mercury-0.13 handles the IL backend correctly (as
well as it ever did). I cannot test the patch on main, as
foreign_export does not yet work properly with the IL backend, but it
should work without change.
Jon
================================================================
Branches: release, main
Previously in the IL backend dummy variables were assigned to
private_builtin.dummy_var, which did not work when values were
assigned to it using the high-level data representation, as their type
was not the low-level object[]. This change changes the
representation of dummy variables from object[] (the low-level
representation) to object (suitable for high-level data), and causes
the IL backend to detect assignments to dummy_var and cast them to
type object before assigning to them.
compiler/mlds_to_il.m:
Detect when an object is constructed and assigned to
private_builtin.dummy_var, and cast to il_generic_type (object) before
assigning the constructed object.
library/private_builtin.m:
Change dummy_var's type from object[] to object.
Index: compiler/mlds_to_il.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/mlds_to_il.m,v
retrieving revision 1.161
diff -u -u -r1.161 mlds_to_il.m
--- compiler/mlds_to_il.m 29 Mar 2006 08:07:05 -0000 1.161
+++ compiler/mlds_to_il.m 27 Sep 2006 11:06:28 -0000
@@ -2056,7 +2056,23 @@
ILArgTypes = list.map(mlds_type_to_ilds_type(DataRep), ArgTypes),
list.map_foldl(load, Args, ArgsLoadInstrsTrees, !Info),
ArgsLoadInstrs = tree_list(ArgsLoadInstrsTrees),
- get_load_store_lval_instrs(Target, LoadMemRefInstrs,
+ % check if it's assigning to private_builtin.dummy_var
+ % If so, then it needs to be cast to il_generic_type.
+ (
+ Target = var(qual(MLDS_Module, QualKind, VarName), _),
+ VarName = mlds_var_name("dummy_var", _),
+ mercury_private_builtin_module(PrivateBuiltin),
+ MLDS_PrivateBuiltin = mercury_module_name_to_mlds(PrivateBuiltin),
+ mlds_append_wrapper_class(MLDS_PrivateBuiltin) = MLDS_Module
+ ->
+ MaybeCastInstrs = node([castclass(il_generic_type)]),
+ Target1 = var(qual(MLDS_Module, QualKind, VarName),
+ mlds_generic_type)
+ ;
+ MaybeCastInstrs = empty,
+ Target1 = Target
+ ),
+ get_load_store_lval_instrs(Target1, LoadMemRefInstrs,
StoreLvalInstrs, !Info),
CallCtor = newobj_constructor(ClassName, ILArgTypes),
Instrs = tree_list([
@@ -2064,6 +2080,7 @@
comment_node("new object (call constructor)"),
ArgsLoadInstrs,
instr_node(CallCtor),
+ MaybeCastInstrs,
StoreLvalInstrs
])
;
@@ -3112,7 +3129,7 @@
il_object_array_type.
mlds_mercury_type_to_ilds_type(_, _, type_cat_tuple) = il_object_array_type.
mlds_mercury_type_to_ilds_type(_, _, type_cat_enum) = il_object_array_type.
-mlds_mercury_type_to_ilds_type(_, _, type_cat_dummy) = il_object_array_type.
+mlds_mercury_type_to_ilds_type(_, _, type_cat_dummy) = il_generic_type.
mlds_mercury_type_to_ilds_type(_, _, type_cat_variable) = il_generic_type.
mlds_mercury_type_to_ilds_type(DataRep, MercuryType, type_cat_type_info) =
mlds_mercury_type_to_ilds_type(DataRep, MercuryType, type_cat_user_ctor).
Index: library/private_builtin.m
===================================================================
RCS file: /home/mercury1/repository/mercury/library/private_builtin.m,v
retrieving revision 1.154.2.3
diff -u -u -r1.154.2.3 private_builtin.m
--- library/private_builtin.m 21 Aug 2006 05:37:25 -0000 1.154.2.3
+++ library/private_builtin.m 27 Sep 2006 11:07:54 -0000
@@ -124,7 +124,7 @@
// will be used by the code generator as an lval, so we use
// private_builtin:dummy_var as that lval.
-public static object[] dummy_var;
+public static object dummy_var;
").
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to: mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions: mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------
More information about the reviews
mailing list