📄 forth_8cpp-source.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>forth/forth.cpp Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.4.1 --><div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Class List</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Class Members</a> | <a class="qindex" href="globals.html">File Members</a></div><div class="nav"><a class="el" href="dir_000002.html">forth</a></div><h1>forth.cpp</h1><a href="forth_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 00018 <span class="preprocessor">#include "<a class="code" href="common_8h.html">common.h</a>"</span>00019 <span class="preprocessor">#include "<a class="code" href="forth_8h.html">forth.h</a>"</span>00020 00021 <span class="preprocessor">#if 1</span><a name="l00022"></a><a class="code" href="group__forth__imp.html#ga59">00022</a> <span class="preprocessor"></span><span class="preprocessor">#define LITTLE_ENDIAN </span>00023 <span class="preprocessor">#else</span>00024 <span class="preprocessor"></span><span class="preprocessor">#define BIG_ENDIAN </span>00025 <span class="preprocessor">#endif</span>00026 <span class="preprocessor"></span><a name="l00031"></a><a class="code" href="group__forth__imp.html#ga60">00031</a> <span class="preprocessor">#define CELLS(x) ((CELL)(((CELL*)256)+(x))-(CELL)((CELL*)256))</span>00032 <span class="preprocessor"></span><a name="l00037"></a><a class="code" href="group__forth__imp.html#ga61">00037</a> <span class="preprocessor">#define CHARS(x) ((CELL)(((CHAR*)256)+(x))-(CELL)((CHAR*)256))</span>00038 <span class="preprocessor"></span><a name="l00043"></a><a class="code" href="group__forth__imp.html#ga62">00043</a> <span class="preprocessor">#define SLASH_CELL(x) ((CELL*)(256+(x))-((CELL*)256))</span>00044 <span class="preprocessor"></span><a name="l00049"></a><a class="code" href="group__forth__imp.html#ga63">00049</a> <span class="preprocessor">#define SLASH_CHAR(x) ((CHAR*)(256+(x))-((CHAR*)256))</span>00050 <span class="preprocessor"></span><a name="l00055"></a><a class="code" href="group__forth__imp.html#ga64">00055</a> <span class="preprocessor">#define ALIGNED(x) (((x)+CELLS(1)-1)&~(CELLS(1)-1))</span>00056 <span class="preprocessor"></span><a name="l00060"></a><a class="code" href="group__forth__imp.html#ga0">00060</a> <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="group__forth.html#ga0">CELL</a> <a class="code" href="group__forth__imp.html#ga0">BitsPerCell</a> = <a class="code" href="group__forth.html#ga5">BITS_PER_CHAR</a>*<a class="code" href="group__forth.html#ga6">CHARS_PER_CELL</a>;00061 <a name="l00066"></a><a class="code" href="group__forth__imp.html#ga1">00066</a> <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="group__forth.html#ga0">CELL</a> <a class="code" href="group__forth__imp.html#ga1">CellLoMask</a> = ((<a class="code" href="group__forth.html#ga0">CELL</a>)1<<(<a class="code" href="group__forth__imp.html#ga0">BitsPerCell</a>/2))-1;00067 <a name="l00071"></a><a class="code" href="group__forth__imp.html#ga2">00071</a> <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="group__forth.html#ga0">CELL</a> <a class="code" href="group__forth__imp.html#ga2">SlashCountedString</a> = 255;00072 <a name="l00078"></a><a class="code" href="group__forth__imp.html#ga3">00078</a> <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="group__forth.html#ga0">CELL</a> <a class="code" href="group__forth__imp.html#ga3">NameLengthMask</a> = 31;00079 <a name="l00083"></a><a class="code" href="group__forth__imp.html#ga4">00083</a> <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="group__forth.html#ga0">CELL</a> <a class="code" href="group__forth__imp.html#ga4">NumberTIB</a> = 80;00084 <a name="l00088"></a><a class="code" href="group__forth__imp.html#ga5">00088</a> <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="group__forth.html#ga0">CELL</a> <a class="code" href="group__forth__imp.html#ga5">SlashPad</a> = 84;00089 <a name="l00094"></a><a class="code" href="group__forth__imp.html#ga6">00094</a> <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="group__forth.html#ga0">CELL</a> <a class="code" href="group__forth__imp.html#ga6">DictionaryOverhead</a> = <a class="code" href="group__forth__imp.html#ga61">CHARS</a>(SlashCountedString+2+SlashPad);00095 <a name="l00099"></a><a class="code" href="group__forth__imp.html#ga7">00099</a> <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="group__forth.html#ga0">CELL</a> <a class="code" href="group__forth__imp.html#ga7">MaxWordlists</a> = 8;00100 <a name="l00104"></a><a class="code" href="group__forth__imp.html#ga8">00104</a> <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="group__forth.html#ga0">CELL</a> <a class="code" href="group__forth__imp.html#ga8">StackCells</a> = 256;00105 <a name="l00109"></a><a class="code" href="group__forth__imp.html#ga9">00109</a> <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="group__forth.html#ga0">CELL</a> <a class="code" href="group__forth__imp.html#ga9">ReturnStackCells</a> = 256;00110 00111 <a name="l00115"></a><a class="code" href="classWordHeader.html">00115</a> <span class="keyword">class </span><a class="code" href="classWordHeader.html">WordHeader</a>00116 {00117 <span class="keyword">public</span>:<a name="l00128"></a><a class="code" href="classWordHeader.html#o0">00128</a> <a class="code" href="group__forth.html#ga0">CELL</a> <a class="code" href="classWordHeader.html#o0">Previous</a>;00129 00134 <a class="code" href="group__forth.html#ga2">CHAR</a> <a class="code" href="classWordHeader.html#o1">NameLength</a>;00135 00140 <a class="code" href="group__forth.html#ga2">CHAR</a> Name[1];00141 <a name="l00146"></a><a class="code" href="classWordHeader.html#w3">00146</a> <span class="keyword">enum</span> <a class="code" href="classWordHeader.html#w3">WordFlags</a>00147 {00148 <a class="code" href="classWordHeader.html#w3w0">Token</a> = 1<<5, 00150 <a class="code" href="classWordHeader.html#w3w1">Immediate</a> = 1<<6, 00151 <a class="code" href="classWordHeader.html#w3w2">Valid</a> = 1<<7 00152 };00153 00154 <span class="keyword">public</span>:<a name="l00159"></a><a class="code" href="classWordHeader.html#a0">00159</a> <span class="keyword">inline</span> <a class="code" href="group__forth.html#ga0">CELL</a>* <a class="code" href="classWordHeader.html#a0">CFA</a>()00160 { <span class="keywordflow">return</span> (<a class="code" href="group__forth.html#ga0">CELL</a>*)<a class="code" href="group__forth__imp.html#ga64">ALIGNED</a>((<a class="code" href="group__forth.html#ga0">CELL</a>)(Name+(<a class="code" href="classWordHeader.html#o1">NameLength</a>&<a class="code" href="group__forth__imp.html#ga3">NameLengthMask</a>))); }00161 };00162 00163 <a name="l00167"></a><a class="code" href="group__forth__imp.html#ga102">00167</a> <span class="keyword">enum</span> <a class="code" href="group__forth__imp.html#ga102">Exception</a>00168 {00169 DivideByZero = -10,00170 ResultOutOfRange = -11,00171 UndefinedWord = -13,00172 ZeroLengthName = -16,00173 PicturedStringOverflow = -17,00174 ControlStructureMismatch = -2200175 };00176 <a name="l00180"></a><a class="code" href="structWordlist.html">00180</a> <span class="keyword">struct </span><a class="code" href="structWordlist.html">Wordlist</a>00181 {<a name="l00185"></a><a class="code" href="structWordlist.html#o0">00185</a> <a class="code" href="classWordHeader.html">WordHeader</a>* <a class="code" href="structWordlist.html#o0">LastWord</a>;00186 <a name="l00190"></a><a class="code" href="structWordlist.html#o1">00190</a> <a class="code" href="structWordlist.html">Wordlist</a>* <a class="code" href="structWordlist.html#o1">Previous</a>;00191 <a name="l00196"></a><a class="code" href="structWordlist.html#o2">00196</a> <a class="code" href="classWordHeader.html">WordHeader</a>* <a class="code" href="structWordlist.html#o2">Name</a>;00197 };00198 00199 <a name="l00203"></a><a class="code" href="group__forth__imp.html#ga103">00203</a> <span class="keyword">enum</span> <a class="code" href="group__forth__imp.html#ga103">ControlStackMarkers</a>00204 {00205 <a class="code" href="group__forth__imp.html#gga103a107">ColonMagic</a> = 12340, 00206 <a class="code" href="group__forth__imp.html#gga103a108">OrigMagic</a> = 12341, 00207 <a class="code" href="group__forth__imp.html#gga103a109">DestMagic</a> = 12342 00208 };00209 00210 <a name="l00214"></a><a class="code" href="group__forth__imp.html#ga104">00214</a> <span class="keyword">enum</span> <a class="code" href="group__forth__imp.html#ga104">ForthXT</a>00215 {00216 <a class="code" href="group__forth__imp.html#gga104a110">XT_STORE</a>, 00217 <a class="code" href="group__forth__imp.html#gga104a111">XT_NUMBER_SIGN</a>, 00218 <a class="code" href="group__forth__imp.html#gga104a112">XT_NUMBER_SIGN_GREATER</a>, 00219 <a class="code" href="group__forth__imp.html#gga104a113">XT_STAR</a>, 00220 <a class="code" href="group__forth__imp.html#gga104a114">XT_PLUS</a>,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -