source: trunk/magnolia-eclipse/src/org/magnolialang/core.clj@ 806

Last change on this file since 806 was 806, checked in by biz002, 12 years ago

documentation and customizability for the console variant

File size: 5.1 KB
Line 
1(ns org.magnolialang.core
2 (:import
3 (org.magnolialang.testutil RascalEval TestUtil)
4 (org.magnolialang.magnolia MagnoliaFacts)))
5
6(defn hello-str []
7 (str "This is " org.magnolialang.magnolia.Magnolia/MAGNOLIA "."))
8
9(defn say-hello []
10 (println (hello-str)))
11
12(def Type_ModuleResource
13 org.magnolialang.resources.IResourceManager/Type_ModuleResource)
14
15(def Type_DefInfo MagnoliaFacts/Type_DefInfo)
16
17;; (.getId (magnolia-language)) => "Magnolia"
18;; (.getExtensions (magnolia-language)) => [".mg"]
19;; (.getModuleName (.getParser (magnolia-language))) => "org::magnolialang::syntax::Magnolia"
20(defn magnolia-language []
21 (org.magnolialang.magnolia.Magnolia.))
22
23(defn set-infra []
24 (org.magnolialang.infra.ConsoleInfra/setInfra))
25
26(def compiler-op
27 (doto (new java.util.HashMap)
28 (.put "MAGNOLIA_MODULE_PATH"
29 (java.util.ArrayList.
30 (map
31 #(-> % (java.io.File.) (.getAbsolutePath))
32 (let [ev (System/getenv "MAGNOLIA_MODULE_PATH")]
33 (if ev (seq (.split #":" ev)) [])))))
34 (.put "a" "A")
35 (.put "b" "B")))
36
37(defn init-compiler []
38 (TestUtil/setInstance compiler-op)
39 (let [state (TestUtil/getInstance)
40 lang (magnolia-language)]
41 (.addFile state
42 "org.magnolialang.magnolia.templates.MagicMain"
43 (java.io.File. "src/org/magnolialang/magnolia/templates/MagicMain.cxx"))
44 (org.magnolialang.resources.LanguageRegistry/registerLanguage lang)
45 (let [parser (.getParser lang)]
46 (.initialize parser))))
47
48(defn get-infra []
49 (org.magnolialang.infra.Infra/get))
50
51(defn get-parser [s]
52 (.getParser (get-infra) s))
53
54(defn get-magnolia-parser []
55 (get-parser (.getModuleName (.getParser (magnolia-language)))))
56
57(defn new-file-fact [l s]
58 (org.magnolialang.testutil.UnmanagedFileFact. l s))
59
60(defn new-mg-file-fact [s]
61 (new-file-fact (magnolia-language) (java.io.File. s)))
62
63;; for testing only, fixed module
64(defn add-mg-module-fact []
65 (let [state (TestUtil/getInstance)
66 lang (magnolia-language)]
67 (.addModuleResource state lang "basic.Basic" (java.io.File. "magnolia-tests/src/basic/Basic.mg"))))
68
69;; (find-mg-module-fact "basic.Basic")
70(defn find-mg-module-fact [s]
71 (.findModuleFact (TestUtil/getInstance) (magnolia-language) s))
72
73(defn get-mg-module-fact [s]
74 (.getModuleFact (TestUtil/getInstance) (magnolia-language) s))
75
76(defn get-name-ast [s]
77 (.getNameAST (magnolia-language) s))
78
79(defn get-parse-tree [s]
80 (let [state (TestUtil/getInstance)
81 lang (magnolia-language)
82 modNameAst (.getNameAST lang s)]
83 (.getParseTree state modNameAst)))
84
85(defn get-imploded-tree [s]
86 (let [state (TestUtil/getInstance)
87 lang (magnolia-language)
88 modNameAst (.getNameAST lang s)]
89 (.getImplodedTree state modNameAst)))
90
91(defn rstring [s]
92 (.string org.magnolialang.terms.TermFactory/vf s))
93
94(defn get-option-string-fact [s]
95 (let [state (TestUtil/getInstance)]
96 (.getOptionStringFact state (rstring s))))
97
98(defn get-ric []
99 (let [state (TestUtil/getInstance)
100 compiler (.getCompiler state)
101 evaluator (.getEvaluator compiler)
102 ri (RascalEval. evaluator)]
103 ri))
104
105(defn rtostring [r]
106 (RascalEval/resultToString r))
107
108;; Evaluate in compiler Evaluator.
109;; E.g. (reval "registerCompiler")
110(defn reval [s]
111 (.eval (get-ric) s))
112
113(defn reval-str [s]
114 (rtostring (reval s)))
115
116;; E.g. (reval-more "import util::tasks::Manager; getFact; 5;")
117(defn reval-more [s]
118 (.evalMore (get-ric) s))
119
120;; E.g. (rimport "util::tasks::Manager")
121(defn rimport [s]
122 (.doImport (get-ric) s))
123
124(defn rcall
125 ;; Clojure does not (yet) appear to support optional positional
126 ;; arguments with default values, so we do it like this
127 ([s as] (.call (get-ric) s as))
128 ([s] (rcall s [])))
129
130(defn rapply [s & as]
131 (rcall s as))
132
133(defn get-fact [type name]
134 (.getFact (TestUtil/getInstance)
135 type name))
136
137(defn get-def-info [s]
138 (get-fact Type_DefInfo
139 (get-name-ast s)))
140
141(defn get-flattened [s]
142 (get-fact MagnoliaFacts/Type_Flattened (get-name-ast s)))
143
144(defn get-contents [s]
145 (get-fact MagnoliaFacts/Type_Contents (get-name-ast s)))
146
147(defn get-type-checked [s]
148 (get-fact MagnoliaFacts/Type_TypeChecked (get-name-ast s)))
149
150;; E.g. (doseq [x (get-contents-seq "basic.Basic")]
151;; (prn (ctor-get-val (get-simplified x))))
152(defn get-simplified [ast]
153 (get-fact MagnoliaFacts/Type_Simplified ast))
154
155(defn yield-term
156 ([v a?] (org.magnolialang.terms.TermAdapter/yieldTerm v a?))
157 ([v] (yield-term v false)))
158
159(defn ctor-get-field [v s]
160 (.ctorGetField (TestUtil/getInstance) v s))
161
162(defn ctor-get-val [v]
163 (ctor-get-field v "val"))
164
165;; E.g. (doseq [x (get-contents-seq "basic.Basic")] (prn x))
166(defn get-contents-seq [s] ;; string -> seq
167 (iterator-seq (.iterator (ctor-get-val (get-contents s)))))
168
169;; E.g. (println (get-cxx-code "basic.Basic"))
170(defn get-cxx-code [s]
171 (.getCxxCode (TestUtil/getInstance) (magnolia-language) s))
172
173(defn view-flattened-module [s]
174 (println (.getValue
175 (rapply "prettyMagnolia"
176 (ctor-get-val (get-type-checked s))))))
177
178(defn get-ri []
179 (RascalEval.))
180
181(defn peval [s]
182 (.eval (get-ri) s))
183
184(defn peval-str [s]
185 (RascalEval/resultToString (peval s)))
186
187(defn pcall [s as]
188 (.call (get-ri) s as))
Note: See TracBrowser for help on using the repository browser.