<aname="l3"></a></span><ahref="https://zeal-operating-system.github.io/ZealOS/Doc/Glossary.DD.html#l188"><spanclass=cF4>JIT Compile Mode</span></a><spanclass=cF0> makes use of the current task's hash symbol table and its parent tasks' tables. It fetches symbols from
<aname="l4"></a>parent tasks' tables if not found locally in the current task's table and it places new symbols in the current task's table.
<aname="l5"></a>Conceptually, symbols are at the scope of environment variables in other operating systems.
<aname="l7"></a>When a symbol is placed into a table, older symbols with ident names will be overshadowed if they exist. Duplicates are not
<aname="l8"></a>allowed in many cases, especially in asm blocks. Dupicates are allowed, by design in other cases, so that you can repeatedly </span><spanclass=cF2>
<aname="l9"></a>#include</span><spanclass=cF0> the same file from the cmd line while developing it. Or, so you can repeatedly declare a function with a standard
<aname="l10"></a>name, like </span><spanclass=cF2>DrawIt()</span><spanclass=cF0>. This case might occur when the </span><ahref="https://zeal-operating-system.github.io/ZealOS/Doc/Glossary.DD.html#l154"><spanclass=cF4>System Task</span></a><spanclass=cF0> is starting-up loading-in many little utilities.
<aname="l12"></a></span><spanclass=cF2>extern</span><spanclass=cF0> binds a new </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/KernelA.HH.html#l828"><spanclass=cF4>HTT_FUN</span></a><spanclass=cF0> or </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/KernelA.HH.html#l825"><spanclass=cF4>HTT_GLOBAL_VAR</span></a><spanclass=cF0> symbol to an existing symbol of the same name if it exists in the symbol table
<aname="l13"></a>(just in just-in-time code). It also can be used to generate a forward reference.
<aname="l15"></a></span><spanclass=cF2>import</span><spanclass=cF0> binds a new </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/KernelA.HH.html#l828"><spanclass=cF4>HTT_FUN</span></a><spanclass=cF0> or </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/KernelA.HH.html#l825"><spanclass=cF4>HTT_GLOBAL_VAR</span></a><spanclass=cF0> symbol to a symbol of the same name imported from the task's symbol table at </span><spanclass=cF4>
<aname="l16"></a></span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/KLoad.CC.html#l208"><spanclass=cF4>Load</span></a><spanclass=cF0>() time. If no symbol exists to bind to at </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/KLoad.CC.html#l208"><spanclass=cF4>Load</span></a><spanclass=cF0>() time, the code using this symbol will be left incomplete until the
<aname="l20"></a></span><spanclass=cF2>_extern</span><spanclass=cF0> binds a new </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/KernelA.HH.html#l828"><spanclass=cF4>HTT_FUN</span></a><spanclass=cF0> or </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/KernelA.HH.html#l825"><spanclass=cF4>HTT_GLOBAL_VAR</span></a><spanclass=cF0> symbol to an existing symbol, of a <blink>different</blink> name. It must exists in the symbol
<aname="l21"></a>table. Basically, this binds C to asm.
<aname="l22"></a>
<aname="l23"></a></span><spanclass=cF2>_import</span><spanclass=cF0> binds a new </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/KernelA.HH.html#l828"><spanclass=cF4>HTT_FUN</span></a><spanclass=cF0> or </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/KernelA.HH.html#l825"><spanclass=cF4>HTT_GLOBAL_VAR</span></a><spanclass=cF0> symbol to a symbol, of a <blink>different</blink> name imported from the task's symbol table at </span><spanclass=cF4>
<aname="l24"></a></span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/KLoad.CC.html#l208"><spanclass=cF4>Load</span></a><spanclass=cF0>() time. If no symbol exists to bind to at </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/KLoad.CC.html#l208"><spanclass=cF4>Load</span></a><spanclass=cF0>() time, the code using this symbol will be left incomplete until the
<aname="l25"></a>symbol is defined. Basically, this binds C to asm from elsewhere.
<aname="l104"></a>* Goto labels must not have the same name as global scope objects. GoTo's are rare and we don't want to slow the compiler and
<aname="l105"></a>add code to fix this. You will get errors if a collision happens, so it's not very dangerous, but the error message is
<aname="l106"></a>baffling.
<aname="l107"></a>
<aname="l108"></a>* The member names </span><spanclass=cF2>pad</span><spanclass=cF0> and </span><spanclass=cF2>reserved</span><spanclass=cF0> are special because multiple instances with the same name are allowed in a class.
<aname="l109"></a>
<aname="l110"></a>* Use </span><spanclass=cF2>reg</span><spanclass=cF0> or </span><spanclass=cF2>noreg</span><spanclass=cF0> in front of local variable names to override automatic register variable allocation. You can, optionally,
<aname="l111"></a>specify a register after the </span><spanclass=cF2>reg</span><spanclass=cF0> keyword.
<aname="l112"></a>
<aname="l113"></a>* Local non-reg function variables can be accessed in asm blocks with </span><spanclass=cF2>&i[RBP]</span><spanclass=cF0> for example.
<aname="l114"></a>
<aname="l115"></a>* Global variables and functions can be accessed in asm with and </span><spanclass=cF2>&</span><spanclass=cF0> as in
<aname="l120"></a>* In </span><spanclass=cF2>JIT</span><spanclass=cF0> asm code, &SYS_SYM and &Fun don't need </span><spanclass=cF2>IMPORT</span><spanclass=cF0>.
<aname="l121"></a>
<aname="l122"></a>* All offspring tasks of a task inherit symbols.
<aname="l123"></a>
<aname="l124"></a>* The </span><spanclass=cF2>sizeof()</span><spanclass=cF0> and CosmiC structure members can be used in asm blocks.
<aname="l125"></a>
<aname="l126"></a>* Using </span><spanclass=cF2>&i</span><spanclass=cF0> in </span><ahref="https://zeal-operating-system.github.io/ZealOS/Doc/CosmiC.DD.html#l1"><spanclass=cF4>CosmiC</span></a><spanclass=cF0> or </span><spanclass=cF2>i.u8[2]</span><spanclass=cF0> on a local variable, </span><spanclass=cF2>i</span><spanclass=cF0>, will force it to </span><spanclass=cF2>noreg</span><spanclass=cF0>.
<aname="l127"></a>
<aname="l128"></a>* Using </span><spanclass=cF2>try</span><spanclass=cF0>/</span><spanclass=cF2>catch</span><spanclass=cF0> in a function will force all local variables to </span><spanclass=cF2>noreg</span><spanclass=cF0>.
<aname="l129"></a>
<aname="l130"></a>* An unused gap on the stack is left for </span><spanclass=cF2>reg</span><spanclass=cF0> variables.
<aname="l131"></a>
<aname="l132"></a>* Note: </span><spanclass=cF2>static</span><spanclass=cF0> function variables do not go on the data heap, no matter the setting of the </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/KernelA.HH.html#l1685"><spanclass=cF4>OPTf_GLOBALS_ON_DATA_HEAP</span></a><spanclass=cF0>. They
<aname="l133"></a>may in the future.
<aname="l134"></a>
<aname="l135"></a>* </span><ahref="https://zeal-operating-system.github.io/ZealOS/Kernel/KernelA.HH.html#l1682"><spanclass=cF4>OPTf_EXTERNS_TO_IMPORTS</span></a><spanclass=cF0> will treat </span><spanclass=cF2>_extern</span><spanclass=cF0> as </span><spanclass=cF2>_import</span><spanclass=cF0> and </span><spanclass=cF2>extern</span><spanclass=cF0> as </span><spanclass=cF2>import</span><spanclass=cF0>. This allows a header to be used either as a </span><spanclass=cF2>JIT
<aname="l136"></a>compiled</span><spanclass=cF0> or </span><spanclass=cF2>AOT compiled</span><spanclass=cF0> header.