LuaJIT chooses loops and function calls as trace anchors to begin recording possible hot paths.
Once LuaJIT begins recording, all control flow, including jumps and calls, are inlined to form a linear trace.
All executed bytecode instructions are stored and incrementally converted into LuaJIT's static single-assignment intermediate representation.
LuaJIT's trace compiler is often capable of inlining and removing dispatches from object orientation, operators, and type modifications.
[citation needed] DynASM includes a bare-bones C header file which is used at compile time for logic the preprocessor generates.