-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsum_map.ts
More file actions
25 lines (24 loc) · 801 Bytes
/
Copy pathsum_map.ts
File metadata and controls
25 lines (24 loc) · 801 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// Port of expr-lang/expr optimizer/sum_map.go
import { Node, BuiltinNode } from "../ast/node.js";
import { Visitor, NodeRef } from "../ast/visitor.js";
import { patchCopyType } from "./optimizer.js";
export class sumMap implements Visitor {
Visit(node: NodeRef): void {
const sumBuiltin = node.node;
if (
sumBuiltin instanceof BuiltinNode &&
sumBuiltin.Name === "sum" &&
sumBuiltin.Arguments.length === 1
) {
const mapBuiltin = sumBuiltin.Arguments[0]!;
if (
mapBuiltin instanceof BuiltinNode &&
mapBuiltin.Name === "map" &&
mapBuiltin.Arguments.length === 2
) {
const args: Node[] = [mapBuiltin.Arguments[0]!, mapBuiltin.Arguments[1]!];
patchCopyType(node, new BuiltinNode("sum", args));
}
}
}
}