mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-14 13:23:53 +00:00
Get pragma foreign_type working for the C backend.
Estimated hours taken: 16
Branches: main
Get pragma foreign_type working for the C backend.
doc/reference_manual.texi:
Document C pragma foreign_types.
compiler/prog_data.m:
Add il_foreign_type and c_foreign_type which contain all the
necessary data to output a foreign_type on the respective backends.
Change foreign_language_type to refer to these new types.
compiler/prog_io_pragma.m:
Handle the changes to foreign_language_type, and parse C
foreign_type declarations.
compiler/hlds_data.m:
Change the hlds_data__foreign_type type so that it records both the
C and IL foreign types. This will allow one to output both foreign
type declarations when doing intermodule optimization.
compiler/make_hlds.m:
Changes so that we store both the IL and C foreign types in
hlds_data__foreign_type.
Also add an error checking pass where we check that there is a
foreign type for the back-end we are currently compiling to.
compiler/foreign.m:
Change to_exported_type so that it works for both the C and IL
backends by getting either the C or IL foreign_type definition.
compiler/llds.m:
compiler/pragma_c_gen.m:
Change pragma_c_input and pragma_c_output so that they record
whether or not a type is a foreign_type and if so what is the string
which represents that foreign_type.
compiler/llds_out.m:
When outputting pragma c_code variables that represent foreign_types
get the casts correct. Note that this adds the constraint on C
foreign types that they are word sized, as all we are doing is
casts, not boxing and unboxing.
compiler/mlds.m:
Change mlds__foreign_type so that we store whether a type is an IL
type or a C type. It is the responsibility of the code generator
that we never create a reference to a IL foreign type when on the C
back-end, and vice versa.
compiler/mercury_to_mercury.m:
Handle changes to prog_data__foreign_type.
compiler/hlds_out.m:
compiler/intermod.m:
compiler/magic_util.m:
compiler/ml_code_gen.m:
compiler/ml_type_gen.m:
compiler/recompilation_usage.m:
compiler/term_util.m:
compiler/type_ctor_info.m:
compiler/unify_proc.m:
Handle changes to hlds_data__foreign_type.
compiler/exprn_aux.m:
compiler/livemap.m:
compiler/middle_rec.m:
compiler/opt_util.m:
Handle changes to the pragma_c_input and pragma_c_output types.
compiler/ml_code_util.m:
compiler/mlds_to_gcc.m:
compiler/mlds_to_il.m:
compiler/mlds_to_java.m:
compiler/mlds_to_c.m:
Handle changes to mlds__foreign_type.
This commit is contained in:
@@ -1251,7 +1251,7 @@ get_java_type_initializer(mlds__native_bool_type) = "false".
|
||||
get_java_type_initializer(mlds__native_int_type) = "0".
|
||||
get_java_type_initializer(mlds__native_float_type) = "0".
|
||||
get_java_type_initializer(mlds__native_char_type) = "0".
|
||||
get_java_type_initializer(mlds__foreign_type(_, _, _)) = _ :-
|
||||
get_java_type_initializer(mlds__foreign_type(_)) = _ :-
|
||||
unexpected(this_file,
|
||||
"get_type_initializer: variable has foreign_type").
|
||||
get_java_type_initializer(mlds__class_type(_, _, _)) = "null".
|
||||
@@ -1619,7 +1619,7 @@ output_type(mlds__native_int_type) --> io__write_string("int").
|
||||
output_type(mlds__native_float_type) --> io__write_string("double").
|
||||
output_type(mlds__native_bool_type) --> io__write_string("boolean").
|
||||
output_type(mlds__native_char_type) --> io__write_string("char").
|
||||
output_type(mlds__foreign_type(_, _, _)) -->
|
||||
output_type(mlds__foreign_type(_)) -->
|
||||
{ unexpected(this_file, "output_type: foreign_type NYI.") }.
|
||||
output_type(mlds__class_type(Name, Arity, ClassKind)) -->
|
||||
( { ClassKind = mlds__enum } ->
|
||||
|
||||
Reference in New Issue
Block a user