--- /dev/null
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+ <title>低水準関数 — プログラミング言語 Ring 1.12 取扱説明書</title>
+
+ <link rel="stylesheet" href="_static/bootstrap-astropy.css" type="text/css" />
+ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+
+ <script type="text/javascript">
+ var DOCUMENTATION_OPTIONS = {
+ URL_ROOT: './',
+ VERSION: '1.12',
+ COLLAPSE_INDEX: false,
+ FILE_SUFFIX: '.html',
+ HAS_SOURCE: true
+ };
+ </script>
+ <script type="text/javascript" src="_static/jquery.js"></script>
+ <script type="text/javascript" src="_static/underscore.js"></script>
+ <script type="text/javascript" src="_static/doctools.js"></script>
+ <script type="text/javascript" src="_static/translations.js"></script>
+ <link rel="top" title="プログラミング言語 Ring 1.12 取扱説明書" href="index.html" />
+ <link rel="next" title="トレースライブラリとインタラクティブデバッガ" href="debug.html" />
+ <link rel="prev" title="Ring パッケージ管理プログラム (RingPM)" href="ringpm.html" />
+ <link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:200,600' rel='stylesheet' type='text/css'/>
+
+ </head>
+ <body role="document">
+<div class="topbar">
+ <a class="brand" title="Documentation Home" href="index.html"><span id="logotext1">🍩Ring</span><span id="logotext2"> 1.12</span><span id="logotext3">:docs</span></a>
+ <ul>
+
+ <li><a href="http://ring-lang.sourceforge.net/news.html">News</a></li>
+ <li><a href="http://ring-lang.sourceforge.net/download.html">Download</a></li>
+ <li><a href="https://groups.google.com/forum/#!forum/ring-lang">Get Help</a></li>
+ <li><a href="https://github.com/ring-lang/ring">Contribute</a></li>
+ <li><a href="http://ring-lang.sourceforge.net/resources.html">Resources</a></li>
+ <li><a href="http://ring-lang.sourceforge.net/team.html">Team</a></li>
+
+ <li><a title="Ring Homepage" href="http://ring-lang.net/">Website</a></li>
+ <li><a title="総合索引" href="genindex.html">Index</a></li>
+ <li>
+
+
+<form action="search.html" method="get">
+ <input type="text" name="q" placeholder="Search" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+</form>
+
+ </li>
+ </ul>
+</div>
+
+<div class="related">
+ <h3>ナビゲーション</h3>
+ <ul>
+ <li class="right">
+ <a href="debug.html" title="トレースライブラリとインタラクティブデバッガ">
+ next »
+ </a>
+ </li>
+ <li class="right">
+ <a href="ringpm.html" title="Ring パッケージ管理プログラム (RingPM)">
+ « previous
+ </a>
+ |
+ </li>
+ <li>
+ <a href="index.html">プログラミング言語 Ring 1.12 取扱説明書</a>
+ »
+ </li>
+
+ <li>低水準関数</li>
+ </ul>
+</div>
+
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body" role="main">
+
+ <div class="section" id="index-0">
+<span id="id1"></span><h1>低水準関数<a class="headerlink" href="#index-0" title="このヘッドラインへのパーマリンク">¶</a></h1>
+<p>低水準関数を学びます。</p>
+<ul class="simple">
+<li>callgc()</li>
+<li>varptr()</li>
+<li>space()</li>
+<li>nullpointer()</li>
+<li>object2pointer()</li>
+<li>pointer2object()</li>
+<li>ispointer()</li>
+<li>ptrcmp()</li>
+<li>ringvm_cfunctionslist()</li>
+<li>ringvm_functionslist()</li>
+<li>ringvm_classeslist()</li>
+<li>ringvm_packageslist()</li>
+<li>ringvm_memorylist()</li>
+<li>ringvm_calllist()</li>
+<li>ringvm_fileslist()</li>
+<li>ringvm_settrace()</li>
+<li>ringvm_tracedata()</li>
+<li>ringvm_traceevent()</li>
+<li>ringvm_tracefunc()</li>
+<li>ringvm_scopescount()</li>
+<li>ringvm_evalinscope()</li>
+<li>ringvm_passerror()</li>
+<li>ringvm_hideerrorMsg()</li>
+<li>ringvm_callfunc()</li>
+<li>ringvm_see()</li>
+<li>ringvm_give()</li>
+<li>ringvm_info()</li>
+</ul>
+<div class="section" id="callgc">
+<span id="index-1"></span><h2>callgc() 関数<a class="headerlink" href="#callgc" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>この関数は、関数実行中に代入操作では解放されない一時作業用変数を用いるループで強制的にガベージコレクター呼び出すために使用します。</p>
+<p>この関数が必要になることは非常に稀なことですが、ゲームエンジンでイベントループなどを作成して、
+関数を呼び出して即席でリストの作成を開始するときに便利です。</p>
+<p>用例</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">While</span> <span class="kp">True</span>
+
+ <span class="c"># イベントの処理</span>
+ <span class="c"># 一時作業領域による関数の呼び出し。 myfunc(["temp list"]) などのリストです。</span>
+
+ <span class="c"># ガベージコレクターの呼び出し</span>
+ <span class="n">callgc</span><span class="p">()</span>
+<span class="k">End</span>
+</pre></div>
+</div>
+<div class="admonition tip">
+<p class="first admonition-title">ちなみに</p>
+<p class="last">Ring のガベージコレクターは関数の実行終了後または、
+代入ステートメントを使用したときに自動的に動作します。</p>
+</div>
+</div>
+<div class="section" id="varptr">
+<span id="index-2"></span><h2>varptr() 関数<a class="headerlink" href="#varptr" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>varptr() 関数は C / C++ 関数へポインタを渡します。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">varptr</span><span class="p">(</span><span class="n">cVariableName</span><span class="p">,</span> <span class="n">cPointerType</span><span class="p">)</span> <span class="o">---></span> <span class="n">低水準オブジェクト</span> <span class="p">(</span><span class="n">C</span> <span class="n">ポインタ</span><span class="p">)</span>
+</pre></div>
+</div>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">r</span> <span class="o">=</span> <span class="mi">10</span>
+<span class="n">z</span> <span class="o">=</span> <span class="mi">20</span>
+<span class="k">see</span> <span class="n">r</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">see</span> <span class="n">varptr</span><span class="p">(</span><span class="s">"r"</span><span class="p">,</span><span class="s">"int"</span><span class="p">)</span>
+<span class="k">see</span> <span class="n">varptr</span><span class="p">(</span><span class="s">"z"</span><span class="p">,</span><span class="s">"int"</span><span class="p">)</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-ring"><div class="highlight"><pre>10
+00E3C740
+int
+2
+00E3BEC0
+int
+2
+</pre></div>
+</div>
+<div class="admonition note">
+<p class="first admonition-title">注釈</p>
+<p class="last">低水準オブジェクトのリストには三つの項目 (ポインタ、型、ステータス) を有しています。</p>
+</div>
+</div>
+<div class="section" id="space">
+<span id="index-3"></span><h2>space() 関数<a class="headerlink" href="#space" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>space() 関数は指定されたバイト数のメモリ領域を確保します。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">Space</span><span class="p">(</span><span class="n">nBytesCount</span><span class="p">)</span> <span class="o">---></span> <span class="n">文字列</span>
+</pre></div>
+</div>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">mystring</span> <span class="o">=</span> <span class="n">space</span><span class="p">(</span><span class="mi">200</span><span class="p">)</span>
+<span class="k">See</span> <span class="s">"String Size : "</span> <span class="o">+</span> <span class="n">len</span><span class="p">(</span><span class="n">mystring</span><span class="p">)</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">See</span> <span class="s">"String : "</span> <span class="o">+</span> <span class="n">mystring</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">See</span> <span class="s">"String Pointer : "</span>
+<span class="k">See</span> <span class="n">varptr</span><span class="p">(</span><span class="s">"mystring"</span><span class="p">,</span><span class="s">"char *"</span><span class="p">)</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-ring"><div class="highlight"><pre>String Size : 200
+String :
+String Pointer : 00FF8FE8
+char *
+2
+</pre></div>
+</div>
+<div class="admonition note">
+<p class="first admonition-title">注釈</p>
+<p class="last">C 関数へバッファを渡すは space() と VarPtr() 関数が必要です。</p>
+</div>
+</div>
+<div class="section" id="nullpointer">
+<span id="index-4"></span><h2>nullpointer() 関数<a class="headerlink" href="#nullpointer" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>仮引数でポインタを扱うことを想定しており、オプション扱いの仮引数に NULL ポインタを受け入れる場合は C 関数へ NULL ポインタを必ず渡してください。</p>
+<p>用例:</p>
+<p>この用例は LibSDL ライブラリから RingSDL にある SDL_BlitSurface() 関数を使用しています。
+この関数は第二仮引数、および最後の仮引数で SDL_Rect ポインタを受け入れます。
+また、関数は NULL ポインタを受け入れるために、 NULLPointer() 関数で NULL ポインタを渡せます。</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">SDL_BlitSurface</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">nullpointer</span><span class="p">(),</span> <span class="n">surface</span><span class="p">,</span> <span class="n">nullpointer</span><span class="p">())</span>
+</pre></div>
+</div>
+<div class="admonition note">
+<p class="first admonition-title">注釈</p>
+<p class="last">前述のコードは単体では動作しません。最初に RingSDL の用法を学ぶ必要があります。</p>
+</div>
+<div class="admonition tip">
+<p class="first admonition-title">ちなみに</p>
+<p class="last">NULLPointer() 関数の代わりに NULL を仮引数として渡せます。</p>
+</div>
+</div>
+<div class="section" id="object2pointer">
+<span id="index-5"></span><h2>object2pointer() 関数<a class="headerlink" href="#object2pointer" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>この関数は Ring リスト用の C ポインタとオブジェクトを取得します。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">object2pointer</span><span class="p">(</span><span class="n">リスト</span><span class="o">|</span><span class="n">オブジェクト</span><span class="p">)</span> <span class="o">--></span> <span class="n">低水準オブジェクト</span> <span class="p">(</span><span class="n">C</span> <span class="n">ポインタ</span><span class="p">)</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="pointer2object">
+<span id="index-6"></span><h2>pointer2object() 関数<a class="headerlink" href="#pointer2object" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>この関数は低水準オブジェクト (C ポインタ) から Ring のリスト、および / またはオブジェクトを取得します。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">pointer2object</span><span class="p">(</span><span class="n">Low</span> <span class="n">Level</span> <span class="n">Object</span><span class="p">)</span> <span class="o">---></span> <span class="n">リスト</span><span class="o">|</span><span class="n">オブジェクト</span>
+</pre></div>
+</div>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="c"># リストの作成</span>
+<span class="n">mylist</span> <span class="o">=</span> <span class="mi">1</span><span class="p">:</span><span class="mi">5</span>
+
+<span class="c"># リストのポインタを作成</span>
+<span class="n">x</span> <span class="o">=</span> <span class="n">object2pointer</span><span class="p">(</span><span class="n">mylist</span><span class="p">)</span>
+<span class="k">see</span> <span class="n">x</span>
+
+<span class="k">see</span> <span class="n">nl</span>
+
+<span class="c"># リストへ項目を追加</span>
+<span class="n">mylist</span> <span class="o">+</span> <span class="s">"welcome"</span>
+
+<span class="c"># リストの項目を表示</span>
+<span class="n">y</span> <span class="o">=</span> <span class="n">pointer2object</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
+<span class="k">see</span> <span class="n">y</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-ring"><div class="highlight"><pre>0069A5D8
+OBJECTPOINTER
+0
+
+1
+2
+3
+4
+5
+welcome
+</pre></div>
+</div>
+<div class="admonition note">
+<p class="first admonition-title">注釈</p>
+<p class="last">Ring の代入演算子は値によりリストとオブジェクトをコピーします。
+参照によりコピーするには object2pointer() および pointer2object() 関数を使用します。</p>
+</div>
+<div class="admonition tip">
+<p class="first admonition-title">ちなみに</p>
+<p class="last">object2pointer() および pointer2object() は stdlib で使用されています。
+Tree クラスの実装では子ノード (別オブジェクト) は親ノード (オブジェクト) を参照して作成します。</p>
+</div>
+</div>
+<div class="section" id="ispointer">
+<span id="index-7"></span><h2>ispointer() 関数<a class="headerlink" href="#ispointer" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>仮引数がポインタ (C オブジェクト) であるか検査します。</p>
+<p>文法:</p>
+<div class="highlight-none"><div class="highlight"><pre>IsPointer(vPara) ---> True|False
+</pre></div>
+</div>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">fp</span> <span class="o">=</span> <span class="n">fopen</span><span class="p">(</span><span class="n">filename</span><span class="p">(),</span><span class="s">"r"</span><span class="p">)</span>
+
+<span class="o">?</span> <span class="n">type</span><span class="p">(</span><span class="n">fp</span><span class="p">)</span>
+
+<span class="o">?</span> <span class="n">ispointer</span><span class="p">(</span><span class="n">fp</span><span class="p">)</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-none"><div class="highlight"><pre>file
+1
+</pre></div>
+</div>
+</div>
+<div class="section" id="ptrcmp">
+<span id="index-8"></span><h2>ptrcmp() 関数<a class="headerlink" href="#ptrcmp" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>ptrcmp() 関数は二つのポインタ (C オブジェクト) 間で比較します。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">ptrcmp</span><span class="p">(</span><span class="n">oObject1</span><span class="p">,</span><span class="n">oObject2</span><span class="p">)</span> <span class="o">---></span> <span class="n">oObject1</span> <span class="n">と</span> <span class="n">oObject2</span> <span class="n">が等しいならば値は</span> <span class="mi">1</span>
+ <span class="n">oObject1</span> <span class="n">と</span> <span class="n">oObject2</span> <span class="n">が等しくないならば値は</span> <span class="mi">0</span>
+</pre></div>
+</div>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">fp</span> <span class="o">=</span> <span class="n">fopen</span><span class="p">(</span><span class="s">"ptrcmp.ring"</span><span class="p">,</span><span class="s">"r"</span><span class="p">)</span>
+<span class="n">fp2</span> <span class="o">=</span> <span class="n">fp</span>
+<span class="n">fp3</span> <span class="o">=</span> <span class="n">fopen</span><span class="p">(</span><span class="s">"ptrcmp.ring"</span><span class="p">,</span><span class="s">"r"</span><span class="p">)</span>
+
+<span class="k">see</span> <span class="n">ptrcmp</span><span class="p">(</span><span class="n">fp</span><span class="p">,</span><span class="n">fp2</span><span class="p">)</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">see</span> <span class="n">ptrcmp</span><span class="p">(</span><span class="n">fp</span><span class="p">,</span><span class="n">fp3</span><span class="p">)</span> <span class="o">+</span> <span class="n">nl</span>
+
+<span class="n">fclose</span><span class="p">(</span><span class="n">fp</span><span class="p">)</span>
+<span class="n">fclose</span><span class="p">(</span><span class="n">fp3</span><span class="p">)</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="mi">1</span>
+<span class="mi">0</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="ringvm-cfunctionslist">
+<span id="index-9"></span><h2>ringvm_cfunctionslist() 関数<a class="headerlink" href="#ringvm-cfunctionslist" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>C で記述された関数のリストを返す Ring 低水準関数です。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">RingVM_CFunctionsList</span><span class="p">()</span> <span class="o">---></span> <span class="n">リスト</span>
+</pre></div>
+</div>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">See</span> <span class="n">RingVM_CFunctionsList</span><span class="p">()</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="ringvm-functionslist">
+<span id="index-10"></span><h2>ringvm_functionslist() 関数<a class="headerlink" href="#ringvm-functionslist" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>Ring で記述された関数のリストを返す関数です。</p>
+<p>各リストメンバは次の項目のリストを有しています。</p>
+<ul class="simple">
+<li>関数名</li>
+<li>プログラムカウンタ (PC) - バイトコードによる関数の位置</li>
+<li>ソースコードファイル名</li>
+<li>プライベートフラグ (クラスにあるプライベートメソッドならば)</li>
+</ul>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">RingVM_FunctionsList</span><span class="p">()</span> <span class="o">---></span> <span class="n">リスト</span>
+</pre></div>
+</div>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">test</span><span class="p">()</span>
+
+<span class="k">func</span> <span class="n">test</span>
+ <span class="k">see</span> <span class="n">ringvm_functionslist</span><span class="p">()</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">test</span>
+<span class="mi">8</span>
+<span class="n">B</span><span class="p">:</span><span class="o">/</span><span class="n">ring</span><span class="o">/</span><span class="n">tests</span><span class="o">/</span><span class="n">scripts</span><span class="o">/</span><span class="n">functionslist</span><span class="p">.</span><span class="n">ring</span>
+<span class="mi">0</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="ringvm-classeslist">
+<span id="index-11"></span><h2>ringvm_classeslist() 関数<a class="headerlink" href="#ringvm-classeslist" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>クラスのリストを返す関数です。</p>
+<p>各リストメンバは次の項目のリストを有しています。</p>
+<ul class="simple">
+<li>クラス名</li>
+<li>プログラムカウンタ (PC) - バイトコードによるクラスの位置</li>
+<li>親クラス名</li>
+<li>メソッドのリスト</li>
+<li>フラグ (親クラス情報の収集)</li>
+<li>パッケージへのポインタ (または未使用のパッケージならば NULL)</li>
+</ul>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">RingVM_ClassesList</span><span class="p">()</span> <span class="o">---></span> <span class="n">リスト</span>
+</pre></div>
+</div>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">see</span> <span class="n">ringvm_classeslist</span><span class="p">()</span>
+
+<span class="k">class</span> <span class="n">class1</span>
+ <span class="k">func</span> <span class="n">f1</span>
+<span class="k">class</span> <span class="n">class2</span> <span class="k">from</span> <span class="n">class1</span>
+<span class="k">class</span> <span class="n">class3</span> <span class="k">from</span> <span class="n">class1</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">class1</span>
+<span class="mi">9</span>
+
+<span class="n">f1</span>
+<span class="mi">13</span>
+<span class="n">B</span><span class="p">:</span><span class="o">/</span><span class="n">ring</span><span class="o">/</span><span class="n">tests</span><span class="o">/</span><span class="n">scripts</span><span class="o">/</span><span class="n">classeslist</span><span class="p">.</span><span class="n">ring</span>
+<span class="mi">0</span>
+<span class="mi">0</span>
+<span class="mi">00000000</span>
+<span class="n">class2</span>
+<span class="mi">16</span>
+<span class="n">class1</span>
+<span class="mi">0</span>
+<span class="mi">00000000</span>
+<span class="n">class3</span>
+<span class="mi">20</span>
+<span class="n">class1</span>
+<span class="mi">0</span>
+<span class="mi">00000000</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="ringvm-packageslist">
+<span id="index-12"></span><h2>ringvm_packageslist() 関数<a class="headerlink" href="#ringvm-packageslist" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>パッケージのリストを返す関数です。</p>
+<p>各リストメンバは次の項目のリストを有しています。</p>
+<ul class="simple">
+<li>パッケージ名</li>
+<li>クラスのリスト</li>
+</ul>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">RingVM_PackagesList</span><span class="p">()</span> <span class="o">---></span> <span class="n">リスト</span>
+</pre></div>
+</div>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">see</span> <span class="n">ringvm_packageslist</span><span class="p">()</span>
+
+<span class="n">package</span> <span class="n">package1</span>
+ <span class="k">class</span> <span class="n">class1</span>
+
+<span class="n">package</span> <span class="n">package2</span>
+ <span class="k">class</span> <span class="n">class1</span>
+
+<span class="n">package</span> <span class="n">package3</span>
+ <span class="k">class</span> <span class="n">class1</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-ring"><div class="highlight"><pre>package1
+class1
+11
+
+0
+00FEF838
+package2
+class1
+17
+
+0
+00FEF978
+package3
+class1
+23
+
+0
+00FEFF68
+</pre></div>
+</div>
+</div>
+<div class="section" id="ringvm-memorylist">
+<span id="index-13"></span><h2>ringvm_memorylist() 関数<a class="headerlink" href="#ringvm-memorylist" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>メモリのスコープと変数のリストを返す関数です。</p>
+<p>各リストメンバには、次の異なるスコープにある変数のリストを有しています。</p>
+<p>スコープリストにある各項目のリストには次の項目があります。</p>
+<ul class="simple">
+<li>変数の名前</li>
+<li>変数の型</li>
+<li>変数の値</li>
+<li>値がリストの場合はポインタの型 (リスト/項目)</li>
+<li>プライベートフラグ (変数がクラスの属性ならば)</li>
+</ul>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">RingVM_MemoryList</span><span class="p">()</span> <span class="o">---></span> <span class="n">リスト</span>
+</pre></div>
+</div>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">x</span> <span class="o">=</span> <span class="mi">10</span>
+<span class="n">test</span><span class="p">()</span>
+<span class="k">func</span> <span class="n">test</span>
+ <span class="n">y</span> <span class="o">=</span> <span class="mi">20</span>
+ <span class="k">see</span> <span class="n">ringvm_memorylist</span><span class="p">()</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-ring"><div class="highlight"><pre>true
+2
+1
+0
+0
+false
+2
+0
+0
+0
+nl
+1
+
+
+0
+0
+null
+1
+
+0
+0
+ring_gettemp_var
+4
+00000000
+0
+0
+ccatcherror
+1
+NULL
+0
+0
+ring_settemp_var
+4
+00000000
+0
+0
+ring_tempflag_var
+2
+0
+0
+0
+stdin
+3
+50512DB8
+file
+0
+0
+0
+stdout
+3
+50512DD8
+file
+0
+0
+0
+stderr
+3
+50512DF8
+file
+0
+0
+0
+this
+4
+00000000
+0
+0
+sysargv
+3
+B:/ring/bin/ring
+B:/ring/tests/scripts/memorylist.ring
+0
+0
+x
+2
+10
+0
+0
+y
+2
+20
+0
+0
+</pre></div>
+</div>
+</div>
+<div class="section" id="ringvm-calllist">
+<span id="index-14"></span><h2>ringvm_calllist() 関数<a class="headerlink" href="#ringvm-calllist" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>関数呼び出しリストのリストを返す関数です。</p>
+<p>各リストメンバは次の項目のリストを有しています。</p>
+<ul class="simple">
+<li>関数の型</li>
+<li>関数の名前</li>
+<li>プログラムカウンタ (PC)</li>
+<li>スタックポインタ (SP)</li>
+<li>一時作業用。メモリのリスト</li>
+<li>メソッドまたは関数のフラグ</li>
+<li>呼び出し元のプログラムカウンタ (PC)</li>
+<li>FuncExec フラグ</li>
+<li>ListStart フラグ</li>
+<li>入れ子リストのポインタ</li>
+<li>ステートリスト</li>
+</ul>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">RingVM_CallList</span><span class="p">()</span> <span class="o">---></span> <span class="n">リスト</span>
+</pre></div>
+</div>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">hello</span><span class="p">()</span>
+<span class="k">func</span> <span class="n">hello</span>
+ <span class="n">test</span><span class="p">()</span>
+
+<span class="k">func</span> <span class="n">test</span>
+ <span class="n">mylist</span> <span class="o">=</span> <span class="n">ringvm_calllist</span><span class="p">()</span>
+ <span class="k">for</span> <span class="n">t</span> <span class="k">in</span> <span class="n">mylist</span> <span class="k">see</span> <span class="n">t</span><span class="o">[</span><span class="mi">2</span><span class="o">]</span> <span class="o">+</span> <span class="n">nl</span> <span class="k">next</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">function</span> <span class="n">hello</span><span class="p">()</span> <span class="k">in</span> <span class="n">file</span> <span class="n">B</span><span class="p">:</span><span class="o">/</span><span class="n">ring</span><span class="o">/</span><span class="n">tests</span><span class="o">/</span><span class="n">scripts</span><span class="o">/</span><span class="n">calllist</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">called</span> <span class="k">from</span> <span class="n">line</span> <span class="mi">1</span>
+<span class="n">function</span> <span class="n">test</span><span class="p">()</span> <span class="k">in</span> <span class="n">file</span> <span class="n">B</span><span class="p">:</span><span class="o">/</span><span class="n">ring</span><span class="o">/</span><span class="n">tests</span><span class="o">/</span><span class="n">scripts</span><span class="o">/</span><span class="n">calllist</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">called</span> <span class="k">from</span> <span class="n">line</span> <span class="mi">3</span>
+<span class="n">ringvm_calllist</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="ringvm-fileslist">
+<span id="index-15"></span><h2>ringvm_fileslist() 関数<a class="headerlink" href="#ringvm-fileslist" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>Ring ファイルのリストを返す関数です。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">RingVM_FilesList</span><span class="p">()</span> <span class="o">---></span> <span class="n">リスト</span>
+</pre></div>
+</div>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">load</span> <span class="s">"stdlib.ring"</span>
+<span class="k">see</span> <span class="n">ringvm_fileslist</span><span class="p">()</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">B</span><span class="p">:</span><span class="o">/</span><span class="n">ring</span><span class="o">/</span><span class="n">tests</span><span class="o">/</span><span class="n">scripts</span><span class="o">/</span><span class="n">fileslist</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">B</span><span class="p">:</span><span class="o">\</span><span class="n">ring</span><span class="o">\</span><span class="n">bin</span><span class="o">\</span><span class="n">stdlib</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">eval</span>
+<span class="n">stdlib</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">stdlib</span><span class="p">.</span><span class="n">rh</span>
+<span class="n">stdclasses</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">stdfunctions</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">stdbase</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">stdstring</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">stdlist</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">stdstack</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">stdqueue</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">stdmath</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">stddatetime</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">stdfile</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">stdsystem</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">stddebug</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">stddatatype</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">stdconversion</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">stdodbc</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">stdmysql</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">stdsecurity</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">stdinternet</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">stdhashtable</span><span class="p">.</span><span class="n">ring</span>
+<span class="n">stdtree</span><span class="p">.</span><span class="n">ring</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="ringvm-settrace">
+<span id="index-16"></span><h2>ringvm_settrace() 関数<a class="headerlink" href="#ringvm-settrace" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>ringvm_settrace() はトレース関数名を決定する関数です。</p>
+<p>トレース関数は Ring
+関数でありイベントごとに呼び出されます。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">RingVM_SetTrace</span><span class="p">(</span><span class="n">cCode</span><span class="p">)</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="ringvm-tracedata">
+<span id="index-17"></span><h2>ringvm_tracedata() 関数<a class="headerlink" href="#ringvm-tracedata" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>関数の内側でイベントをトレースします。</p>
+<p>ringvm_tracedata() 関数はイベントデータを取得します。</p>
+<p>イベントデータのリストには次の項目があります。</p>
+<ul class="simple">
+<li>ソースコードの行番号</li>
+<li>ソースファイル名</li>
+<li>関数またはメソッド名</li>
+<li>メソッドまたは関数 (Bool : True=メソッド、 False=関数またはファイル)</li>
+</ul>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">RingVM_TraceData</span><span class="p">()</span> <span class="o">---></span> <span class="n">aDataList</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="ringvm-traceevent">
+<span id="index-18"></span><h2>ringvm_traceevent() 関数<a class="headerlink" href="#ringvm-traceevent" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>関数の内側でイベントをトレースします。</p>
+<p>ringvm_traceevent() 関数はイベントの種類を検出します。</p>
+<ul class="simple">
+<li>改行</li>
+<li>関数の前</li>
+<li>関数の後</li>
+<li>ランタイムエラー</li>
+<li>C 関数の前</li>
+<li>C 関数の後</li>
+</ul>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">RingVM_TraceEvent</span><span class="p">()</span> <span class="o">---></span> <span class="n">nTraceEvent</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="ringvm-tracefunc">
+<span id="index-19"></span><h2>ringvm_tracefunc() 関数<a class="headerlink" href="#ringvm-tracefunc" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>この関数はイベントのトレースで使用する関数名を返します。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">RingVM_TraceEvent</span><span class="p">()</span> <span class="o">---></span> <span class="n">cCode</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="ringvm-scopescount">
+<span id="index-20"></span><h2>ringvm_scopescount() 関数<a class="headerlink" href="#ringvm-scopescount" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>RingVM_ScopesCount() 関数は、
+アプリケーションで使用されているスコープの本数を検出します。</p>
+<p>プログラムの開始時において、スコープは存在します (グローバルスコープのみ)。</p>
+<p>関数の呼び出し時に、新しいスコープが作成されます。</p>
+<p>関数実行終了後は、関数のスコープは削除されます。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">RingVM_ScopesCount</span><span class="p">()</span> <span class="o">---></span> <span class="n">nScopes</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="ringvm-evalinscope">
+<span id="index-21"></span><h2>ringvm_evalinscope() 関数<a class="headerlink" href="#ringvm-evalinscope" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>ringvm_evalinscope() は eval() 関数と類似する関数です。</p>
+<p>eval() とは異なり、現在のスコープにあるコードを実行します。</p>
+<p>RingVM_EvalInScope() は指定されたスコープにあるスコープを実行します。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">RingVM_EvalInScope</span><span class="p">(</span><span class="n">nScope</span><span class="p">,</span><span class="n">cCode</span><span class="p">)</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="ringvm-passerror">
+<span id="index-22"></span><h2>ringvm_passerror() 関数<a class="headerlink" href="#ringvm-passerror" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>ランタイムエラーが発生した時はエラーメッセージを表示後に
+Ring はプログラムの実行を終了します。</p>
+<p>ringvm_passerror() 関数を使うと、
+前述の動作を回避してプログラムの実行を継続できます。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">RingVM_PassError</span><span class="p">()</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="ringvm-hideerrormsg">
+<span id="index-23"></span><h2>ringvm_hideerrormsg() 関数<a class="headerlink" href="#ringvm-hideerrormsg" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>RingVM_HideErrorMsg() 関数は、
+ランタイムエラーメッセージの表示を有効または無効化します。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">RingVM_HideErrorMsg</span><span class="p">(</span><span class="n">lStatus</span><span class="p">)</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="ringvm-callfunc">
+<span id="index-24"></span><h2>ringvm_callfunc() 関数<a class="headerlink" href="#ringvm-callfunc" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>eval() 関数ではなく ringvm_callfunc() 関数を使うと、
+文字列から関数を呼び出します。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">RingVM_CallFunc</span><span class="p">(</span><span class="n">cFuncName</span><span class="p">)</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="index-25">
+<span id="id2"></span><h2>用例 - トレース関数の用法<a class="headerlink" href="#index-25" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>この用例では、プログラムのイベントをトレースするためにトレース関数を使用しています!</p>
+<p>トレースライブラリは低水準関数よりも実用的です!</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">load</span> <span class="s">"tracelib.ring"</span>
+
+<span class="n">ringvm_settrace</span><span class="p">(</span><span class="s">"mytrace()"</span><span class="p">)</span>
+
+<span class="k">see</span> <span class="s">"Hello, world!"</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">see</span> <span class="s">"Welcome"</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">see</span> <span class="s">"How are you?"</span> <span class="o">+</span><span class="n">nl</span>
+<span class="n">mytest</span><span class="p">()</span>
+<span class="k">new</span> <span class="n">myclass</span> <span class="p">{</span> <span class="n">mymethod</span><span class="p">()</span> <span class="p">}</span>
+
+<span class="k">func</span> <span class="n">mytest</span>
+ <span class="k">see</span> <span class="s">"Message from mytest"</span> <span class="o">+</span> <span class="n">nl</span>
+
+<span class="k">func</span> <span class="n">mytrace</span>
+ <span class="k">see</span> <span class="s">"====== The Trace function is Active ======"</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span>
+ <span class="s">"Trace Function Name : "</span> <span class="o">+</span> <span class="n">ringvm_TraceFunc</span><span class="p">()</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span>
+ <span class="s">"Trace Event : "</span>
+ <span class="k">switch</span> <span class="n">ringvm_TraceEvent</span><span class="p">()</span>
+ <span class="k">on</span> <span class="n">TRACEEVENT_NEWLINE</span> <span class="k">see</span> <span class="s">"New Line"</span>
+ <span class="k">on</span> <span class="n">TRACEEVENT_NEWFUNC</span> <span class="k">see</span> <span class="s">"New Function"</span>
+ <span class="k">on</span> <span class="n">TRACEEVENT_RETURN</span> <span class="k">see</span> <span class="s">"Return"</span>
+ <span class="k">on</span> <span class="n">TRACEEVENT_ERROR</span> <span class="k">see</span> <span class="s">"Error"</span>
+ <span class="k">on</span> <span class="n">TRACEEVENT_BEFORECFUNC</span> <span class="k">see</span> <span class="s">"Before C Function"</span>
+ <span class="k">on</span> <span class="n">TRACEEVENT_AFTERCFUNC</span> <span class="k">see</span> <span class="s">"After C Function"</span>
+ <span class="k">off</span>
+ <span class="k">see</span> <span class="n">nl</span> <span class="o">+</span>
+ <span class="s">"Line Number : "</span> <span class="o">+</span> <span class="n">ringvm_tracedata</span><span class="p">()</span><span class="o">[</span><span class="n">TRACEDATA_LINENUMBER</span><span class="o">]</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span>
+ <span class="s">"File Name : "</span> <span class="o">+</span> <span class="n">ringvm_tracedata</span><span class="p">()</span><span class="o">[</span><span class="n">TRACEDATA_FILENAME</span><span class="o">]</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span>
+ <span class="s">"Function Name : "</span> <span class="o">+</span> <span class="n">ringvm_tracedata</span><span class="p">()</span><span class="o">[</span><span class="n">TRACEDATA_FUNCNAME</span><span class="o">]</span> <span class="o">+</span> <span class="n">nl</span> <span class="o">+</span>
+ <span class="s">"Method or Function : "</span>
+ <span class="k">if</span> <span class="n">ringvm_tracedata</span><span class="p">()</span><span class="o">[</span><span class="n">TRACEDATA_METHODORFUNC</span><span class="o">]</span> <span class="o">=</span>
+ <span class="n">TRACEDATA_METHODORFUNC_METHOD</span>
+ <span class="k">see</span> <span class="s">"Method"</span>
+ <span class="k">else</span>
+ <span class="k">if</span> <span class="n">ringvm_tracedata</span><span class="p">()</span><span class="o">[</span><span class="n">TRACEDATA_FUNCNAME</span><span class="o">]</span> <span class="o">=</span> <span class="kp">NULL</span>
+ <span class="k">see</span> <span class="s">"Command"</span>
+ <span class="k">else</span>
+ <span class="k">see</span> <span class="s">"Function"</span>
+ <span class="k">ok</span>
+ <span class="k">ok</span>
+ <span class="k">see</span> <span class="n">nl</span> <span class="o">+</span> <span class="n">Copy</span><span class="p">(</span><span class="s">"="</span><span class="p">,</span><span class="mi">42</span><span class="p">)</span> <span class="o">+</span> <span class="n">nl</span>
+
+<span class="k">class</span> <span class="n">myclass</span>
+ <span class="k">func</span> <span class="n">mymethod</span>
+ <span class="k">see</span> <span class="s">"Message from mymethod"</span> <span class="o">+</span> <span class="n">nl</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-none"><div class="highlight"><pre>====== The Trace function is Active ======
+Trace Function Name : mytrace()
+Trace Event : After C Function
+Line Number : 3
+File Name : test1.ring
+Function Name : ringvm_settrace
+Method or Function : Function
+==========================================
+====== The Trace function is Active ======
+Trace Function Name : mytrace()
+Trace Event : New Line
+Line Number : 5
+File Name : test1.ring
+Function Name :
+Method or Function : Command
+==========================================
+Hello, world!
+====== The Trace function is Active ======
+Trace Function Name : mytrace()
+Trace Event : New Line
+Line Number : 6
+File Name : test1.ring
+Function Name :
+Method or Function : Command
+==========================================
+Welcome
+====== The Trace function is Active ======
+Trace Function Name : mytrace()
+Trace Event : New Line
+Line Number : 7
+File Name : test1.ring
+Function Name :
+Method or Function : Command
+==========================================
+How are you?
+====== The Trace function is Active ======
+Trace Function Name : mytrace()
+Trace Event : New Line
+Line Number : 8
+File Name : test1.ring
+Function Name :
+Method or Function : Command
+==========================================
+====== The Trace function is Active ======
+Trace Function Name : mytrace()
+Trace Event : New Function
+Line Number : 8
+File Name : test1.ring
+Function Name : mytest
+Method or Function : Function
+==========================================
+====== The Trace function is Active ======
+Trace Function Name : mytrace()
+Trace Event : New Line
+Line Number : 12
+File Name : test1.ring
+Function Name : mytest
+Method or Function : Function
+==========================================
+Message from mytest
+====== The Trace function is Active ======
+Trace Function Name : mytrace()
+Trace Event : New Line
+Line Number : 14
+File Name : test1.ring
+Function Name : mytest
+Method or Function : Function
+==========================================
+====== The Trace function is Active ======
+Trace Function Name : mytrace()
+Trace Event : Return
+Line Number : 8
+File Name : test1.ring
+Function Name :
+Method or Function : Command
+==========================================
+====== The Trace function is Active ======
+Trace Function Name : mytrace()
+Trace Event : New Line
+Line Number : 9
+File Name : test1.ring
+Function Name :
+Method or Function : Command
+==========================================
+====== The Trace function is Active ======
+Trace Function Name : mytrace()
+Trace Event : New Line
+Line Number : 43
+File Name : test1.ring
+Function Name :
+Method or Function : Command
+==========================================
+====== The Trace function is Active ======
+Trace Function Name : mytrace()
+Trace Event : Before C Function
+Line Number : 9
+File Name : test1.ring
+Function Name : ismethod
+Method or Function : Function
+==========================================
+====== The Trace function is Active ======
+Trace Function Name : mytrace()
+Trace Event : After C Function
+Line Number : 9
+File Name : test1.ring
+Function Name : ismethod
+Method or Function : Function
+==========================================
+====== The Trace function is Active ======
+Trace Function Name : mytrace()
+Trace Event : New Function
+Line Number : 9
+File Name : test1.ring
+Function Name : mymethod
+Method or Function : Method
+==========================================
+====== The Trace function is Active ======
+Trace Function Name : mytrace()
+Trace Event : New Line
+Line Number : 44
+File Name : test1.ring
+Function Name : mymethod
+Method or Function : Method
+==========================================
+Message from mymethod
+====== The Trace function is Active ======
+Trace Function Name : mytrace()
+Trace Event : Return
+Line Number : 9
+File Name : test1.ring
+Function Name :
+Method or Function : Command
+==========================================
+====== The Trace function is Active ======
+Trace Function Name : mytrace()
+Trace Event : Before C Function
+Line Number : 9
+File Name : test1.ring
+Function Name : ismethod
+Method or Function : Function
+==========================================
+====== The Trace function is Active ======
+Trace Function Name : mytrace()
+Trace Event : After C Function
+Line Number : 9
+File Name : test1.ring
+Function Name : ismethod
+Method or Function : Function
+==========================================
+====== The Trace function is Active ======
+Trace Function Name : mytrace()
+Trace Event : Before C Function
+Line Number : 9
+File Name : test1.ring
+Function Name : ismethod
+Method or Function : Function
+==========================================
+====== The Trace function is Active ======
+Trace Function Name : mytrace()
+Trace Event : After C Function
+Line Number : 9
+File Name : test1.ring
+Function Name : ismethod
+Method or Function : Function
+==========================================
+====== The Trace function is Active ======
+Trace Function Name : mytrace()
+Trace Event : New Line
+Line Number : 11
+File Name : test1.ring
+Function Name :
+Method or Function : Command
+==========================================
+</pre></div>
+</div>
+</div>
+<div class="section" id="index-26">
+<span id="id3"></span><h2>用例 - トレースライブラリ<a class="headerlink" href="#index-26" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>この用例では、トレースライブラリ作成用のトレース関数を使用します。</p>
+<p>トレースライブラリにより、
+すばらしいトレースツールとインタラクティブデバッガを利用できます。</p>
+<div class="highlight-ring"><div class="highlight"><pre># イベントのトレース
+TRACEEVENT_NEWLINE = 1
+TRACEEVENT_NEWFUNC = 2
+TRACEEVENT_RETURN = 3
+TRACEEVENT_ERROR = 4
+TRACEEVENT_BEFORECFUNC = 5
+TRACEEVENT_AFTERCFUNC = 6
+
+# データのトレース
+TRACEDATA_LINENUMBER = 1
+TRACEDATA_FILENAME = 2
+TRACEDATA_FUNCNAME = 3
+TRACEDATA_METHODORFUNC = 4
+
+# 関数のメソッド
+TRACEDATA_METHODORFUNC_METHOD = TRUE
+TRACEDATA_METHODORFUNC_NOTMETHOD = FALSE
+
+TRACE_BREAKPOINTS = TRUE
+
+TRACE_TEMPLIST = []
+
+func Trace cType
+ switch trim(lower(cType))
+ on :AllEvents
+ ringvm_settrace("TraceLib_AllEvents()")
+ on :Functions
+ ringvm_settrace("TraceLib_Functions()")
+ on :PassError
+ ringvm_settrace("TraceLib_PassError()")
+ on :Debugger
+ ringvm_settrace("TraceLib_Debugger()")
+ on :LineByLine
+ ringvm_settrace("TraceLib_LineByLine()")
+ off
+
+func TraceLib_AllEvents
+ if right(ringvm_tracedata()[TRACEDATA_FILENAME],13) = "tracelib.ring"
+ return
+ ok
+ see "====== The Trace function is Active ======" + nl +
+ "Trace Function Name : " + ringvm_TraceFunc() + nl +
+ "Trace Event : "
+ switch ringvm_TraceEvent()
+ on TRACEEVENT_NEWLINE see "New Line"
+ on TRACEEVENT_NEWFUNC see "New Function"
+ on TRACEEVENT_RETURN see "Return"
+ on TRACEEVENT_ERROR see "Error"
+ on TRACEEVENT_BEFORECFUNC see "Before C Function"
+ on TRACEEVENT_AFTERCFUNC see "After C Function"
+ off
+ see nl +
+ "Line Number : " + ringvm_tracedata()[TRACEDATA_LINENUMBER] + nl +
+ "File Name : " + ringvm_tracedata()[TRACEDATA_FILENAME] + nl +
+ "Function Name : " + ringvm_tracedata()[TRACEDATA_FUNCNAME] + nl +
+ "Method or Function : "
+ if ringvm_tracedata()[TRACEDATA_METHODORFUNC] =
+ TRACEDATA_METHODORFUNC_METHOD
+ see "Method"
+ else
+ if ringvm_tracedata()[TRACEDATA_FUNCNAME] = NULL
+ see "Command"
+ else
+ see "Function"
+ ok
+ ok
+ see nl + Copy("=",42) + nl
+
+func TraceLib_Functions
+ if right(ringvm_tracedata()[TRACEDATA_FILENAME],13) = "tracelib.ring"
+ return
+ ok
+ switch ringvm_TraceEvent()
+ on TRACEEVENT_NEWFUNC
+ see "Open Func : " +
+ ringvm_TraceData()[TRACEDATA_FUNCNAME] + nl
+ on TRACEEVENT_RETURN
+ see "Return to Func : " +
+ ringvm_TraceData()[TRACEDATA_FUNCNAME] + nl
+ off
+
+func TraceLib_PassError
+ if right(ringvm_tracedata()[TRACEDATA_FILENAME],13) = "tracelib.ring"
+ return
+ ok
+ switch ringvm_TraceEvent()
+ on TRACEEVENT_ERROR
+ see nl
+ see "TraceLib : After Error !" + nl
+ ringvm_passerror()
+ off
+
+func TraceLib_Debugger
+ if right(ringvm_tracedata()[TRACEDATA_FILENAME],13) = "tracelib.ring"
+ return
+ ok
+ switch ringvm_TraceEvent()
+ on TRACEEVENT_ERROR
+ _BreakPoint()
+ off
+
+func TraceLib_LineByLine
+ if right(ringvm_tracedata()[TRACEDATA_FILENAME],13) = "tracelib.ring" or
+ ringvm_TraceEvent() != TRACEEVENT_NEWLINE
+ return
+ ok
+ aList = ringvm_tracedata()
+ see "Before Line : " + aList[TRACEDATA_LINENUMBER] + nl
+ _BreakPoint()
+
+func BreakPoint
+ if not TRACE_BREAKPOINTS
+ return
+ ok
+ _BreakPoint()
+
+func _BreakPoint
+ see nl+nl+Copy("=",60) + nl +
+ Copy(" ",20)+"Interactive Debugger" + nl +
+ Copy("=",60) + nl +
+ "Command (Exit) : End Program" + nl +
+ "Command (Cont) : Continue Execution" + nl +
+ "Command (Locals) : Print local variables names" + nl +
+ "Command (LocalsData) : Print local variables data" + nl +
+ "Command (Globals) : Print global variables names" + nl +
+ "We can execute Ring code" + nl +
+ Copy("=",60) + nl
+ while true
+ see nl + "code:> "
+ give cCode
+ cmd = trim(lower(cCode))
+ if cmd = "exit" or cmd = "bye"
+ shutdown()
+ ok
+ nScope = ringvm_scopescount()-2
+ switch cmd
+ on "locals"
+ ringvm_EvalInScope(nScope,"see locals() callgc()")
+ loop
+ on "localsdata"
+ PrintLocalsData(nScope)
+ loop
+ on "globals"
+ ringvm_EvalInScope(nScope,"see globals() callgc()")
+ loop
+ on "cont"
+ ringvm_passerror()
+ exit
+ off
+ Try
+ ringvm_EvalInScope(nScope,cCode)
+ catch
+ see cCatchError
+ done
+ end
+
+func NoBreakPoints
+ TRACE_BREAKPOINTS = FALSE
+
+
+func PrintLocalsData nScope
+ if nScope = 1 # グローバル
+ ringvm_Evalinscope(nScope,'TRACE_TEMPLIST = globals()')
+ else
+ ringvm_Evalinscope(nScope,'TRACE_TEMPLIST = locals() callgc()')
+ ok
+ see nl
+ aTempList = TRACE_TEMPLIST
+ TRACE_TEMPLIST = []
+ nSpaces = 5
+ for TRACE_ITEM in aTempList
+ if len(TRACE_ITEM) + 5 > nSpaces
+ nSpaces = len(TRACE_ITEM) + 5
+ ok
+ next
+ for TRACE_ITEM in aTempList
+ see "Variable : " + TRACE_ITEM
+ cVarName = TRACE_ITEM
+ see copy(" ",nSpaces-len(cVarName)) + " Type : "
+ ringvm_Evalinscope(nScope,"see type(" + TRACE_ITEM +")")
+ ringvm_Evalinscope(nScope,"see Copy(' ',fabs(15-len(type(" +
+ TRACE_ITEM +"))))")
+ see " Value : "
+ ringvm_Evalinscope(nScope,"see " + TRACE_ITEM)
+ see nl
+ next
+</pre></div>
+</div>
+</div>
+<div class="section" id="ringvm-see">
+<span id="index-27"></span><h2>ringvm_see() 関数<a class="headerlink" href="#ringvm-see" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>ringvm_see() 関数は See 命令の挙動を変更します。</p>
+<p>また ring_see() 関数は元の挙動を使用します。</p>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">see</span> <span class="s">"Hello world"</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">see</span> <span class="mi">123</span> <span class="o">+</span> <span class="n">nl</span>
+<span class="k">see</span> <span class="o">[</span><span class="s">"one"</span><span class="p">,</span><span class="s">"two"</span><span class="p">,</span><span class="s">"three"</span><span class="o">]</span>
+<span class="k">see</span> <span class="k">new</span> <span class="n">point</span> <span class="p">{</span><span class="n">x</span><span class="o">=</span><span class="mi">10</span> <span class="n">y</span><span class="o">=</span><span class="mi">20</span> <span class="n">z</span><span class="o">=</span><span class="mi">30</span><span class="p">}</span>
+
+<span class="k">func</span> <span class="n">ringvm_see</span> <span class="n">t</span>
+ <span class="n">ring_see</span><span class="p">(</span><span class="s">"We want to print: "</span><span class="p">)</span>
+ <span class="n">ring_See</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
+
+<span class="k">class</span> <span class="n">point</span> <span class="n">x</span> <span class="n">y</span> <span class="n">z</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-none"><div class="highlight"><pre>We want to print: Hello world
+We want to print: 123
+We want to print: one
+two
+three
+We want to print: x: 10.000000
+y: 20.000000
+z: 30.000000
+</pre></div>
+</div>
+</div>
+<div class="section" id="ringvm-give">
+<span id="index-28"></span><h2>ringvm_give() 関数<a class="headerlink" href="#ringvm-give" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>ringvm_give() 関数は Give 命令の挙動を変更します。</p>
+<p>また ring_give() 関数は元の挙動を使用します。</p>
+<p>用例:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="k">see</span> <span class="s">"Name: "</span> <span class="k">give</span> <span class="n">name</span>
+<span class="k">see</span> <span class="s">"Hello "</span> <span class="o">+</span> <span class="n">name</span>
+
+<span class="k">func</span> <span class="n">ringvm_give</span>
+ <span class="k">see</span> <span class="s">"Mahmoud"</span> <span class="o">+</span> <span class="n">nl</span>
+ <span class="k">return</span> <span class="s">"Mahmoud"</span>
+</pre></div>
+</div>
+<p>実行結果:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">Name</span><span class="p">:</span> <span class="n">Mahmoud</span>
+<span class="n">Hello</span> <span class="n">Mahmoud</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="ringvm-info">
+<span id="index-29"></span><h2>ringvm_info() 関数<a class="headerlink" href="#ringvm-info" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>ringvm_info () は Ring VM 構造体に関する情報をリストとして返す内部関数です。</p>
+<p>この関数は Ring チームが VM の状態を調査するための高度な検証に限り使用されています。</p>
+<p>文法:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="n">ringvm_info</span><span class="p">()</span> <span class="o">---></span> <span class="n">VM</span> <span class="n">構造体に関する情報のリスト</span>
+</pre></div>
+</div>
+</div>
+</div>
+
+
+ </div>
+ </div>
+ </div>
+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+ <div class="sphinxsidebarwrapper"><h3>ページの内容</h3>
+<ul>
+<li><a class="reference internal" href="#">低水準関数</a><ul>
+<li><a class="reference internal" href="#callgc">callgc() 関数</a></li>
+<li><a class="reference internal" href="#varptr">varptr() 関数</a></li>
+<li><a class="reference internal" href="#space">space() 関数</a></li>
+<li><a class="reference internal" href="#nullpointer">nullpointer() 関数</a></li>
+<li><a class="reference internal" href="#object2pointer">object2pointer() 関数</a></li>
+<li><a class="reference internal" href="#pointer2object">pointer2object() 関数</a></li>
+<li><a class="reference internal" href="#ispointer">ispointer() 関数</a></li>
+<li><a class="reference internal" href="#ptrcmp">ptrcmp() 関数</a></li>
+<li><a class="reference internal" href="#ringvm-cfunctionslist">ringvm_cfunctionslist() 関数</a></li>
+<li><a class="reference internal" href="#ringvm-functionslist">ringvm_functionslist() 関数</a></li>
+<li><a class="reference internal" href="#ringvm-classeslist">ringvm_classeslist() 関数</a></li>
+<li><a class="reference internal" href="#ringvm-packageslist">ringvm_packageslist() 関数</a></li>
+<li><a class="reference internal" href="#ringvm-memorylist">ringvm_memorylist() 関数</a></li>
+<li><a class="reference internal" href="#ringvm-calllist">ringvm_calllist() 関数</a></li>
+<li><a class="reference internal" href="#ringvm-fileslist">ringvm_fileslist() 関数</a></li>
+<li><a class="reference internal" href="#ringvm-settrace">ringvm_settrace() 関数</a></li>
+<li><a class="reference internal" href="#ringvm-tracedata">ringvm_tracedata() 関数</a></li>
+<li><a class="reference internal" href="#ringvm-traceevent">ringvm_traceevent() 関数</a></li>
+<li><a class="reference internal" href="#ringvm-tracefunc">ringvm_tracefunc() 関数</a></li>
+<li><a class="reference internal" href="#ringvm-scopescount">ringvm_scopescount() 関数</a></li>
+<li><a class="reference internal" href="#ringvm-evalinscope">ringvm_evalinscope() 関数</a></li>
+<li><a class="reference internal" href="#ringvm-passerror">ringvm_passerror() 関数</a></li>
+<li><a class="reference internal" href="#ringvm-hideerrormsg">ringvm_hideerrormsg() 関数</a></li>
+<li><a class="reference internal" href="#ringvm-callfunc">ringvm_callfunc() 関数</a></li>
+<li><a class="reference internal" href="#index-25">用例 - トレース関数の用法</a></li>
+<li><a class="reference internal" href="#index-26">用例 - トレースライブラリ</a></li>
+<li><a class="reference internal" href="#ringvm-see">ringvm_see() 関数</a></li>
+<li><a class="reference internal" href="#ringvm-give">ringvm_give() 関数</a></li>
+<li><a class="reference internal" href="#ringvm-info">ringvm_info() 関数</a></li>
+</ul>
+</li>
+</ul>
+
+
+ <h4>前のトピックへ</h4>
+ <p class="topless"><a href="ringpm.html"
+ title="前の章へ">Ring パッケージ管理プログラム (RingPM)</a></p>
+ <h4>次のトピックへ</h4>
+ <p class="topless"><a href="debug.html"
+ title="次の章へ">トレースライブラリとインタラクティブデバッガ</a></p>
+ <div role="note" aria-label="source link">
+ <h3>このページ</h3>
+ <ul class="this-page-menu">
+ <li><a href="_sources/lowlevel.txt"
+ rel="nofollow">ソースコードを表示</a></li>
+ </ul>
+ </div>
+
+<form action="search.html" method="get">
+ <input type="text" name="q" placeholder="Search" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+</form>
+
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+<footer class="footer">
+ <p class="pull-right">
+ <a href="_sources/lowlevel.txt"
+ rel="nofollow">Page Source</a>
+ <a href="#">Back to Top</a></p>
+ <p>
+ © Copyright 2016-2020, Ring Team.<br/>
+ Created using <a href="http://www.sphinx-doc.org/en/stable/">Sphinx</a> 1.3.6. / astropy-sphinx-theme 1.1 (isVowel)
+ </p>
+</footer>
+ </body>
+</html>
\ No newline at end of file