mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2024-12-29 00:36:32 +00:00
dbf8647d59
Added top & right borders to RawDr. Improved spacing in some debug and compiler reporting. Fixed RawPutChar and EdLite tab width. Fixed Ui missing '0x' prefix syntax highlighter bug. Added 32BitPaint demo.
840 lines
86 KiB
HTML
Executable file
840 lines
86 KiB
HTML
Executable file
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html;charset=US-ASCII">
|
|
<meta name="generator" content="ZealOS V0.08">
|
|
<style type="text/css">
|
|
body {background-color:#000000;}
|
|
.cF0{color:#ffffff;background-color:#000000;}
|
|
.cF1{color:#3465a4;background-color:#000000;}
|
|
.cF2{color:#4e9a06;background-color:#000000;}
|
|
.cF3{color:#06989a;background-color:#000000;}
|
|
.cF4{color:#a24444;background-color:#000000;}
|
|
.cF5{color:#75507b;background-color:#000000;}
|
|
.cF6{color:#ce982f;background-color:#000000;}
|
|
.cF7{color:#bcc0b9;background-color:#000000;}
|
|
.cF8{color:#555753;background-color:#000000;}
|
|
.cF9{color:#729fcf;background-color:#000000;}
|
|
.cFA{color:#82bc49;background-color:#000000;}
|
|
.cFB{color:#34e2e2;background-color:#000000;}
|
|
.cFC{color:#ac3535;background-color:#000000;}
|
|
.cFD{color:#ad7fa8;background-color:#000000;}
|
|
.cFE{color:#fce94f;background-color:#000000;}
|
|
.cFF{color:#000000;background-color:#000000;}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<pre style="font-family:monospace;font-size:12pt">
|
|
<a name="l1"></a><span class=cF1>U8</span><span class=cF0> *</span><span class=cF5>LexStatement2Bin</span><span class=cF0>(</span><span class=cF9>CCompCtrl</span><span class=cF0> *cc, </span><span class=cF9>I64</span><span class=cF0> *_type, </span><span class=cF9>I64</span><span class=cF0> comp_flags=</span><span class=cFE>0</span><span class=cF0>)
|
|
<a name="l2"></a>{</span><span class=cF2>//Compile one cc statement to bin code.</span><span class=cF0>
|
|
<a name="l3"></a> </span><span class=cF9>I64</span><span class=cF0> size, i, j, k, *res = </span><span class=cF3>INVALID_PTR</span><span class=cF0>;
|
|
<a name="l4"></a> </span><span class=cF9>CCodeCtrl</span><span class=cF0> *tmpcbh;
|
|
<a name="l5"></a>
|
|
<a name="l6"></a> </span><span class=cF1>if</span><span class=cF0> (_type)
|
|
<a name="l7"></a> *_type = </span><span class=cF3>RT_I64</span><span class=cF0>;
|
|
<a name="l8"></a> </span><span class=cF5>Btr</span><span class=cF0>(&cc->flags, </span><span class=cF3>CCf_PASS_TRACE_PRESENT</span><span class=cF0>);
|
|
<a name="l9"></a> </span><span class=cF1>if</span><span class=cF0> (cc->aot_depth == </span><span class=cFE>2</span><span class=cF0>)
|
|
<a name="l10"></a> </span><span class=cFD>COCPush</span><span class=cF0>(cc);
|
|
<a name="l11"></a> </span><span class=cFD>COCInit</span><span class=cF0>(cc);
|
|
<a name="l12"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cFD>ParseStatement</span><span class=cF7>(</span><span class=cF0>cc,,, comp_flags</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l13"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l14"></a> </span><span class=cF1>if</span><span class=cF0> (cc->coc.coc_head.next != &cc->coc.coc_head)
|
|
<a name="l15"></a> {
|
|
<a name="l16"></a> cc->coc.coc_head.last->ic_flags &= ~</span><span class=cF3>ICF_RES_NOT_USED</span><span class=cF0>;
|
|
<a name="l17"></a> </span><span class=cFD>ICAdd</span><span class=cF0>(cc, </span><span class=cF3>IC_RETURN_VAL2</span><span class=cF0>, </span><span class=cFE>0</span><span class=cF0>, </span><span class=cFE>0</span><span class=cF0>);
|
|
<a name="l18"></a> </span><span class=cFD>ICAdd</span><span class=cF0>(cc, </span><span class=cF3>IC_RET</span><span class=cF0>, </span><span class=cFE>0</span><span class=cF0>, </span><span class=cFE>0</span><span class=cF0>);
|
|
<a name="l19"></a> </span><span class=cF1>if</span><span class=cF0> (res = </span><span class=cFD>COCCompile</span><span class=cF7>(</span><span class=cF0>cc, &size, </span><span class=cF3>NULL</span><span class=cF0>, _type</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l20"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l21"></a> </span><span class=cF1>if</span><span class=cF0> (cc->flags & </span><span class=cF3>CCF_AOT_COMPILE</span><span class=cF0>)
|
|
<a name="l22"></a> {
|
|
<a name="l23"></a> j = cc->aotc->rip;
|
|
<a name="l24"></a> k = (size + </span><span class=cFE>7</span><span class=cF0>) >> </span><span class=cFE>3</span><span class=cF0>;
|
|
<a name="l25"></a> </span><span class=cF1>for</span><span class=cF0> (i = </span><span class=cFE>0</span><span class=cF0>; i < k; i++)
|
|
<a name="l26"></a> </span><span class=cFD>AOTStoreCodeU64</span><span class=cF0>(cc, res[i]);
|
|
<a name="l27"></a> </span><span class=cF5>Free</span><span class=cF0>(res);
|
|
<a name="l28"></a> res = j;
|
|
<a name="l29"></a> }
|
|
<a name="l30"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l31"></a> } </span><span class=cF2>//TODO: else del misc?</span><span class=cF0>
|
|
<a name="l32"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l33"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF2>//TODO: too dangerous to del Misc?</span><span class=cF0>
|
|
<a name="l34"></a> </span><span class=cF5>QueueDel</span><span class=cF0>(&cc->coc.coc_head.next);
|
|
<a name="l35"></a> </span><span class=cF1>if</span><span class=cF0> (cc->aot_depth == </span><span class=cFE>2</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l36"></a> tmpcbh = </span><span class=cFD>COCPopNoFree</span><span class=cF0>(cc);
|
|
<a name="l37"></a> </span><span class=cFD>COCAppend</span><span class=cF0>(cc, tmpcbh);
|
|
<a name="l38"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l39"></a>
|
|
<a name="l40"></a> </span><span class=cF1>return</span><span class=cF0> res;
|
|
<a name="l41"></a>}
|
|
<a name="l42"></a>
|
|
<a name="l43"></a></span><span class=cF9>CAOT</span><span class=cF0> *</span><span class=cFD>CompJoin</span><span class=cF0>(</span><span class=cF9>CCompCtrl</span><span class=cF0> *cc, </span><span class=cF9>I64</span><span class=cF0> comp_flags, </span><span class=cF1>U8</span><span class=cF0> *map_name=</span><span class=cF3>NULL</span><span class=cF0>, </span><span class=cF1>U8</span><span class=cF0> mapfile_drive_let=</span><span class=cFE>0</span><span class=cF0>)
|
|
<a name="l44"></a>{
|
|
<a name="l45"></a> </span><span class=cF9>CAOTCtrl</span><span class=cF0> *aotc, *old_aot = cc->aotc;
|
|
<a name="l46"></a> </span><span class=cF9>I64</span><span class=cF0> i, j, l;
|
|
<a name="l47"></a> </span><span class=cF1>U8</span><span class=cF0> *buf;
|
|
<a name="l48"></a> </span><span class=cF9>CAOTBinBlk</span><span class=cF0> *tmpbin;
|
|
<a name="l49"></a> </span><span class=cF9>CAOTImportExport</span><span class=cF0> *tmpie;
|
|
<a name="l50"></a> </span><span class=cF1>Bool</span><span class=cF0> okay = </span><span class=cF3>TRUE</span><span class=cF0>;
|
|
<a name="l51"></a> </span><span class=cF9>CLexHashTableContext</span><span class=cF0> *htc = </span><span class=cF5>MAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CLexHashTableContext</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l52"></a> </span><span class=cF9>CAOT</span><span class=cF0> *res = </span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CAOT</span><span class=cF7>)</span><span class=cF0>), *parent;
|
|
<a name="l53"></a>
|
|
<a name="l54"></a> </span><span class=cF1>if</span><span class=cF0> (parent = cc->aot)
|
|
<a name="l55"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l56"></a> res->parent_aot = parent;
|
|
<a name="l57"></a> </span><span class=cF5>QueueInsert</span><span class=cF0>(res, parent->last);
|
|
<a name="l58"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l59"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l60"></a> </span><span class=cF5>QueueInit</span><span class=cF0>(res);
|
|
<a name="l61"></a> cc->aot = res;
|
|
<a name="l62"></a>
|
|
<a name="l63"></a> res->next_ie = res->last_ie = &res->next_ie;
|
|
<a name="l64"></a> cc->aotc = aotc = </span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CAOTCtrl</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l65"></a> cc->aot_depth++;
|
|
<a name="l66"></a>
|
|
<a name="l67"></a> aotc->bin = </span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CAOTBinBlk</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l68"></a> aotc->max_align_bits = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l69"></a> aotc->org = </span><span class=cF3>INVALID_PTR</span><span class=cF0>;
|
|
<a name="l70"></a>
|
|
<a name="l71"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(htc, &cc->htc, </span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CLexHashTableContext</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l72"></a> </span><span class=cF1>if</span><span class=cF0> (cc->htc.fun)
|
|
<a name="l73"></a> cc->htc.global_hash_table = </span><span class=cF5>HashTableNew</span><span class=cF0>(</span><span class=cFE>128</span><span class=cF0>);
|
|
<a name="l74"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l75"></a> cc->htc.global_hash_table = </span><span class=cF5>HashTableNew</span><span class=cF0>(</span><span class=cFE>1024</span><span class=cF0>);
|
|
<a name="l76"></a> </span><span class=cF1>if</span><span class=cF0> (cc->flags & </span><span class=cF3>CCF_AOT_COMPILE</span><span class=cF0>)
|
|
<a name="l77"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l78"></a> cc->htc.define_hash_table = cc->htc.global_hash_table;
|
|
<a name="l79"></a> </span><span class=cF1>if</span><span class=cF0> (cc->aot_depth <= </span><span class=cFE>1</span><span class=cF0>)
|
|
<a name="l80"></a> cc->htc.global_hash_table->next = </span><span class=cFB>cmp</span><span class=cF0>.asm_hash;
|
|
<a name="l81"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l82"></a> cc->htc.global_hash_table->next = htc->global_hash_table;
|
|
<a name="l83"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l84"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l85"></a> cc->htc.global_hash_table->next = </span><span class=cF5>Fs</span><span class=cF0>->hash_table;
|
|
<a name="l86"></a> cc->htc.hash_table_list = cc->htc.local_hash_table = </span><span class=cF5>HashTableNew</span><span class=cF0>(</span><span class=cFE>16</span><span class=cF0>);
|
|
<a name="l87"></a> cc->htc.local_hash_table->next = cc->htc.global_hash_table;
|
|
<a name="l88"></a> cc->htc.local_var_list = cc->htc.fun; </span><span class=cF2>//CosmiC local vars</span><span class=cF0>
|
|
<a name="l89"></a> cc->htc.fun = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l90"></a> </span><span class=cF1>try</span><span class=cF0>
|
|
<a name="l91"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l92"></a> </span><span class=cF1>if</span><span class=cF0> (comp_flags & </span><span class=cF3>CMPF_LEX_FIRST</span><span class=cF0>)
|
|
<a name="l93"></a> </span><span class=cF5>Lex</span><span class=cF0>(cc);
|
|
<a name="l94"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>comp_flags & </span><span class=cF3>CMPF_ONE_ASM_INS</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l95"></a> comp_flags |= </span><span class=cF3>CMPF_PRS_SEMICOLON</span><span class=cF0>;
|
|
<a name="l96"></a> </span><span class=cF1>if</span><span class=cF0> (cc->flags & </span><span class=cF3>CCF_AOT_COMPILE</span><span class=cF0>)
|
|
<a name="l97"></a> {
|
|
<a name="l98"></a> </span><span class=cF1>while</span><span class=cF0> (cc->token != </span><span class=cF3>TK_EOF</span><span class=cF0>)
|
|
<a name="l99"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l100"></a> buf = </span><span class=cF5>LexStatement2Bin</span><span class=cF0>(cc, </span><span class=cF3>NULL</span><span class=cF0>, comp_flags);
|
|
<a name="l101"></a> </span><span class=cF1>if</span><span class=cF0> (buf != </span><span class=cF3>INVALID_PTR</span><span class=cF0>)
|
|
<a name="l102"></a> {
|
|
<a name="l103"></a> tmpie = </span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CAOTImportExport</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l104"></a> tmpie->type = </span><span class=cF3>IET_MAIN</span><span class=cF0>;
|
|
<a name="l105"></a> tmpie->rip = buf;
|
|
<a name="l106"></a> </span><span class=cF5>QueueInsert</span><span class=cF0>(tmpie, res->last_ie);
|
|
<a name="l107"></a> }
|
|
<a name="l108"></a> </span><span class=cF1>if</span><span class=cF0> (comp_flags & </span><span class=cF3>CMPF_ASM_BLK</span><span class=cF0>)
|
|
<a name="l109"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l110"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l111"></a> }
|
|
<a name="l112"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l113"></a> </span><span class=cFD>ParseStatement</span><span class=cF0>(cc,,, comp_flags);
|
|
<a name="l114"></a> </span><span class=cFD>AOTGlobalsResolve</span><span class=cF0>(cc, res);
|
|
<a name="l115"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l116"></a> </span><span class=cF1>catch</span><span class=cF0>
|
|
<a name="l117"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l118"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Fs</span><span class=cF0>->except_ch == </span><span class=cF6>'Compiler'</span><span class=cF0> && !</span><span class=cF7>(</span><span class=cF0>comp_flags & </span><span class=cF3>CMPF_ASM_BLK</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l119"></a> {
|
|
<a name="l120"></a> </span><span class=cF5>LexPutPos</span><span class=cF0>(cc);
|
|
<a name="l121"></a> </span><span class=cF5>Fs</span><span class=cF0>->catch_except = </span><span class=cF3>TRUE</span><span class=cF0>;
|
|
<a name="l122"></a> }
|
|
<a name="l123"></a> okay = </span><span class=cF3>FALSE</span><span class=cF0>;
|
|
<a name="l124"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l125"></a> </span><span class=cF1>if</span><span class=cF0> (!okay)
|
|
<a name="l126"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l127"></a> </span><span class=cF1>if</span><span class=cF0> (cc->error_count < </span><span class=cFE>1</span><span class=cF0>)
|
|
<a name="l128"></a> cc->error_count = </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l129"></a> cc->aot = res->parent_aot;
|
|
<a name="l130"></a> </span><span class=cF5>Free</span><span class=cF0>(res);
|
|
<a name="l131"></a> </span><span class=cF5>LinkedListDel</span><span class=cF0>(aotc->bin);
|
|
<a name="l132"></a> res = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l133"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l134"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l135"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l136"></a> </span><span class=cF1>if</span><span class=cF0> (map_name)
|
|
<a name="l137"></a> </span><span class=cFD>MapFileWrite</span><span class=cF0>(cc->htc.global_hash_table, map_name, mapfile_drive_let);
|
|
<a name="l138"></a> </span><span class=cF5>HashTableDel</span><span class=cF0>(cc->htc.local_hash_table);
|
|
<a name="l139"></a> </span><span class=cF5>HashTableDel</span><span class=cF0>(cc->htc.global_hash_table);
|
|
<a name="l140"></a>
|
|
<a name="l141"></a> </span><span class=cF1>if</span><span class=cF0> (!aotc->num_bin_U8s)
|
|
<a name="l142"></a> res->buf = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l143"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l144"></a> {
|
|
<a name="l145"></a> </span><span class=cF1>if</span><span class=cF0> (cc->flags & </span><span class=cF3>CCF_AOT_COMPILE</span><span class=cF0>)
|
|
<a name="l146"></a> res->buf = </span><span class=cF5>MAlloc</span><span class=cF0>(aotc->num_bin_U8s);
|
|
<a name="l147"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l148"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l149"></a> </span><span class=cF1>if</span><span class=cF0> (aotc->org == </span><span class=cF3>INVALID_PTR</span><span class=cF0>)
|
|
<a name="l150"></a> res->buf = </span><span class=cF5>MAlloc</span><span class=cF0>(aotc->num_bin_U8s, </span><span class=cF5>Fs</span><span class=cF0>->code_heap);
|
|
<a name="l151"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l152"></a> res->buf = aotc->org;
|
|
<a name="l153"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l154"></a> res->aot_U8s = aotc->num_bin_U8s;
|
|
<a name="l155"></a> tmpbin = aotc->bin;
|
|
<a name="l156"></a> j = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l157"></a> l = aotc->num_bin_U8s;
|
|
<a name="l158"></a> </span><span class=cF1>while</span><span class=cF0> (tmpbin)
|
|
<a name="l159"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l160"></a> i = l;
|
|
<a name="l161"></a> </span><span class=cF1>if</span><span class=cF0> (i > </span><span class=cF3>AOT_BIN_BLK_SIZE</span><span class=cF0>)
|
|
<a name="l162"></a> i = </span><span class=cF3>AOT_BIN_BLK_SIZE</span><span class=cF0>;
|
|
<a name="l163"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(res->buf + j, tmpbin->body, i);
|
|
<a name="l164"></a> j += i;
|
|
<a name="l165"></a> l -= i;
|
|
<a name="l166"></a> tmpbin = tmpbin->next;
|
|
<a name="l167"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l168"></a> }
|
|
<a name="l169"></a> </span><span class=cF5>LinkedListDel</span><span class=cF0>(aotc->bin);
|
|
<a name="l170"></a> res->abss = aotc->abss;
|
|
<a name="l171"></a> res->heap_globals = aotc->heap_globals;
|
|
<a name="l172"></a> res->max_align_bits = aotc->max_align_bits;
|
|
<a name="l173"></a> res->org = aotc->org;
|
|
<a name="l174"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l175"></a> cc->aot = parent;
|
|
<a name="l176"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(&cc->htc, htc, </span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CLexHashTableContext</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l177"></a> </span><span class=cF5>Free</span><span class=cF0>(htc);
|
|
<a name="l178"></a> </span><span class=cF5>Free</span><span class=cF0>(aotc);
|
|
<a name="l179"></a> cc->aotc = old_aot;
|
|
<a name="l180"></a> cc->aot_depth--;
|
|
<a name="l181"></a>
|
|
<a name="l182"></a> </span><span class=cF1>return</span><span class=cF0> res;
|
|
<a name="l183"></a>}
|
|
<a name="l184"></a>
|
|
<a name="l185"></a></span><span class=cF9>CAOT</span><span class=cF0> *</span><span class=cFD>CompBuf</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *buf, </span><span class=cF1>U8</span><span class=cF0> *map_name=</span><span class=cF3>NULL</span><span class=cF0>, </span><span class=cF9>I64</span><span class=cF0> *error_count=</span><span class=cF3>NULL</span><span class=cF0>, </span><span class=cF9>I64</span><span class=cF0> *warning_count=</span><span class=cF3>NULL</span><span class=cF0>, </span><span class=cF1>U8</span><span class=cF0> mapfile_drive_let=</span><span class=cFE>0</span><span class=cF0>)
|
|
<a name="l186"></a>{
|
|
<a name="l187"></a> </span><span class=cF9>CCompCtrl</span><span class=cF0> *cc;
|
|
<a name="l188"></a> </span><span class=cF9>CAOT</span><span class=cF0> *res = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l189"></a>
|
|
<a name="l190"></a> cc = </span><span class=cF5>CompCtrlNew</span><span class=cF0>(buf, </span><span class=cF3>CCF_DONT_FREE_BUF</span><span class=cF0>);
|
|
<a name="l191"></a> cc->flags |= </span><span class=cF3>CCF_AOT_COMPILE</span><span class=cF0>;
|
|
<a name="l192"></a> </span><span class=cF5>QueueInsert</span><span class=cF0>(cc, </span><span class=cF5>Fs</span><span class=cF0>->last_cc);
|
|
<a name="l193"></a> res = </span><span class=cFD>CompJoin</span><span class=cF0>(cc, </span><span class=cF3>CMPF_LEX_FIRST</span><span class=cF0>, map_name, mapfile_drive_let);
|
|
<a name="l194"></a> </span><span class=cF1>if</span><span class=cF0> (error_count)
|
|
<a name="l195"></a> *error_count = cc->error_count;
|
|
<a name="l196"></a> </span><span class=cF1>if</span><span class=cF0> (warning_count)
|
|
<a name="l197"></a> *warning_count = cc->warning_count;
|
|
<a name="l198"></a> </span><span class=cF5>QueueRemove</span><span class=cF0>(cc);
|
|
<a name="l199"></a> </span><span class=cF1>if</span><span class=cF0> (res)
|
|
<a name="l200"></a> </span><span class=cF5>CompCtrlDel</span><span class=cF0>(cc);
|
|
<a name="l201"></a>
|
|
<a name="l202"></a> </span><span class=cF1>return</span><span class=cF0> res;
|
|
<a name="l203"></a>}
|
|
<a name="l204"></a>
|
|
<a name="l205"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cFD>CompFixUpJITAsm</span><span class=cF0>(</span><span class=cF9>CCompCtrl</span><span class=cF0> *cc, </span><span class=cF9>CAOT</span><span class=cF0> *tmpaot)
|
|
<a name="l206"></a>{
|
|
<a name="l207"></a> </span><span class=cF9>I64</span><span class=cF0> i, rip2 = tmpaot->buf + tmpaot->rip, *str = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l208"></a> </span><span class=cF1>U8</span><span class=cF0> *ptr;
|
|
<a name="l209"></a> </span><span class=cF9>CCodeMisc</span><span class=cF0> *g_lb;
|
|
<a name="l210"></a> </span><span class=cF9>CAOTAbsAddr</span><span class=cF0> *tmpa, *tmpa1;
|
|
<a name="l211"></a> </span><span class=cF9>CAOTImportExport</span><span class=cF0> *tmpie, *tmpie1;
|
|
<a name="l212"></a> </span><span class=cF9>CHashExport</span><span class=cF0> *tmpex;
|
|
<a name="l213"></a>
|
|
<a name="l214"></a> tmpa = tmpaot->abss;
|
|
<a name="l215"></a> </span><span class=cF1>while</span><span class=cF0> (tmpa)
|
|
<a name="l216"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l217"></a> tmpa1 = tmpa->next;
|
|
<a name="l218"></a> ptr = rip2 + tmpa->rip;
|
|
<a name="l219"></a> </span><span class=cF1>switch</span><span class=cF0> [tmpa->type]
|
|
<a name="l220"></a> {
|
|
<a name="l221"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>AAT_ADD_U8</span><span class=cF0>: *ptr(</span><span class=cF1>U8</span><span class=cF0> *) += rip2; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l222"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>AAT_SUB_U8</span><span class=cF0>: *ptr(</span><span class=cF1>U8</span><span class=cF0> *) -= rip2; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l223"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>AAT_ADD_U16</span><span class=cF0>: *ptr(</span><span class=cF9>U16</span><span class=cF0> *) += rip2; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l224"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>AAT_SUB_U16</span><span class=cF0>: *ptr(</span><span class=cF9>U16</span><span class=cF0> *) -= rip2; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l225"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>AAT_ADD_U32</span><span class=cF0>: *ptr(</span><span class=cF9>U32</span><span class=cF0> *) += rip2; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l226"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>AAT_SUB_U32</span><span class=cF0>: *ptr(</span><span class=cF9>U32</span><span class=cF0> *) -= rip2; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l227"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>AAT_ADD_U64</span><span class=cF0>: *ptr(</span><span class=cF9>I64</span><span class=cF0> *) += rip2; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l228"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>AAT_SUB_U64</span><span class=cF0>: *ptr(</span><span class=cF9>I64</span><span class=cF0> *) -= rip2; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l229"></a> }
|
|
<a name="l230"></a> </span><span class=cF5>Free</span><span class=cF0>(tmpa);
|
|
<a name="l231"></a> tmpa = tmpa1;
|
|
<a name="l232"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l233"></a> tmpie = tmpaot->next_ie;
|
|
<a name="l234"></a> </span><span class=cF1>while</span><span class=cF0> (tmpie != &tmpaot->next_ie)
|
|
<a name="l235"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l236"></a> tmpie1 = tmpie->next;
|
|
<a name="l237"></a> </span><span class=cF1>if</span><span class=cF0> (tmpie->str)
|
|
<a name="l238"></a> {
|
|
<a name="l239"></a> </span><span class=cF5>Free</span><span class=cF0>(str);
|
|
<a name="l240"></a> str = tmpie->str;
|
|
<a name="l241"></a> }
|
|
<a name="l242"></a> </span><span class=cF1>switch</span><span class=cF0> (tmpie->type)
|
|
<a name="l243"></a> {
|
|
<a name="l244"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_REL32_EXPORT</span><span class=cF0>:
|
|
<a name="l245"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_IMM32_EXPORT</span><span class=cF0>:
|
|
<a name="l246"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_REL64_EXPORT</span><span class=cF0>:
|
|
<a name="l247"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_IMM64_EXPORT</span><span class=cF0>:
|
|
<a name="l248"></a> tmpex = </span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CHashExport</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l249"></a> tmpex->str = str;
|
|
<a name="l250"></a> str = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l251"></a> tmpex->type = </span><span class=cF3>HTT_EXPORT_SYS_SYM</span><span class=cF0> | </span><span class=cF3>HTF_IMM</span><span class=cF0>;
|
|
<a name="l252"></a> </span><span class=cF1>if</span><span class=cF0> (tmpie->type == </span><span class=cF3>IET_IMM32_EXPORT</span><span class=cF0> || tmpie->type == </span><span class=cF3>IET_IMM64_EXPORT</span><span class=cF0>)
|
|
<a name="l253"></a> tmpex->val = tmpie->rip;
|
|
<a name="l254"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l255"></a> tmpex->val = tmpie->rip + rip2;
|
|
<a name="l256"></a> tmpex->src_link = tmpie->src_link;
|
|
<a name="l257"></a> tmpie->src_link = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l258"></a> </span><span class=cF5>HashAdd</span><span class=cF0>(tmpex, </span><span class=cF5>Fs</span><span class=cF0>->hash_table);
|
|
<a name="l259"></a> </span><span class=cF5>SysSymImportsResolve</span><span class=cF0>(tmpex->str);
|
|
<a name="l260"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l261"></a>
|
|
<a name="l262"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_REL_I0</span><span class=cF0>...</span><span class=cF3>IET_IMM_I64</span><span class=cF0>:
|
|
<a name="l263"></a> </span><span class=cF1>if</span><span class=cF0> (tmpie->str)
|
|
<a name="l264"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l265"></a> </span><span class=cF1>if</span><span class=cF0> (tmpie->flags & </span><span class=cF3>IEF_GOTO_LABEL</span><span class=cF0>)
|
|
<a name="l266"></a> {
|
|
<a name="l267"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>g_lb = </span><span class=cFD>COCGoToLabelFind</span><span class=cF0>(cc, str)</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l268"></a> </span><span class=cF6>"Unresolved Reference:%s\n"</span><span class=cF0>, str;
|
|
<a name="l269"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l270"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l271"></a> g_lb->use_count++;
|
|
<a name="l272"></a> g_lb = </span><span class=cFD>OptLabelFwd</span><span class=cF0>(g_lb);
|
|
<a name="l273"></a> i = g_lb->addr + tmpaot->buf;
|
|
<a name="l274"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l275"></a> tmpex = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l276"></a> }
|
|
<a name="l277"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l278"></a> {
|
|
<a name="l279"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>tmpex = </span><span class=cF5>HashFind</span><span class=cF0>(str, </span><span class=cF5>Fs</span><span class=cF0>->hash_table, </span><span class=cF3>HTG_ALL</span><span class=cF0> - </span><span class=cF3>HTT_IMPORT_SYS_SYM</span><span class=cF0>)</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l280"></a> </span><span class=cF6>"Unresolved Reference:%s\n"</span><span class=cF0>, str;
|
|
<a name="l281"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l282"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l283"></a> </span><span class=cF1>if</span><span class=cF0> (tmpex->type & </span><span class=cF3>HTT_FUN</span><span class=cF0>)
|
|
<a name="l284"></a> i = tmpex(</span><span class=cF9>CHashFun</span><span class=cF0> *)->exe_addr;
|
|
<a name="l285"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (tmpex->type & </span><span class=cF3>HTT_GLOBAL_VAR</span><span class=cF0>)
|
|
<a name="l286"></a> i = tmpex(</span><span class=cF9>CHashGlobalVar</span><span class=cF0> *)->data_addr;
|
|
<a name="l287"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l288"></a> i = tmpex->val;
|
|
<a name="l289"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l290"></a> g_lb = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l291"></a> }
|
|
<a name="l292"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l293"></a> </span><span class=cF1>if</span><span class=cF0> (tmpex || g_lb)
|
|
<a name="l294"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l295"></a> ptr = tmpie->rip + rip2;
|
|
<a name="l296"></a> </span><span class=cF1>switch</span><span class=cF0> [tmpie->type]
|
|
<a name="l297"></a> {
|
|
<a name="l298"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_REL_I0</span><span class=cF0>:
|
|
<a name="l299"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_IMM_U0</span><span class=cF0>:
|
|
<a name="l300"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l301"></a>
|
|
<a name="l302"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_REL_I8</span><span class=cF0>:
|
|
<a name="l303"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF3>I8_MIN</span><span class=cF0> <= i - ptr - </span><span class=cFE>1</span><span class=cF0> <= </span><span class=cF3>I8_MAX</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l304"></a> </span><span class=cF5>LexExcept</span><span class=cF0>(cc, </span><span class=cF6>"Branch out of range at "</span><span class=cF0>);
|
|
<a name="l305"></a> *ptr(</span><span class=cF1>U8</span><span class=cF0> *) = i - ptr - </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l306"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l307"></a>
|
|
<a name="l308"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_IMM_U8</span><span class=cF0>:
|
|
<a name="l309"></a> *ptr(</span><span class=cF1>U8</span><span class=cF0> *) = i;
|
|
<a name="l310"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l311"></a>
|
|
<a name="l312"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_REL_I16</span><span class=cF0>:
|
|
<a name="l313"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF3>I16_MIN</span><span class=cF0> <= i - ptr - </span><span class=cFE>2</span><span class=cF0> <= </span><span class=cF3>I16_MAX</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l314"></a> </span><span class=cF5>LexExcept</span><span class=cF0>(cc, </span><span class=cF6>"Branch out of range at "</span><span class=cF0>);
|
|
<a name="l315"></a> *ptr(</span><span class=cF9>U16</span><span class=cF0> *) = i - ptr - </span><span class=cFE>2</span><span class=cF0>;
|
|
<a name="l316"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l317"></a>
|
|
<a name="l318"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_IMM_U16</span><span class=cF0>:
|
|
<a name="l319"></a> *ptr(</span><span class=cF9>U16</span><span class=cF0> *) = i;
|
|
<a name="l320"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l321"></a>
|
|
<a name="l322"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_REL_I32</span><span class=cF0>:
|
|
<a name="l323"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF3>I32_MIN</span><span class=cF0> <= i - ptr - </span><span class=cFE>4</span><span class=cF0> <= </span><span class=cF3>I32_MAX</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l324"></a> </span><span class=cF5>LexExcept</span><span class=cF0>(cc, </span><span class=cF6>"Branch out of range at "</span><span class=cF0>);
|
|
<a name="l325"></a> *ptr(</span><span class=cF9>U32</span><span class=cF0> *) = i - ptr - </span><span class=cFE>4</span><span class=cF0>;
|
|
<a name="l326"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l327"></a>
|
|
<a name="l328"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_IMM_U32</span><span class=cF0>:
|
|
<a name="l329"></a> *ptr(</span><span class=cF9>U32</span><span class=cF0> *) = i;
|
|
<a name="l330"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l331"></a>
|
|
<a name="l332"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_REL_I64</span><span class=cF0>:
|
|
<a name="l333"></a> *ptr(</span><span class=cF9>I64</span><span class=cF0> *) = i - ptr - </span><span class=cFE>8</span><span class=cF0>;
|
|
<a name="l334"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l335"></a>
|
|
<a name="l336"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_IMM_I64</span><span class=cF0>:
|
|
<a name="l337"></a> *ptr(</span><span class=cF9>I64</span><span class=cF0> *) = i;
|
|
<a name="l338"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l339"></a> }
|
|
<a name="l340"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l341"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l342"></a> }
|
|
<a name="l343"></a> </span><span class=cF5>Free</span><span class=cF0>(tmpie->src_link);
|
|
<a name="l344"></a> </span><span class=cF5>Free</span><span class=cF0>(tmpie);
|
|
<a name="l345"></a> tmpie = tmpie1;
|
|
<a name="l346"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l347"></a> </span><span class=cF5>Free</span><span class=cF0>(str);
|
|
<a name="l348"></a> </span><span class=cF1>if</span><span class=cF0> (!cc->aot_depth && </span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&cc->opts, </span><span class=cF3>OPTf_TRACE</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l349"></a> </span><span class=cF5>Un</span><span class=cF0>(rip2, tmpaot->aot_U8s, </span><span class=cFE>64</span><span class=cF0>);
|
|
<a name="l350"></a> </span><span class=cF5>QueueRemove</span><span class=cF0>(tmpaot);
|
|
<a name="l351"></a> </span><span class=cF5>Free</span><span class=cF0>(tmpaot);
|
|
<a name="l352"></a>}
|
|
<a name="l353"></a>
|
|
<a name="l354"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cFD>CompFixUpAOTAsm</span><span class=cF0>(</span><span class=cF9>CCompCtrl</span><span class=cF0> *cc, </span><span class=cF9>CAOT</span><span class=cF0> *tmpaot)
|
|
<a name="l355"></a>{
|
|
<a name="l356"></a> </span><span class=cF9>CAOTCtrl</span><span class=cF0> *aotc = cc->aotc;
|
|
<a name="l357"></a> </span><span class=cF9>I64</span><span class=cF0> i, rip2 = tmpaot->rip + cc->aotc->rip;
|
|
<a name="l358"></a> </span><span class=cF1>U8</span><span class=cF0> *ptr;
|
|
<a name="l359"></a> </span><span class=cF9>CCodeMisc</span><span class=cF0> *g_lb = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l360"></a> </span><span class=cF9>CAOTAbsAddr</span><span class=cF0> *tmpa, *tmpa1;
|
|
<a name="l361"></a> </span><span class=cF9>CAOTImportExport</span><span class=cF0> *tmpie, *tmpie1;
|
|
<a name="l362"></a>
|
|
<a name="l363"></a> tmpa = tmpaot->abss;
|
|
<a name="l364"></a> </span><span class=cF1>while</span><span class=cF0> (tmpa)
|
|
<a name="l365"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l366"></a> tmpa1 = tmpa->next;
|
|
<a name="l367"></a> tmpa->next = aotc->abss;
|
|
<a name="l368"></a> ptr = tmpaot->buf + tmpaot->rip + tmpa->rip;
|
|
<a name="l369"></a> </span><span class=cF1>switch</span><span class=cF0> [tmpa->type]
|
|
<a name="l370"></a> {
|
|
<a name="l371"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>AAT_ADD_U8</span><span class=cF0>: *ptr(</span><span class=cF1>U8</span><span class=cF0> *) += rip2; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l372"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>AAT_SUB_U8</span><span class=cF0>: *ptr(</span><span class=cF1>U8</span><span class=cF0> *) -= rip2; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l373"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>AAT_ADD_U16</span><span class=cF0>: *ptr(</span><span class=cF9>U16</span><span class=cF0> *) += rip2; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l374"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>AAT_SUB_U16</span><span class=cF0>: *ptr(</span><span class=cF9>U16</span><span class=cF0> *) -= rip2; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l375"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>AAT_ADD_U32</span><span class=cF0>: *ptr(</span><span class=cF9>U32</span><span class=cF0> *) += rip2; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l376"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>AAT_SUB_U32</span><span class=cF0>: *ptr(</span><span class=cF9>U32</span><span class=cF0> *) -= rip2; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l377"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>AAT_ADD_U64</span><span class=cF0>: *ptr(</span><span class=cF9>I64</span><span class=cF0> *) += rip2; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l378"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>AAT_SUB_U64</span><span class=cF0>: *ptr(</span><span class=cF9>I64</span><span class=cF0> *) -= rip2; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l379"></a> }
|
|
<a name="l380"></a> aotc->abss = tmpa;
|
|
<a name="l381"></a> tmpa->rip += rip2;
|
|
<a name="l382"></a> tmpa = tmpa1;
|
|
<a name="l383"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l384"></a>
|
|
<a name="l385"></a> tmpie = tmpaot->next_ie;
|
|
<a name="l386"></a> </span><span class=cF1>while</span><span class=cF0> (tmpie != &tmpaot->next_ie)
|
|
<a name="l387"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l388"></a> tmpie1 = tmpie->next;
|
|
<a name="l389"></a> </span><span class=cF5>QueueRemove</span><span class=cF0>(tmpie);
|
|
<a name="l390"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF3>IET_REL_I0</span><span class=cF0> <= tmpie->type <= </span><span class=cF3>IET_IMM_I64</span><span class=cF0>)
|
|
<a name="l391"></a> {
|
|
<a name="l392"></a> </span><span class=cF1>if</span><span class=cF0> (tmpie->str)
|
|
<a name="l393"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l394"></a> </span><span class=cF1>if</span><span class=cF0> (tmpie->flags & </span><span class=cF3>IEF_GOTO_LABEL</span><span class=cF0>)
|
|
<a name="l395"></a> {
|
|
<a name="l396"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>g_lb = </span><span class=cFD>COCGoToLabelFind</span><span class=cF0>(cc, tmpie->str)</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l397"></a> </span><span class=cF6>"Unresolved Reference:%s\n"</span><span class=cF0>, tmpie->str;
|
|
<a name="l398"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l399"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l400"></a> g_lb->use_count++;
|
|
<a name="l401"></a> g_lb = </span><span class=cFD>OptLabelFwd</span><span class=cF0>(g_lb);
|
|
<a name="l402"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l403"></a> }
|
|
<a name="l404"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l405"></a> g_lb = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l406"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l407"></a> }
|
|
<a name="l408"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l409"></a> g_lb = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l410"></a>
|
|
<a name="l411"></a> ptr = tmpaot->buf + tmpaot->rip + tmpie->rip;
|
|
<a name="l412"></a> </span><span class=cF1>if</span><span class=cF0> (g_lb)
|
|
<a name="l413"></a> {
|
|
<a name="l414"></a> i = g_lb->addr + tmpaot->buf;
|
|
<a name="l415"></a> </span><span class=cF1>switch</span><span class=cF0> [tmpie->type]
|
|
<a name="l416"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l417"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_REL_I0</span><span class=cF0>:
|
|
<a name="l418"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_IMM_U0</span><span class=cF0>:
|
|
<a name="l419"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l420"></a>
|
|
<a name="l421"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_REL_I8</span><span class=cF0>:
|
|
<a name="l422"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF3>I8_MIN</span><span class=cF0> <= i - ptr - </span><span class=cFE>1</span><span class=cF0> <= </span><span class=cF3>I8_MAX</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l423"></a> </span><span class=cF5>LexExcept</span><span class=cF0>(cc, </span><span class=cF6>"Branch out of range at "</span><span class=cF0>);
|
|
<a name="l424"></a> *ptr(</span><span class=cF1>U8</span><span class=cF0> *) = i - ptr - </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l425"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l426"></a>
|
|
<a name="l427"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_IMM_U8</span><span class=cF0>:
|
|
<a name="l428"></a> *ptr(</span><span class=cF1>U8</span><span class=cF0> *) = i;
|
|
<a name="l429"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l430"></a>
|
|
<a name="l431"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_REL_I16</span><span class=cF0>:
|
|
<a name="l432"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF3>I16_MIN</span><span class=cF0> <= i - ptr - </span><span class=cFE>2</span><span class=cF0> <= </span><span class=cF3>I16_MAX</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l433"></a> </span><span class=cF5>LexExcept</span><span class=cF0>(cc, </span><span class=cF6>"Branch out of range at "</span><span class=cF0>);
|
|
<a name="l434"></a> *ptr(</span><span class=cF9>U16</span><span class=cF0> *) = i - ptr - </span><span class=cFE>2</span><span class=cF0>;
|
|
<a name="l435"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l436"></a>
|
|
<a name="l437"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_IMM_U16</span><span class=cF0>:
|
|
<a name="l438"></a> *ptr(</span><span class=cF9>U16</span><span class=cF0> *) = i;
|
|
<a name="l439"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l440"></a>
|
|
<a name="l441"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_REL_I32</span><span class=cF0>:
|
|
<a name="l442"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF3>I32_MIN</span><span class=cF0> <= i - ptr - </span><span class=cFE>4</span><span class=cF0> <= </span><span class=cF3>I32_MAX</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l443"></a> </span><span class=cF5>LexExcept</span><span class=cF0>(cc, </span><span class=cF6>"Branch out of range at "</span><span class=cF0>);
|
|
<a name="l444"></a> *ptr(</span><span class=cF9>U32</span><span class=cF0> *) = i - ptr - </span><span class=cFE>4</span><span class=cF0>;
|
|
<a name="l445"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l446"></a>
|
|
<a name="l447"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_IMM_U32</span><span class=cF0>:
|
|
<a name="l448"></a> *ptr(</span><span class=cF9>U32</span><span class=cF0> *) = i;
|
|
<a name="l449"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l450"></a>
|
|
<a name="l451"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_REL_I64</span><span class=cF0>:
|
|
<a name="l452"></a> *ptr(</span><span class=cF9>I64</span><span class=cF0> *) = i - ptr - </span><span class=cFE>8</span><span class=cF0>;
|
|
<a name="l453"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l454"></a>
|
|
<a name="l455"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_IMM_I64</span><span class=cF0>:
|
|
<a name="l456"></a> *ptr(</span><span class=cF9>I64</span><span class=cF0> *) = i;
|
|
<a name="l457"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l458"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l459"></a> </span><span class=cF5>Free</span><span class=cF0>(tmpie->src_link);
|
|
<a name="l460"></a> </span><span class=cF5>Free</span><span class=cF0>(tmpie);
|
|
<a name="l461"></a> }
|
|
<a name="l462"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l463"></a> {
|
|
<a name="l464"></a> </span><span class=cF1>switch</span><span class=cF0> (tmpie->type)
|
|
<a name="l465"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l466"></a> </span><span class=cF1>start</span><span class=cF0>:
|
|
<a name="l467"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_REL32_EXPORT</span><span class=cF0>:
|
|
<a name="l468"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_IMM32_EXPORT</span><span class=cF0>:
|
|
<a name="l469"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_REL64_EXPORT</span><span class=cF0>:
|
|
<a name="l470"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_IMM64_EXPORT</span><span class=cF0>:
|
|
<a name="l471"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_IMM_U0</span><span class=cF0>:
|
|
<a name="l472"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_IMM_U8</span><span class=cF0>:
|
|
<a name="l473"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_IMM_U16</span><span class=cF0>:
|
|
<a name="l474"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_IMM_U32</span><span class=cF0>:
|
|
<a name="l475"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_IMM_I64</span><span class=cF0>:
|
|
<a name="l476"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_REL_I0</span><span class=cF0>:
|
|
<a name="l477"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l478"></a>
|
|
<a name="l479"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_REL_I8</span><span class=cF0>: *ptr(</span><span class=cF1>U8</span><span class=cF0> *) -= rip2; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l480"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_REL_I16</span><span class=cF0>: *ptr(</span><span class=cF9>U16</span><span class=cF0> *) -= rip2; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l481"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_REL_I32</span><span class=cF0>: *ptr(</span><span class=cF9>U32</span><span class=cF0> *) -= rip2; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l482"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>IET_REL_I64</span><span class=cF0>: *ptr(</span><span class=cF9>I64</span><span class=cF0> *) -= rip2; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l483"></a> </span><span class=cF1>end</span><span class=cF0>:
|
|
<a name="l484"></a> tmpie->rip += rip2;
|
|
<a name="l485"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l486"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l487"></a> tmpie->aot = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l488"></a> </span><span class=cF5>QueueInsert</span><span class=cF0>(tmpie, tmpaot->parent_aot->last_ie);
|
|
<a name="l489"></a> }
|
|
<a name="l490"></a> tmpie = tmpie1;
|
|
<a name="l491"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l492"></a>}
|
|
<a name="l493"></a>
|
|
<a name="l494"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>Comp</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *filename, </span><span class=cF1>U8</span><span class=cF0> *map_name=</span><span class=cF3>NULL</span><span class=cF0>, </span><span class=cF1>U8</span><span class=cF0> *out_name=</span><span class=cF3>NULL</span><span class=cF0>, </span><span class=cF1>U8</span><span class=cF0> mapfile_drive_let=</span><span class=cFE>0</span><span class=cF0>)
|
|
<a name="l495"></a>{</span><span class=cF2>//AOT Compile CC or PRJ file a and output BIN file. Returns err_count.</span><span class=cF0>
|
|
<a name="l496"></a> </span><span class=cF1>U8</span><span class=cF0> *ptr, *fbuf = </span><span class=cF3>NULL</span><span class=cF0>, *fbuf2 = </span><span class=cF3>NULL</span><span class=cF0>, *fbuf3 = </span><span class=cF3>NULL</span><span class=cF0>, *patch_table = </span><span class=cF5>MAlloc</span><span class=cF0>(</span><span class=cFE>0x20000</span><span class=cF0>);
|
|
<a name="l497"></a> </span><span class=cF9>CAOT</span><span class=cF0> *tmpaot;
|
|
<a name="l498"></a> </span><span class=cF9>I64</span><span class=cF0> i, count, size = </span><span class=cFE>0</span><span class=cF0>, error_count = </span><span class=cFE>0</span><span class=cF0>, warning_count = </span><span class=cFE>0</span><span class=cF0>, aot_U8s = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l499"></a> </span><span class=cF9>CBinFile</span><span class=cF0> *bfh;
|
|
<a name="l500"></a> </span><span class=cF9>CAOTImportExport</span><span class=cF0> *tmpie, *tmpie1;
|
|
<a name="l501"></a> </span><span class=cF9>CAOTAbsAddr</span><span class=cF0> *tmpa, *tmpa1;
|
|
<a name="l502"></a> </span><span class=cF9>CAOTHeapGlobalRef</span><span class=cF0> *tmphgr, *tmphgr1;
|
|
<a name="l503"></a> </span><span class=cF9>CAOTHeapGlobal</span><span class=cF0> *tmphg, *tmphg1;
|
|
<a name="l504"></a>
|
|
<a name="l505"></a> fbuf = </span><span class=cF5>ExtDefault</span><span class=cF0>(filename, </span><span class=cF6>"PRJ"</span><span class=cF0>);
|
|
<a name="l506"></a> fbuf2 = </span><span class=cF5>MStrPrint</span><span class=cF0>(</span><span class=cF6>"#include \"%s\""</span><span class=cF0>, fbuf);
|
|
<a name="l507"></a> </span><span class=cF1>if</span><span class=cF0> (map_name)
|
|
<a name="l508"></a> fbuf3 = </span><span class=cF5>ExtDefault</span><span class=cF0>(map_name, </span><span class=cF6>"MAP"</span><span class=cF0>);
|
|
<a name="l509"></a>
|
|
<a name="l510"></a> </span><span class=cF1>if</span><span class=cF0> (tmpaot = </span><span class=cFD>CompBuf</span><span class=cF7>(</span><span class=cF0>fbuf2, fbuf3, &error_count, &warning_count, mapfile_drive_let</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l511"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l512"></a> aot_U8s = tmpaot->aot_U8s;
|
|
<a name="l513"></a> ptr = patch_table;
|
|
<a name="l514"></a></span><span class=cF2>//See </span><a href="https://tomawezome.github.io/ZealOS/Kernel/KLoad.CC.html#l208"><span class=cF4>Load</span></a><span class=cF2>()</span><span class=cF0>
|
|
<a name="l515"></a> count = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l516"></a> tmpa = tmpaot->abss;
|
|
<a name="l517"></a> </span><span class=cF1>while</span><span class=cF0> (tmpa)
|
|
<a name="l518"></a> {
|
|
<a name="l519"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>tmpa->type & </span><span class=cF3>IEF_IMM_NOT_REL</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l520"></a> count++;
|
|
<a name="l521"></a> tmpa = tmpa->next;
|
|
<a name="l522"></a> }
|
|
<a name="l523"></a> </span><span class=cF1>if</span><span class=cF0> (count)
|
|
<a name="l524"></a> {
|
|
<a name="l525"></a> *ptr++ = </span><span class=cF3>IET_ABS_ADDR</span><span class=cF0>;
|
|
<a name="l526"></a> *ptr(</span><span class=cF9>U32</span><span class=cF0> *)++ = count;
|
|
<a name="l527"></a> *ptr++ = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l528"></a> tmpa = tmpaot->abss;
|
|
<a name="l529"></a> </span><span class=cF1>while</span><span class=cF0> (tmpa)
|
|
<a name="l530"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l531"></a> tmpa1 = tmpa->next;
|
|
<a name="l532"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>tmpa->type & </span><span class=cF3>IEF_IMM_NOT_REL</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l533"></a> *ptr(</span><span class=cF9>U32</span><span class=cF0> *)++ = tmpa->rip;
|
|
<a name="l534"></a> </span><span class=cF5>Free</span><span class=cF0>(tmpa);
|
|
<a name="l535"></a> tmpa = tmpa1;
|
|
<a name="l536"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l537"></a> }
|
|
<a name="l538"></a> tmphg = tmpaot->heap_globals;
|
|
<a name="l539"></a> </span><span class=cF1>while</span><span class=cF0> (tmphg)
|
|
<a name="l540"></a> {
|
|
<a name="l541"></a> tmphg1 = tmphg->next;
|
|
<a name="l542"></a> count = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l543"></a> tmphgr = tmphg->references;
|
|
<a name="l544"></a> </span><span class=cF1>while</span><span class=cF0> (tmphgr)
|
|
<a name="l545"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l546"></a> count++;
|
|
<a name="l547"></a> tmphgr = tmphgr->next;
|
|
<a name="l548"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l549"></a> </span><span class=cF1>if</span><span class=cF0> (count)
|
|
<a name="l550"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l551"></a> *ptr++ = </span><span class=cF3>IET_DATA_HEAP</span><span class=cF0>;
|
|
<a name="l552"></a> *ptr(</span><span class=cF9>U32</span><span class=cF0> *)++ = count;
|
|
<a name="l553"></a> </span><span class=cF1>if</span><span class=cF0> (tmphg->str)
|
|
<a name="l554"></a> {
|
|
<a name="l555"></a> i = </span><span class=cF5>StrLen</span><span class=cF0>(tmphg->str);
|
|
<a name="l556"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(ptr, tmphg->str, i + </span><span class=cFE>1</span><span class=cF0>);
|
|
<a name="l557"></a> </span><span class=cF5>Free</span><span class=cF0>(tmphg->str);
|
|
<a name="l558"></a> ptr += i + </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l559"></a> }
|
|
<a name="l560"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l561"></a> *ptr++ = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l562"></a> *ptr(</span><span class=cF9>I64</span><span class=cF0> *)++ = tmphg->size;
|
|
<a name="l563"></a> tmphgr = tmphg->references;
|
|
<a name="l564"></a> </span><span class=cF1>while</span><span class=cF0> (tmphgr)
|
|
<a name="l565"></a> {
|
|
<a name="l566"></a> tmphgr1 = tmphgr->next;
|
|
<a name="l567"></a> *ptr(</span><span class=cF9>U32</span><span class=cF0> *)++ = tmphgr->rip;
|
|
<a name="l568"></a> </span><span class=cF5>Free</span><span class=cF0>(tmphgr);
|
|
<a name="l569"></a> tmphgr = tmphgr1;
|
|
<a name="l570"></a> }
|
|
<a name="l571"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l572"></a> </span><span class=cF5>Free</span><span class=cF0>(tmphg);
|
|
<a name="l573"></a> tmphg = tmphg1;
|
|
<a name="l574"></a> }
|
|
<a name="l575"></a>
|
|
<a name="l576"></a> </span><span class=cF2>//Do exports first</span><span class=cF0>
|
|
<a name="l577"></a> tmpie = tmpaot->next_ie;
|
|
<a name="l578"></a> </span><span class=cF1>while</span><span class=cF0> (tmpie != &tmpaot->next_ie)
|
|
<a name="l579"></a> {
|
|
<a name="l580"></a> tmpie1 = tmpie->next;
|
|
<a name="l581"></a> </span><span class=cF1>if</span><span class=cF0> (!tmpie->type || </span><span class=cF3>IET_REL32_EXPORT</span><span class=cF0> <= tmpie->type <= </span><span class=cF3>IET_IMM64_EXPORT</span><span class=cF0>)
|
|
<a name="l582"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l583"></a> </span><span class=cF5>QueueRemove</span><span class=cF0>(tmpie);
|
|
<a name="l584"></a> *ptr++ = tmpie->type;
|
|
<a name="l585"></a> *ptr(</span><span class=cF9>U32</span><span class=cF0> *)++ = tmpie->rip;
|
|
<a name="l586"></a> </span><span class=cF1>if</span><span class=cF0> (tmpie->str)
|
|
<a name="l587"></a> {
|
|
<a name="l588"></a> i = </span><span class=cF5>StrLen</span><span class=cF0>(tmpie->str);
|
|
<a name="l589"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(ptr, tmpie->str, i + </span><span class=cFE>1</span><span class=cF0>);
|
|
<a name="l590"></a> </span><span class=cF5>Free</span><span class=cF0>(tmpie->str);
|
|
<a name="l591"></a> ptr += i + </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l592"></a> }
|
|
<a name="l593"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l594"></a> *ptr++ = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l595"></a> </span><span class=cF5>Free</span><span class=cF0>(tmpie->src_link);
|
|
<a name="l596"></a> </span><span class=cF5>Free</span><span class=cF0>(tmpie);
|
|
<a name="l597"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l598"></a> tmpie = tmpie1;
|
|
<a name="l599"></a> }
|
|
<a name="l600"></a>
|
|
<a name="l601"></a> </span><span class=cF2>//Do imports second</span><span class=cF0>
|
|
<a name="l602"></a> tmpie = tmpaot->next_ie;
|
|
<a name="l603"></a> </span><span class=cF1>while</span><span class=cF0> (tmpie != &tmpaot->next_ie)
|
|
<a name="l604"></a> {
|
|
<a name="l605"></a> tmpie1 = tmpie->next;
|
|
<a name="l606"></a> </span><span class=cF5>QueueRemove</span><span class=cF0>(tmpie);
|
|
<a name="l607"></a> *ptr++ = tmpie->type;
|
|
<a name="l608"></a> </span><span class=cF1>if</span><span class=cF0> (tmpie->aot)
|
|
<a name="l609"></a> tmpie->rip += tmpie->aot->rip2;
|
|
<a name="l610"></a> *ptr(</span><span class=cF9>U32</span><span class=cF0> *)++ = tmpie->rip;
|
|
<a name="l611"></a> </span><span class=cF1>if</span><span class=cF0> (tmpie->str)
|
|
<a name="l612"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l613"></a> i = </span><span class=cF5>StrLen</span><span class=cF0>(tmpie->str);
|
|
<a name="l614"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(ptr, tmpie->str, i + </span><span class=cFE>1</span><span class=cF0>);
|
|
<a name="l615"></a> </span><span class=cF5>Free</span><span class=cF0>(tmpie->str);
|
|
<a name="l616"></a> ptr += i + </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l617"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l618"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l619"></a> *ptr++ = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l620"></a> </span><span class=cF5>Free</span><span class=cF0>(tmpie->src_link);
|
|
<a name="l621"></a> </span><span class=cF5>Free</span><span class=cF0>(tmpie);
|
|
<a name="l622"></a> tmpie = tmpie1;
|
|
<a name="l623"></a> }
|
|
<a name="l624"></a>
|
|
<a name="l625"></a> *ptr++ = </span><span class=cF3>IET_END</span><span class=cF0>;
|
|
<a name="l626"></a> </span><span class=cF5>MemSet</span><span class=cF0>(ptr, </span><span class=cFE>0</span><span class=cF0>, </span><span class=cFE>16</span><span class=cF0>);
|
|
<a name="l627"></a> i = ptr - patch_table;
|
|
<a name="l628"></a></span><span class=cF2>//Needs 16 ALIGN</span><span class=cF0>
|
|
<a name="l629"></a> size = (</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CBinFile</span><span class=cF7>)</span><span class=cF0> + aot_U8s + i + </span><span class=cFE>15</span><span class=cF0>) & -</span><span class=cFE>16</span><span class=cF0>;
|
|
<a name="l630"></a> bfh = </span><span class=cF5>MAlloc</span><span class=cF0>(size);
|
|
<a name="l631"></a> bfh->jmp = </span><span class=cFE>0xEB</span><span class=cF0> + </span><span class=cFE>256</span><span class=cF0> * (</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CBinFile</span><span class=cF7>)</span><span class=cF0> - </span><span class=cFE>2</span><span class=cF0>);
|
|
<a name="l632"></a>#</span><span class=cF1>assert</span><span class=cF0> </span><span class=cF1>sizeof</span><span class=cF0>(</span><span class=cF9>CBinFile</span><span class=cF0>) - </span><span class=cFE>2</span><span class=cF0> <= </span><span class=cF3>I8_MAX</span><span class=cF0>
|
|
<a name="l633"></a> bfh->reserved = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l634"></a> bfh->bin_signature = </span><span class=cF3>BIN_SIGNATURE_VAL</span><span class=cF0>;
|
|
<a name="l635"></a> bfh->org = tmpaot->org;
|
|
<a name="l636"></a> bfh->module_align_bits = tmpaot->max_align_bits;
|
|
<a name="l637"></a> bfh->patch_table_offset = </span><span class=cF1>sizeof</span><span class=cF0>(</span><span class=cF9>CBinFile</span><span class=cF0>)+aot_U8s;
|
|
<a name="l638"></a> bfh->file_size = size;
|
|
<a name="l639"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(bfh</span><span class=cF7>(</span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0> + </span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CBinFile</span><span class=cF7>)</span><span class=cF0>, tmpaot->buf, aot_U8s);
|
|
<a name="l640"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(bfh</span><span class=cF7>(</span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0> + </span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CBinFile</span><span class=cF7>)</span><span class=cF0> + aot_U8s, patch_table, size - aot_U8s - </span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CBinFile</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l641"></a> </span><span class=cF5>Free</span><span class=cF0>(fbuf2);
|
|
<a name="l642"></a> </span><span class=cF1>if</span><span class=cF0> (out_name)
|
|
<a name="l643"></a> fbuf2 = </span><span class=cF5>ExtDefault</span><span class=cF0>(out_name, </span><span class=cF6>"BIN"</span><span class=cF0>);
|
|
<a name="l644"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l645"></a> fbuf2 = </span><span class=cF5>ExtChange</span><span class=cF0>(fbuf, </span><span class=cF6>"BIN"</span><span class=cF0>);
|
|
<a name="l646"></a> </span><span class=cF5>FileWrite</span><span class=cF0>(fbuf2, bfh, size);
|
|
<a name="l647"></a> </span><span class=cF5>Free</span><span class=cF0>(bfh);
|
|
<a name="l648"></a> </span><span class=cF5>Free</span><span class=cF0>(tmpaot->buf);
|
|
<a name="l649"></a> </span><span class=cF5>QueueDel</span><span class=cF0>(tmpaot);
|
|
<a name="l650"></a> </span><span class=cF5>Free</span><span class=cF0>(tmpaot);
|
|
<a name="l651"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l652"></a> </span><span class=cF5>Free</span><span class=cF0>(patch_table);
|
|
<a name="l653"></a> </span><span class=cF5>Free</span><span class=cF0>(fbuf);
|
|
<a name="l654"></a> </span><span class=cF5>Free</span><span class=cF0>(fbuf2);
|
|
<a name="l655"></a> </span><span class=cF5>Free</span><span class=cF0>(fbuf3);
|
|
<a name="l656"></a> </span><span class=cF5>Print</span><span class=cF0>(</span><span class=cF6>"Errs:%d Warns:%d Code:%X Size:%X\n"</span><span class=cF0>, error_count, warning_count, aot_U8s, size);
|
|
<a name="l657"></a>
|
|
<a name="l658"></a> </span><span class=cF1>return</span><span class=cF0> error_count;
|
|
<a name="l659"></a>}
|
|
<a name="l660"></a>
|
|
<a name="l661"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>ExePutS</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *buf, </span><span class=cF1>U8</span><span class=cF0> *filename=</span><span class=cF3>NULL</span><span class=cF0>, </span><span class=cF9>I64</span><span class=cF0> ccf_flags=</span><span class=cFE>0</span><span class=cF0>, </span><span class=cF9>CLexHashTableContext</span><span class=cF0> *htc=</span><span class=cF3>NULL</span><span class=cF0>)
|
|
<a name="l662"></a>{</span><span class=cF2>//JIT Compile and execute text from a puts("").</span><span class=cF0>
|
|
<a name="l663"></a> </span><span class=cF9>I64</span><span class=cF0> res;
|
|
<a name="l664"></a> </span><span class=cF1>Bool</span><span class=cF0> okay = </span><span class=cF3>TRUE</span><span class=cF0>;
|
|
<a name="l665"></a> </span><span class=cF9>CCompCtrl</span><span class=cF0> *cc;
|
|
<a name="l666"></a>
|
|
<a name="l667"></a> </span><span class=cF1>if</span><span class=cF0> (!filename)
|
|
<a name="l668"></a> filename = </span><span class=cFB>blkdev</span><span class=cF0>.tmp_filename;
|
|
<a name="l669"></a> cc = </span><span class=cF5>CompCtrlNew</span><span class=cF0>(buf, ccf_flags | </span><span class=cF3>CCF_DONT_FREE_BUF</span><span class=cF0>, filename);
|
|
<a name="l670"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Fs</span><span class=cF0>->last_cc != &</span><span class=cF5>Fs</span><span class=cF0>->next_cc)
|
|
<a name="l671"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l672"></a> cc->opts = </span><span class=cF5>Fs</span><span class=cF0>->last_cc->opts;
|
|
<a name="l673"></a> </span><span class=cF1>if</span><span class=cF0> (htc)
|
|
<a name="l674"></a> {
|
|
<a name="l675"></a> cc->flags = cc->flags & ~</span><span class=cF3>CCF_ASM_EXPRESSIONS</span><span class=cF0> | htc->old_flags & </span><span class=cF3>CCF_ASM_EXPRESSIONS</span><span class=cF0>;
|
|
<a name="l676"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(&cc->htc, htc, </span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CLexHashTableContext</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l677"></a> }
|
|
<a name="l678"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l679"></a> </span><span class=cF5>QueueInsert</span><span class=cF0>(cc, </span><span class=cF5>Fs</span><span class=cF0>->last_cc);
|
|
<a name="l680"></a> </span><span class=cF1>try</span><span class=cF0>
|
|
<a name="l681"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l682"></a> </span><span class=cF5>Lex</span><span class=cF0>(cc);
|
|
<a name="l683"></a> res = </span><span class=cF5>ExeCmdLine</span><span class=cF0>(cc);
|
|
<a name="l684"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l685"></a> </span><span class=cF1>catch</span><span class=cF0>
|
|
<a name="l686"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l687"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Fs</span><span class=cF0>->except_ch == </span><span class=cF6>'Compiler'</span><span class=cF0> || </span><span class=cF5>Fs</span><span class=cF0>->except_ch == </span><span class=cF6>'Break'</span><span class=cF0>)
|
|
<a name="l688"></a> {
|
|
<a name="l689"></a> </span><span class=cF5>Fs</span><span class=cF0>->catch_except = </span><span class=cF3>TRUE</span><span class=cF0>;
|
|
<a name="l690"></a> okay = </span><span class=cF3>FALSE</span><span class=cF0>;
|
|
<a name="l691"></a> res = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l692"></a> }
|
|
<a name="l693"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l694"></a> </span><span class=cF5>QueueRemove</span><span class=cF0>(cc);
|
|
<a name="l695"></a> </span><span class=cF1>if</span><span class=cF0> (okay)
|
|
<a name="l696"></a> </span><span class=cF5>CompCtrlDel</span><span class=cF0>(cc); </span><span class=cF2>//TODO: can crash</span><span class=cF0>
|
|
<a name="l697"></a> </span><span class=cF1>return</span><span class=cF0> res;
|
|
<a name="l698"></a>}
|
|
<a name="l699"></a>
|
|
<a name="l700"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>ExePrint</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *format, ...)
|
|
<a name="l701"></a>{</span><span class=cF2>//JIT Compile and execute text from a printf().</span><span class=cF0>
|
|
<a name="l702"></a> </span><span class=cF9>I64</span><span class=cF0> res;
|
|
<a name="l703"></a> </span><span class=cF1>U8</span><span class=cF0> *buf = </span><span class=cF5>StrPrintJoin</span><span class=cF0>(</span><span class=cF3>NULL</span><span class=cF0>, format, argc, argv);
|
|
<a name="l704"></a>
|
|
<a name="l705"></a> res = </span><span class=cF5>ExePutS</span><span class=cF0>(buf);
|
|
<a name="l706"></a> </span><span class=cF5>Free</span><span class=cF0>(buf);
|
|
<a name="l707"></a>
|
|
<a name="l708"></a> </span><span class=cF1>return</span><span class=cF0> res;
|
|
<a name="l709"></a>}
|
|
<a name="l710"></a>
|
|
<a name="l711"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>ExeFile</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *name, </span><span class=cF9>I64</span><span class=cF0> ccf_flags=</span><span class=cFE>0</span><span class=cF0>)
|
|
<a name="l712"></a>{</span><span class=cF2>//JIT Compile and execute a file.</span><span class=cF0>
|
|
<a name="l713"></a> </span><span class=cF9>I64</span><span class=cF0> res;
|
|
<a name="l714"></a> </span><span class=cF1>U8</span><span class=cF0> *name2 = </span><span class=cF5>ExtDefault</span><span class=cF0>(name, </span><span class=cF6>"CC"</span><span class=cF0>), *st = </span><span class=cF5>MStrPrint</span><span class=cF0>(</span><span class=cF6>"#include \"%s\";"</span><span class=cF0>, name2);
|
|
<a name="l715"></a>
|
|
<a name="l716"></a> res = </span><span class=cF5>ExePutS</span><span class=cF0>(st, name, ccf_flags);
|
|
<a name="l717"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
|
|
<a name="l718"></a> </span><span class=cF5>Free</span><span class=cF0>(name2);
|
|
<a name="l719"></a>
|
|
<a name="l720"></a> </span><span class=cF1>return</span><span class=cF0> res;
|
|
<a name="l721"></a>}
|
|
<a name="l722"></a>
|
|
<a name="l723"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>RunFile</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *name, </span><span class=cF9>I64</span><span class=cF0> ccf_flags=</span><span class=cFE>0</span><span class=cF0>, ...)
|
|
<a name="l724"></a>{</span><span class=cF2>//</span><a href="https://tomawezome.github.io/ZealOS/Compiler/CMain.CC.html#l711"><span class=cF4>ExeFile</span></a><span class=cF2>() with args using </span><a href="https://tomawezome.github.io/ZealOS/Compiler/CMisc.CC.html#l48"><span class=cF4>LastFun</span></a><span class=cF2>().</span><span class=cF0>
|
|
<a name="l725"></a> </span><span class=cF5>ExeFile</span><span class=cF0>(name, ccf_flags);
|
|
<a name="l726"></a>
|
|
<a name="l727"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF5>LastFun</span><span class=cF0>(argc, argv);
|
|
<a name="l728"></a>}
|
|
<a name="l729"></a>
|
|
<a name="l730"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>ExePutS2</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *buf, </span><span class=cF1>U8</span><span class=cF0> *filename=</span><span class=cF3>NULL</span><span class=cF0>, </span><span class=cF9>I64</span><span class=cF0> ccf_flags=</span><span class=cFE>0</span><span class=cF0>)
|
|
<a name="l731"></a>{</span><span class=cF2>//throws exceptions</span><span class=cF0>
|
|
<a name="l732"></a> </span><span class=cF9>I64</span><span class=cF0> res;
|
|
<a name="l733"></a> </span><span class=cF9>CCompCtrl</span><span class=cF0> *cc;
|
|
<a name="l734"></a>
|
|
<a name="l735"></a> </span><span class=cF1>if</span><span class=cF0> (!filename)
|
|
<a name="l736"></a> filename = </span><span class=cFB>blkdev</span><span class=cF0>.tmp_filename;
|
|
<a name="l737"></a> cc = </span><span class=cF5>CompCtrlNew</span><span class=cF0>(buf, ccf_flags | </span><span class=cF3>CCF_DONT_FREE_BUF</span><span class=cF0>, filename);
|
|
<a name="l738"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Fs</span><span class=cF0>->last_cc != &</span><span class=cF5>Fs</span><span class=cF0>->next_cc)
|
|
<a name="l739"></a> cc->opts = </span><span class=cF5>Fs</span><span class=cF0>->last_cc->opts;
|
|
<a name="l740"></a> </span><span class=cF5>QueueInsert</span><span class=cF0>(cc, </span><span class=cF5>Fs</span><span class=cF0>->last_cc);
|
|
<a name="l741"></a> </span><span class=cF5>Lex</span><span class=cF0>(cc);
|
|
<a name="l742"></a> res = </span><span class=cF5>ExeCmdLine</span><span class=cF0>(cc);
|
|
<a name="l743"></a> </span><span class=cF5>QueueRemove</span><span class=cF0>(cc);
|
|
<a name="l744"></a> </span><span class=cF5>CompCtrlDel</span><span class=cF0>(cc);
|
|
<a name="l745"></a>
|
|
<a name="l746"></a> </span><span class=cF1>return</span><span class=cF0> res;
|
|
<a name="l747"></a>}
|
|
<a name="l748"></a>
|
|
<a name="l749"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>ExePrint2</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *format, ...)
|
|
<a name="l750"></a>{</span><span class=cF2>//throws exceptions</span><span class=cF0>
|
|
<a name="l751"></a> </span><span class=cF9>I64</span><span class=cF0> res;
|
|
<a name="l752"></a> </span><span class=cF1>U8</span><span class=cF0> *buf = </span><span class=cF5>StrPrintJoin</span><span class=cF0>(</span><span class=cF3>NULL</span><span class=cF0>, format, argc, argv);
|
|
<a name="l753"></a>
|
|
<a name="l754"></a> res = </span><span class=cF5>ExePutS2</span><span class=cF0>(buf);
|
|
<a name="l755"></a> </span><span class=cF5>Free</span><span class=cF0>(buf);
|
|
<a name="l756"></a>
|
|
<a name="l757"></a> </span><span class=cF1>return</span><span class=cF0> res;
|
|
<a name="l758"></a>}
|
|
<a name="l759"></a>
|
|
<a name="l760"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>ExeFile2</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *name, </span><span class=cF9>I64</span><span class=cF0> ccf_flags=</span><span class=cFE>0</span><span class=cF0>)
|
|
<a name="l761"></a>{</span><span class=cF2>//throws exceptions</span><span class=cF0>
|
|
<a name="l762"></a> </span><span class=cF9>I64</span><span class=cF0> res;
|
|
<a name="l763"></a> </span><span class=cF1>U8</span><span class=cF0> *name2 = </span><span class=cF5>ExtDefault</span><span class=cF0>(name, </span><span class=cF6>"CC"</span><span class=cF0>), *st = </span><span class=cF5>MStrPrint</span><span class=cF0>(</span><span class=cF6>"#include \"%s\";"</span><span class=cF0>, name2);
|
|
<a name="l764"></a>
|
|
<a name="l765"></a> res = </span><span class=cF5>ExePutS2</span><span class=cF0>(st, name, ccf_flags);
|
|
<a name="l766"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
|
|
<a name="l767"></a> </span><span class=cF5>Free</span><span class=cF0>(name2);
|
|
<a name="l768"></a>
|
|
<a name="l769"></a> </span><span class=cF1>return</span><span class=cF0> res;
|
|
<a name="l770"></a>}
|
|
<a name="l771"></a>
|
|
<a name="l772"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>RunFile2</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *name, </span><span class=cF9>I64</span><span class=cF0> ccf_flags=</span><span class=cFE>0</span><span class=cF0>, ...)
|
|
<a name="l773"></a>{</span><span class=cF2>//</span><a href="https://tomawezome.github.io/ZealOS/Compiler/CMain.CC.html#l760"><span class=cF4>ExeFile2</span></a><span class=cF2>() with args using </span><a href="https://tomawezome.github.io/ZealOS/Compiler/CMisc.CC.html#l48"><span class=cF4>LastFun</span></a><span class=cF2>(). throws exceptions.</span><span class=cF0>
|
|
<a name="l774"></a> </span><span class=cF5>ExeFile2</span><span class=cF0>(name, ccf_flags);
|
|
<a name="l775"></a>
|
|
<a name="l776"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF5>LastFun</span><span class=cF0>(argc, argv);
|
|
<a name="l777"></a>}
|
|
<a name="l778"></a>
|
|
<a name="l779"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>StreamExePrint</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *format, ...)
|
|
<a name="l780"></a>{</span><span class=cF2>//Causes value from stream to be used in an #exe{} block.</span><span class=cF0>
|
|
<a name="l781"></a> </span><span class=cF1>U8</span><span class=cF0> *buf = </span><span class=cF5>StrPrintJoin</span><span class=cF0>(</span><span class=cF3>NULL</span><span class=cF0>, format, argc, argv);
|
|
<a name="l782"></a> </span><span class=cF9>I64</span><span class=cF0> res = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l783"></a> </span><span class=cF9>CLexHashTableContext</span><span class=cF0> *htc;
|
|
<a name="l784"></a> </span><span class=cF9>CCompCtrl</span><span class=cF0> *cc = </span><span class=cF5>Fs</span><span class=cF0>->last_cc;
|
|
<a name="l785"></a>
|
|
<a name="l786"></a> </span><span class=cF1>if</span><span class=cF0> (cc == &</span><span class=cF5>Fs</span><span class=cF0>->next_cc)
|
|
<a name="l787"></a> </span><span class=cF5>PrintErr</span><span class=cF0>(</span><span class=cF6>"Not Compiling\n"</span><span class=cF0>);
|
|
<a name="l788"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l789"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l790"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>cc->flags & </span><span class=cF3>CCF_EXE_BLK</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l791"></a> </span><span class=cF5>LexExcept</span><span class=cF0>(cc, </span><span class=cF6>"StreamExePrint only allowed in AOT compiled #exe{} mode."</span><span class=cF0>);
|
|
<a name="l792"></a> </span><span class=cF1>if</span><span class=cF0> (htc = cc->htc.next)
|
|
<a name="l793"></a> res = </span><span class=cF5>ExePutS</span><span class=cF0>(buf,,, htc);
|
|
<a name="l794"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l795"></a> </span><span class=cF5>Free</span><span class=cF0>(buf);
|
|
<a name="l796"></a>
|
|
<a name="l797"></a> </span><span class=cF1>return</span><span class=cF0> res;
|
|
<a name="l798"></a>}
|
|
<a name="l799"></a>
|
|
<a name="l800"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>CInit</span><span class=cF0>()
|
|
<a name="l801"></a>{
|
|
<a name="l802"></a> </span><span class=cFD>CompLoadDefines</span><span class=cF0>;
|
|
<a name="l803"></a> </span><span class=cFD>CompFillTables</span><span class=cF0>;
|
|
<a name="l804"></a> </span><span class=cF5>QueueInit</span><span class=cF0>(&</span><span class=cFB>cmp</span><span class=cF0>.ic_nop);
|
|
<a name="l805"></a> </span><span class=cFB>cmp</span><span class=cF0>.ic_nop.ic_class = </span><span class=cFB>cmp</span><span class=cF0>.internal_types[</span><span class=cF3>RT_I64</span><span class=cF0>];
|
|
<a name="l806"></a> </span><span class=cFB>cmp</span><span class=cF0>.ic_nop.ic_code = </span><span class=cF3>IC_NOP1</span><span class=cF0>;
|
|
<a name="l807"></a> </span><span class=cFD>AsmHashLoad</span><span class=cF0>;
|
|
<a name="l808"></a> </span><span class=cFD>UAsmHashLoad</span><span class=cF0>;
|
|
<a name="l809"></a>}
|
|
<a name="l810"></a>
|
|
<a name="l811"></a></span><span class=cF5>CInit</span><span class=cF0>;
|
|
</span></pre></body>
|
|
</html>
|