summaryrefslogtreecommitdiff
path: root/src/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lisp')
-rw-r--r--src/lisp/clojure.lisp26
-rw-r--r--src/lisp/test.lisp15
2 files changed, 36 insertions, 5 deletions
diff --git a/src/lisp/clojure.lisp b/src/lisp/clojure.lisp
index b7a31cf6..e251c9ce 100644
--- a/src/lisp/clojure.lisp
+++ b/src/lisp/clojure.lisp
@@ -157,7 +157,7 @@
(defun accessor-member-name (symbol)
(format nil "ACC__~A__~A"
(munge-name (package-name (symbol-package symbol)))
- (munge-name (symbol-name symbol))))
+ (munge-name (subseq (symbol-name symbol) 1))))
(defun symbol-member-name (symbol)
(format nil "SYM__~A"
@@ -274,7 +274,7 @@
(format target "static Accessor ~A = Namespace.internAccessor(~S,~S);~%"
(accessor-member-name accessor)
(munge-name (package-name (symbol-package accessor)))
- (munge-name (symbol-name accessor))))
+ (munge-name (subseq (symbol-name accessor) 1))))
(format target "~Atry{~%" (begin-static-block class-name))
;(format target "~%static public void __load() ~A{~%" (exception-declaration-string lang))
(dolist (var *defns*)
@@ -403,6 +403,7 @@
(quote (analyze-quote context form))
(|defn*| (analyze-defn* context form))
(|def| (analyze-def context form))
+ (|defmain| (analyze-defmain context form))
(|block| (analyze-block context form))
(|fn*| (analyze-fn* context form))
(|if| (analyze-if context form))
@@ -432,6 +433,7 @@
((typep expr 'hash-table) ;objs
(ccase (@ :type expr)
(:defn* (emit-defn* context expr))
+ (:main (emit-main context expr))
(:fn* (emit-fn* context expr))
(:binding (emit-binding context expr))
(:accessor (emit-accessor context expr))
@@ -1108,6 +1110,26 @@
(emit :statement finally-clause)
(format t "}~%")))))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; defmain ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defun analyze-defmain (context form)
+ (ccase context
+ (:top
+ (register-var-reference (second form))
+ (newobj :type :main
+ :fname (second form)))))
+
+(defun emit-main (context expr)
+ (ccase context
+ (:top
+ (format t "static public void ~A(String[] args){~%try{~%~A.fn.invoke(ThreadLocalData.get(),args);~%}~%catch(Exception ex){}~%}~%"
+ (main-string) (var-member-name (@ :fname expr))))))
+
+(defun main-string ()
+ (ccase *host*
+ (:jvm "main")
+ (:cli "Main")))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; defn ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun analyze-defn* (context form)
diff --git a/src/lisp/test.lisp b/src/lisp/test.lisp
index 171cb1aa..b5a82a98 100644
--- a/src/lisp/test.lisp
+++ b/src/lisp/test.lisp
@@ -1,7 +1,7 @@
(in-module "clojure")
-#+:JVM(import "java.lang" '(String Class Math))
-#+:CLI(import "System, mscorlib" '(String Type Math))
+#+:JVM(import "java.lang" '(String Class Math System))
+#+:CLI(import "System, mscorlib" '(String Type Math Console))
(defn f0 ())
@@ -135,4 +135,13 @@
(if (Type.GetType "Object")
(String.Intern "fred")
Math.PI)
- (set Math.PI 3.14)) \ No newline at end of file
+ (set Math.PI 3.14))
+
+(defn prn (x)
+ #+:JVM (.println System.out x)
+ #+:CLI (Console.WriteLine x))
+
+(defn fmain (args)
+ (prn "Hello World!"))
+
+(defmain fmain) \ No newline at end of file