diff options
author | Benjamin Teuber <bsteuber@gmail.com> | 2010-04-14 19:07:09 +0200 |
---|---|---|
committer | Stuart Halloway <stu@thinkrelevance.com> | 2010-10-12 19:46:17 -0400 |
commit | 6d300332f810a68869c11ddfcc55f4439b70fdb3 (patch) | |
tree | 91a7432e9d1ab41cb9a3a478301943f589fe1596 | |
parent | 83fc4fe476b75553a4c2db8bd4f7fdfc02379dce (diff) |
add docstring support to def
code is a bit ugly, but touches as few lines as possible to not introduce anything nasty
Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 9 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RT.java | 1 |
2 files changed, 9 insertions, 1 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java index 1eaa9e81..24cb9359 100644 --- a/src/jvm/clojure/lang/Compiler.java +++ b/src/jvm/clojure/lang/Compiler.java @@ -414,7 +414,12 @@ static class DefExpr implements Expr{ static class Parser implements IParser{ public Expr parse(C context, Object form) throws Exception{ - //(def x) or (def x initexpr) + //(def x) or (def x initexpr) or (def x "docstring" initexpr) + String docstring = null; + if(RT.count(form) == 4 && (RT.third(form) instanceof String)) { + docstring = (String) RT.third(form); + form = RT.list(RT.first(form), RT.second(form), RT.fourth(form)); + } if(RT.count(form) > 3) throw new Exception("Too many arguments to def"); else if(RT.count(form) < 2) @@ -446,6 +451,8 @@ static class DefExpr implements Expr{ Object source_path = SOURCE_PATH.get(); source_path = source_path == null ? "NO_SOURCE_FILE" : source_path; mm = (IPersistentMap) RT.assoc(mm, RT.LINE_KEY, LINE.get()).assoc(RT.FILE_KEY, source_path); + if (docstring != null) + mm = (IPersistentMap) RT.assoc(mm, RT.DOC_KEY, docstring); Expr meta = analyze(context == C.EVAL ? context : C.EXPRESSION, mm); return new DefExpr((String) SOURCE.deref(), (Integer) LINE.deref(), v, analyze(context == C.EVAL ? context : C.EXPRESSION, RT.third(form), v.sym.name), diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java index a7c494cb..78ab5767 100644 --- a/src/jvm/clojure/lang/RT.java +++ b/src/jvm/clojure/lang/RT.java @@ -185,6 +185,7 @@ final static public Var MATH_CONTEXT = Var.intern(CLOJURE_NS, Symbol.create("*ma static Keyword LINE_KEY = Keyword.intern(null, "line"); static Keyword FILE_KEY = Keyword.intern(null, "file"); static Keyword DECLARED_KEY = Keyword.intern(null, "declared"); +static Keyword DOC_KEY = Keyword.intern(null, "doc"); final static public Var USE_CONTEXT_CLASSLOADER = Var.intern(CLOJURE_NS, Symbol.create("*use-context-classloader*"), T); //final static public Var CURRENT_MODULE = Var.intern(Symbol.create("clojure.core", "current-module"), |