Skip to content

Wilfred/peval

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Partial Evaluator for Emacs Lisp Build Status Coverage Status

Partially evaluate elisp forms. Handy for debugging, and inspired by a discussion on Reddit and this talk on Program Slicing.

Fundamental Limitations

  • Assumes lexical scope.

  • Assumes that if a macro call site does not contain a symbol, than that symbol is not modified (TODO: example).

  • (No plan to implement) recursive functions.

Current limitations

  • Some special forms are not implemented.

  • Loops are not implemented and their effects are ignored.

  • Does not macro expand forms to see if we can simplify them entirely.

  • Does not simplify known s-expressions in macro arguments that are known to be evaluated.

  • Does not properly print simplified values that are now lists.

  • Mutation (push 1 foo) is not handled correctly.

  • Mutation does not currently cause preservation of let forms. E.g. (let ((x 1)) (fn1 x) can be (fn1 1) (numbers are value types), but (let ((x '(1))) (fn1 x) (fn2 x)) cannot be (progn (fn1 '(1)) (fn2 '(1))).

  • (Fundamental?) Does not handle aliasing of values.

Releases

No releases published

Packages

No packages published