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))
|
---|