rename XFactory.Regs to XFactory.Generators.

This commit is contained in:
2026-05-23 21:23:06 +08:00
parent 8b285cc863
commit 058003f395
155 changed files with 16416 additions and 1261 deletions
@@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class LocalVariableLookup | HiAPI-C# 2025 ">
<meta name="description" content="Reads Fanuc-style local macro variables (#1-#33) from Vars.Local on the current JSON, walking until the entry is found. Self-gates the id range so the evaluator&#39;s chain can fall through to the next lookup for out-of-range keys. Stateless and dependency-free — instances are interchangeable.">
<meta name="description" content="Reads Fanuc-style local macro variables (#1-#33) from Vars.Local on the current JSON, falling back to the immediately previous block when they share the same id. Self-gates the id range so the evaluator&#39;s chain can fall through to the next lookup for out-of-range keys. Two-step lookup (mirrors ): the current block sees writes that stamped at inline time (the call-line argument bindings) and writes that applied on this block before the lookup runs; the previous block (frame-checked) supplies body-internal writes from the prior block in the same macro frame. Looking past the previous block is unnecessary because the reader carries forward block-by-block within a frame. Frame isolation via : a previous block whose frame id differs from the current block&#39;s is skipped — a macro body&#39;s body-internal locals are invisible to the caller after return, and the caller&#39;s main-frame locals are invisible inside the macro. M98/M198 subprogram inlining () deliberately does not stamp on its inlined blocks, so the callee inherits the caller&#39;s frame and sees the caller&#39;s locals — matching real Fanuc M98 semantics. Stateless and dependency-free — instances are interchangeable.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
@@ -99,18 +99,40 @@ Class LocalVariableLookup
<div class="markdown summary"><p>Reads Fanuc-style local macro variables (<code>#1-#33</code>) from
<code>Vars.Local</code> on the current <a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">SyntaxPiece</a> JSON,
walking <a class="xref" href="Hi.Common.Collections.LazyLinkedListNode-1.html#Hi_Common_Collections_LazyLinkedListNode_1_Previous">Previous</a> until the entry
is found. Self-gates the id range so the evaluator's
falling back to the immediately previous block when they share the
same <a class="xref" href="Hi.NcParsers.Keywords.MacroFrame.html">MacroFrame</a> id. Self-gates the id range
so the evaluator's
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html#Hi_NcParsers_EvaluationSyntaxs_VariableEvaluatorSyntax_RuntimeVariableLookups">RuntimeVariableLookups</a> chain can
fall through to the next lookup for out-of-range keys.</p>
<p>
Two-step lookup (mirrors <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html">VolatileVariableLookup</a>): the
current block sees writes that <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html">FanucMacroCallSyntax</a>
stamped at inline time (the call-line argument bindings) and writes
that <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html">FanucLocalVariableReadingSyntax</a>
applied on this block before the lookup runs; the previous block
(frame-checked) supplies body-internal writes from the prior block in
the same macro frame. Looking past the previous block is unnecessary
because the reader carries forward block-by-block within a frame.
</p>
<p>
Frame isolation via <a class="xref" href="Hi.NcParsers.Keywords.MacroFrame.html">MacroFrame</a>: a previous
block whose frame id differs from the current block's is skipped —
a macro body's body-internal locals are invisible to the caller after
return, and the caller's main-frame locals are invisible inside the
macro. M98/M198 subprogram inlining
(<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html">SubProgramCallSyntax</a>) deliberately
does <i>not</i> stamp <a class="xref" href="Hi.NcParsers.Keywords.MacroFrame.html">MacroFrame</a> on its
inlined blocks, so the callee inherits the caller's frame and sees
the caller's locals — matching real Fanuc M98 semantics.
</p>
<p>
Stateless and dependency-free — instances are interchangeable.
</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class LocalVariableLookup : IRuntimeVariableLookup</code></pre>
<pre><code class="lang-csharp hljs">public class LocalVariableLookup : IRuntimeVariableLookup, IMakeXmlSource</code></pre>
</div>
@@ -128,6 +150,7 @@ Stateless and dependency-free — instances are interchangeable.
<dt>Implements</dt>
<dd>
<div><a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Evaluation.IRuntimeVariableLookup.html">IRuntimeVariableLookup</a></div>
<div><a class="xref" href="Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a></div>
</dd>
</dl>
@@ -188,6 +211,69 @@ Stateless and dependency-free — instances are interchangeable.
<h2 class="section" id="constructors">Constructors
</h2>
<a id="Hi_NcParsers_EvaluationSyntaxs_Evaluation_LocalVariableLookup__ctor_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.#ctor*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Evaluation_LocalVariableLookup__ctor" data-uid="Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.#ctor">
LocalVariableLookup()
</h3>
<div class="markdown level1 summary"><p>Default constructor.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public LocalVariableLookup()</code></pre>
</div>
<a id="Hi_NcParsers_EvaluationSyntaxs_Evaluation_LocalVariableLookup__ctor_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.#ctor*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Evaluation_LocalVariableLookup__ctor_System_Xml_Linq_XElement_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.#ctor(System.Xml.Linq.XElement)">
LocalVariableLookup(XElement)
</h3>
<div class="markdown level1 summary"><p>Loads from an XML element produced by <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_LocalVariableLookup_MakeXmlSource_System_String_System_String_System_Boolean_">MakeXmlSource(string, string, bool)</a>. Stateless — no fields to deserialise.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public LocalVariableLookup(XElement src)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>src</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.xml.linq.xelement">XElement</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="fields">Fields
</h2>
@@ -254,6 +340,42 @@ Stateless and dependency-free — instances are interchangeable.
<h2 class="section" id="properties">Properties
</h2>
<a id="Hi_NcParsers_EvaluationSyntaxs_Evaluation_LocalVariableLookup_XName_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.XName*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Evaluation_LocalVariableLookup_XName" data-uid="Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.XName">
XName
</h3>
<div class="markdown level1 summary"><p>XML element name for <a class="xref" href="Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Generators">Generators</a> registration.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static string XName { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
@@ -302,6 +424,57 @@ this lookup's range or the value is vacant.</p>
<a id="Hi_NcParsers_EvaluationSyntaxs_Evaluation_LocalVariableLookup_MakeXmlSource_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.MakeXmlSource*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Evaluation_LocalVariableLookup_MakeXmlSource_System_String_System_String_System_Boolean_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.MakeXmlSource(System.String,System.String,System.Boolean)">
MakeXmlSource(string, string, bool)
</h3>
<div class="markdown level1 summary"><p>Creates an XML representation of the object.
This method may also generate additional resources such as related files.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>baseDirectory</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>The base directory for resolving relative paths</p>
</dd>
<dt><code>relFile</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>The relative file path for the XML source</p>
</dd>
<dt><code>exhibitionOnly</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd><p>if true, the extended file creation is suppressed.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.xml.linq.xelement">XElement</a></dt>
<dd><p>An XML element representing the object's state</p>
</dd>
</dl>
<h4 class="section" id="Hi_NcParsers_EvaluationSyntaxs_Evaluation_LocalVariableLookup_MakeXmlSource_System_String_System_String_System_Boolean__remarks">Remarks</h4>
<div class="markdown level1 remarks"><p>For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
The <code class="paramref">baseDirectory</code> is typically the folder at the nearest configuration file folder.
Since the folder can be moving with the configuration file.</p>
</div>
</article>