I just re-built using this commit ( http://git.savannah.gnu.org/cgit/emacs.git/commit/?h=emacs-25&id=711ca362e7f8ca7c4f664dc2fe60bc5fa4e4f4fe ). Now the earlier error went away, but I get Symbol’s value as variable is void: prev I guess the read call should be inside the let: (let ((str "TEST") (pos 0) (prev nil)) (read (lambda (&optional ch) (cond (ch (push ch prev)) (prev (pop prev)) ((< pos (length str)) (prog1 (aref str pos) (setq pos (1+ pos)))))))) Above returns "TEST".