@@ -5,6 +5,7 @@ import { dropDrills } from './desugar/dropdrill.js'
55import { settleLinks } from './desugar/links.js'
66import { RequestParsers } from './desugar/reqparse.js'
77import { insertSliceDeps } from './desugar/slicedeps.js'
8+ import { addUrlInputs } from './desugar/urlinputs.js'
89import { registerCalls } from './inference/calls.js'
910
1011export type DesugarPass = (
@@ -15,21 +16,33 @@ export type DesugarPass = (
1516 } ,
1617) => Program
1718
18- function listCalls ( ast : Program ) {
19+ function analyze2 ( ast : Program ) {
20+ const inputs = new Set < string > ( )
1921 const calls = new Set < string > ( )
2022 const modifiers = new Set < string > ( )
23+
2124 transform ( ast , {
25+ InputExpr ( node ) {
26+ inputs . add ( node . id . value )
27+ } ,
2228 ModuleExpr ( node ) {
2329 node . call && calls . add ( node . module . value )
2430 } ,
2531 ModifierExpr ( node ) {
2632 modifiers . add ( node . modifier . value )
2733 } ,
2834 } )
29- return { calls, modifiers }
35+
36+ return { inputs, calls, modifiers }
3037}
3138
32- const visitors = [ resolveContext , settleLinks , insertSliceDeps , dropDrills ]
39+ const visitors = [
40+ addUrlInputs ,
41+ resolveContext ,
42+ settleLinks ,
43+ insertSliceDeps ,
44+ dropDrills ,
45+ ]
3346
3447export function desugar ( ast : Program , macros : string [ ] = [ ] ) {
3548 const parsers = new RequestParsers ( )
@@ -41,6 +54,6 @@ export function desugar(ast: Program, macros: string[] = []) {
4154 // inference pass `registerCalls` is included in the desugar phase
4255 // it produces the list of called modules required for type inference
4356 program = registerCalls ( program , macros )
44- const { calls , modifiers } = listCalls ( program )
45- return { program, calls , modifiers }
57+ const info = analyze2 ( program )
58+ return { program, ... info }
4659}
0 commit comments