Aside from such generic replacements there is generated code - that's not just some fancy modern JIT (*1):
While one could argue that all of these cases have many layers of execution inbetween generation an calling(*2), there isare other quite common ways of runtime generation within applications falling into the JIT category - except predating JavaScript by several decades - as what we call now JIT was present in many applications that do have to work with ad hoc queries on large amount of data. Examples are
- Regular Expressions - already in 1968 QED for MULTICS generated code so evaluation could be speed up
- Data Base Queries - it was (and maybe still is) rather common to translate queries at run time into machine code
or, more modern, but still 1980s,
- Microsofts CBLT or Compiled BLock Transfer - To make BitBliting somewhat performant, Windows GDI generated tight screen handling loops on stack (see this description) (*3).
At the possiblelowest end, there is in addition the
That case might be most prominent on x86 with the interrupt number when intending to call an arbitrary service via an INT instruction (*3*4).
*1 - JIT does of course predate JavaScript - byit rather a good three decades - as what we call now JIT was presentlate comer in many applications that do have to work with ad hoc queries on large amount of data. Examples are
- Regular Expressions - already in 1968 QED for MULTICS generated code so evaluation could be speed up
- Data Base Queries - it was (and maybe still is) rather common to translate queries at run time into machine code
*2 - I wouldn't, as there is no guarantee that such generator isn't running into the generated code right after modifying the last byte (which as well can be the first in that section).
*3 - Thanks to occipita for adding this example.