
Estimated hours taken: 25 (though some were spent learning build system, etc.)
Branches: main

Bug fixes for the MLDS accurate garbage collector.

compiler/mlds.m:
	Change type of mlds_maybe_gc_trace_code to a discriminated union,
	mlds_gc_statement to allow separation of initialisation and variable
	tracing code, rather than the standard maybe type.

compiler/ml_elim_nested.m:
	- Update extract_gc_trace_code (now extract_gc_statments) to
	  provide initialisation and variable tracing code separately.
	- Change method of flattening so that hoisting of variables into
	  structs and changing references to those structs are
	  sequenced, not interleaved. This fixes a bug where references to
	  a variable could be processed before that variable was hoisted
	  into a struct, and thus the references not properly updated.
	- Conform to the change in mlds.m.

compiler/ml_closure_gen.m:
	- Flag GC initialisation code as such as it must be executed before
	  GC tracing code.
	- Conform to the change in mlds.m.

compiler/ml_code_util.m:
compiler/ml_code_gen.m:
compiler/ml_call_gen.m:
compiler/ml_optimize.m:
compiler/ml_string_switch.m:
compiler/ml_type_gen.m:
compiler/ml_util.m:
compiler/mlds_to_c.m:
compiler/mlds_to_gcc.m:
compiler/mlds_to_il.m:
compiler/mlds_to_java.m:
compiler/mlds_to_managed.m:
compiler/rtti_to_mlds.m:
	Conform to the change in mlds.m.

