
abcl-introspect.jad.lisp Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of abcl-contrib Show documentation
Show all versions of abcl-contrib Show documentation
Extra contributions for ABCL code not necessarily
licensed under the GPLv2 with classpath exception.
The newest version!
(defpackage :abcl-introspect/jvm/tools/jad
(:use #:cl)
(:nicknames #:jvm/tools/jad #:jad)
(:export
#:disassemble-class-bytes))
#|
|#
(in-package :abcl-introspect/jvm/tools/jad)
(defun introspect-jad-uri ()
(uiop:os-cond
((uiop/os:os-macosx-p)
"http://www.javadecompilers.com/jad/Jad%201.5.8g%20for%20Mac%20OS%20X%2010.4.6%20on%20Intel%20platform.zip")))
(defvar *working-jad-executable* nil)
(defun ensure-jad ()
(flet
((install-jad-returning-path (uri)
(abcl-build:xdg/install (pathname uri) :type :unzip))
(working-jad-p (jad-path)
(handler-case
(uiop:run-program jad-path)
(uiop/run-program:subprocess-error (e) nil))))
(if (null *working-jad-executable*)
(let ((jad-path (abcl-build:introspect-path-for "jad")))
(if (and jad-path
(working-jad-p jad-path))
(setf *working-jad-executable* jad-path)
(progn
(install-jad-returning-path (introspect-jad-uri))
(setf *working-jad-executable* jad-path))))
(unless (working-jad-p *working-jad-executable*)
(setf *working-jad-executable*
(install-jad-returning-path (introspect-jad-uri)))))))
(defun disassemble-class-bytes (object)
(ensure-jad)
(let ((sys::*disassembler*
(format nil "~s -a -p" *working-jad-executable*)))
(sys:disassemble-class-bytes object)))
© 2015 - 2025 Weber Informatics LLC | Privacy Policy