Archived
deploy webservice static-file routing for docsite folder URLs, per-instance step-cache db, and constant-height panel title bars.
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Class ModalCarrySyntax | HiAPI-C# 2025 ">
|
||||
|
||||
<meta name="description" content="Per-block modal-section carry. For each key in , if the current block has no section for that key, deep-clone the same section from the immediately previous block (which is itself guaranteed to carry it because every block is processed by this syntax) and set = inside the cloned section. Lets every block stand alone with its full modal context, so downstream readers (cache-file dumps, semantics, UI jumping to a single block) do not need to resolve modal state. A JSON section is a candidate for when ALL four criteria hold: Writers concentrated — one or two syntaxes own the section (e.g. / own MotionState; the call/return pair own SubProgramCall-derived state).Readers distributed — multiple downstream consumers each need the value, and none of them should walk back to find it. Single-reader sections do not benefit from blanket carry.Every block must see the section — cache-dump readers landing randomly, single-block UI views, and look-ahead syntaxes all require the section to be present on every block.Carry is unconditional — no frame-gating or other per-block veto. Sections that need conditional carry (e.g. 's frame-aware Vars.Local dict-merge — carry only when MacroFrame matches) belong in the owning syntax's own carry logic, not here. A section failing any criterion should be carried through its owning syntax's own logic (single-step node.Previous read, or no carry at all if absence is meaningful — e.g. MacroFrame absent = main frame). This replaces the earlier CacheSyntax design (which sampled every Pace blocks). The legacy CacheSyntax XName is still recognised on load for backward compatibility with previously-saved project files.">
|
||||
<meta name="description" content="Per-block modal-section carry. For each key in , if the current block has no section for that key, deep-clone the same section from the immediately previous block (which is itself guaranteed to carry it because every block is processed by this syntax) and set = inside the cloned section. For each key in , a block that DID write its own (partial) section additionally receives the previous block's remaining entries — the block's own values win, only missing keys are filled — so a partially-written modal section (e.g. an XYZ-only motion block's , which lacks the rotary axes) does not break the carry chain for the keys it did not write. Lets every block stand alone with its full modal context, so downstream readers (cache-file dumps, semantics, UI jumping to a single block) do not need to resolve modal state. A JSON section is a candidate for when ALL four criteria hold: Writers concentrated — one or two syntaxes own the section (e.g. / own MotionState; the call/return pair own SubProgramCall-derived state).Readers distributed — multiple downstream consumers each need the value, and none of them should walk back to find it. Single-reader sections do not benefit from blanket carry.Every block must see the section — cache-dump readers landing randomly, single-block UI views, and look-ahead syntaxes all require the section to be present on every block.Carry is unconditional — no frame-gating or other per-block veto. Sections that need conditional carry (e.g. 's frame-aware Vars.Local dict-merge — carry only when MacroFrame matches) belong in the owning syntax's own carry logic, not here. A section failing any criterion should be carried through its owning syntax's own logic (single-step node.Previous read, or no carry at all if absence is meaningful — e.g. MacroFrame absent = main frame). This replaces the earlier CacheSyntax design (which sampled every Pace blocks). The legacy CacheSyntax XName is still recognised on load for backward compatibility with previously-saved project files.">
|
||||
<link rel="icon" href="../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../public/main.css">
|
||||
@@ -102,7 +102,14 @@ if the current block has no section for that key, deep-clone the same
|
||||
section from the immediately previous block (which is itself guaranteed
|
||||
to carry it because every block is processed by this syntax) and set
|
||||
<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxStageKeys.html#Hi_NcParsers_Syntaxs_SyntaxStageKeys_AddedByKey">AddedByKey</a> = <a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html#Hi_NcParsers_PostLogicSyntaxs_ModalCarrySyntax_AddedByValue">AddedByValue</a>
|
||||
inside the cloned section. Lets every block stand alone with its full
|
||||
inside the cloned section. For each key in <a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html#Hi_NcParsers_PostLogicSyntaxs_ModalCarrySyntax_MergeKeys">MergeKeys</a>, a
|
||||
block that DID write its own (partial) section additionally receives the
|
||||
previous block's remaining entries — the block's own values win, only
|
||||
missing keys are filled — so a partially-written modal section (e.g. an
|
||||
XYZ-only motion block's
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateStateDef_MachineCoordinateState">MachineCoordinateState</a>,
|
||||
which lacks the rotary axes) does not break the carry chain for the keys
|
||||
it did not write. Lets every block stand alone with its full
|
||||
modal context, so downstream readers (cache-file dumps, semantics, UI
|
||||
jumping to a single block) do not need
|
||||
<a class="xref" href="Hi.Common.Collections.LazyLinkedListNode-1.html#Hi_Common_Collections_LazyLinkedListNode_1_EnumerateBack">EnumerateBack()</a> to resolve modal state.</p>
|
||||
@@ -403,6 +410,50 @@ before the intermediate block's PostLogic ModalCarry has run.</p>
|
||||
|
||||
|
||||
|
||||
<a id="Hi_NcParsers_PostLogicSyntaxs_ModalCarrySyntax_MergeKeys_" data-uid="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.MergeKeys*"></a>
|
||||
|
||||
<h3 id="Hi_NcParsers_PostLogicSyntaxs_ModalCarrySyntax_MergeKeys" data-uid="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.MergeKeys">
|
||||
MergeKeys
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Section keys whose carry is per-KEY, not just per-section: when the
|
||||
current block already has the section, entries it did not write are
|
||||
filled from the previous block's section (own values win;
|
||||
<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxStageKeys.html#Hi_NcParsers_Syntaxs_SyntaxStageKeys_AddedByKey">AddedByKey</a> is never copied as data).
|
||||
Opt-in and deliberately separate from <a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html#Hi_NcParsers_PostLogicSyntaxs_ModalCarrySyntax_TrackedKeys">TrackedKeys</a> —
|
||||
stack-like sections (<code>CallStack</code>, <code>WhileFrames</code>) must NOT
|
||||
be merged: a popped frame would be resurrected. Today only
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateStateDef_MachineCoordinateState">MachineCoordinateState</a>
|
||||
qualifies: its writers are per-axis (an XYZ motion block writes only
|
||||
X/Y/Z), and without the merge the modal rotary values die at every
|
||||
partially-written section, forcing downstream modal lookbacks into
|
||||
unbounded <a class="xref" href="Hi.Common.Collections.LazyLinkedListNode-1.html#Hi_Common_Collections_LazyLinkedListNode_1_EnumerateBack">EnumerateBack()</a> walks
|
||||
(progress-dependent slowdown once executed pieces freeze).</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public List<string> MergeKeys { get; set; }</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h4 class="section">Property Value</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a><<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>></dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_NcParsers_PostLogicSyntaxs_ModalCarrySyntax_Name_" data-uid="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.Name*"></a>
|
||||
|
||||
<h3 id="Hi_NcParsers_PostLogicSyntaxs_ModalCarrySyntax_Name" data-uid="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.Name">
|
||||
|
||||
Reference in New Issue
Block a user