Refactor MCP tree server: dispatch table, caching, validation, subprocess cleanup
Break up the 1735-line handle_tool match into 45 individual handler functions with hashtable-based dispatch. Add mtime-based file parse caching (AST + CST), consolidated run_command helper replacing 9 bare open_process_in patterns, require_file/require_dir input validation, and pagination (limit/offset) for sx_find_across, sx_comp_list, sx_comp_usage. Also includes pending VM changes: rest-arity support, hyperscript parser, compiler/transpiler updates. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -640,29 +640,38 @@
|
||||
(fn-scope (make-scope scope))
|
||||
(fn-em (make-emitter)))
|
||||
(dict-set! fn-scope "is-function" true)
|
||||
(for-each
|
||||
(fn
|
||||
(p)
|
||||
(let
|
||||
((name (cond (= (type-of p) "symbol") (symbol-name p) (and (list? p) (not (empty? p)) (= (type-of (first p)) "symbol")) (symbol-name (first p)) :else p)))
|
||||
(when
|
||||
(and (not (= name "&key")) (not (= name "&rest")))
|
||||
(scope-define-local fn-scope name))))
|
||||
params)
|
||||
(compile-begin fn-em body fn-scope true)
|
||||
(emit-op fn-em 50)
|
||||
(let
|
||||
((upvals (get fn-scope "upvalues"))
|
||||
(code {:upvalue-count (len upvals) :arity (len (get fn-scope "locals")) :constants (get (get fn-em "pool") "entries") :bytecode (get fn-em "bytecode")})
|
||||
(code-idx (pool-add (get em "pool") code)))
|
||||
(emit-op em 51)
|
||||
(emit-u16 em code-idx)
|
||||
((rest-pos -1) (rest-name nil))
|
||||
(for-each
|
||||
(fn
|
||||
(uv)
|
||||
(emit-byte em (if (get uv "is-local") 1 0))
|
||||
(emit-byte em (get uv "index")))
|
||||
upvals)))))
|
||||
(p)
|
||||
(let
|
||||
((name (cond (= (type-of p) "symbol") (symbol-name p) (and (list? p) (not (empty? p)) (= (type-of (first p)) "symbol")) (symbol-name (first p)) :else p)))
|
||||
(cond
|
||||
(= name "&rest")
|
||||
(set! rest-pos (len (get fn-scope "locals")))
|
||||
(= name "&key")
|
||||
nil
|
||||
:else (do
|
||||
(when
|
||||
(and (> rest-pos -1) (nil? rest-name))
|
||||
(set! rest-name name))
|
||||
(scope-define-local fn-scope name)))))
|
||||
params)
|
||||
(compile-begin fn-em body fn-scope true)
|
||||
(emit-op fn-em 50)
|
||||
(let
|
||||
((upvals (get fn-scope "upvalues"))
|
||||
(code (if (> rest-pos -1) {:upvalue-count (len upvals) :arity (len (get fn-scope "locals")) :constants (get (get fn-em "pool") "entries") :rest-arity rest-pos :bytecode (get fn-em "bytecode")} {:upvalue-count (len upvals) :arity (len (get fn-scope "locals")) :constants (get (get fn-em "pool") "entries") :bytecode (get fn-em "bytecode")}))
|
||||
(code-idx (pool-add (get em "pool") code)))
|
||||
(emit-op em 51)
|
||||
(emit-u16 em code-idx)
|
||||
(for-each
|
||||
(fn
|
||||
(uv)
|
||||
(emit-byte em (if (get uv "is-local") 1 0))
|
||||
(emit-byte em (get uv "index")))
|
||||
upvals))))))
|
||||
(define
|
||||
compile-define
|
||||
(fn
|
||||
|
||||
Reference in New Issue
Block a user