diff --git a/src/syndicate/patterns.nim b/src/syndicate/patterns.nim index 3fad5bf..be7348a 100644 --- a/src/syndicate/patterns.nim +++ b/src/syndicate/patterns.nim @@ -364,16 +364,10 @@ func analyse*(p: Pattern): Analysis = var path: Path walk(result, path, p) -func projectPath*(v: Value; path: Path): Option[Value] = - result = some(v) - for index in path: - result = preserves.step(result.get, index) - if result.isNone: break - func projectPaths*(v: Value; paths: Paths): Option[Captures] = var res = newSeq[Value](paths.len) for i, path in paths: - var vv = projectPath(v, path) + var vv = step(v, path) if vv.isSome: res[i] = get(vv) else: return some res @@ -382,22 +376,22 @@ func matches*(pat: Pattern; pr: Value): bool = let analysis = analyse(pat) assert analysis.constPaths.len == analysis.constValues.len for i, path in analysis.constPaths: - let v = projectPath(pr, path) + let v = step(pr, path) if v.isNone : return false if analysis.constValues[i] != v.get: return false for path in analysis.capturePaths: - if isNone projectPath(pr, path): return false + if isNone step(pr, path): return false true func capture*(pat: Pattern; pr: Value): seq[Value] = let analysis = analyse(pat) assert analysis.constPaths.len == analysis.constValues.len for i, path in analysis.constPaths: - let v = projectPath(pr, path) + let v = step(pr, path) if v.isNone : return @[] if analysis.constValues[i] != v.get: return @[] for path in analysis.capturePaths: - let v = projectPath(pr, path) + let v = step(pr, path) if v.isNone: return @[] result.add(get v) diff --git a/src/syndicate/skeletons.nim b/src/syndicate/skeletons.nim index 2108a0f..498f505 100644 --- a/src/syndicate/skeletons.nim +++ b/src/syndicate/skeletons.nim @@ -215,7 +215,7 @@ proc extendWalk(node: Node; popCount: Natural; stepIndex: Value; pat: Pattern; p table[class] = result.nextNode new result.nextNode.continuation for a in node.continuation.cache: - var v = projectPath(a, path) + var v = step(a, path) if v.isSome and class == classOf(get v): result.nextNode.continuation.cache.incl a result.popCount = 0 diff --git a/syndicate.nimble b/syndicate.nimble index d666bac..97a20eb 100644 --- a/syndicate.nimble +++ b/syndicate.nimble @@ -9,4 +9,4 @@ srcDir = "src" # Dependencies -requires "https://github.com/khchen/hashlib.git#84e0247555e4488594975900401baaf5bbbfb531", "nim >= 2.0.0", "https://git.syndicate-lang.org/ehmry/preserves-nim.git >= 20231019" +requires "https://github.com/khchen/hashlib.git#84e0247555e4488594975900401baaf5bbbfb531", "nim >= 2.0.0", "https://git.syndicate-lang.org/ehmry/preserves-nim.git >= 20231028"