From def5b23c6aa5146d80f4182f45e2a757fd0a5178 Mon Sep 17 00:00:00 2001 From: David Vazquez Date: Wed, 16 Jan 2013 02:59:51 +0000 Subject: [PATCH] Tool function: DISASSEMBLE --- ecmalisp.lisp | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/ecmalisp.lisp b/ecmalisp.lisp index 3eec9dd..2da30af 100644 --- a/ecmalisp.lisp +++ b/ecmalisp.lisp @@ -416,7 +416,20 @@ (car alist)) (defun string= (s1 s2) - (equal s1 s2))) + (equal s1 s2)) + + (defun fdefinition (x) + (cond + ((functionp x) + x) + ((symbolp x) + (symbol-function x)) + (t + (error "Invalid function")))) + + (defun disassemble (function) + (write-line (lambda-code (fdefinition function))) + nil)) ;;; The compiler offers some primitives and special forms which are @@ -1200,9 +1213,10 @@ ;;; Primitives (defmacro define-builtin (name args &body body) - `(define-compilation ,name ,args - (let ,(mapcar (lambda (arg) `(,arg (ls-compile ,arg env))) args) - ,@body))) + `(progn + (define-compilation ,name ,args + (let ,(mapcar (lambda (arg) `(,arg (ls-compile ,arg env))) args) + ,@body)))) ;;; DECLS is a list of (JSVARNAME TYPE LISPFORM) declarations. (defmacro type-check (decls &body body) @@ -1312,6 +1326,9 @@ (define-builtin symbol-plist (x) (concat "((" x ").plist || " (ls-compile nil) ")")) +(define-builtin lambda-code (x) + (concat "(" x ").toString()")) + (define-builtin eq (x y) (js!bool (concat "(" x " === " y ")"))) (define-builtin equal (x y) (js!bool (concat "(" x " == " y ")"))) -- 1.7.10.4