[0.2.0]

Added

  • QuakeC.Progs reads id's version 6 programs and FTE's version 7 programs with 16- and 32-bit statements, keeps every string of the table by its offset (texts) and carries the program's digest.
  • QuakeC.Progs.find_function/2, FTE's ED_FindFunction: a name may follow a program number and :.
  • QuakeC.Progs.replace/2: named program functions run by the host in place of their QuakeC bodies, as builtins bound by name; the digest names the replacements.
  • QuakeC memory with byte-address pointers into globals, entity fields and an allocating heap (alloc/2, free/2, load/2, store/3), written in place: every copy of the struct sees every write, and it belongs to the process that made it. QuakeC.move/4 and QuakeC.fill/4 copy and fill memory by words, for memcpy and memset; QuakeC.copy/1, QuakeC.release/1, QuakeC.update_slot/3.
  • QuakeC.Exec runs Quake's instructions and FTE's extended instructions, with builtins by number or by name, a statement budget and an optional function trace.
  • QuakeC.Exec.call/4 option :before: a function of the host run before each call, which a host uses to bring its autocvar_ globals up to date.
  • QuakeC.Exec.abort/1: a builtin stops every running function, as FTE's AbortStack; the outermost QuakeC.Exec.call/4 returns the host as it stands.
  • QuakeC.Compiler: programs run as generated Elixir modules, compiled in parallel and cached on disk by the program's digest. Compiled calls pass arguments and return values as values; the parameter and return slots are written for builtins and calls from the host.