mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-16 06:14:59 +00:00
With these changes, it now passes all tests/general/* test cases
except those with floats.
Changes to the compiler:
- Added extra argument to test instruction (string comparisons were
being treated as integer comparisons; properly deals with different
atomic type unifications now)
- Changed bytecode stub functions
Changes to the bytecode interpreter:
- Cleaned up comments
- Forked part of mb_machine to mb_exec
- Added support for submodules
- Added support for nondet procedures
- Added support for cc_xxx procedures
- Finished higher order calls
- Added (very basic) debug interface
- Added support for type information
- Added memory corruption checking
- Changed machine state dump formatting
- Fixed bug in nested switches
- Resolved builtin__unify and builtin_compare failures
- Modified bytecode tags generation so .c & .m tag files are separate
- Header usage rationalised
Changes to test suite:
- Added test cases for the bytecode interpreter.
- More work on the bytecode interpreter.
bytecode/Mmakefile:
Modified bytecode tags generation so .c & .m tag files are separate.
mb_machine split into mb_exec.
test file renamed to simple.m (copy over tests/simple??.m to test).
bytecode/TODO:
Updated.
bytecode/mb_basetypes.h:
Removed redundant MB_WORD_BITS (use MR_WORDBITS instead).
bytecode/mb_bytecode.h:
bytecode/mpb_bytecode.c:
Formatting changes
Third test instruction argument added.
bytecode/mb_disasm.h:
bytecode/mb_disasm.c:
Formatting changes.
Third test instruction argument added.
Added MB_FMT_INTWIDE.
bytecode/mb_exec.h:
bytecode/mb_exec.c:
bytecode/mb_machine.h:
bytecode/mb_machine.c:
mb_machine* split into mb_exec* and mb_machine*.
Almost all instructions now work (see important changes above).
bytecode/mb_interface.h:
bytecode/mb_interface.c:
Added nondet stub functions.
Added functions to lookup builtin compiler procedures:
do_redo, do_fail, __unify, __compare.
Removed old debugging code.
Stack layout changed to support nondet procedures.
bytecode/mb_interface_stub.c:
bytecode/mb_interface_stub.h:
Split off bare minimum of includes for bytecode stubs.
Added nondet stubs.
bytecode/mb_machine_show.c:
Made code cleaner (added subfunctions for MB_show_state).
Added variable names to machine state dump.
bytecode/mb_mem.h:
bytecode/mb_mem.c:
Added limited memory corruption checking.
bytecode/mb_module.h:
bytecode/mb_module.c:
Swapped order of temps & vars on stack.
Fixed nested switches causing random crashes.
Added nested module support.
bytecode/test/simple??.m:
Various test files - just to check that it doesn't crash.
(Most do not output anything & must be verified by stepping through
manually).
compiler/bytecode.m:
compiler/bytecode_gen.m:
Added extra argument to test instruction (otherwise
string comparisons would be treated as integer comparisons).
compiler/code_gen.m:
Changed call structure name in bytecode stub to resolve
issues with illegal characters in C structure names.
Changed bytecode stub header file name.
65 lines
1.3 KiB
Mathematica
65 lines
1.3 KiB
Mathematica
% simple22
|
|
% test
|
|
|
|
% the test is just that this compiles
|
|
% (testing the generate_unify in bytecode_gen.m)
|
|
|
|
% --------------------------------------------------------------------------
|
|
:- module simple.
|
|
|
|
% --------------------------------------------------------------------------
|
|
:- interface.
|
|
|
|
:- import_module io.
|
|
:- import_module int.
|
|
:- import_module char.
|
|
|
|
:- pred main(io__state, io__state).
|
|
:- mode main(di, uo) is det.
|
|
|
|
% --------------------------------------------------------------------------
|
|
:- implementation.
|
|
|
|
main -->
|
|
{
|
|
dothings
|
|
}.
|
|
|
|
% ------------------------------------------
|
|
:- func sgetch = character is det.
|
|
sgetch = 'a'.
|
|
|
|
:- pred checkch is det.
|
|
checkch :- ( sgetch = sgetch
|
|
-> true ; true).
|
|
% ---------------------------------
|
|
:- func sgets = string is det.
|
|
sgets = "a".
|
|
|
|
:- pred checks is det.
|
|
checks :- ( sgets = sgets
|
|
-> true ; true).
|
|
% ---------------------------------
|
|
:- func sgeti = int is det.
|
|
sgeti = 3.
|
|
|
|
:- pred checki is det.
|
|
checki :- ( sgeti = sgeti
|
|
-> true ; true).
|
|
% ---------------------------------
|
|
:- func sgetf = float is det.
|
|
sgetf = 3.0.
|
|
|
|
:- pred checkf is det.
|
|
checkf :- ( sgetf = sgetf
|
|
-> true ; true).
|
|
|
|
% -----------------------------------------------
|
|
:- pred dothings is det.
|
|
dothings :-
|
|
checkch,
|
|
checks,
|
|
checki,
|
|
checkf.
|
|
|