mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2025-01-01 02:06: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.
1509 lines
166 KiB
HTML
Executable file
1509 lines
166 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=cF9>CLexFile</span><span class=cF0> *</span><span class=cFD>LexFilePush</span><span class=cF0>(</span><span class=cF9>CCompCtrl</span><span class=cF0> *cc)
|
|
<a name="l2"></a>{</span><span class=cF2>//#include file push.</span><span class=cF0>
|
|
<a name="l3"></a> </span><span class=cF9>CLexFile</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>CLexFile</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l4"></a>
|
|
<a name="l5"></a> </span><span class=cF1>if</span><span class=cF0> (res->next = cc->lex_include_stack)
|
|
<a name="l6"></a> res->depth = res->next->depth + </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l7"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l8"></a> res->depth = -</span><span class=cFE>1</span><span class=cF0>; </span><span class=cF2>//Include depth starts with -1.</span><span class=cF0>
|
|
<a name="l9"></a> </span><span class=cF1>return</span><span class=cF0> cc->lex_include_stack = res;
|
|
<a name="l10"></a>}
|
|
<a name="l11"></a>
|
|
<a name="l12"></a></span><span class=cF9>CLexFile</span><span class=cF0> *</span><span class=cFD>LexFilePop</span><span class=cF0>(</span><span class=cF9>CCompCtrl</span><span class=cF0> *cc)
|
|
<a name="l13"></a>{</span><span class=cF2>//#include file pop.</span><span class=cF0>
|
|
<a name="l14"></a> </span><span class=cF9>CLexFile</span><span class=cF0> *tmpf;
|
|
<a name="l15"></a> </span><span class=cF1>if</span><span class=cF0> (tmpf = cc->lex_include_stack)
|
|
<a name="l16"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l17"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF7>(</span><span class=cF0>cc->lex_include_stack = tmpf->next</span><span class=cF7>)</span><span class=cF0> || !</span><span class=cF7>(</span><span class=cF0>cc->flags & </span><span class=cF3>CCF_DONT_FREE_BUF</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l18"></a> {
|
|
<a name="l19"></a> </span><span class=cF1>if</span><span class=cF0> (tmpf->flags & </span><span class=cF3>LFSF_DOC</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> (tmpf->doc)
|
|
<a name="l22"></a> </span><span class=cF5>DocDel</span><span class=cF0>(tmpf->doc);
|
|
<a name="l23"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l24"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l25"></a> </span><span class=cF5>Free</span><span class=cF0>(tmpf->buf);;
|
|
<a name="l26"></a> }
|
|
<a name="l27"></a> </span><span class=cF5>Free</span><span class=cF0>(tmpf->full_name);
|
|
<a name="l28"></a> </span><span class=cF5>Free</span><span class=cF0>(tmpf);
|
|
<a name="l29"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l30"></a> </span><span class=cF1>return</span><span class=cF0> cc->lex_include_stack;
|
|
<a name="l31"></a>}
|
|
<a name="l32"></a>
|
|
<a name="l33"></a></span><span class=cF9>CCompCtrl</span><span class=cF0> *</span><span class=cF5>CompCtrlNew</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *buf=</span><span class=cF3>NULL</span><span class=cF0>, </span><span class=cF9>I64</span><span class=cF0> flags=</span><span class=cFE>0</span><span class=cF0>, </span><span class=cF1>U8</span><span class=cF0> *filename=</span><span class=cF3>NULL</span><span class=cF0>)
|
|
<a name="l34"></a>{</span><span class=cF2>//MAlloc and Init CCompCtrl.</span><span class=cF0>
|
|
<a name="l35"></a> </span><span class=cF2>//Frees buf in </span><a href="https://tomawezome.github.io/ZealOS/Compiler/Lex.CC.html#l64"><span class=cF4>CompCtrlDel</span></a><span class=cF2> unless </span><a href="https://tomawezome.github.io/ZealOS/Kernel/KernelA.HH.html#l2273"><span class=cF4>CCF_DONT_FREE_BUF</span></a><span class=cF2> flag is set.</span><span class=cF0>
|
|
<a name="l36"></a> </span><span class=cF2>//FileName is for error reporting.</span><span class=cF0> </span><span class=cF2>If files are #included,</span><span class=cF0>
|
|
<a name="l37"></a> </span><span class=cF2>//new names are used. See </span><a href="https://tomawezome.github.io/ZealOS/Apps/Psalmody/PsalmodyFile.CC.html#l235"><span class=cF4>Psalmody CompCtrlNew</span></a><span class=cF2>.</span><span class=cF0>
|
|
<a name="l38"></a> </span><span class=cF9>CCompCtrl</span><span class=cF0> *cc = </span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CCompCtrl</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l39"></a> </span><span class=cF9>CLexFile</span><span class=cF0> *tmpf;
|
|
<a name="l40"></a>
|
|
<a name="l41"></a> </span><span class=cF5>QueueInit</span><span class=cF0>(cc);
|
|
<a name="l42"></a> cc->flags = flags;
|
|
<a name="l43"></a> cc->opts = </span><span class=cFE>1</span><span class=cF0> << </span><span class=cF3>OPTf_WARN_UNUSED_VAR</span><span class=cF0> | </span><span class=cFE>1</span><span class=cF0> << </span><span class=cF3>OPTf_WARN_HEADER_MISMATCH</span><span class=cF0>;
|
|
<a name="l44"></a> cc->htc.hash_mask = </span><span class=cF3>HTG_TYPE_MASK</span><span class=cF0> - </span><span class=cF3>HTT_IMPORT_SYS_SYM</span><span class=cF0>;
|
|
<a name="l45"></a> cc->htc.define_hash_table = cc->htc.hash_table_list =
|
|
<a name="l46"></a> cc->htc.global_hash_table = cc->htc.local_hash_table = </span><span class=cF5>Fs</span><span class=cF0>->hash_table;
|
|
<a name="l47"></a> </span><span class=cF1>if</span><span class=cF0> (flags & </span><span class=cF3>CCF_KEEP_AT_SIGN</span><span class=cF0>)
|
|
<a name="l48"></a> cc-></span><span class=cFB>char_bmp_alpha_numeric</span><span class=cF0> = </span><span class=cFB>char_bmp_alpha_numeric_no_at</span><span class=cF0>;
|
|
<a name="l49"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l50"></a> cc-></span><span class=cFB>char_bmp_alpha_numeric</span><span class=cF0> = </span><span class=cFB>char_bmp_alpha_numeric</span><span class=cF0>;
|
|
<a name="l51"></a> tmpf = </span><span class=cFD>LexFilePush</span><span class=cF0>(cc);
|
|
<a name="l52"></a> </span><span class=cF5>QueueInit</span><span class=cF0>(&cc->next_stream_blk);
|
|
<a name="l53"></a> </span><span class=cF1>if</span><span class=cF0> (filename)
|
|
<a name="l54"></a> tmpf->full_name = </span><span class=cF5>FileNameAbs</span><span class=cF0>(filename);
|
|
<a name="l55"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l56"></a> tmpf->full_name = </span><span class=cF5>StrNew</span><span class=cF0>(</span><span class=cFB>blkdev</span><span class=cF0>.tmp_filename);
|
|
<a name="l57"></a> </span><span class=cF1>if</span><span class=cF0> (flags & </span><span class=cF3>CCF_PROMPT</span><span class=cF0>)
|
|
<a name="l58"></a> buf = </span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cFE>8</span><span class=cF0>);
|
|
<a name="l59"></a> tmpf->buf = tmpf->buf_ptr = tmpf->line_start = cc->cur_buf_ptr = buf;
|
|
<a name="l60"></a> tmpf->line_num = </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l61"></a> </span><span class=cF1>return</span><span class=cF0> cc;
|
|
<a name="l62"></a>}
|
|
<a name="l63"></a>
|
|
<a name="l64"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>CompCtrlDel</span><span class=cF0>(</span><span class=cF9>CCompCtrl</span><span class=cF0> *cc)
|
|
<a name="l65"></a>{</span><span class=cF2>//Free CCompCtrl.</span><span class=cF0>
|
|
<a name="l66"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cFD>LexFilePop</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l67"></a> </span><span class=cF5>LinkedListDel</span><span class=cF0>(cc->lex_parse_stack);
|
|
<a name="l68"></a> </span><span class=cF5>LinkedListDel</span><span class=cF0>(cc->htc.next);
|
|
<a name="l69"></a> </span><span class=cF5>Free</span><span class=cF0>(cc->ps);
|
|
<a name="l70"></a> </span><span class=cF5>Free</span><span class=cF0>(cc->cur_str);
|
|
<a name="l71"></a> </span><span class=cF5>Free</span><span class=cF0>(cc->cur_help_idx);
|
|
<a name="l72"></a> </span><span class=cF5>Free</span><span class=cF0>(cc->dollar_buf);
|
|
<a name="l73"></a> </span><span class=cF5>Free</span><span class=cF0>(cc);
|
|
<a name="l74"></a>}
|
|
<a name="l75"></a>
|
|
<a name="l76"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>CompCtrlSize</span><span class=cF0>(</span><span class=cF9>CCompCtrl</span><span class=cF0> *cc)
|
|
<a name="l77"></a>{</span><span class=cF2>//Mem size of CCompCtrl and its members.</span><span class=cF0>
|
|
<a name="l78"></a> </span><span class=cF9>CLexFile</span><span class=cF0> *tmpf = cc->lex_include_stack;
|
|
<a name="l79"></a> </span><span class=cF9>I64</span><span class=cF0> res = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l80"></a>
|
|
<a name="l81"></a> </span><span class=cF1>while</span><span class=cF0> (tmpf)
|
|
<a name="l82"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l83"></a> </span><span class=cF1>if</span><span class=cF0> (tmpf->next || !</span><span class=cF7>(</span><span class=cF0>cc->flags & </span><span class=cF3>CCF_DONT_FREE_BUF</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l84"></a> {
|
|
<a name="l85"></a> </span><span class=cF1>if</span><span class=cF0> (tmpf->flags & </span><span class=cF3>LFSF_DOC</span><span class=cF0>)
|
|
<a name="l86"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l87"></a> </span><span class=cF1>if</span><span class=cF0> (tmpf->doc)
|
|
<a name="l88"></a> res += </span><span class=cF5>DocSize</span><span class=cF0>(tmpf->doc);
|
|
<a name="l89"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l90"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l91"></a> res += </span><span class=cF5>MSize2</span><span class=cF0>(tmpf->buf);
|
|
<a name="l92"></a> }
|
|
<a name="l93"></a> res += </span><span class=cF5>MSize2</span><span class=cF0>(tmpf->full_name);
|
|
<a name="l94"></a> res += </span><span class=cF5>MSize2</span><span class=cF0>(tmpf);
|
|
<a name="l95"></a> tmpf = tmpf->next;
|
|
<a name="l96"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l97"></a> res += </span><span class=cF5>MSize2</span><span class=cF0>(cc->cur_str);
|
|
<a name="l98"></a> res += </span><span class=cF5>MSize2</span><span class=cF0>(cc);
|
|
<a name="l99"></a> </span><span class=cF1>return</span><span class=cF0> res;
|
|
<a name="l100"></a>}
|
|
<a name="l101"></a>
|
|
<a name="l102"></a></span><span class=cF9>U32</span><span class=cF0> </span><span class=cFD>lex_zeros</span><span class=cF0> = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l103"></a>
|
|
<a name="l104"></a></span><span class=cF1>Bool</span><span class=cF0> </span><span class=cFD>LexDollar</span><span class=cF0>(</span><span class=cF9>CCompCtrl</span><span class=cF0> *cc, </span><span class=cF9>CDoc</span><span class=cF0> *doc, </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_e)
|
|
<a name="l105"></a>{
|
|
<a name="l106"></a> </span><span class=cF1>U8</span><span class=cF0> *st;
|
|
<a name="l107"></a>
|
|
<a name="l108"></a> </span><span class=cF1>if</span><span class=cF0> (cc->flags & </span><span class=cF3>CCF_IN_QUOTES</span><span class=cF0>)
|
|
<a name="l109"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l110"></a> </span><span class=cF5>Free</span><span class=cF0>(cc->dollar_buf);
|
|
<a name="l111"></a> st = </span><span class=cF5>Doc2PlainText</span><span class=cF0>(doc, doc_e);
|
|
<a name="l112"></a> cc->dollar_buf = </span><span class=cF5>MStrPrint</span><span class=cF0>(</span><span class=cF6>"$%$Q$"</span><span class=cF0>, st);
|
|
<a name="l113"></a> cc->dollar_count = </span><span class=cFE>2</span><span class=cF0>;
|
|
<a name="l114"></a> </span><span class=cF5>Free</span><span class=cF0>(st);
|
|
<a name="l115"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>TRUE</span><span class=cF0>;
|
|
<a name="l116"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l117"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l118"></a> </span><span class=cF1>return</span><span class=cF0> </span><span class=cF3>FALSE</span><span class=cF0>;
|
|
<a name="l119"></a>}
|
|
<a name="l120"></a>
|
|
<a name="l121"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>LexCharGet</span><span class=cF0>(</span><span class=cF9>CCompCtrl</span><span class=cF0> *cc)
|
|
<a name="l122"></a>{</span><span class=cF2>//Get one char from stream. Allow put-back one.</span><span class=cF0>
|
|
<a name="l123"></a> </span><span class=cF1>U8</span><span class=cF0> *ptr, *src;
|
|
<a name="l124"></a> </span><span class=cF9>CLexFile</span><span class=cF0> *tmpf;
|
|
<a name="l125"></a> </span><span class=cF9>CDoc</span><span class=cF0> *doc;
|
|
<a name="l126"></a> </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_e;
|
|
<a name="l127"></a>
|
|
<a name="l128"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Btr</span><span class=cF7>(</span><span class=cF0>&cc->flags, </span><span class=cF3>CCf_USE_LAST_U16</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l129"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l130"></a>lgc_start1:
|
|
<a name="l131"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>src = cc->cur_buf_ptr++</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l132"></a> {
|
|
<a name="l133"></a> cc->cur_buf_ptr = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l134"></a> </span><span class=cF1>goto</span><span class=cF0> lgc_here;
|
|
<a name="l135"></a> }
|
|
<a name="l136"></a> </span><span class=cF1>switch</span><span class=cF0> [cc->last_U16 = *src++]
|
|
<a name="l137"></a> {
|
|
<a name="l138"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cFE>0</span><span class=cF0>:
|
|
<a name="l139"></a>lgc_here:
|
|
<a name="l140"></a> tmpf = cc->lex_include_stack;
|
|
<a name="l141"></a> </span><span class=cF1>if</span><span class=cF0> (tmpf->flags & </span><span class=cF3>LFSF_DOC</span><span class=cF0>)
|
|
<a name="l142"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l143"></a> doc = tmpf->doc;
|
|
<a name="l144"></a> doc_e = tmpf->cur_entry;
|
|
<a name="l145"></a> doc_e = doc_e->next;
|
|
<a name="l146"></a>lgc_start2:
|
|
<a name="l147"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e != doc)
|
|
<a name="l148"></a> {
|
|
<a name="l149"></a> tmpf->cur_entry = doc_e;
|
|
<a name="l150"></a> </span><span class=cF1>switch</span><span class=cF0> [doc_e->type_u8]
|
|
<a name="l151"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l152"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>DOCT_TEXT</span><span class=cF0>:
|
|
<a name="l153"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e->de_flags &
|
|
<a name="l154"></a> ~</span><span class=cF7>(</span><span class=cF3>DOCEF_TAG</span><span class=cF0> | </span><span class=cF3>DOCEF_DEFINE</span><span class=cF0> | </span><span class=cF3>DOCEF_TAG_CB</span><span class=cF0> | </span><span class=cF3>DOCG_BL_IV_UL</span><span class=cF0> | </span><span class=cF3>DOCEF_WORD_WRAP</span><span class=cF0> |
|
|
<a name="l155"></a> </span><span class=cF3>DOCEF_HIGHLIGHT</span><span class=cF0> | </span><span class=cF3>DOCEF_SKIP</span><span class=cF0> | </span><span class=cF3>DOCEF_FILTER_SKIP</span><span class=cF7>)</span><span class=cF0> &&
|
|
<a name="l156"></a> </span><span class=cFD>LexDollar</span><span class=cF7>(</span><span class=cF0>cc, doc, doc_e</span><span class=cF7>)</span><span class=cF0> && *</span><span class=cF7>(</span><span class=cF0>src = cc->dollar_buf</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l157"></a> {
|
|
<a name="l158"></a> tmpf->line_num = doc_e->y + </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l159"></a> tmpf->buf_ptr = cc->cur_buf_ptr = src;
|
|
<a name="l160"></a> }
|
|
<a name="l161"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (*</span><span class=cF7>(</span><span class=cF0>src = doc_e->tag</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l162"></a> tmpf->buf_ptr = cc->cur_buf_ptr = src;
|
|
<a name="l163"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l164"></a> {
|
|
<a name="l165"></a> doc_e = doc_e->next;
|
|
<a name="l166"></a> </span><span class=cF1>goto</span><span class=cF0> lgc_start2;
|
|
<a name="l167"></a> }
|
|
<a name="l168"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l169"></a>
|
|
<a name="l170"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>DOCT_NEW_LINE</span><span class=cF0>:
|
|
<a name="l171"></a> tmpf->buf_ptr = cc->cur_buf_ptr = &</span><span class=cFD>lex_zeros</span><span class=cF0>;
|
|
<a name="l172"></a> tmpf->line_start = doc_e->next;
|
|
<a name="l173"></a> tmpf->line_num = doc_e->y + </span><span class=cFE>2</span><span class=cF0>;</span><span class=cF2>//+1 because NEW_LINE is on prev line</span><span class=cF0>
|
|
<a name="l174"></a> </span><span class=cF2>//+1 because doc y starts at zero</span><span class=cF0>
|
|
<a name="l175"></a> </span><span class=cFB>cmp</span><span class=cF0>.compiled_lines++;
|
|
<a name="l176"></a> cc->last_U16 = </span><span class=cF6>'\n'</span><span class=cF0>;
|
|
<a name="l177"></a> </span><span class=cF1>goto</span><span class=cF0> lgc_done;
|
|
<a name="l178"></a>
|
|
<a name="l179"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>DOCT_TAB</span><span class=cF0>:
|
|
<a name="l180"></a> tmpf->buf_ptr = cc->cur_buf_ptr = &</span><span class=cFD>lex_zeros</span><span class=cF0>;
|
|
<a name="l181"></a> tmpf->line_num = doc_e->y + </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l182"></a> cc->last_U16 = </span><span class=cF6>'\t'</span><span class=cF0>;
|
|
<a name="l183"></a> </span><span class=cF1>goto</span><span class=cF0> lgc_done;
|
|
<a name="l184"></a>
|
|
<a name="l185"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>DOCT_INS_BIN</span><span class=cF0>:
|
|
<a name="l186"></a> tmpf->buf_ptr = cc->cur_buf_ptr = &</span><span class=cFD>lex_zeros</span><span class=cF0>;
|
|
<a name="l187"></a> tmpf->line_num = doc_e->y + </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l188"></a> </span><span class=cF5>Free</span><span class=cF0>(cc->cur_str);
|
|
<a name="l189"></a> cc->cur_str = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l190"></a> cc->cur_str_len = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l191"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e->bin_data)
|
|
<a name="l192"></a> {
|
|
<a name="l193"></a> ptr = </span><span class=cF5>MAlloc</span><span class=cF0>(doc_e->bin_data->size);
|
|
<a name="l194"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e->bin_data->data)
|
|
<a name="l195"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(ptr, doc_e->bin_data->data, doc_e->bin_data->size);
|
|
<a name="l196"></a> cc->cur_str = ptr;
|
|
<a name="l197"></a> cc->cur_str_len = doc_e->bin_data->size;
|
|
<a name="l198"></a> }
|
|
<a name="l199"></a> cc->last_U16 = </span><span class=cF3>TK_INS_BIN</span><span class=cF0>;
|
|
<a name="l200"></a> </span><span class=cF1>goto</span><span class=cF0> lgc_done;
|
|
<a name="l201"></a>
|
|
<a name="l202"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>DOCT_INS_BIN_SIZE</span><span class=cF0>:
|
|
<a name="l203"></a> tmpf->buf_ptr = cc->cur_buf_ptr = &</span><span class=cFD>lex_zeros</span><span class=cF0>;
|
|
<a name="l204"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e->bin_data)
|
|
<a name="l205"></a> cc->cur_i64 = doc_e->bin_data->size;
|
|
<a name="l206"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l207"></a> cc->cur_i64 = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l208"></a> tmpf->line_num = doc_e->y + </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l209"></a> cc->last_U16 = </span><span class=cF3>TK_INS_BIN_SIZE</span><span class=cF0>;
|
|
<a name="l210"></a> </span><span class=cF1>goto</span><span class=cF0> lgc_done;
|
|
<a name="l211"></a>
|
|
<a name="l212"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>DOCT_SHIFTED_Y</span><span class=cF0>:
|
|
<a name="l213"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cFD>LexDollar</span><span class=cF7>(</span><span class=cF0>cc, doc, doc_e</span><span class=cF7>)</span><span class=cF0> && *</span><span class=cF7>(</span><span class=cF0>src = cc->dollar_buf</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l214"></a> {
|
|
<a name="l215"></a> tmpf->line_num = doc_e->y + </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l216"></a> tmpf->buf_ptr = cc->cur_buf_ptr = src;
|
|
<a name="l217"></a> }
|
|
<a name="l218"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l219"></a> {
|
|
<a name="l220"></a> tmpf->buf_ptr = cc->cur_buf_ptr = &</span><span class=cFD>lex_zeros</span><span class=cF0>;
|
|
<a name="l221"></a> tmpf->line_num = doc_e->y + </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l222"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e->attr < </span><span class=cFE>0</span><span class=cF0>)
|
|
<a name="l223"></a> cc->last_U16 = </span><span class=cF3>TK_SUPERSCRIPT</span><span class=cF0>;
|
|
<a name="l224"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (doc_e->attr > </span><span class=cFE>0</span><span class=cF0>)
|
|
<a name="l225"></a> cc->last_U16 = </span><span class=cF3>TK_SUBSCRIPT</span><span class=cF0>;
|
|
<a name="l226"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l227"></a> cc->last_U16 = </span><span class=cF3>TK_NORMALSCRIPT</span><span class=cF0>;
|
|
<a name="l228"></a> </span><span class=cF1>goto</span><span class=cF0> lgc_done;
|
|
<a name="l229"></a> }
|
|
<a name="l230"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l231"></a>
|
|
<a name="l232"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>DOCT_MARKER</span><span class=cF0>:
|
|
<a name="l233"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>DOCT_CURSOR</span><span class=cF0>:
|
|
<a name="l234"></a> doc_e = doc_e->next;
|
|
<a name="l235"></a> </span><span class=cF1>goto</span><span class=cF0> lgc_start2;
|
|
<a name="l236"></a>
|
|
<a name="l237"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cFE>0xFF</span><span class=cF0>: </span><span class=cF2>// nobound switch</span><span class=cF0>
|
|
<a name="l238"></a> </span><span class=cF1>default</span><span class=cF0>:
|
|
<a name="l239"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cFD>LexDollar</span><span class=cF7>(</span><span class=cF0>cc, doc, doc_e</span><span class=cF7>)</span><span class=cF0> && *</span><span class=cF7>(</span><span class=cF0>src = cc->dollar_buf</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l240"></a> {
|
|
<a name="l241"></a> tmpf->line_num = doc_e->y + </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l242"></a> tmpf->buf_ptr = cc->cur_buf_ptr = src;
|
|
<a name="l243"></a> }
|
|
<a name="l244"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l245"></a> {
|
|
<a name="l246"></a> doc_e = doc_e->next;
|
|
<a name="l247"></a> </span><span class=cF1>goto</span><span class=cF0> lgc_start2;
|
|
<a name="l248"></a> }
|
|
<a name="l249"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l250"></a> }
|
|
<a name="l251"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e != doc)
|
|
<a name="l252"></a> </span><span class=cF1>goto</span><span class=cF0> lgc_start1;
|
|
<a name="l253"></a> tmpf->cur_entry = doc->head.last; </span><span class=cF2>// When take next, will still be end.</span><span class=cF0>
|
|
<a name="l254"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l255"></a> tmpf = cc->lex_include_stack;
|
|
<a name="l256"></a> </span><span class=cF1>if</span><span class=cF0> (tmpf->next)
|
|
<a name="l257"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l258"></a> tmpf = </span><span class=cFD>LexFilePop</span><span class=cF0>(cc);
|
|
<a name="l259"></a> cc->cur_buf_ptr = tmpf->buf_ptr;
|
|
<a name="l260"></a> cc->flags &= ~</span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l261"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>cc->last_U16 = tmpf->last_U16</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l262"></a> </span><span class=cF1>goto</span><span class=cF0> lgc_start1;
|
|
<a name="l263"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l264"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l265"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l266"></a> </span><span class=cF1>if</span><span class=cF0> (cc->flags & </span><span class=cF3>CCF_PROMPT</span><span class=cF0>)
|
|
<a name="l267"></a> {
|
|
<a name="l268"></a> </span><span class=cF5>Free</span><span class=cF0>(tmpf->buf);
|
|
<a name="l269"></a> ptr = </span><span class=cFD>CmdLinePrompt</span><span class=cF0>;
|
|
<a name="l270"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>StrCompare</span><span class=cF7>(</span><span class=cF0>ptr, </span><span class=cF6>"\n"</span><span class=cF7>)</span><span class=cF0> && !cc->prompt_line++ &&
|
|
<a name="l271"></a> !</span><span class=cF5>StrCompare</span><span class=cF7>(</span><span class=cF0>ptr, </span><span class=cF6>"?\n"</span><span class=cF7>)</span><span class=cF0> && cc->flags & </span><span class=cF3>CCF_QUESTION_HELP</span><span class=cF0>)
|
|
<a name="l272"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l273"></a> </span><span class=cF5>Free</span><span class=cF0>(ptr);
|
|
<a name="l274"></a> ptr = </span><span class=cF5>StrNew</span><span class=cF0>(</span><span class=cF6>"Help;;\n"</span><span class=cF0>);
|
|
<a name="l275"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l276"></a> tmpf->buf = tmpf->buf_ptr = tmpf->line_start = cc->cur_buf_ptr = ptr;
|
|
<a name="l277"></a> </span><span class=cF1>goto</span><span class=cF0> lgc_start1;
|
|
<a name="l278"></a> }
|
|
<a name="l279"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l280"></a> {
|
|
<a name="l281"></a> </span><span class=cF1>if</span><span class=cF0> (src)
|
|
<a name="l282"></a> cc->cur_buf_ptr = src - </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l283"></a> cc->last_U16 = </span><span class=cF3>TK_EOF</span><span class=cF0>;
|
|
<a name="l284"></a> }
|
|
<a name="l285"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l286"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l287"></a>
|
|
<a name="l288"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>CH_CURSOR</span><span class=cF0>:
|
|
<a name="l289"></a> </span><span class=cF1>goto</span><span class=cF0> lgc_start1;
|
|
<a name="l290"></a>
|
|
<a name="l291"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'\n'</span><span class=cF0>:
|
|
<a name="l292"></a> tmpf = cc->lex_include_stack;
|
|
<a name="l293"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>tmpf->flags & </span><span class=cF3>LFSF_DOC</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l294"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l295"></a> tmpf->line_num++;
|
|
<a name="l296"></a> </span><span class=cFB>cmp</span><span class=cF0>.compiled_lines++;
|
|
<a name="l297"></a> tmpf->line_start = src;
|
|
<a name="l298"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l299"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l300"></a>
|
|
<a name="l301"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cFE>0xFF</span><span class=cF0>: </span><span class=cF2>//nobound switch</span><span class=cF0>
|
|
<a name="l302"></a> }
|
|
<a name="l303"></a>lgc_done:
|
|
<a name="l304"></a> </span><span class=cF1>if</span><span class=cF0> (cc->opts & </span><span class=cF3>OPTF_ECHO</span><span class=cF0> && cc->last_U16 < </span><span class=cFE>256</span><span class=cF0> && </span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cFB>char_bmp_printable</span><span class=cF0>, cc->last_U16</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l305"></a> </span><span class=cF6>''</span><span class=cF0> cc->last_U16;
|
|
<a name="l306"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l307"></a>
|
|
<a name="l308"></a> </span><span class=cF1>return</span><span class=cF0> cc->last_U16;
|
|
<a name="l309"></a>}
|
|
<a name="l310"></a>
|
|
<a name="l311"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>LexSkipEol</span><span class=cF0>(</span><span class=cF9>CCompCtrl</span><span class=cF0> *cc)
|
|
<a name="l312"></a>{</span><span class=cF2>//</span><a href="https://tomawezome.github.io/ZealOS/Compiler/Lex.CC.html#l121"><span class=cF4>LexCharGet</span></a><span class=cF2> to NULL until end-of-line.</span><span class=cF0>
|
|
<a name="l313"></a> </span><span class=cF9>I64</span><span class=cF0> ch;
|
|
<a name="l314"></a>
|
|
<a name="l315"></a> </span><span class=cF1>do</span><span class=cF0> ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc);
|
|
<a name="l316"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cFB>char_bmp_non_eol</span><span class=cF0>, ch</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l317"></a>}
|
|
<a name="l318"></a>
|
|
<a name="l319"></a></span><span class=cF1>U8</span><span class=cF0> *</span><span class=cF5>LexFirstRemove</span><span class=cF0>(</span><span class=cF9>CCompCtrl</span><span class=cF0> *cc, </span><span class=cF1>U8</span><span class=cF0> *marker, </span><span class=cF9>I64</span><span class=cF0> _len=</span><span class=cF3>NULL</span><span class=cF0>)
|
|
<a name="l320"></a>{</span><span class=cF2>//</span><a href="https://tomawezome.github.io/ZealOS/Compiler/Lex.CC.html#l121"><span class=cF4>LexCharGet</span></a><span class=cF2>() chars making str until marker.</span><span class=cF0>
|
|
<a name="l321"></a> </span><span class=cF1>U8</span><span class=cF0> *res, *ptr;
|
|
<a name="l322"></a> </span><span class=cF9>CQueueVectU8</span><span class=cF0> *tmpv = </span><span class=cF5>QueueVectU8New</span><span class=cF0>;
|
|
<a name="l323"></a> </span><span class=cF9>I64</span><span class=cF0> i, len = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l324"></a>
|
|
<a name="l325"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>)
|
|
<a name="l326"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l327"></a> i = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc);
|
|
<a name="l328"></a> </span><span class=cF1>if</span><span class=cF0> (!i || </span><span class=cF5>StrOcc</span><span class=cF7>(</span><span class=cF0>marker, i</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l329"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l330"></a> </span><span class=cF5>QueueVectU8Put</span><span class=cF0>(tmpv, len++, i);
|
|
<a name="l331"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l332"></a> </span><span class=cF1>if</span><span class=cF0> (i)
|
|
<a name="l333"></a> </span><span class=cF5>Bts</span><span class=cF0>(&cc->flags, </span><span class=cF3>CCf_USE_LAST_U16</span><span class=cF0>);
|
|
<a name="l334"></a> res = ptr = </span><span class=cF5>MAlloc</span><span class=cF0>(len + </span><span class=cFE>1</span><span class=cF0>);
|
|
<a name="l335"></a> </span><span class=cF1>for</span><span class=cF0> (i = </span><span class=cFE>0</span><span class=cF0>; i < len; i++)
|
|
<a name="l336"></a> *ptr++ = </span><span class=cF5>QueueVectU8Get</span><span class=cF0>(tmpv, i);
|
|
<a name="l337"></a> *ptr = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l338"></a> </span><span class=cF5>QueueVectU8Del</span><span class=cF0>(tmpv);
|
|
<a name="l339"></a> </span><span class=cF1>if</span><span class=cF0> (_len)
|
|
<a name="l340"></a> *_len = len;
|
|
<a name="l341"></a>
|
|
<a name="l342"></a> </span><span class=cF1>return</span><span class=cF0> res;
|
|
<a name="l343"></a>}
|
|
<a name="l344"></a>
|
|
<a name="l345"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cFD>LexIncludeStr</span><span class=cF0>(</span><span class=cF9>CCompCtrl</span><span class=cF0> *cc, </span><span class=cF1>U8</span><span class=cF0> *abs_filename, </span><span class=cF1>U8</span><span class=cF0> *src, </span><span class=cF1>Bool</span><span class=cF0> actual_file)
|
|
<a name="l346"></a>{
|
|
<a name="l347"></a> </span><span class=cFD>LexBackupLastChar</span><span class=cF0>(cc);
|
|
<a name="l348"></a> </span><span class=cF9>CLexFile</span><span class=cF0> *tmpf = </span><span class=cFD>LexFilePush</span><span class=cF0>(cc);
|
|
<a name="l349"></a>
|
|
<a name="l350"></a> </span><span class=cF1>if</span><span class=cF0> (actual_file)
|
|
<a name="l351"></a> tmpf->full_name = </span><span class=cF5>StrNew</span><span class=cF0>(abs_filename);
|
|
<a name="l352"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l353"></a> tmpf->full_name = </span><span class=cF5>StrNew</span><span class=cF0>(</span><span class=cFB>blkdev</span><span class=cF0>.tmp_filename);
|
|
<a name="l354"></a> tmpf->line_num = </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l355"></a> tmpf->buf = tmpf->buf_ptr = tmpf->line_start = cc->cur_buf_ptr = src;
|
|
<a name="l356"></a>}
|
|
<a name="l357"></a>
|
|
<a name="l358"></a></span><span class=cF9>CDoc</span><span class=cF0> *</span><span class=cFD>LexDocRead</span><span class=cF0>(</span><span class=cF1>U8</span><span class=cF0> *abs_filename, </span><span class=cF9>I64</span><span class=cF0> flags)
|
|
<a name="l359"></a>{
|
|
<a name="l360"></a> </span><span class=cF9>CDoc</span><span class=cF0> *doc = </span><span class=cF5>DocNew</span><span class=cF0>(abs_filename);
|
|
<a name="l361"></a> </span><span class=cF1>U8</span><span class=cF0> *src;
|
|
<a name="l362"></a> </span><span class=cF9>I64</span><span class=cF0> size = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l363"></a>
|
|
<a name="l364"></a> doc->flags |= flags;
|
|
<a name="l365"></a> src = </span><span class=cF5>FileRead</span><span class=cF0>(abs_filename, &size);
|
|
<a name="l366"></a> </span><span class=cF1>if</span><span class=cF0> (!src || !size)
|
|
<a name="l367"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l368"></a> </span><span class=cF5>Free</span><span class=cF0>(src);
|
|
<a name="l369"></a> src = </span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cFE>1</span><span class=cF0>);
|
|
<a name="l370"></a> size = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l371"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l372"></a> </span><span class=cF5>DocLoad</span><span class=cF0>(doc, src, size);
|
|
<a name="l373"></a> </span><span class=cF5>Free</span><span class=cF0>(src);
|
|
<a name="l374"></a>
|
|
<a name="l375"></a> </span><span class=cF1>return</span><span class=cF0> doc;
|
|
<a name="l376"></a>}
|
|
<a name="l377"></a>
|
|
<a name="l378"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cFD>comp_type_flags_src_code</span><span class=cF0>[(</span><span class=cF3>DOCT_TYPES_NUM</span><span class=cF0> + </span><span class=cFE>63</span><span class=cF0>) / </span><span class=cFE>64</span><span class=cF0>] = {
|
|
<a name="l379"></a> </span><span class=cFE>1</span><span class=cF0> << </span><span class=cF3>DOCT_TEXT</span><span class=cF0> | </span><span class=cFE>1</span><span class=cF0> << </span><span class=cF3>DOCT_TAB</span><span class=cF0> | </span><span class=cFE>1</span><span class=cF0> << </span><span class=cF3>DOCT_INS_BIN</span><span class=cF0> | </span><span class=cFE>1</span><span class=cF0> << </span><span class=cF3>DOCT_INS_BIN_SIZE</span><span class=cF0>};
|
|
<a name="l380"></a>
|
|
<a name="l381"></a></span><span class=cF1>U0</span><span class=cF0> </span><span class=cF5>LexAttachDoc</span><span class=cF0>(</span><span class=cF9>CCompCtrl</span><span class=cF0> *cc, </span><span class=cF9>CLexFile</span><span class=cF0> *tmpf=</span><span class=cF3>NULL</span><span class=cF0>, </span><span class=cF9>CDoc</span><span class=cF0> *doc=</span><span class=cF3>NULL</span><span class=cF0>, </span><span class=cF1>U8</span><span class=cF0> *abs_filename=</span><span class=cF3>NULL</span><span class=cF0>, </span><span class=cF9>CDocEntry</span><span class=cF0> *doc_e=</span><span class=cF3>NULL</span><span class=cF0>, </span><span class=cF9>I64</span><span class=cF0> col=</span><span class=cFE>0</span><span class=cF0>)
|
|
<a name="l382"></a>{</span><span class=cF2>//Start lexing doc. Give either doc or abs_filename.</span><span class=cF0>
|
|
<a name="l383"></a> </span><span class=cF1>if</span><span class=cF0> (!doc)
|
|
<a name="l384"></a> doc = </span><span class=cFD>LexDocRead</span><span class=cF0>(abs_filename, </span><span class=cF3>DOCF_DBL_DOLLARS</span><span class=cF0>);
|
|
<a name="l385"></a> </span><span class=cF1>if</span><span class=cF0> (!tmpf)
|
|
<a name="l386"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l387"></a> </span><span class=cFD>LexBackupLastChar</span><span class=cF0>(cc);
|
|
<a name="l388"></a> tmpf = </span><span class=cFD>LexFilePush</span><span class=cF0>(cc);
|
|
<a name="l389"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l390"></a> </span><span class=cF1>if</span><span class=cF0> (!doc_e)
|
|
<a name="l391"></a> doc_e = doc->head.next;
|
|
<a name="l392"></a> tmpf->full_name = </span><span class=cF5>StrNew</span><span class=cF0>(doc->filename.name);
|
|
<a name="l393"></a> tmpf->doc = doc;
|
|
<a name="l394"></a> </span><span class=cF1>while</span><span class=cF0> (doc_e != doc)
|
|
<a name="l395"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l396"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cFD>comp_type_flags_src_code</span><span class=cF0>, doc_e->type_u8</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l397"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l398"></a> doc_e = doc_e->next;
|
|
<a name="l399"></a> col = doc_e->min_col;
|
|
<a name="l400"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l401"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e != doc)
|
|
<a name="l402"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l403"></a> col = </span><span class=cF5>ClampI64</span><span class=cF0>(col, doc_e->min_col, doc_e->max_col);
|
|
<a name="l404"></a> tmpf->line_start = doc_e;
|
|
<a name="l405"></a> tmpf->buf = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l406"></a> tmpf->line_num = doc_e->y + </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l407"></a> </span><span class=cF1>if</span><span class=cF0> (doc_e->type_u8 == </span><span class=cF3>DOCT_TEXT</span><span class=cF0>)
|
|
<a name="l408"></a> {
|
|
<a name="l409"></a> tmpf->cur_entry = doc_e;
|
|
<a name="l410"></a> tmpf->buf_ptr = doc_e->tag;
|
|
<a name="l411"></a> }
|
|
<a name="l412"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l413"></a> {
|
|
<a name="l414"></a> tmpf->cur_entry = doc_e->last; </span><span class=cF2>//TODO: might be problem at begin of file</span><span class=cF0>
|
|
<a name="l415"></a> tmpf->buf_ptr = &</span><span class=cFD>lex_zeros</span><span class=cF0>;
|
|
<a name="l416"></a> }
|
|
<a name="l417"></a> tmpf->flags = </span><span class=cF3>LFSF_DOC</span><span class=cF0>;
|
|
<a name="l418"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l419"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l420"></a> </span><span class=cF7>{</span><span class=cF2>//TODO: DocDel(doc)?</span><span class=cF0>
|
|
<a name="l421"></a> col = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l422"></a> tmpf->buf = tmpf->buf_ptr = tmpf->line_start = </span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cFE>1</span><span class=cF0>);
|
|
<a name="l423"></a> tmpf->line_num = </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l424"></a> tmpf->flags = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l425"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l426"></a> cc->cur_buf_ptr = tmpf->buf_ptr + col;
|
|
<a name="l427"></a> tmpf->last_U16 = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l428"></a>}
|
|
<a name="l429"></a>
|
|
<a name="l430"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cFD>LexInStr</span><span class=cF0>(</span><span class=cF9>CCompCtrl</span><span class=cF0> *cc, </span><span class=cF1>U8</span><span class=cF0> *buf, </span><span class=cF9>I64</span><span class=cF0> size, </span><span class=cF1>Bool</span><span class=cF0> *done)
|
|
<a name="l431"></a>{
|
|
<a name="l432"></a> </span><span class=cF9>I64</span><span class=cF0> i = </span><span class=cFE>0</span><span class=cF0>, j, k, ch;
|
|
<a name="l433"></a>
|
|
<a name="l434"></a> *done = </span><span class=cF3>TRUE</span><span class=cF0>;
|
|
<a name="l435"></a> </span><span class=cF1>while</span><span class=cF0> (i < size - </span><span class=cFE>1</span><span class=cF0>)
|
|
<a name="l436"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l437"></a> ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc);
|
|
<a name="l438"></a> </span><span class=cF1>if</span><span class=cF0> (!ch || ch== </span><span class=cF6>'"'</span><span class=cF0>)
|
|
<a name="l439"></a> {
|
|
<a name="l440"></a> buf[i++] = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l441"></a> </span><span class=cF1>return</span><span class=cF0> i;
|
|
<a name="l442"></a> }
|
|
<a name="l443"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'\\'</span><span class=cF0>)
|
|
<a name="l444"></a> {
|
|
<a name="l445"></a> </span><span class=cF1>switch</span><span class=cF0> (ch = </span><span class=cF5>LexCharGet</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l446"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l447"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'0'</span><span class=cF0>:
|
|
<a name="l448"></a> buf[i++] = </span><span class=cFE>0</span><span class=cF0>;
|
|
<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=cF6>'\''</span><span class=cF0>:
|
|
<a name="l452"></a> buf[i++] = </span><span class=cF6>'\''</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=cF6>'\`'</span><span class=cF0>:
|
|
<a name="l456"></a> buf[i++] = </span><span class=cF6>'\`'</span><span class=cF0>;
|
|
<a name="l457"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l458"></a>
|
|
<a name="l459"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'\\'</span><span class=cF0>:
|
|
<a name="l460"></a> buf[i++] = </span><span class=cF6>'\\'</span><span class=cF0>;
|
|
<a name="l461"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l462"></a>
|
|
<a name="l463"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'"'</span><span class=cF0>:
|
|
<a name="l464"></a> buf[i++] = </span><span class=cF6>'"'</span><span class=cF0>;
|
|
<a name="l465"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l466"></a>
|
|
<a name="l467"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'d'</span><span class=cF0>:
|
|
<a name="l468"></a> buf[i++] = </span><span class=cF6>'$'</span><span class=cF0>;
|
|
<a name="l469"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l470"></a>
|
|
<a name="l471"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'n'</span><span class=cF0>:
|
|
<a name="l472"></a> buf[i++] = </span><span class=cF6>'\n'</span><span class=cF0>;
|
|
<a name="l473"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l474"></a>
|
|
<a name="l475"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'r'</span><span class=cF0>:
|
|
<a name="l476"></a> buf[i++] = </span><span class=cF6>'\r'</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=cF6>'t'</span><span class=cF0>:
|
|
<a name="l480"></a> buf[i++] = </span><span class=cF6>'\t'</span><span class=cF0>;
|
|
<a name="l481"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l482"></a>
|
|
<a name="l483"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'x'</span><span class=cF0>:
|
|
<a name="l484"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'X'</span><span class=cF0>:
|
|
<a name="l485"></a> j = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l486"></a> </span><span class=cF1>for</span><span class=cF0> (k = </span><span class=cFE>0</span><span class=cF0>; k < </span><span class=cFE>2</span><span class=cF0>; k++)
|
|
<a name="l487"></a> {
|
|
<a name="l488"></a> ch = </span><span class=cF5>ToUpper</span><span class=cF0>(</span><span class=cF5>LexCharGet</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l489"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cFB>char_bmp_hex_numeric</span><span class=cF0>, ch</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l490"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l491"></a> </span><span class=cF1>if</span><span class=cF0> (ch <= </span><span class=cF6>'9'</span><span class=cF0>)
|
|
<a name="l492"></a> j = j << </span><span class=cFE>4</span><span class=cF0> + ch - </span><span class=cF6>'0'</span><span class=cF0>;
|
|
<a name="l493"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l494"></a> j = j << </span><span class=cFE>4</span><span class=cF0> + ch - </span><span class=cF6>'A'</span><span class=cF0> + </span><span class=cFE>10</span><span class=cF0>;
|
|
<a name="l495"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l496"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l497"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l498"></a> cc->flags |= </span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l499"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l500"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l501"></a> }
|
|
<a name="l502"></a> buf[i++] = j;
|
|
<a name="l503"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l504"></a>
|
|
<a name="l505"></a> </span><span class=cF1>default</span><span class=cF0>:
|
|
<a name="l506"></a> cc->flags |= </span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l507"></a> buf[i++] = </span><span class=cF6>'\\'</span><span class=cF0>;
|
|
<a name="l508"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l509"></a> }
|
|
<a name="l510"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'$'</span><span class=cF0>)
|
|
<a name="l511"></a> {
|
|
<a name="l512"></a> buf[i++] = </span><span class=cF6>'$'</span><span class=cF0>;
|
|
<a name="l513"></a> </span><span class=cF1>if</span><span class=cF0> (cc->dollar_count)
|
|
<a name="l514"></a> cc->dollar_count--;
|
|
<a name="l515"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>LexCharGet</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0> != </span><span class=cF6>'$'</span><span class=cF0>)
|
|
<a name="l516"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l517"></a> cc->dollar_count = </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l518"></a> cc->flags |= </span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l519"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l520"></a> }
|
|
<a name="l521"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l522"></a> buf[i++] = ch;
|
|
<a name="l523"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l524"></a> *done = </span><span class=cF3>FALSE</span><span class=cF0>;
|
|
<a name="l525"></a>
|
|
<a name="l526"></a> </span><span class=cF1>return</span><span class=cF0> i;
|
|
<a name="l527"></a>}
|
|
<a name="l528"></a>
|
|
<a name="l529"></a></span><span class=cF9>I64</span><span class=cF0> </span><span class=cF5>Lex</span><span class=cF0>(</span><span class=cF9>CCompCtrl</span><span class=cF0> *cc)
|
|
<a name="l530"></a>{</span><span class=cF2>//Fetch next token.</span><span class=cF0>
|
|
<a name="l531"></a> </span><span class=cF9>I64</span><span class=cF0> i, j, k, l, ch;
|
|
<a name="l532"></a> </span><span class=cF9>CHash</span><span class=cF0> *tmph;
|
|
<a name="l533"></a> </span><span class=cF1>Bool</span><span class=cF0> str_done, in_str, neg_e;
|
|
<a name="l534"></a> </span><span class=cF1>U8</span><span class=cF0> *fbuf, *buf2, *buf3, buf[</span><span class=cF3>STR_LEN</span><span class=cF0>];
|
|
<a name="l535"></a>
|
|
<a name="l536"></a> cc->last_line_num = cc->lex_include_stack->line_num;
|
|
<a name="l537"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>)
|
|
<a name="l538"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l539"></a>lex_cont:
|
|
<a name="l540"></a> </span><span class=cF1>switch</span><span class=cF0> [ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc)]
|
|
<a name="l541"></a> {
|
|
<a name="l542"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cFE>0</span><span class=cF0>:
|
|
<a name="l543"></a> </span><span class=cF1>return</span><span class=cF0> cc->token = </span><span class=cF3>TK_EOF</span><span class=cF0>;
|
|
<a name="l544"></a>
|
|
<a name="l545"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>TK_SUPERSCRIPT</span><span class=cF0>:
|
|
<a name="l546"></a> ch = </span><span class=cF6>'>'</span><span class=cF0>;
|
|
<a name="l547"></a> </span><span class=cF1>goto</span><span class=cF0> lex_ident;
|
|
<a name="l548"></a>
|
|
<a name="l549"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>TK_SUBSCRIPT</span><span class=cF0>:
|
|
<a name="l550"></a> ch = </span><span class=cF6>'<'</span><span class=cF0>;
|
|
<a name="l551"></a> </span><span class=cF1>goto</span><span class=cF0> lex_ident;
|
|
<a name="l552"></a>
|
|
<a name="l553"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>TK_NORMALSCRIPT</span><span class=cF0>:
|
|
<a name="l554"></a> ch = </span><span class=cF6>'='</span><span class=cF0>;
|
|
<a name="l555"></a> </span><span class=cF1>goto</span><span class=cF0> lex_ident;
|
|
<a name="l556"></a>
|
|
<a name="l557"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'@'</span><span class=cF0>:
|
|
<a name="l558"></a> </span><span class=cF1>if</span><span class=cF0> (cc->flags & </span><span class=cF3>CCF_KEEP_AT_SIGN</span><span class=cF0>)
|
|
<a name="l559"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l560"></a> cc->token = ch;
|
|
<a name="l561"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l562"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l563"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'A'</span><span class=cF0>...</span><span class=cF6>'Z'</span><span class=cF0>:
|
|
<a name="l564"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'a'</span><span class=cF0>...</span><span class=cF6>'z'</span><span class=cF0>:
|
|
<a name="l565"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'_'</span><span class=cF0>:
|
|
<a name="l566"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cFE>128</span><span class=cF0>...</span><span class=cFE>255</span><span class=cF0>:
|
|
<a name="l567"></a>lex_ident:
|
|
<a name="l568"></a> i = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l569"></a> buf[i++] = ch;
|
|
<a name="l570"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l571"></a> </span><span class=cF1>if</span><span class=cF0> (i >= </span><span class=cF3>STR_LEN</span><span class=cF0>)
|
|
<a name="l572"></a> </span><span class=cF5>LexExcept</span><span class=cF0>(cc, </span><span class=cF6>"Ident limited to STR_LEN chars at "</span><span class=cF0>);
|
|
<a name="l573"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc)</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l574"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l575"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>cc-></span><span class=cFB>char_bmp_alpha_numeric</span><span class=cF0>, ch</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l576"></a> buf[i++] = ch;
|
|
<a name="l577"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF3>TK_SUPERSCRIPT</span><span class=cF0>)
|
|
<a name="l578"></a> buf[i++] = </span><span class=cF6>'>'</span><span class=cF0>;
|
|
<a name="l579"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF3>TK_SUBSCRIPT</span><span class=cF0>)
|
|
<a name="l580"></a> buf[i++] = </span><span class=cF6>'<'</span><span class=cF0>;
|
|
<a name="l581"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF3>TK_NORMALSCRIPT</span><span class=cF0>)
|
|
<a name="l582"></a> buf[i++] = </span><span class=cF6>'='</span><span class=cF0>;
|
|
<a name="l583"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l584"></a> {
|
|
<a name="l585"></a> cc->flags |= </span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l586"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l587"></a> }
|
|
<a name="l588"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l589"></a> buf[i++] = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l590"></a> tmph = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l591"></a> </span><span class=cF1>if</span><span class=cF0> (cc->htc.local_var_list)
|
|
<a name="l592"></a> cc->local_var_entry = </span><span class=cF5>MemberFind</span><span class=cF0>(buf, cc->htc.local_var_list);
|
|
<a name="l593"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l594"></a> cc->local_var_entry = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l595"></a> </span><span class=cF1>if</span><span class=cF0> (!cc->local_var_entry && cc->htc.hash_table_list)
|
|
<a name="l596"></a> tmph = </span><span class=cF5>HashFind</span><span class=cF0>(buf, cc->htc.hash_table_list, cc->htc.hash_mask);
|
|
<a name="l597"></a> </span><span class=cF1>if</span><span class=cF0> (tmph)
|
|
<a name="l598"></a> j = tmph->type;
|
|
<a name="l599"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l600"></a> j = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l601"></a> </span><span class=cF1>if</span><span class=cF0> (j & </span><span class=cF3>HTT_DEFINE_STR</span><span class=cF0> && !</span><span class=cF7>(</span><span class=cF0>cc->flags & </span><span class=cF3>CCF_NO_DEFINES</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l602"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l603"></a> </span><span class=cFD>LexIncludeStr</span><span class=cF0>(cc, tmph->str, </span><span class=cF5>StrNew</span><span class=cF7>(</span><span class=cF0>tmph(</span><span class=cF9>CHashDefineStr</span><span class=cF0> *)->data</span><span class=cF7>)</span><span class=cF0>, </span><span class=cF3>FALSE</span><span class=cF0>);
|
|
<a name="l604"></a> cc->lex_include_stack->flags |= </span><span class=cF3>LFSF_DEFINE</span><span class=cF0>;
|
|
<a name="l605"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l606"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l607"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l608"></a> cc->hash_entry = tmph;
|
|
<a name="l609"></a> </span><span class=cF5>Free</span><span class=cF0>(cc->cur_str);
|
|
<a name="l610"></a> cc->cur_str = </span><span class=cF5>StrNew</span><span class=cF0>(buf);
|
|
<a name="l611"></a> cc->cur_str_len = i;
|
|
<a name="l612"></a> cc->token = </span><span class=cF3>TK_IDENT</span><span class=cF0>;
|
|
<a name="l613"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l614"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l615"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l616"></a>
|
|
<a name="l617"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'0'</span><span class=cF0>...</span><span class=cF6>'9'</span><span class=cF0>:
|
|
<a name="l618"></a> i = ch - </span><span class=cF6>'0'</span><span class=cF0>;
|
|
<a name="l619"></a> ch = </span><span class=cF5>ToUpper</span><span class=cF0>(</span><span class=cF5>LexCharGet</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l620"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&cc->opts, </span><span class=cF3>OPTf_DECIMAL_ONLY</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l621"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l622"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'X'</span><span class=cF0>)
|
|
<a name="l623"></a> {
|
|
<a name="l624"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>)
|
|
<a name="l625"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l626"></a> ch = </span><span class=cF5>ToUpper</span><span class=cF0>(</span><span class=cF5>LexCharGet</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l627"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cFB>char_bmp_hex_numeric</span><span class=cF0>, ch</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l628"></a> {
|
|
<a name="l629"></a> </span><span class=cF1>if</span><span class=cF0> (ch <= </span><span class=cF6>'9'</span><span class=cF0>)
|
|
<a name="l630"></a> i = i << </span><span class=cFE>4</span><span class=cF0> + ch - </span><span class=cF6>'0'</span><span class=cF0>;
|
|
<a name="l631"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l632"></a> i = i << </span><span class=cFE>4</span><span class=cF0> + ch - </span><span class=cF6>'A'</span><span class=cF0> + </span><span class=cFE>10</span><span class=cF0>;
|
|
<a name="l633"></a> }
|
|
<a name="l634"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l635"></a> {
|
|
<a name="l636"></a> cc->cur_i64 = i;
|
|
<a name="l637"></a> cc->flags |= </span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l638"></a> cc->token = </span><span class=cF3>TK_I64</span><span class=cF0>;
|
|
<a name="l639"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l640"></a> }
|
|
<a name="l641"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l642"></a> }
|
|
<a name="l643"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'B'</span><span class=cF0>)
|
|
<a name="l644"></a> {
|
|
<a name="l645"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>)
|
|
<a name="l646"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l647"></a> ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc);
|
|
<a name="l648"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'0'</span><span class=cF0>)
|
|
<a name="l649"></a> i = i << </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l650"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'1'</span><span class=cF0>)
|
|
<a name="l651"></a> i = i << </span><span class=cFE>1</span><span class=cF0> + </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l652"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l653"></a> {
|
|
<a name="l654"></a> cc->cur_i64 = i;
|
|
<a name="l655"></a> cc->flags |= </span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l656"></a> cc->token = </span><span class=cF3>TK_I64</span><span class=cF0>;
|
|
<a name="l657"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l658"></a> }
|
|
<a name="l659"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l660"></a> }
|
|
<a name="l661"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l662"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>)
|
|
<a name="l663"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l664"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cFB>char_bmp_dec_numeric</span><span class=cF0>, ch</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l665"></a> i = i * </span><span class=cFE>10</span><span class=cF0> + ch - </span><span class=cF6>'0'</span><span class=cF0>;
|
|
<a name="l666"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l667"></a> {
|
|
<a name="l668"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'.'</span><span class=cF0> || ch == </span><span class=cF6>'e'</span><span class=cF0> || ch == </span><span class=cF6>'E'</span><span class=cF0>)
|
|
<a name="l669"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l670"></a>lex_is_int:
|
|
<a name="l671"></a> cc->cur_i64 = i;
|
|
<a name="l672"></a> cc->flags |= </span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l673"></a> cc->token = </span><span class=cF3>TK_I64</span><span class=cF0>;
|
|
<a name="l674"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l675"></a> }
|
|
<a name="l676"></a> ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc);
|
|
<a name="l677"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l678"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'.'</span><span class=cF0>)
|
|
<a name="l679"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l680"></a> ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc);
|
|
<a name="l681"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'.'</span><span class=cF0>) {
|
|
<a name="l682"></a> cc->flags |= </span><span class=cF3>CCF_LAST_WAS_DOT</span><span class=cF0>;
|
|
<a name="l683"></a> </span><span class=cF1>goto</span><span class=cF0> lex_is_int;
|
|
<a name="l684"></a> }
|
|
<a name="l685"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l686"></a>lex_float_start:
|
|
<a name="l687"></a> k = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l688"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>)
|
|
<a name="l689"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l690"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cFB>char_bmp_dec_numeric</span><span class=cF0>, ch</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l691"></a> {
|
|
<a name="l692"></a> i = i * </span><span class=cFE>10</span><span class=cF0> + ch - </span><span class=cF6>'0'</span><span class=cF0>;
|
|
<a name="l693"></a> k++;
|
|
<a name="l694"></a> }
|
|
<a name="l695"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l696"></a> {
|
|
<a name="l697"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'e'</span><span class=cF0> || ch == </span><span class=cF6>'E'</span><span class=cF0>)
|
|
<a name="l698"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l699"></a> cc->cur_f64 = i * </span><span class=cF5>Pow10I64</span><span class=cF0>(-k);
|
|
<a name="l700"></a> cc->flags |= </span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l701"></a> cc->token = </span><span class=cF3>TK_F64</span><span class=cF0>;
|
|
<a name="l702"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l703"></a> }
|
|
<a name="l704"></a> ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc);
|
|
<a name="l705"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l706"></a> ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc);
|
|
<a name="l707"></a> neg_e = </span><span class=cF3>FALSE</span><span class=cF0>;
|
|
<a name="l708"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'-'</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l709"></a> neg_e = </span><span class=cF3>TRUE</span><span class=cF0>;
|
|
<a name="l710"></a> ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc);
|
|
<a name="l711"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l712"></a> j = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l713"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF3>TRUE</span><span class=cF0>)
|
|
<a name="l714"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l715"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cFB>char_bmp_dec_numeric</span><span class=cF0>, ch</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l716"></a> j = j * </span><span class=cFE>10</span><span class=cF0> + ch - </span><span class=cF6>'0'</span><span class=cF0>;
|
|
<a name="l717"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l718"></a> {
|
|
<a name="l719"></a> </span><span class=cF1>if</span><span class=cF0> (neg_e)
|
|
<a name="l720"></a> cc->cur_f64 = i * </span><span class=cF5>Pow10I64</span><span class=cF0>(-j-k);
|
|
<a name="l721"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l722"></a> cc->cur_f64 = i * </span><span class=cF5>Pow10I64</span><span class=cF0>(j-k);
|
|
<a name="l723"></a> cc->flags |= </span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l724"></a> cc->token = </span><span class=cF3>TK_F64</span><span class=cF0>;
|
|
<a name="l725"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l726"></a> }
|
|
<a name="l727"></a> ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc);
|
|
<a name="l728"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l729"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l730"></a>
|
|
<a name="l731"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'"'</span><span class=cF0>:
|
|
<a name="l732"></a> cc->flags |= </span><span class=cF3>CCF_IN_QUOTES</span><span class=cF0>;
|
|
<a name="l733"></a> buf2 = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l734"></a> i = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l735"></a> </span><span class=cF1>do</span><span class=cF0>
|
|
<a name="l736"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l737"></a> j = </span><span class=cFD>LexInStr</span><span class=cF0>(cc, buf, </span><span class=cF3>STR_LEN</span><span class=cF0>, &str_done);
|
|
<a name="l738"></a> buf3 = </span><span class=cF5>MAlloc</span><span class=cF0>(i + j);
|
|
<a name="l739"></a> </span><span class=cF1>if</span><span class=cF0> (buf2)
|
|
<a name="l740"></a> {
|
|
<a name="l741"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(buf3, buf2, i);
|
|
<a name="l742"></a> </span><span class=cF5>Free</span><span class=cF0>(buf2);
|
|
<a name="l743"></a> buf2 = buf3;
|
|
<a name="l744"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(buf2 + i, buf, j);
|
|
<a name="l745"></a> }
|
|
<a name="l746"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l747"></a> {
|
|
<a name="l748"></a> buf2 = buf3;
|
|
<a name="l749"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(buf2, buf, j);
|
|
<a name="l750"></a> }
|
|
<a name="l751"></a> i += j;
|
|
<a name="l752"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l753"></a> </span><span class=cF1>while</span><span class=cF0> (!str_done);
|
|
<a name="l754"></a>
|
|
<a name="l755"></a> </span><span class=cF5>Free</span><span class=cF0>(cc->cur_str);
|
|
<a name="l756"></a> cc->cur_str = </span><span class=cF5>MAlloc</span><span class=cF0>(i);
|
|
<a name="l757"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(cc->cur_str, buf2, i);
|
|
<a name="l758"></a> </span><span class=cF5>Free</span><span class=cF0>(buf2);
|
|
<a name="l759"></a> cc->cur_str_len = i;
|
|
<a name="l760"></a> cc->flags &= ~</span><span class=cF3>CCF_IN_QUOTES</span><span class=cF0>;
|
|
<a name="l761"></a> cc->token = </span><span class=cF3>TK_STR</span><span class=cF0>;
|
|
<a name="l762"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l763"></a>
|
|
<a name="l764"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'\''</span><span class=cF0>:
|
|
<a name="l765"></a> </span><span class=cF1>if</span><span class=cF0> (cc->flags & </span><span class=cF3>CCF_NO_CHAR_CONST</span><span class=cF0>)
|
|
<a name="l766"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l767"></a> k = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l768"></a> </span><span class=cF1>for</span><span class=cF0> (j = </span><span class=cFE>0</span><span class=cF0>; j < </span><span class=cFE>8</span><span class=cF0>; j++)
|
|
<a name="l769"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l770"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc)</span><span class=cF7>)</span><span class=cF0> || ch == </span><span class=cF6>'\''</span><span class=cF0>)
|
|
<a name="l771"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l772"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'\\'</span><span class=cF0>)
|
|
<a name="l773"></a> {
|
|
<a name="l774"></a> </span><span class=cF1>switch</span><span class=cF0> (ch = </span><span class=cF5>LexCharGet</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l775"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l776"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'0'</span><span class=cF0>: k.u8[j] = </span><span class=cFE>0</span><span class=cF0>; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l777"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'\''</span><span class=cF0>: k.u8[j] = </span><span class=cF6>'\''</span><span class=cF0>; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l778"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'\`'</span><span class=cF0>: k.u8[j] = </span><span class=cF6>'\`'</span><span class=cF0>; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l779"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'"'</span><span class=cF0>: k.u8[j] = </span><span class=cF6>'"'</span><span class=cF0>; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l780"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'\\'</span><span class=cF0>: k.u8[j] = </span><span class=cF6>'\\'</span><span class=cF0>; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l781"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'d'</span><span class=cF0>: k.u8[j] = </span><span class=cF6>'$'</span><span class=cF0>; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l782"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'n'</span><span class=cF0>: k.u8[j] = </span><span class=cF6>'\n'</span><span class=cF0>; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l783"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'r'</span><span class=cF0>: k.u8[j] = </span><span class=cF6>'\r'</span><span class=cF0>; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l784"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'t'</span><span class=cF0>: k.u8[j] = </span><span class=cF6>'\t'</span><span class=cF0>; </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l785"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'x'</span><span class=cF0>:
|
|
<a name="l786"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'X'</span><span class=cF0>:
|
|
<a name="l787"></a> i = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l788"></a> </span><span class=cF1>for</span><span class=cF0> (l = </span><span class=cFE>0</span><span class=cF0>; l < </span><span class=cFE>2</span><span class=cF0>; l++)
|
|
<a name="l789"></a> {
|
|
<a name="l790"></a> ch = </span><span class=cF5>ToUpper</span><span class=cF0>(</span><span class=cF5>LexCharGet</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l791"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cFB>char_bmp_hex_numeric</span><span class=cF0>, ch</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l792"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l793"></a> </span><span class=cF1>if</span><span class=cF0> (ch <= </span><span class=cF6>'9'</span><span class=cF0>)
|
|
<a name="l794"></a> i = i << </span><span class=cFE>4</span><span class=cF0> + ch - </span><span class=cF6>'0'</span><span class=cF0>;
|
|
<a name="l795"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l796"></a> i = i << </span><span class=cFE>4</span><span class=cF0> + ch - </span><span class=cF6>'A'</span><span class=cF0> + </span><span class=cFE>10</span><span class=cF0>;
|
|
<a name="l797"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l798"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l799"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l800"></a> cc->flags |= </span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l801"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l802"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l803"></a> }
|
|
<a name="l804"></a> k.u8[j] = i;
|
|
<a name="l805"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l806"></a>
|
|
<a name="l807"></a> </span><span class=cF1>default</span><span class=cF0>:
|
|
<a name="l808"></a> k.u8[j] = </span><span class=cF6>'\\'</span><span class=cF0>;
|
|
<a name="l809"></a> cc->flags |= </span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l810"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l811"></a> }
|
|
<a name="l812"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'$'</span><span class=cF0>)
|
|
<a name="l813"></a> {
|
|
<a name="l814"></a> ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc);
|
|
<a name="l815"></a> k.u8[j] = </span><span class=cF6>'$'</span><span class=cF0>;
|
|
<a name="l816"></a> </span><span class=cF1>if</span><span class=cF0> (ch != </span><span class=cF6>'$'</span><span class=cF0>)
|
|
<a name="l817"></a> cc->flags |= </span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l818"></a> }
|
|
<a name="l819"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l820"></a> k.u8[j] = ch;
|
|
<a name="l821"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l822"></a> </span><span class=cF1>if</span><span class=cF0> (ch != </span><span class=cF6>'\''</span><span class=cF0> && </span><span class=cF7>(</span><span class=cF0>ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc)</span><span class=cF7>)</span><span class=cF0> && ch != </span><span class=cF6>'\''</span><span class=cF0>)
|
|
<a name="l823"></a> </span><span class=cF5>LexExcept</span><span class=cF0>(cc, </span><span class=cF6>"Char const limited to 8 chars at "</span><span class=cF0>);
|
|
<a name="l824"></a> cc->cur_i64 = k;
|
|
<a name="l825"></a> cc->token = </span><span class=cF3>TK_CHAR_CONST</span><span class=cF0>;
|
|
<a name="l826"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l827"></a>
|
|
<a name="l828"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'#'</span><span class=cF0>:
|
|
<a name="l829"></a> </span><span class=cF1>if</span><span class=cF0> (cc->flags & </span><span class=cF3>CCF_KEEP_SIGN_NUM</span><span class=cF0>)
|
|
<a name="l830"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l831"></a> cc->token = ch;
|
|
<a name="l832"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l833"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l834"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Lex</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0> != </span><span class=cF3>TK_IDENT</span><span class=cF0>) </span><span class=cF2>//skip '#'</span><span class=cF0>
|
|
<a name="l835"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l836"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>tmph = cc->hash_entry</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l837"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l838"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>tmph->type & </span><span class=cF3>HTT_KEYWORD</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l839"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l840"></a> </span><span class=cF1>switch</span><span class=cF0> (i = tmph</span><span class=cF7>(</span><span class=cF9>CHashGeneric</span><span class=cF0> *</span><span class=cF7>)</span><span class=cF0>->user_data0)
|
|
<a name="l841"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l842"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>KW_INCLUDE</span><span class=cF0>:
|
|
<a name="l843"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Lex</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0> != </span><span class=cF3>TK_STR</span><span class=cF0>)
|
|
<a name="l844"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l845"></a> fbuf = </span><span class=cF5>ExtDefault</span><span class=cF0>(cc->cur_str, </span><span class=cF6>"CC"</span><span class=cF0>);
|
|
<a name="l846"></a> buf2 = </span><span class=cF5>FileNameAbs</span><span class=cF0>(fbuf);
|
|
<a name="l847"></a> </span><span class=cF5>Free</span><span class=cF0>(fbuf);
|
|
<a name="l848"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cF0>&</span><span class=cFB>sys_run_level</span><span class=cF0>, </span><span class=cF3>RLf_DOC</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l849"></a> </span><span class=cF5>LexAttachDoc</span><span class=cF0>(cc,,, buf2);
|
|
<a name="l850"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l851"></a> </span><span class=cFD>LexIncludeStr</span><span class=cF0>(cc, buf2, </span><span class=cF5>FileRead</span><span class=cF7>(</span><span class=cF0>buf2</span><span class=cF7>)</span><span class=cF0>, </span><span class=cF3>TRUE</span><span class=cF0>);
|
|
<a name="l852"></a> </span><span class=cF5>Free</span><span class=cF0>(buf2);
|
|
<a name="l853"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l854"></a>
|
|
<a name="l855"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>KW_DEFINE</span><span class=cF0>:
|
|
<a name="l856"></a> cc->flags |= </span><span class=cF3>CCF_NO_DEFINES</span><span class=cF0>;
|
|
<a name="l857"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Lex</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0> == </span><span class=cF3>TK_IDENT</span><span class=cF0>)
|
|
<a name="l858"></a> {
|
|
<a name="l859"></a> tmph = </span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CHashDefineStr</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l860"></a> tmph->str = cc->cur_str;
|
|
<a name="l861"></a> cc->cur_str = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l862"></a> tmph->type = </span><span class=cF3>HTT_DEFINE_STR</span><span class=cF0>;
|
|
<a name="l863"></a> </span><span class=cF5>HashSrcFileSet</span><span class=cF0>(cc,tmph);
|
|
<a name="l864"></a>
|
|
<a name="l865"></a> </span><span class=cF1>do</span><span class=cF0> ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc); </span><span class=cF2>//skip space between define name and start</span><span class=cF0>
|
|
<a name="l866"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cFB>char_bmp_non_eol_white_space</span><span class=cF0>, ch</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l867"></a>
|
|
<a name="l868"></a> i = j = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l869"></a> buf2 = </span><span class=cF3>NULL</span><span class=cF0>;
|
|
<a name="l870"></a> </span><span class=cF1>if</span><span class=cF0> (ch)
|
|
<a name="l871"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l872"></a> in_str = </span><span class=cF3>FALSE</span><span class=cF0>;
|
|
<a name="l873"></a> </span><span class=cF1>do</span><span class=cF0>
|
|
<a name="l874"></a> {
|
|
<a name="l875"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'\\'</span><span class=cF0>)
|
|
<a name="l876"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l877"></a> </span><span class=cF1>if</span><span class=cF0> (ch = </span><span class=cF5>LexCharGet</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l878"></a> {
|
|
<a name="l879"></a> </span><span class=cF1>if</span><span class=cF0> (ch != </span><span class=cF6>'\r'</span><span class=cF0> && ch != </span><span class=cF6>'\n'</span><span class=cF0>)
|
|
<a name="l880"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l881"></a> buf[j++] = </span><span class=cF6>'\\'</span><span class=cF0>;
|
|
<a name="l882"></a> buf[j++] = ch;
|
|
<a name="l883"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l884"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'\r'</span><span class=cF0> && </span><span class=cF5>LexCharGet</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0> != </span><span class=cF6>'\n'</span><span class=cF0>)
|
|
<a name="l885"></a> cc->flags|=</span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l886"></a> }
|
|
<a name="l887"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l888"></a> {
|
|
<a name="l889"></a> buf[j++] = </span><span class=cF6>'\\'</span><span class=cF0>;
|
|
<a name="l890"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l891"></a> }
|
|
<a name="l892"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l893"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (ch != </span><span class=cF6>'\n'</span><span class=cF0>)
|
|
<a name="l894"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l895"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'\"'</span><span class=cF0>)
|
|
<a name="l896"></a> in_str = !in_str;
|
|
<a name="l897"></a> buf[j++] = ch;
|
|
<a name="l898"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l899"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l900"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l901"></a> </span><span class=cF1>while</span><span class=cF0> (ch = </span><span class=cF5>LexCharGet</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l902"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l903"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'/'</span><span class=cF0>) {
|
|
<a name="l904"></a> ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc);
|
|
<a name="l905"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'/'</span><span class=cF0> && !in_str)
|
|
<a name="l906"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l907"></a> </span><span class=cF1>do</span><span class=cF0> ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc);
|
|
<a name="l908"></a> </span><span class=cF1>while</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cFB>char_bmp_non_eol</span><span class=cF0>, ch</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l909"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l910"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l911"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l912"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l913"></a> buf[j++] = </span><span class=cF6>'/'</span><span class=cF0>;
|
|
<a name="l914"></a> cc->flags |= </span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l915"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l916"></a> }
|
|
<a name="l917"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'\\'</span><span class=cF0>)
|
|
<a name="l918"></a> {
|
|
<a name="l919"></a> </span><span class=cF1>if</span><span class=cF0> (ch = </span><span class=cF5>LexCharGet</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l920"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l921"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'\"'</span><span class=cF0>)
|
|
<a name="l922"></a> {
|
|
<a name="l923"></a> buf[j++] = </span><span class=cF6>'\\'</span><span class=cF0>;
|
|
<a name="l924"></a> buf[j++] = ch;
|
|
<a name="l925"></a> }
|
|
<a name="l926"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l927"></a> {
|
|
<a name="l928"></a> cc->flags |= </span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l929"></a> ch = </span><span class=cF6>'\\'</span><span class=cF0>;
|
|
<a name="l930"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l931"></a> }
|
|
<a name="l932"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l933"></a> }
|
|
<a name="l934"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Bt</span><span class=cF7>(</span><span class=cFB>char_bmp_non_eol</span><span class=cF0>, ch</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l935"></a> {
|
|
<a name="l936"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'\"'</span><span class=cF0>)
|
|
<a name="l937"></a> in_str = !in_str;
|
|
<a name="l938"></a> buf[j++] = ch;
|
|
<a name="l939"></a> }
|
|
<a name="l940"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l941"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l942"></a> </span><span class=cF1>if</span><span class=cF0> (j >= </span><span class=cF3>STR_LEN</span><span class=cF0> - </span><span class=cFE>4</span><span class=cF0>)
|
|
<a name="l943"></a> {</span><span class=cF2>//Spot for ['\'][ch],[ch],[0]</span><span class=cF0>
|
|
<a name="l944"></a> buf[j++] = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l945"></a> buf3 = </span><span class=cF5>MAlloc</span><span class=cF0>(i+j);
|
|
<a name="l946"></a> </span><span class=cF1>if</span><span class=cF0> (buf2)
|
|
<a name="l947"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l948"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(buf3, buf2, i);
|
|
<a name="l949"></a> </span><span class=cF5>Free</span><span class=cF0>(buf2);
|
|
<a name="l950"></a> buf2 = buf3;
|
|
<a name="l951"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(buf2 + i, buf, j);
|
|
<a name="l952"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l953"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l954"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l955"></a> buf2 = buf3;
|
|
<a name="l956"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(buf2, buf, j);
|
|
<a name="l957"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l958"></a> i += j - </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l959"></a> j = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l960"></a> }
|
|
<a name="l961"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l962"></a> }
|
|
<a name="l963"></a> </span><span class=cF1>while</span><span class=cF0> (ch == </span><span class=cF6>'\\'</span><span class=cF0>);
|
|
<a name="l964"></a>
|
|
<a name="l965"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l966"></a> buf[j++] = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l967"></a> buf3 = </span><span class=cF5>MAlloc</span><span class=cF0>(i + j);
|
|
<a name="l968"></a> </span><span class=cF1>if</span><span class=cF0> (buf2)
|
|
<a name="l969"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l970"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(buf3, buf2, i);
|
|
<a name="l971"></a> </span><span class=cF5>Free</span><span class=cF0>(buf2);
|
|
<a name="l972"></a> buf2 = buf3;
|
|
<a name="l973"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(buf2 + i, buf, j);
|
|
<a name="l974"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l975"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l976"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l977"></a> buf2 = buf3;
|
|
<a name="l978"></a> </span><span class=cF5>MemCopy</span><span class=cF0>(buf2, buf, j);
|
|
<a name="l979"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l980"></a> tmph(</span><span class=cF9>CHashDefineStr</span><span class=cF0> *)->data = buf2;
|
|
<a name="l981"></a> tmph(</span><span class=cF9>CHashDefineStr</span><span class=cF0> *)->count = -</span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l982"></a> </span><span class=cF5>HashAdd</span><span class=cF0>(tmph,cc->htc.define_hash_table);
|
|
<a name="l983"></a> }
|
|
<a name="l984"></a> cc->flags &= ~</span><span class=cF3>CCF_NO_DEFINES</span><span class=cF0>;
|
|
<a name="l985"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l986"></a>
|
|
<a name="l987"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>KW_ELSE</span><span class=cF0>:
|
|
<a name="l988"></a> </span><span class=cF1>if</span><span class=cF0> (cc->flags & </span><span class=cF3>CCF_IN_IF</span><span class=cF0>)
|
|
<a name="l989"></a> {
|
|
<a name="l990"></a> cc->token = </span><span class=cF3>TK_ELSE</span><span class=cF0>;
|
|
<a name="l991"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l992"></a> }
|
|
<a name="l993"></a>lex_else:
|
|
<a name="l994"></a> j = </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l995"></a> </span><span class=cF1>do</span><span class=cF0>
|
|
<a name="l996"></a> {
|
|
<a name="l997"></a> </span><span class=cF1>if</span><span class=cF0> (ch = </span><span class=cF5>LexCharGet</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l998"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l999"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'#'</span><span class=cF0>)
|
|
<a name="l1000"></a> {
|
|
<a name="l1001"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Lex</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1002"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1003"></a> i = </span><span class=cF5>ParseKeyWord</span><span class=cF0>(cc);
|
|
<a name="l1004"></a> </span><span class=cF1>if</span><span class=cF0> (i == </span><span class=cF3>KW_IF</span><span class=cF0> || i == </span><span class=cF3>KW_IFDEF</span><span class=cF0> || i == </span><span class=cF3>KW_IFNDEF</span><span class=cF0> || i == </span><span class=cF3>KW_IFAOT</span><span class=cF0> || i == </span><span class=cF3>KW_IFJIT</span><span class=cF0>)
|
|
<a name="l1005"></a> j++;
|
|
<a name="l1006"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (i == </span><span class=cF3>KW_ENDIF</span><span class=cF0>)
|
|
<a name="l1007"></a> j--;
|
|
<a name="l1008"></a> }
|
|
<a name="l1009"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1010"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l1011"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1012"></a> cc->token = </span><span class=cF3>TK_EOF</span><span class=cF0>;
|
|
<a name="l1013"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1014"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1015"></a> }
|
|
<a name="l1016"></a> </span><span class=cF1>while</span><span class=cF0> (j);
|
|
<a name="l1017"></a>
|
|
<a name="l1018"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l1019"></a>
|
|
<a name="l1020"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>KW_IF</span><span class=cF0>:
|
|
<a name="l1021"></a> </span><span class=cF1>if</span><span class=cF0> (cc->flags & </span><span class=cF3>CCF_IN_IF</span><span class=cF0>)
|
|
<a name="l1022"></a> {
|
|
<a name="l1023"></a> cc->token = </span><span class=cF3>TK_IF</span><span class=cF0>;
|
|
<a name="l1024"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1025"></a> }
|
|
<a name="l1026"></a>lex_if:
|
|
<a name="l1027"></a> cc->flags |= </span><span class=cF3>CCF_IN_IF</span><span class=cF0>;
|
|
<a name="l1028"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Lex</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1029"></a> {
|
|
<a name="l1030"></a> cc->flags &= ~</span><span class=cF3>CCF_IN_IF</span><span class=cF0>;
|
|
<a name="l1031"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1032"></a> }
|
|
<a name="l1033"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>LexExpression</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1034"></a> {
|
|
<a name="l1035"></a> cc->flags &= ~</span><span class=cF3>CCF_IN_IF</span><span class=cF0>;
|
|
<a name="l1036"></a> </span><span class=cF1>switch</span><span class=cF0> (cc->token)
|
|
<a name="l1037"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1038"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>TK_IF</span><span class=cF0>: </span><span class=cF1>goto</span><span class=cF0> lex_if;
|
|
<a name="l1039"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>TK_IFDEF</span><span class=cF0>: </span><span class=cF1>goto</span><span class=cF0> lex_ifdef;
|
|
<a name="l1040"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>TK_IFNDEF</span><span class=cF0>: </span><span class=cF1>goto</span><span class=cF0> lex_ifndef;
|
|
<a name="l1041"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>TK_IFAOT</span><span class=cF0>: </span><span class=cF1>goto</span><span class=cF0> lex_ifaot;
|
|
<a name="l1042"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>TK_IFJIT</span><span class=cF0>: </span><span class=cF1>goto</span><span class=cF0> lex_ifjit;
|
|
<a name="l1043"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>TK_ELSE</span><span class=cF0>: </span><span class=cF1>goto</span><span class=cF0> lex_else;
|
|
<a name="l1044"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>TK_ENDIF</span><span class=cF0>: </span><span class=cF1>goto</span><span class=cF0> lex_cont;
|
|
<a name="l1045"></a> </span><span class=cF1>default</span><span class=cF0>: </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1046"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1047"></a> }
|
|
<a name="l1048"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l1049"></a> {
|
|
<a name="l1050"></a> cc->flags &= ~</span><span class=cF3>CCF_IN_IF</span><span class=cF0>;
|
|
<a name="l1051"></a> </span><span class=cF1>if</span><span class=cF0> (cc->token != </span><span class=cF3>TK_ENDIF</span><span class=cF0> && cc->token != </span><span class=cF3>TK_ELSE</span><span class=cF0>)
|
|
<a name="l1052"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1053"></a> </span><span class=cF1>if</span><span class=cF0> (cc->token == </span><span class=cF3>TK_IF</span><span class=cF0> || cc->token == </span><span class=cF3>TK_IFDEF</span><span class=cF0> ||
|
|
<a name="l1054"></a> cc->token == </span><span class=cF3>TK_IFNDEF</span><span class=cF0> || cc->token == </span><span class=cF3>TK_IFAOT</span><span class=cF0> ||
|
|
<a name="l1055"></a> cc->token == </span><span class=cF3>TK_IFJIT</span><span class=cF0>)
|
|
<a name="l1056"></a> j = </span><span class=cFE>2</span><span class=cF0>;
|
|
<a name="l1057"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l1058"></a> j = </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l1059"></a> </span><span class=cF1>do</span><span class=cF0>
|
|
<a name="l1060"></a> {
|
|
<a name="l1061"></a> </span><span class=cF1>if</span><span class=cF0> (ch = </span><span class=cF5>LexCharGet</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1062"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1063"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'#'</span><span class=cF0>)
|
|
<a name="l1064"></a> {
|
|
<a name="l1065"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Lex</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1066"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1067"></a> i = </span><span class=cF5>ParseKeyWord</span><span class=cF0>(cc);
|
|
<a name="l1068"></a> </span><span class=cF1>if</span><span class=cF0> (i == </span><span class=cF3>KW_IF</span><span class=cF0> || i == </span><span class=cF3>KW_IFDEF</span><span class=cF0> || i == </span><span class=cF3>KW_IFNDEF</span><span class=cF0> ||
|
|
<a name="l1069"></a> i == </span><span class=cF3>KW_IFAOT</span><span class=cF0> || i == </span><span class=cF3>KW_IFJIT</span><span class=cF0>)
|
|
<a name="l1070"></a> j++;
|
|
<a name="l1071"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (i == </span><span class=cF3>KW_ENDIF</span><span class=cF0>)
|
|
<a name="l1072"></a> j--;
|
|
<a name="l1073"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (i == </span><span class=cF3>KW_ELSE</span><span class=cF0> && j == </span><span class=cFE>1</span><span class=cF0>)
|
|
<a name="l1074"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l1075"></a> }
|
|
<a name="l1076"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1077"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l1078"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1079"></a> cc->token = </span><span class=cF3>TK_EOF</span><span class=cF0>;
|
|
<a name="l1080"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1081"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1082"></a> }
|
|
<a name="l1083"></a> </span><span class=cF1>while</span><span class=cF0> (j);
|
|
<a name="l1084"></a>
|
|
<a name="l1085"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1086"></a> }
|
|
<a name="l1087"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l1088"></a>
|
|
<a name="l1089"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>KW_IFDEF</span><span class=cF0>:
|
|
<a name="l1090"></a> </span><span class=cF1>if</span><span class=cF0> (cc->flags & </span><span class=cF3>CCF_IN_IF</span><span class=cF0>)
|
|
<a name="l1091"></a> {
|
|
<a name="l1092"></a> cc->token = </span><span class=cF3>TK_IFDEF</span><span class=cF0>;
|
|
<a name="l1093"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1094"></a> }
|
|
<a name="l1095"></a>lex_ifdef:
|
|
<a name="l1096"></a> cc->flags |= </span><span class=cF3>CCF_NO_DEFINES</span><span class=cF0>;
|
|
<a name="l1097"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Lex</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1098"></a> {
|
|
<a name="l1099"></a> cc->flags &= ~</span><span class=cF3>CCF_NO_DEFINES</span><span class=cF0>;
|
|
<a name="l1100"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1101"></a> }
|
|
<a name="l1102"></a> cc->flags &= ~</span><span class=cF3>CCF_NO_DEFINES</span><span class=cF0>;
|
|
<a name="l1103"></a> </span><span class=cF1>if</span><span class=cF0> (cc->token != </span><span class=cF3>TK_IDENT</span><span class=cF0>)
|
|
<a name="l1104"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1105"></a> </span><span class=cF1>if</span><span class=cF0> (cc->hash_entry)
|
|
<a name="l1106"></a> </span><span class=cF1>goto</span><span class=cF0> lex_cont;
|
|
<a name="l1107"></a> j = </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l1108"></a> </span><span class=cF1>do</span><span class=cF0>
|
|
<a name="l1109"></a> {
|
|
<a name="l1110"></a> </span><span class=cF1>if</span><span class=cF0> (ch = </span><span class=cF5>LexCharGet</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1111"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1112"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'#'</span><span class=cF0>)
|
|
<a name="l1113"></a> {
|
|
<a name="l1114"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Lex</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1115"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1116"></a> i = </span><span class=cF5>ParseKeyWord</span><span class=cF0>(cc);
|
|
<a name="l1117"></a> </span><span class=cF1>if</span><span class=cF0> (i == </span><span class=cF3>KW_IF</span><span class=cF0> || i == </span><span class=cF3>KW_IFDEF</span><span class=cF0> || i == </span><span class=cF3>KW_IFNDEF</span><span class=cF0> || i == </span><span class=cF3>KW_IFAOT</span><span class=cF0> || i == </span><span class=cF3>KW_IFJIT</span><span class=cF0>)
|
|
<a name="l1118"></a> j++;
|
|
<a name="l1119"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (i == </span><span class=cF3>KW_ENDIF</span><span class=cF0>)
|
|
<a name="l1120"></a> j--;
|
|
<a name="l1121"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (i == </span><span class=cF3>KW_ELSE</span><span class=cF0> && j == </span><span class=cFE>1</span><span class=cF0>)
|
|
<a name="l1122"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l1123"></a> }
|
|
<a name="l1124"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1125"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l1126"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1127"></a> cc->token = </span><span class=cF3>TK_EOF</span><span class=cF0>;
|
|
<a name="l1128"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1129"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1130"></a> }
|
|
<a name="l1131"></a> </span><span class=cF1>while</span><span class=cF0> (j);
|
|
<a name="l1132"></a>
|
|
<a name="l1133"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l1134"></a>
|
|
<a name="l1135"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>KW_IFNDEF</span><span class=cF0>:
|
|
<a name="l1136"></a> </span><span class=cF1>if</span><span class=cF0> (cc->flags & </span><span class=cF3>CCF_IN_IF</span><span class=cF0>)
|
|
<a name="l1137"></a> {
|
|
<a name="l1138"></a> cc->token = </span><span class=cF3>TK_IFNDEF</span><span class=cF0>;
|
|
<a name="l1139"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1140"></a> }
|
|
<a name="l1141"></a>lex_ifndef:
|
|
<a name="l1142"></a> cc->flags |= </span><span class=cF3>CCF_NO_DEFINES</span><span class=cF0>;
|
|
<a name="l1143"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Lex</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1144"></a> {
|
|
<a name="l1145"></a> cc->flags &= ~</span><span class=cF3>CCF_NO_DEFINES</span><span class=cF0>;
|
|
<a name="l1146"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1147"></a> }
|
|
<a name="l1148"></a> cc->flags &= ~</span><span class=cF3>CCF_NO_DEFINES</span><span class=cF0>;
|
|
<a name="l1149"></a> </span><span class=cF1>if</span><span class=cF0> (cc->token != </span><span class=cF3>TK_IDENT</span><span class=cF0>)
|
|
<a name="l1150"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1151"></a> </span><span class=cF1>if</span><span class=cF0> (!cc->hash_entry)
|
|
<a name="l1152"></a> </span><span class=cF1>goto</span><span class=cF0> lex_cont;
|
|
<a name="l1153"></a> j = </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l1154"></a> </span><span class=cF1>do</span><span class=cF0>
|
|
<a name="l1155"></a> {
|
|
<a name="l1156"></a> </span><span class=cF1>if</span><span class=cF0> (ch = </span><span class=cF5>LexCharGet</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1157"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1158"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'#'</span><span class=cF0>)
|
|
<a name="l1159"></a> {
|
|
<a name="l1160"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Lex</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1161"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1162"></a> i = </span><span class=cF5>ParseKeyWord</span><span class=cF0>(cc);
|
|
<a name="l1163"></a> </span><span class=cF1>if</span><span class=cF0> (i == </span><span class=cF3>KW_IF</span><span class=cF0> || i == </span><span class=cF3>KW_IFDEF</span><span class=cF0> || i == </span><span class=cF3>KW_IFNDEF</span><span class=cF0> || i == </span><span class=cF3>KW_IFAOT</span><span class=cF0> || i == </span><span class=cF3>KW_IFJIT</span><span class=cF0>)
|
|
<a name="l1164"></a> j++;
|
|
<a name="l1165"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (i == </span><span class=cF3>KW_ENDIF</span><span class=cF0>)
|
|
<a name="l1166"></a> j--;
|
|
<a name="l1167"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (i == </span><span class=cF3>KW_ELSE</span><span class=cF0> && j == </span><span class=cFE>1</span><span class=cF0>)
|
|
<a name="l1168"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l1169"></a> }
|
|
<a name="l1170"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1171"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l1172"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1173"></a> cc->token = </span><span class=cF3>TK_EOF</span><span class=cF0>;
|
|
<a name="l1174"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1175"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1176"></a> }
|
|
<a name="l1177"></a> </span><span class=cF1>while</span><span class=cF0> (j);
|
|
<a name="l1178"></a>
|
|
<a name="l1179"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l1180"></a>
|
|
<a name="l1181"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>KW_IFAOT</span><span class=cF0>:
|
|
<a name="l1182"></a> </span><span class=cF1>if</span><span class=cF0> (cc->flags & </span><span class=cF3>CCF_IN_IF</span><span class=cF0>)
|
|
<a name="l1183"></a> {
|
|
<a name="l1184"></a> cc->token = </span><span class=cF3>TK_IFAOT</span><span class=cF0>;
|
|
<a name="l1185"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1186"></a> }
|
|
<a name="l1187"></a>lex_ifaot:
|
|
<a name="l1188"></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="l1189"></a> </span><span class=cF1>goto</span><span class=cF0> lex_cont;
|
|
<a name="l1190"></a> j = </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l1191"></a> </span><span class=cF1>do</span><span class=cF0>
|
|
<a name="l1192"></a> {
|
|
<a name="l1193"></a> </span><span class=cF1>if</span><span class=cF0> (ch = </span><span class=cF5>LexCharGet</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1194"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1195"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'#'</span><span class=cF0>)
|
|
<a name="l1196"></a> {
|
|
<a name="l1197"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Lex</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1198"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1199"></a> i = </span><span class=cF5>ParseKeyWord</span><span class=cF0>(cc);
|
|
<a name="l1200"></a> </span><span class=cF1>if</span><span class=cF0> (i == </span><span class=cF3>KW_IF</span><span class=cF0> || i == </span><span class=cF3>KW_IFDEF</span><span class=cF0> || i == </span><span class=cF3>KW_IFNDEF</span><span class=cF0> || i == </span><span class=cF3>KW_IFAOT</span><span class=cF0> || i == </span><span class=cF3>KW_IFJIT</span><span class=cF0>)
|
|
<a name="l1201"></a> j++;
|
|
<a name="l1202"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (i == </span><span class=cF3>KW_ENDIF</span><span class=cF0>)
|
|
<a name="l1203"></a> j--;
|
|
<a name="l1204"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (i == </span><span class=cF3>KW_ELSE</span><span class=cF0> && j == </span><span class=cFE>1</span><span class=cF0>)
|
|
<a name="l1205"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l1206"></a> }
|
|
<a name="l1207"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1208"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l1209"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1210"></a> cc->token = </span><span class=cF3>TK_EOF</span><span class=cF0>;
|
|
<a name="l1211"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1212"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1213"></a> }
|
|
<a name="l1214"></a> </span><span class=cF1>while</span><span class=cF0> (j);
|
|
<a name="l1215"></a>
|
|
<a name="l1216"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l1217"></a>
|
|
<a name="l1218"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>KW_IFJIT</span><span class=cF0>:
|
|
<a name="l1219"></a> </span><span class=cF1>if</span><span class=cF0> (cc->flags & </span><span class=cF3>CCF_IN_IF</span><span class=cF0>)
|
|
<a name="l1220"></a> {
|
|
<a name="l1221"></a> cc->token = </span><span class=cF3>TK_IFAOT</span><span class=cF0>;
|
|
<a name="l1222"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1223"></a> }
|
|
<a name="l1224"></a>lex_ifjit:
|
|
<a name="l1225"></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_AOT_COMPILE</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1226"></a> </span><span class=cF1>goto</span><span class=cF0> lex_cont;
|
|
<a name="l1227"></a> j = </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l1228"></a> </span><span class=cF1>do</span><span class=cF0>
|
|
<a name="l1229"></a> {
|
|
<a name="l1230"></a> </span><span class=cF1>if</span><span class=cF0> (ch = </span><span class=cF5>LexCharGet</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1231"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1232"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'#'</span><span class=cF0>)
|
|
<a name="l1233"></a> {
|
|
<a name="l1234"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Lex</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1235"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1236"></a> i = </span><span class=cF5>ParseKeyWord</span><span class=cF0>(cc);
|
|
<a name="l1237"></a> </span><span class=cF1>if</span><span class=cF0> (i == </span><span class=cF3>KW_IF</span><span class=cF0> || i == </span><span class=cF3>KW_IFDEF</span><span class=cF0> || i == </span><span class=cF3>KW_IFNDEF</span><span class=cF0> || i == </span><span class=cF3>KW_IFAOT</span><span class=cF0> || i == </span><span class=cF3>KW_IFJIT</span><span class=cF0>)
|
|
<a name="l1238"></a> j++;
|
|
<a name="l1239"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (i == </span><span class=cF3>KW_ENDIF</span><span class=cF0>)
|
|
<a name="l1240"></a> j--;
|
|
<a name="l1241"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (i == </span><span class=cF3>KW_ELSE</span><span class=cF0> && j == </span><span class=cFE>1</span><span class=cF0>)
|
|
<a name="l1242"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l1243"></a> }
|
|
<a name="l1244"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1245"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l1246"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1247"></a> cc->token = </span><span class=cF3>TK_EOF</span><span class=cF0>;
|
|
<a name="l1248"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1249"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1250"></a> }
|
|
<a name="l1251"></a> </span><span class=cF1>while</span><span class=cF0> (j);
|
|
<a name="l1252"></a>
|
|
<a name="l1253"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l1254"></a>
|
|
<a name="l1255"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>KW_ENDIF</span><span class=cF0>:
|
|
<a name="l1256"></a> </span><span class=cF1>if</span><span class=cF0> (cc->flags & </span><span class=cF3>CCF_IN_IF</span><span class=cF0>)
|
|
<a name="l1257"></a> {
|
|
<a name="l1258"></a> cc->token = </span><span class=cF3>TK_ENDIF</span><span class=cF0>;
|
|
<a name="l1259"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1260"></a> }
|
|
<a name="l1261"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l1262"></a>
|
|
<a name="l1263"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>KW_ASSERT</span><span class=cF0>:
|
|
<a name="l1264"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Lex</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1265"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1266"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>LexExpression</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1267"></a> </span><span class=cF5>LexWarn</span><span class=cF0>(cc, </span><span class=cF6>"Assert Failed "</span><span class=cF0>);
|
|
<a name="l1268"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1269"></a>
|
|
<a name="l1270"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>KW_EXE</span><span class=cF0>:
|
|
<a name="l1271"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF5>Lex</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1272"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1273"></a> </span><span class=cFD>ParseStreamBlk</span><span class=cF0>(cc);
|
|
<a name="l1274"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1275"></a>
|
|
<a name="l1276"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>KW_HELP_INDEX</span><span class=cF0>:
|
|
<a name="l1277"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Lex</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0> != </span><span class=cF3>TK_STR</span><span class=cF0>)
|
|
<a name="l1278"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1279"></a> </span><span class=cF5>Free</span><span class=cF0>(cc->cur_help_idx);
|
|
<a name="l1280"></a> cc->cur_help_idx = </span><span class=cF5>LexExtStr</span><span class=cF0>(cc,, </span><span class=cF3>FALSE</span><span class=cF0>);
|
|
<a name="l1281"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l1282"></a>
|
|
<a name="l1283"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>KW_HELP_FILE</span><span class=cF0>:
|
|
<a name="l1284"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>Lex</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0> != </span><span class=cF3>TK_STR</span><span class=cF0>)
|
|
<a name="l1285"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1286"></a> tmph = </span><span class=cF5>CAlloc</span><span class=cF0>(</span><span class=cF1>sizeof</span><span class=cF7>(</span><span class=cF9>CHashSrcSym</span><span class=cF7>)</span><span class=cF0>);
|
|
<a name="l1287"></a> fbuf = </span><span class=cF5>ExtDefault</span><span class=cF0>(cc->cur_str, </span><span class=cF6>"DD"</span><span class=cF0>);
|
|
<a name="l1288"></a> tmph->str = </span><span class=cF5>FileNameAbs</span><span class=cF0>(fbuf);
|
|
<a name="l1289"></a> </span><span class=cF5>Free</span><span class=cF0>(fbuf);
|
|
<a name="l1290"></a> tmph->type = </span><span class=cF3>HTT_HELP_FILE</span><span class=cF0> | </span><span class=cF3>HTF_PUBLIC</span><span class=cF0>;
|
|
<a name="l1291"></a> </span><span class=cF5>HashSrcFileSet</span><span class=cF0>(cc, tmph);
|
|
<a name="l1292"></a> </span><span class=cF5>HashAdd</span><span class=cF0>(tmph, cc->htc.global_hash_table);
|
|
<a name="l1293"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l1294"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1295"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l1296"></a>
|
|
<a name="l1297"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'\n'</span><span class=cF0>:
|
|
<a name="l1298"></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_KEEP_NEW_LINES</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1299"></a> </span><span class=cF1>break</span><span class=cF0>; </span><span class=cF2>//else fall through</span><span class=cF0>
|
|
<a name="l1300"></a>
|
|
<a name="l1301"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>TK_INS_BIN</span><span class=cF0>:
|
|
<a name="l1302"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>TK_INS_BIN_SIZE</span><span class=cF0>:
|
|
<a name="l1303"></a> cc->token = ch;
|
|
<a name="l1304"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1305"></a>
|
|
<a name="l1306"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'.'</span><span class=cF0>:
|
|
<a name="l1307"></a> </span><span class=cF1>if</span><span class=cF0> (cc->flags & </span><span class=cF3>CCF_KEEP_DOT</span><span class=cF0>)
|
|
<a name="l1308"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1309"></a> cc->token = ch;
|
|
<a name="l1310"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1311"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1312"></a> </span><span class=cF1>if</span><span class=cF0> (cc->flags & </span><span class=cF3>CCF_LAST_WAS_DOT</span><span class=cF0>)
|
|
<a name="l1313"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1314"></a> cc->flags &= ~</span><span class=cF3>CCF_LAST_WAS_DOT</span><span class=cF0>;
|
|
<a name="l1315"></a> </span><span class=cF1>goto</span><span class=cF0> lex_dot_dot;
|
|
<a name="l1316"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1317"></a> ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc);
|
|
<a name="l1318"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF6>'0'</span><span class=cF0> <= ch <= </span><span class=cF6>'9'</span><span class=cF0>)
|
|
<a name="l1319"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1320"></a> i = </span><span class=cFE>0</span><span class=cF0>;
|
|
<a name="l1321"></a> </span><span class=cF1>goto</span><span class=cF0> lex_float_start;
|
|
<a name="l1322"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1323"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'.'</span><span class=cF0>)
|
|
<a name="l1324"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1325"></a>lex_dot_dot:
|
|
<a name="l1326"></a> cc->token = </span><span class=cF3>TK_DOT_DOT</span><span class=cF0>;
|
|
<a name="l1327"></a> </span><span class=cF1>if</span><span class=cF0> (</span><span class=cF5>LexCharGet</span><span class=cF7>(</span><span class=cF0>cc</span><span class=cF7>)</span><span class=cF0> == </span><span class=cF6>'.'</span><span class=cF0>)
|
|
<a name="l1328"></a> cc->token = </span><span class=cF3>TK_ELLIPSIS</span><span class=cF0>;
|
|
<a name="l1329"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l1330"></a> cc->flags |= </span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l1331"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1332"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1333"></a> cc->flags |= </span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l1334"></a> cc->token = </span><span class=cF6>'.'</span><span class=cF0>;
|
|
<a name="l1335"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1336"></a>
|
|
<a name="l1337"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'!'</span><span class=cF0>:
|
|
<a name="l1338"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'$'</span><span class=cF0>...</span><span class=cF6>'&'</span><span class=cF0>:
|
|
<a name="l1339"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'('</span><span class=cF0>...</span><span class=cF6>'-'</span><span class=cF0>:
|
|
<a name="l1340"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'/'</span><span class=cF0>:
|
|
<a name="l1341"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>':'</span><span class=cF0>...</span><span class=cF6>'?'</span><span class=cF0>:
|
|
<a name="l1342"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'['</span><span class=cF0>:
|
|
<a name="l1343"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>']'</span><span class=cF0>...</span><span class=cF6>'^'</span><span class=cF0>:
|
|
<a name="l1344"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'{'</span><span class=cF0>...</span><span class=cF6>'~'</span><span class=cF0>:
|
|
<a name="l1345"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF6>'`'</span><span class=cF0>:
|
|
<a name="l1346"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>i = </span><span class=cFB>cmp</span><span class=cF0>.dual_U16_tokens1[ch]</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1347"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1348"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'$'</span><span class=cF0>)
|
|
<a name="l1349"></a> {
|
|
<a name="l1350"></a> ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc);
|
|
<a name="l1351"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'$'</span><span class=cF0>) </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1352"></a> cc->token = </span><span class=cF6>'$'</span><span class=cF0>;
|
|
<a name="l1353"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1354"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1355"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (ch)
|
|
<a name="l1356"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1357"></a> </span><span class=cF1>do</span><span class=cF0> ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc);
|
|
<a name="l1358"></a> </span><span class=cF1>while</span><span class=cF0> (ch && ch != </span><span class=cF6>'$'</span><span class=cF0>);
|
|
<a name="l1359"></a> </span><span class=cF1>if</span><span class=cF0> (!ch)
|
|
<a name="l1360"></a> {
|
|
<a name="l1361"></a> cc->token = </span><span class=cF3>TK_EOF</span><span class=cF0>;
|
|
<a name="l1362"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1363"></a> }
|
|
<a name="l1364"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l1365"></a> </span><span class=cF1>goto</span><span class=cF0> lex_cont;
|
|
<a name="l1366"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1367"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l1368"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1369"></a> cc->flags |= </span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l1370"></a> cc->token = </span><span class=cF6>'$'</span><span class=cF0>;
|
|
<a name="l1371"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1372"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1373"></a> }
|
|
<a name="l1374"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l1375"></a> {
|
|
<a name="l1376"></a> cc->token = ch;
|
|
<a name="l1377"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1378"></a> }
|
|
<a name="l1379"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1380"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l1381"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1382"></a> j = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc);
|
|
<a name="l1383"></a> </span><span class=cF1>if</span><span class=cF0> (i.u16[</span><span class=cFE>0</span><span class=cF0>] == j)
|
|
<a name="l1384"></a> {
|
|
<a name="l1385"></a> i >>= </span><span class=cFE>16</span><span class=cF0>;
|
|
<a name="l1386"></a> </span><span class=cF1>if</span><span class=cF0> (!i)
|
|
<a name="l1387"></a> </span><span class=cF7>{</span><span class=cF2>// "/*"</span><span class=cF0>
|
|
<a name="l1388"></a> j = </span><span class=cFE>1</span><span class=cF0>;
|
|
<a name="l1389"></a> </span><span class=cF1>do</span><span class=cF0>
|
|
<a name="l1390"></a> {
|
|
<a name="l1391"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc)</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1392"></a> </span><span class=cF1>return</span><span class=cF0> cc->token = </span><span class=cF3>TK_EOF</span><span class=cF0>;
|
|
<a name="l1393"></a>lex_check_comment:
|
|
<a name="l1394"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'*'</span><span class=cF0>)
|
|
<a name="l1395"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1396"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc)</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1397"></a> </span><span class=cF1>return</span><span class=cF0> cc->token = </span><span class=cF3>TK_EOF</span><span class=cF0>;
|
|
<a name="l1398"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'/'</span><span class=cF0>)
|
|
<a name="l1399"></a> j--;
|
|
<a name="l1400"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l1401"></a> </span><span class=cF1>goto</span><span class=cF0> lex_check_comment;
|
|
<a name="l1402"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1403"></a> </span><span class=cF1>else</span><span class=cF0> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'/'</span><span class=cF0>)
|
|
<a name="l1404"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1405"></a> </span><span class=cF1>if</span><span class=cF0> (!</span><span class=cF7>(</span><span class=cF0>ch = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc)</span><span class=cF7>)</span><span class=cF0>)
|
|
<a name="l1406"></a> </span><span class=cF1>return</span><span class=cF0> cc->token = </span><span class=cF3>TK_EOF</span><span class=cF0>;
|
|
<a name="l1407"></a> </span><span class=cF1>if</span><span class=cF0> (ch == </span><span class=cF6>'*'</span><span class=cF0>)
|
|
<a name="l1408"></a> j++;
|
|
<a name="l1409"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l1410"></a> </span><span class=cF1>goto</span><span class=cF0> lex_check_comment;
|
|
<a name="l1411"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1412"></a> }
|
|
<a name="l1413"></a> </span><span class=cF1>while</span><span class=cF0> (j);
|
|
<a name="l1414"></a>
|
|
<a name="l1415"></a> </span><span class=cF1>goto</span><span class=cF0> lex_cont;
|
|
<a name="l1416"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1417"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l1418"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1419"></a> cc->token = i;
|
|
<a name="l1420"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1421"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1422"></a> }
|
|
<a name="l1423"></a> </span><span class=cF1>if</span><span class=cF0> (i = </span><span class=cFB>cmp</span><span class=cF0>.dual_U16_tokens2[ch])
|
|
<a name="l1424"></a> {
|
|
<a name="l1425"></a> </span><span class=cF1>if</span><span class=cF0> (i.u16[</span><span class=cFE>0</span><span class=cF0>] == j)
|
|
<a name="l1426"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1427"></a> i >>= </span><span class=cFE>16</span><span class=cF0>;
|
|
<a name="l1428"></a> </span><span class=cF1>if</span><span class=cF0> (!i)
|
|
<a name="l1429"></a> {</span><span class=cF2>// "//"</span><span class=cF0>
|
|
<a name="l1430"></a> </span><span class=cF5>LexSkipEol</span><span class=cF0>(cc);
|
|
<a name="l1431"></a> </span><span class=cF1>if</span><span class=cF0> (cc->flags & </span><span class=cF3>CCF_KEEP_NEW_LINES</span><span class=cF0>)
|
|
<a name="l1432"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1433"></a> cc->token = </span><span class=cF6>'\n'</span><span class=cF0>;
|
|
<a name="l1434"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1435"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1436"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l1437"></a> </span><span class=cF1>goto</span><span class=cF0> lex_cont;
|
|
<a name="l1438"></a> }
|
|
<a name="l1439"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l1440"></a> {
|
|
<a name="l1441"></a> </span><span class=cF1>if</span><span class=cF0> (i == </span><span class=cF3>TK_SHL</span><span class=cF0> || i == </span><span class=cF3>TK_SHR</span><span class=cF0>)
|
|
<a name="l1442"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1443"></a> j = </span><span class=cF5>LexCharGet</span><span class=cF0>(cc);
|
|
<a name="l1444"></a> </span><span class=cF1>if</span><span class=cF0> (j == </span><span class=cF6>'='</span><span class=cF0>)
|
|
<a name="l1445"></a> {
|
|
<a name="l1446"></a> </span><span class=cF1>if</span><span class=cF0> (i == </span><span class=cF3>TK_SHL</span><span class=cF0>)
|
|
<a name="l1447"></a> i = </span><span class=cF3>TK_SHL_EQU</span><span class=cF0>;
|
|
<a name="l1448"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l1449"></a> i = </span><span class=cF3>TK_SHR_EQU</span><span class=cF0>;
|
|
<a name="l1450"></a> }
|
|
<a name="l1451"></a> </span><span class=cF1>else</span><span class=cF0>
|
|
<a name="l1452"></a> cc->flags |= </span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l1453"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1454"></a> cc->token = i;
|
|
<a name="l1455"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1456"></a> }
|
|
<a name="l1457"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1458"></a> </span><span class=cF1>if</span><span class=cF0> (i = </span><span class=cFB>cmp</span><span class=cF0>.dual_U16_tokens3[ch])
|
|
<a name="l1459"></a> </span><span class=cF7>{</span><span class=cF0>
|
|
<a name="l1460"></a> </span><span class=cF1>if</span><span class=cF0> (i.u16[</span><span class=cFE>0</span><span class=cF0>] == j)
|
|
<a name="l1461"></a> {
|
|
<a name="l1462"></a> cc->token = i.u16[</span><span class=cFE>1</span><span class=cF0>];
|
|
<a name="l1463"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1464"></a> }
|
|
<a name="l1465"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1466"></a> }
|
|
<a name="l1467"></a> cc->flags |= </span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l1468"></a> cc->token = ch;
|
|
<a name="l1469"></a> </span><span class=cF1>goto</span><span class=cF0> lex_end;
|
|
<a name="l1470"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1471"></a> </span><span class=cF1>case</span><span class=cF0> </span><span class=cF3>TK_TKS_NUM</span><span class=cF0>:
|
|
<a name="l1472"></a> </span><span class=cF1>break</span><span class=cF0>;
|
|
<a name="l1473"></a> }
|
|
<a name="l1474"></a> </span><span class=cF7>}</span><span class=cF0>
|
|
<a name="l1475"></a>lex_end:
|
|
<a name="l1476"></a> </span><span class=cF5>LexCharGet</span><span class=cF0>(cc); </span><span class=cF2>//Do this so WAS_NEW_LINE is right</span><span class=cF0>
|
|
<a name="l1477"></a> cc->flags |= </span><span class=cF3>CCF_USE_LAST_U16</span><span class=cF0>;
|
|
<a name="l1478"></a>
|
|
<a name="l1479"></a> </span><span class=cF1>return</span><span class=cF0> cc->token;
|
|
<a name="l1480"></a>}
|
|
</span></pre></body>
|
|
</html>
|