diff --git a/packages/core/src/skeleton.js b/packages/core/src/skeleton.js index 6f40909..4794fb5 100644 --- a/packages/core/src/skeleton.js +++ b/packages/core/src/skeleton.js @@ -460,6 +460,19 @@ function isCompletelyConcrete(p) { return walk(p); } +function withoutCaptures(p) { + function walk(p) { + if (Capture.isClassOf(p)) return walk(p.get(0)); + if (Discard.isClassOf(p)) return p; + + const cls = classOf(p); + if (cls === null) return p; + if (typeof cls === 'number') return p.map(walk); + return new Record(p.label, p.fields.map(walk)); + } + return walk(p); +} + /////////////////////////////////////////////////////////////////////////// module.exports.EVENT_ADDED = EVENT_ADDED; @@ -471,3 +484,4 @@ module.exports.analyzeAssertion = analyzeAssertion; module.exports.instantiateAssertion = instantiateAssertion; module.exports.match = match; module.exports.isCompletelyConcrete = isCompletelyConcrete; +module.exports.withoutCaptures = withoutCaptures; diff --git a/packages/syntax-server/src/job.js b/packages/syntax-server/src/job.js index 1fd2229..7e48bfa 100644 --- a/packages/syntax-server/src/job.js +++ b/packages/syntax-server/src/job.js @@ -17,8 +17,9 @@ spawn named 'JobDispatcher' { during Observe(Observe(WorkItem($worker, $pattern, _))) { if (!Skeleton.isCompletelyConcrete(pattern)) { - on start addWorker(pattern, worker); - on stop removeWorker(pattern, worker); + const p = Skeleton.withoutCaptures(pattern); + on start addWorker(p, worker); + on stop removeWorker(p, worker); } }