Changeset 827
- Timestamp:
- Aug 6, 2012 4:50:46 PM (12 years ago)
- Location:
- trunk/magnolia-eclipse
- Files:
-
- 2 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/magnolia-eclipse/src/org/magnolialang/pgf/FmtUtil.rsc
r792 r827 88 88 } 89 89 90 /* 90 91 public void main(list[str] args) { 91 92 println(cat("forever {", indent(2), br, "(void)0;", dedent, br, "}")); 92 93 } 94 */ -
trunk/magnolia-eclipse/src/org/magnolialang/pgf/Groupings.rsc
r824 r827 21 21 } 22 22 23 tuple[value, Tseq] nil_accept_f(value v, Tseq s, str name) { 24 return <v, NilTseq()>; 25 } 26 23 27 Tseq nil_end_f(value v) { 24 28 return NilTseq(); … … 26 30 27 31 public Grouping newGrouping(str name) { 28 return Grouping(name, nil_begin_f, nil_put_f, nil_ put_f,32 return Grouping(name, nil_begin_f, nil_put_f, nil_accept_f, 29 33 nil_end_f, grpEofDefault); 30 34 } … … 38 42 } 39 43 44 tuple[value, Tseq] tseq_accept_f(value v, Tseq s, str name) { 45 return <tseq(v, s), NilTseq()>; 46 } 47 40 48 Grouping makeGroup() { 41 49 Grouping g = newGrouping("group"); 42 50 g.begin = tseq_begin_f; 43 51 g.put = tseq_put_f; 44 g.accept = tseq_ put_f;52 g.accept = tseq_accept_f; 45 53 // cannot use 'group' directly as it's an overload; 46 54 // must resolve the overload here -
trunk/magnolia-eclipse/src/org/magnolialang/pgf/Token.rsc
r824 r827 68 68 69 69 Token eofTok = Eof(); 70 Tseq nilSeq = NilTseq(); 70 71 public Tseq nilTseq = NilTseq(); 71 72 72 73 public Tseq emptyTseq() { 73 return nil Seq;74 return nilTseq; 74 75 } 75 76 … … 129 130 public default tuple[Token, Tseq] tseqGet(x) { 130 131 switch (x) { 131 case Token t: return <t, nil Seq>;132 case str s: return <Text(s), nil Seq>;133 case NilTseq(): return <eofTok, nil Seq>;132 case Token t: return <t, nilTseq>; 133 case str s: return <Text(s), nilTseq>; 134 case NilTseq(): return <eofTok, nilTseq>; 134 135 case ListTseq(lst): return tseqGetList(lst); 135 136 case list[value] lst: return tseqGetList(lst); 136 137 case LazyTseq(_, _): return tseqGetLazy(x); 137 case false: return <eofTok, nil Seq>;138 case false: return <eofTok, nilTseq>; 138 139 default: 139 140 throw "attempt to tseqGet from unsupported value <x>"; … … 152 153 i += 1; 153 154 } 154 return <eofTok, nil Seq>;155 return <eofTok, nilTseq>; 155 156 } 156 157 … … 181 182 // deprecated (use emptyTseq) 182 183 public Tseq newTokenStream() { 183 return nil Seq;184 return nilTseq; 184 185 } 185 186 -
trunk/magnolia-eclipse/src/org/magnolialang/pgf/engines/FmtEngine.rsc
r824 r827 96 96 value () begin, 97 97 tuple[value, Tseq] (value, Token) put, 98 tuple[value, Tseq] (value, T oken) accept,98 tuple[value, Tseq] (value, Tseq, str) accept, 99 99 Tseq (value) end, 100 100 void (value, str) eof … … 154 154 g_st = tg.st; 155 155 <n_g_st, r> = g_type.accept(g_st, s, name); 156 n_grp = GrpSt( tg, n_g_st);156 n_grp = GrpSt(g_type, n_g_st); 157 157 n_st = FmtSt(st.cw, st.w, st.outDoc, st.inDoc, 158 158 st.k, st.lvStack, st.i, st.bt, … … 306 306 public FmtSt newFmtSt(int w) { 307 307 return newFmtSt(w, emptyTseq()); 308 } 309 310 public FmtSt newFmtSt() { 311 return newFmtSt(80); 308 312 } 309 313 … … 442 446 443 447 // Adds a token to input. 444 public FmtSt put(FmtSt st, Token t) {448 public FmtSt write(FmtSt st, Token t) { 445 449 return write(st, tseq(t)); 446 450 } … … 486 490 } 487 491 492 // st: pretty printing state 493 public str pretty(FmtSt st) { 494 st = flush(drive(st)); 495 return docToString(st.outDoc); 496 } 497 488 498 // w: output line width 489 499 // ts: a (complete) input document 490 500 public str pretty(int w, Tseq ts) { 491 501 FmtSt st = newFmtSt(w, ts); 492 st = flush(drive(st)); 493 return docToString(st.outDoc); 502 return pretty(st); 494 503 } 495 504 … … 526 535 public FmtSt prettyPrintFlush(FmtSt st) { 527 536 return printBuffered(flush(prettyPrint(st))); 537 } 538 539 public FmtSt prettyPrintFlushLn(FmtSt st) { 540 st = prettyPrintFlush(st); 541 println(""); 542 return st; 528 543 } 529 544 -
trunk/magnolia-eclipse/src/org/magnolialang/pgf/tests/TestFmtEngine.rsc
r824 r827 1 1 // run with rascal-src 2 3 /* 4 (rimport "org::magnolialang::pgf::tests::TestFmtEngine") 5 (rcall "runTestFmtEngine") 6 */ 2 7 module org::magnolialang::pgf::tests::TestFmtEngine 3 8 -
trunk/magnolia-eclipse/src/org/magnolialang/testutil/RascalEval.java
r808 r827 33 33 import org.rascalmpl.values.uptr.Factory; 34 34 import org.rascalmpl.values.uptr.TreeAdapter; 35 36 /* 37 * Calling toString() on a VoidResult gives a NullPointerException, 38 * which can cause trouble here and there. 39 * This is a more polite implementation. 40 * 41 * public class VoidResult extends Result<VoidResult.Void> { 42 * abstract class Void implements IValue {} 43 * 44 * public VoidResult(Type type, IEvaluatorContext ctx) { 45 * super(type, null, ctx); 46 * } 47 * 48 * public String toString() { 49 * return getType().toString(); 50 * } 51 * 52 * public String toString(int length) { 53 * return toString(); 54 * } 55 * } 56 */ 35 57 36 58 public class RascalEval { … … 83 105 public IValue call(String name, Collection<IValue> args) { 84 106 //System.err.println("call " + name + " with " + args); 85 return evaluator.call(name, args.toArray(new IValue[] {})); 107 IValue[] arr = new IValue[] {}; 108 if(args != null) 109 arr = args.toArray(arr); 110 return evaluator.call(name, arr); 86 111 } 87 112 … … 99 124 100 125 public static String resultToString(Result<IValue> value) { 101 if(value.getValue() == null) { 126 IValue v = value.getValue(); 127 Type type = value.getType(); 128 129 if(v == null || type == null) { 102 130 return "ok"; 103 131 } 104 132 105 IValue v = value.getValue(); 106 Type type = value.getType(); 133 // Calling Result<IValue>.toString should be safe if both getValue 134 // and getType yield non-null. 135 String s = value.toString(LINE_LIMIT); 107 136 108 137 if(type.isAbstractDataType() && type.isSubtypeOf(Factory.Tree)) { 109 return "`" + TreeAdapter.yield((IConstructor) v) + "`\n" + value.toString(LINE_LIMIT);138 return "`" + TreeAdapter.yield((IConstructor) v) + "`\n" + s; 110 139 } 111 140 112 return ((v != null) ? value.toString(LINE_LIMIT) : null);141 return s; 113 142 } 114 143 -
trunk/magnolia-eclipse/src/org/magnolialang/testutil/TestUtil.rsc
r822 r827 1 1 module org::magnolialang::testutil::TestUtil 2 3 import org::magnolialang::pgf::PrettyParseTree;4 import org::magnolialang::pgf::Token;5 2 6 3 import org::magnolialang::magnolia::MagnoliaFacts; … … 11 8 import List; 12 9 13 /** Dumps test data (token streams of Magnolia) as Rascal data 14 structures. */ 15 public Tseq mgModuleToTokens(str modName) { 16 name = strToName(modName); 17 tr = startTransaction(); 18 //println(getFact(tr, #DefInfo, name)); 19 pt = getFact(tr, #ParseTree, name).val; 20 //println(pt); 21 ts = prettyParseTree(emptyTseq(), pt); 22 //println(ts); 23 endTransaction(tr); 24 return ts; 10 @doc{Call Java toString to turn a Rascal value into a string.} 11 @javaClass{org.magnolialang.testutil.RascalExt} 12 public java str javaToString(value v); 13 14 @doc{Converts tuple field values to a list.} 15 @javaClass{org.magnolialang.testutil.RascalExt} 16 public java list[value] tupleToList(value tp); 17 18 public void makeVoidResult() { 25 19 } 20 21 public int makeIntResult() { 22 return 1; 23 } 24 25 public int incIntResult(int x) { 26 return x + 1; 27 } -
trunk/magnolia-eclipse/src/org/magnolialang/testutil/core.clj
r825 r827 77 77 (def rsc-evaluator (get-ric))) 78 78 79 (defn r tostring [r]79 (defn result-to-string [r] 80 80 (RascalEval/resultToString r)) 81 81 … … 83 83 ;; E.g. (reval "registerCompiler") 84 84 (defn reval [s] 85 (.eval rsc-evaluator s)) 86 87 ;; Behaves better upon VoidResult. 85 (.getValue (.eval rsc-evaluator s))) 86 88 87 (defn reval-str [s] 89 (r tostring (revals)))88 (result-to-string (.eval rsc-evaluator s))) 90 89 91 90 ;; E.g. (reval-more "import org::magnolialang::tasks::Manager; getFact; 5;") 92 91 (defn reval-more [s] 93 (. evalMore rsc-evaluator s))92 (.getValue (.evalMore rsc-evaluator s))) 94 93 95 94 (defn reval-more-str [s] 96 (r tostring (.evalMore rsc-evaluator s)))95 (result-to-string (.evalMore rsc-evaluator s))) 97 96 98 97 ;; E.g. (rimport "org::magnolialang::tasks::Manager") … … 107 106 108 107 ;; This produces VoidResult, which 109 ;; org.rascalmpl.interpreter.result.Result.toString dislikes. 110 ;; E.g. (rtostring (make-rvoid)) 111 (defn make-rvoid [] 112 (reval-more ";")) 108 ;; org.rascalmpl.interpreter.result.Result.toString dislikes 109 ;; (unless using a patched version of VoidResult). 110 ;; E.g. (result-to-string (make-rvoid)) 111 (defn make-void-result [] 112 (.evalMore rsc-evaluator ";")) 113 113 114 114 ;; For reloading Rascal modules individually. … … 134 134 (.initialize parser)) 135 135 (def rsc-evaluator (get-ric)) 136 (rimport "org::magnolialang::testutil::TestUtil")) 136 (rimport "org::magnolialang::testutil::TestUtil") 137 ) 137 138 138 139 (defn get-parser [s] … … 172 173 173 174 (defn get-imploded-tree [s] 174 (let [state tu-state 175 lang mg-lang 176 modNameAst (.getNameAST lang s)] 177 (.getImplodedTree state modNameAst))) 175 (.getImplodedTree tu-state (get-name-ast s))) 178 176 179 177 (defn rstring [s] … … 183 181 (.bool org.magnolialang.terms.TermFactory/vf b)) 184 182 183 (defn rinteger [i] 184 ;; has other overloads 185 (.integer org.magnolialang.terms.TermFactory/vf i)) 186 187 (defn rprint [v annos?] 188 (println (.getValue (rcall "prettyRascalValue" v (rbool annos?))))) 189 190 (defn rtostring [v] 191 (.getValue (rcall "javaToString" v))) 192 185 193 (defn get-option-string-fact [s] 186 (let [state tu-state] 187 (.getOptionStringFact state (rstring s)))) 188 189 (defn mg-module-to-tokens [s] 190 (rcall "mgModuleToTokens" (rstring s))) 194 (.getOptionStringFact tu-state (rstring s))) 191 195 192 196 (defn get-fact [type name] 193 (.getFact tu-state 194 type name)) 195 196 (defn get-def-info [s] 197 (get-fact MagnoliaFacts/Type_DefInfo 198 (get-name-ast s))) 199 200 (defn get-flattened [s] 197 (.getFact tu-state type name)) 198 199 (defn get-fact-imploded-tree [s] 200 (get-fact MagnoliaFacts/Type_ImplodedTree (get-name-ast s))) 201 202 (defn get-fact-flattened [s] 201 203 (get-fact MagnoliaFacts/Type_Flattened (get-name-ast s))) 202 204 203 (defn get-contents [s] 205 (defn get-fact-type-checked [s] 206 (get-fact MagnoliaFacts/Type_TypeChecked (get-name-ast s))) 207 208 (defn get-fact-def-info [s] 209 (get-fact MagnoliaFacts/Type_DefInfo (get-name-ast s))) 210 211 (defn get-fact-contents [s] 204 212 (get-fact MagnoliaFacts/Type_Contents (get-name-ast s))) 205 213 206 (defn get-type-checked [s]207 (get-fact MagnoliaFacts/Type_TypeChecked (get-name-ast s)))208 209 214 ;; E.g. (doseq [x (get-contents-seq "basic.Basic")] 210 ;; (prn (ctor-get-val (get- simplified x))))211 (defn get- simplified [ast]215 ;; (prn (ctor-get-val (get-fact-simplified x)))) 216 (defn get-fact-simplified [ast] 212 217 (get-fact MagnoliaFacts/Type_Simplified ast)) 213 218 … … 225 230 ;; E.g. (doseq [x (get-contents-seq "basic.Basic")] (prn x)) 226 231 (defn get-contents-seq [s] ;; string -> seq 227 (iterator-seq (.iterator (ctor-get-val (get- contents s)))))232 (iterator-seq (.iterator (ctor-get-val (get-fact-contents s))))) 228 233 229 234 ;; E.g. (println (get-cxx-code "basic.Basic")) … … 235 240 (println (.getValue 236 241 (rcall "prettyMagnolia" 237 (ctor-get-val (get- type-checked s))))))242 (ctor-get-val (get-fact-type-checked s)))))) 238 243 239 244 (defn run-pretty-magnolia [s rich?] -
trunk/magnolia-eclipse/test/org/magnolialang/test/core.clj
r824 r827 55 55 (rimport "org::magnolialang::pgf::tests::TestToken") 56 56 (reval-str "runTestToken()")) 57 58 (deftest test-rascal-pp 59 (rimport "org::magnolialang::testutil::RascalPp") 60 (rcall "runTestRascalPp") 61 (rprint (get-fact-imploded-tree "basic.Basic") false) 62 (rprint (get-fact-imploded-tree "basic.Basic") true)) 63
Note:
See TracChangeset
for help on using the changeset viewer.