From f538891a2582ee93fa15c3d72f663db5d807e8f2 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Fri, 14 Dec 2018 13:01:54 +0000 Subject: [PATCH] Skeleton.isCompletelyConcrete --- packages/core/src/skeleton.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/core/src/skeleton.js b/packages/core/src/skeleton.js index 673456e..6f40909 100644 --- a/packages/core/src/skeleton.js +++ b/packages/core/src/skeleton.js @@ -447,6 +447,19 @@ function match(p, v) { return walk(p, v) ? captures : false; } +function isCompletelyConcrete(p) { + function walk(p) { + if (Capture.isClassOf(p)) return false; + if (Discard.isClassOf(p)) return false; + + const cls = classOf(p); + if (cls === null) return true; + if (typeof cls === 'number') return p.every(walk); + return p.fields.every(walk); + } + return walk(p); +} + /////////////////////////////////////////////////////////////////////////// module.exports.EVENT_ADDED = EVENT_ADDED; @@ -457,3 +470,4 @@ module.exports.Index = Index; module.exports.analyzeAssertion = analyzeAssertion; module.exports.instantiateAssertion = instantiateAssertion; module.exports.match = match; +module.exports.isCompletelyConcrete = isCompletelyConcrete;