nargs — the number of arguments that have been passed
to this function.

Whatever this function returns is passed to the Lisp program via the
stack, except if it returns false—in that case no value
is pushed to the stack and you are expected to have done this yourself
via m.push(...).

The arguments are on the machine's stack and can be fetched in reverse
order by calling m.pop().

Currently all primitive functions are defined in the base package
(%) and they're all exported, although many of them should be
kept private. Those that I wasn't sure I'd like to export as they are
have names that start with a funny character like “%”.

Types

In js/types.js we have definitions and
supporting functions for various basic types in the system.

List operations

In js/list.js we have defined most
operations for linked lists. But from Lisp, of course, you'd access them
via primitive functions.

The very basic Lisp system

The first Lisp file that is loaded by the system is
lisp/compiler.lisp and it defines
a bunch of basic functions and macros that are exported, as well as the
reader and the compiler. Stuff defined here is exported
in lisp/init.lisp, which also
implements additional functionality like macros for the package system,
destructuring-bind, etc.

TinyCLOS

FORMAT and printer

There's a pretty comprehensive implementation, though by no means
complete, of the format function
in lisp/format.lisp. A generic
method (based on TinyCLOS) for printing objects is defined
in lisp/printer.lisp, but there's
no pretty printing for that (any help on implementing that would be
greatly appreciated!).