<aname="l3"></a></span><ahref="https://tomawezome.github.io/ZealOS/Doc/Glossary.html#l186"><spanclass=cF4>JIT Compile Mode</span></a><spanclass=cF0> makes use of the current task's hash sym table and its parent tasks' tables. It fetches syms from parent
<aname="l4"></a>tasks' tables if not found locally in the current task's table and it places new syms in the current task's table.
<aname="l5"></a>Conceptually, syms are at the scope of environment vars in other operating systems.
<aname="l6"></a>
<aname="l7"></a>When a sym is placed into a table, older syms with ident names will be overshadowed if they exist. Duplicates are not allowed
<aname="l8"></a>in many cases, especially in asm blks. Dupicates are allowed, by design in other cases, so that you can repeatedly </span><spanclass=cF2>#include</span><spanclass=cF0> the
<aname="l9"></a>same file from the cmd line while developing it. Or, so you can repeatedly declare a function with a standard name, like </span><spanclass=cF2>Draw
<aname="l10"></a>It()</span><spanclass=cF0>. This case might occur when the </span><ahref="https://tomawezome.github.io/ZealOS/Doc/Glossary.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://tomawezome.github.io/ZealOS/Kernel/KernelA.html#l827"><spanclass=cF4>HTT_FUN</span></a><spanclass=cF0> or </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/KernelA.html#l824"><spanclass=cF4>HTT_GLOBAL_VAR</span></a><spanclass=cF0> sym to an existing sym of the same name if it exists in the sym table (just in
<aname="l15"></a></span><spanclass=cF2>import</span><spanclass=cF0> binds a new </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/KernelA.html#l827"><spanclass=cF4>HTT_FUN</span></a><spanclass=cF0> or </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/KernelA.html#l824"><spanclass=cF4>HTT_GLOBAL_VAR</span></a><spanclass=cF0> sym to a sym of the same name imported from the task's sym table at </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/KLoad.html#l208"><spanclass=cF4>Load</span></a><spanclass=cF0>() time.
<aname="l16"></a>If no sym exists to bind to at </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/KLoad.html#l208"><spanclass=cF4>Load</span></a><spanclass=cF0>() time, the code using this sym will be left incomplete until the sym is defined.
<aname="l19"></a></span><spanclass=cF2>_extern</span><spanclass=cF0> binds a new </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/KernelA.html#l827"><spanclass=cF4>HTT_FUN</span></a><spanclass=cF0> or </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/KernelA.html#l824"><spanclass=cF4>HTT_GLOBAL_VAR</span></a><spanclass=cF0> sym to an existing sym, of a <blink>different</blink> name. It must exists in the sym table.
<aname="l22"></a></span><spanclass=cF2>_import</span><spanclass=cF0> binds a new </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/KernelA.html#l827"><spanclass=cF4>HTT_FUN</span></a><spanclass=cF0> or </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/KernelA.html#l824"><spanclass=cF4>HTT_GLOBAL_VAR</span></a><spanclass=cF0> sym to a sym, of a <blink>different</blink> name imported from the task's sym table at </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/KLoad.html#l208"><spanclass=cF4>Load</span></a><spanclass=cF0>()
<aname="l23"></a>time. If no sym exists to bind to at </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/KLoad.html#l208"><spanclass=cF4>Load</span></a><spanclass=cF0>() time, the code using this sym will be left incomplete until the sym is defined.
<aname="l76"></a>asm export </span><spanclass=cF2>label::</span><spanclass=cF0> G C S Tg N
<aname="l77"></a>asm </span><spanclass=cF2>label:</span><spanclass=cF0> G C BG N
<aname="l78"></a>asm local </span><spanclass=cF2>@@label:</span><spanclass=cF0> G C AL N
<aname="l79"></a>asm </span><spanclass=cF2>IMPORT label;</span><spanclass=cF0> G C TR N
<aname="l80"></a>asm export </span><spanclass=cF2>label::</span><spanclass=cF0> F C BG N
<aname="l81"></a>asm </span><spanclass=cF2>label:</span><spanclass=cF0> F C BG N
<aname="l82"></a>asm local </span><spanclass=cF2>@@label:</span><spanclass=cF0> F C AL N
<aname="l83"></a>asm </span><spanclass=cF2>IMPORT label;</span><spanclass=cF0> F C BR N
<aname="l84"></a>C goto </span><spanclass=cF2>label:</span><spanclass=cF0> F C FG N
<aname="l85"></a>
<aname="l86"></a></span><spanclass=cF2>#define</span><spanclass=cF0> x D TR D
<aname="l87"></a> function G C F TR D
<aname="l88"></a> var F R FR N
<aname="l89"></a> var F S FR N
<aname="l90"></a></span><spanclass=cF2>static</span><spanclass=cF0> var F C FR D N
<aname="l91"></a> var G C G TR D D
<aname="l92"></a> var G D G TR S D
<aname="l93"></a></span><spanclass=cF2>class</span><spanclass=cF0> G C TR D
<aname="l94"></a>class member G TR P
<aname="l95"></a></span><spanclass=cF2>extern class</span><spanclass=cF0> G C TR D
<aname="l96"></a></span><spanclass=cF2>extern</span><spanclass=cF0> function G C F TR W
<aname="l97"></a></span><spanclass=cF2>extern</span><spanclass=cF0> var G C G TR D
<aname="l98"></a></span><spanclass=cF2>extern</span><spanclass=cF0> var G D G TR D
<aname="l99"></a></span><spanclass=cF2>_extern</span><spanclass=cF0> function G C F TR D
<aname="l100"></a></span><spanclass=cF2>_extern</span><spanclass=cF0> var G C G TR D
<aname="l101"></a>
<aname="l102"></a>
<aname="l103"></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="l104"></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="l105"></a>baffling.
<aname="l106"></a>
<aname="l107"></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="l108"></a>
<aname="l109"></a>* Use </span><spanclass=cF2>reg</span><spanclass=cF0> or </span><spanclass=cF2>noreg</span><spanclass=cF0> in front of local var names to override automatic reg var allocation. You can, optionally, specify a reg
<aname="l110"></a>after the </span><spanclass=cF2>reg</span><spanclass=cF0> keyword.
<aname="l111"></a>
<aname="l112"></a>* Local non-reg function vars can be accessed in asm blks with </span><spanclass=cF2>&i[RBP]</span><spanclass=cF0> for example.
<aname="l113"></a>
<aname="l114"></a>* Global vars and functions can be accessed in asm with and </span><spanclass=cF2>&</span><spanclass=cF0> as in
<aname="l119"></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="l120"></a>
<aname="l121"></a>* All offspring tasks of a task inherit syms.
<aname="l122"></a>
<aname="l123"></a>* The </span><spanclass=cF2>sizeof()</span><spanclass=cF0> and CosmiC structure members can be used in asm blks.
<aname="l125"></a>* Using </span><spanclass=cF2>&i</span><spanclass=cF0> in </span><ahref="https://tomawezome.github.io/ZealOS/Doc/CosmiC.html#l1"><spanclass=cF4>CosmiC</span></a><spanclass=cF0> or </span><spanclass=cF2>i.u8[2]</span><spanclass=cF0> on a local var, </span><spanclass=cF2>i</span><spanclass=cF0>, will force it to </span><spanclass=cF2>noreg</span><spanclass=cF0>.
<aname="l127"></a>* Using </span><spanclass=cF2>try</span><spanclass=cF0>/</span><spanclass=cF2>catch</span><spanclass=cF0> in a function will force all local vars to </span><spanclass=cF2>noreg</span><spanclass=cF0>.
<aname="l128"></a>
<aname="l129"></a>* An unused gap on the stack is left for </span><spanclass=cF2>reg</span><spanclass=cF0> vars.
<aname="l131"></a>* Note: </span><spanclass=cF2>static</span><spanclass=cF0> function vars do not go on the data heap, no matter the setting of the </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/KernelA.html#l1684"><spanclass=cF4>OPTf_GLOBALS_ON_DATA_HEAP</span></a><spanclass=cF0>. They may in
<aname="l134"></a>* </span><ahref="https://tomawezome.github.io/ZealOS/Kernel/KernelA.html#l1681"><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