Fix some of the massive speed drop from destructuring lambda by checking to see if it actually needs to destrucure first. Still slower than it was, but not 10x anymore. Maybe 1.5-2x?
This commit is contained in:
@@ -121,11 +121,15 @@
|
||||
))) (vau de (vs b) (vapply let (array (destructure_helper vs 0 (array)) b) de)))
|
||||
|
||||
; and a destructuring-capable lambda!
|
||||
lambda (vau se (p b) (let (
|
||||
only_symbols (rec-lambda recurse (a i) (cond (= i (len a)) true
|
||||
(symbol? (idx a i)) (recurse a (+ i 1))
|
||||
true false))
|
||||
lambda (vau se (p b) (if (only_symbols p 0) (vapply lambda (array p b) se)
|
||||
(let (
|
||||
sym_params (map (lambda (param) (if (symbol? param) param
|
||||
(str-to-symbol (str param)))) p)
|
||||
body (array let (flat_map_i (lambda (i x) (array (idx p i) x)) sym_params) b)
|
||||
) (wrap (eval (array vau (quote _) sym_params body) se))))
|
||||
) (wrap (eval (array vau (quote _) sym_params body) se)))))
|
||||
|
||||
; and rec-lambda - yes it's the same definition again
|
||||
rec-lambda (vau se (n p b) (eval (array Y (array lambda (array n) (array lambda p b))) se))
|
||||
|
||||
Reference in New Issue
Block a user