Estimated hours taken: 40
The beginnings of the new bytecode interpreter. Probably
just over half the code is the same or a
superficially modified revision of the old one.
bytecode/mb_bytecode.c
bytecode/mb_bytecode.h
Almost identical. Only real change is made MB_read_cstring not use
any static variables
bytecode/mb_disasm.c
bytecode/mb_disasm.h
Again, code very similar. Changed all the functions to write to a
buffer instead of a file and to allow for bytecode indenting. Output
format string for some instructions changed (hopefully more menaingful
than just a dump of numbers)
bytecode/mb_machine.c
bytecode/mb_machine.h
(completely different from old machine.c)
The actual part that contains an abstract machine.
The rest is really just support code.
The instruction_table array is how instructions are dispatched. Look
at instr_xxxx for the actual interpreter code. Not all instructions
are implemented. MB_step and MB_run execute the actual
interpreting code
bytecode/mb_machine_show.h
bytecode/mb_machine_show.c
displays output showing the state of the machine
bytecode/mb_mem.c
bytecode/mb_mem.h
Identical to old mem apart from file name changes
bytecode/mb_util.c
bytecode/mb_util.h
took out strdup (not needed) and changed some comments
bytecode/mb_stack.c
bytecode/mb_stack.h
word based stack that will reallocate itself if it needs to
bytecode/mbi.c
front end for bytecode interpreter
bytecode/mdis.c
disassembles a file and dumps it to the screen
Estimated hours taken: 2
More cleanup of the bytecode stuff; in particular, add a `MB_' prefix
to most names.
bytecode/*:
- Prefix all names defined in header files with `MB_'
(except for `TRUE', `FALSE', `DEBUGGING', and `XXXdebug').
- Add macros `MB_new', `MB_new_array', and `MB_resize_array',
and use those instead of using `MB_malloc' and `MB_resize'
(formerly `mem_malloc' and `mem_resize') or malloc() and realloc()
directly. Uncomment the definition of MB_strdup() now that it
calls MB_malloc().
- Delete the definitions of `uchar', `uint', `ushort', `ulong'
(just spell them out, its clearer and more portable that way).
- Fix the indentation in a few places I missed on my previous pass.
- Add a `README' file.
Estimated hours taken: 2
A cleanup of the bytecode stuff.
bytecode/*:
Various changes to make it conform to our C coding standard.
In particular:
- fix indentation and layout, particularly of switch
statements;
- use `#include "..."' rather than `#include <...>'
for user-defined header files
bytecode/Mmakefile:
Avoid the use of `$^' in hard-coded rules, since it is
not portable to non-GNU makes (many makes only allow the
use of variables such as $*, $^, etc. in suffix rules),
and since it is easy to avoid.
Also add an XXX comment, since the header dependency handling
is done twice.
bytecode/bytecode.c:
s/BIG_ENDING/MR_BIG_ENDIAN/ and s/LITTLE_ENDING/MR_LITTLE_ENDIAN/,
to match my recent change to runtime/conf.h.in.
In fact every identifier in the bytecode directory ought to be
prefixed with `MB_', but I haven't done that in this change.
Estimated hours taken: 3
A number of changes:
- Changes to support portable numeric constants in the
bytecode file.
- read_int() now returns a Mercury `Integer', which is platform
dependent. However it actually reads a portable, 64-bit,
big-endian, 2's complement integer from the bytecode stream.
- read_float() now returns a Mercury `Float', which is platform
dependent.
- Comment-style changed to agree with C coding standard.
- malloc and realloc are now used instead of mem_malloc and
mem_realloc. Need to look at memory-management in a lot
more depth when the bytecode interpreter starts linking
in Mercury shared objects.
- Removed Bytecode-doc since it's now an HTML file in
the developer documentation directory of the Mercury web pages.
- Removed the Makefile since we're now using an Mmakefile.
bytecode/
bytecode.c
bytecode.h
Changes to read_int(), read_float() and others.
disasm.c
disasm.h
machine.c
machine.h
mbi.c
mbi.h
mdis.c
mdis.h
mem.c
mem.h
static_data.c
static_data.h
template.c
template.h
util.c
util.h
Divers changes as described above.
Bytecode-doc
Mmakefile
Removed as described above.