summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua')
-rw-r--r--lua/clever_f/sequence_coordinator.lua27
1 files changed, 26 insertions, 1 deletions
diff --git a/lua/clever_f/sequence_coordinator.lua b/lua/clever_f/sequence_coordinator.lua
index 37657b2..bcb6689 100644
--- a/lua/clever_f/sequence_coordinator.lua
+++ b/lua/clever_f/sequence_coordinator.lua
@@ -204,6 +204,31 @@ function SequenceCoordinator:acquire_primary(descriptor, invocation)
)
end
+function SequenceCoordinator:fresh_primary_resolution(
+ initiating_descriptor,
+ acquisition_result,
+ invocation
+)
+ initiating_descriptor = self:validate_primary_descriptor(initiating_descriptor)
+ if type(acquisition_result) ~= "table"
+ or acquisition_result.resolved ~= true
+ or not domain.TargetValue.is(acquisition_result.target)
+ or not domain.TargetPlan.is(acquisition_result.target_plan)
+ or not domain.ResolvedMotionPlan.is(acquisition_result.motion_plan)
+ then
+ fail("fresh primary resolution requires acquired motion plans", 2)
+ end
+ return {
+ kind = "fresh",
+ invocation = invocation,
+ acquisition_result = acquisition_result,
+ target = acquisition_result.target,
+ target_plan = acquisition_result.target_plan,
+ motion_plan = acquisition_result.motion_plan,
+ effective_descriptor = initiating_descriptor,
+ }
+end
+
function SequenceCoordinator:resolve_acquisition(descriptor, invocation)
local result = self:acquire_primary(descriptor, invocation)
if type(result.has_outcome) ~= "function" then
@@ -212,7 +237,7 @@ function SequenceCoordinator:resolve_acquisition(descriptor, invocation)
if result:has_outcome() then
return result.outcome
end
- return result
+ return self:fresh_primary_resolution(descriptor, result, invocation)
end
function SequenceCoordinator:primary(value)