mirah 0.0.4-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. data/History.txt +15 -0
  2. data/README.txt +51 -0
  3. data/Rakefile +86 -0
  4. data/bin/duby +10 -0
  5. data/bin/dubyc +10 -0
  6. data/bin/dubyp +10 -0
  7. data/bin/jrubyp +36 -0
  8. data/bin/mirah +9 -0
  9. data/bin/mirah.cmd +1 -0
  10. data/bin/mirahc +9 -0
  11. data/bin/mirahc.cmd +1 -0
  12. data/bin/mirahp +9 -0
  13. data/bin/mirahp.cmd +1 -0
  14. data/examples/ant/example-build.xml +7 -0
  15. data/examples/appengine/Rakefile +19 -0
  16. data/examples/appengine/Readme +29 -0
  17. data/examples/appengine/src/org/mirah/MirahApp.mirah +57 -0
  18. data/examples/appengine/src/org/mirah/list.dhtml +15 -0
  19. data/examples/appengine/war/WEB-INF/lib/dubydatastore.jar +0 -0
  20. data/examples/bintrees.mirah +66 -0
  21. data/examples/construction.mirah +8 -0
  22. data/examples/dynamic.mirah +17 -0
  23. data/examples/edb.mirah +3 -0
  24. data/examples/fib.mirah +16 -0
  25. data/examples/fields.mirah +22 -0
  26. data/examples/fractal.mirah +55 -0
  27. data/examples/java_thing.mirah +13 -0
  28. data/examples/plugins/appengine/Rakefile +55 -0
  29. data/examples/plugins/appengine/lib/com/google/appengine/ext/duby/db/datastore.rb +375 -0
  30. data/examples/plugins/appengine/src/com/google/appengine/ext/duby/db/Model.duby +336 -0
  31. data/examples/plugins/appengine/test/com/google/appengine/ext/duby/db/ModelTest.duby +113 -0
  32. data/examples/simple_class.mirah +12 -0
  33. data/examples/sort_closure.mirah +7 -0
  34. data/examples/swing.mirah +20 -0
  35. data/examples/tak.mirah +15 -0
  36. data/examples/test.edb +9 -0
  37. data/examples/wiki/Rakefile +18 -0
  38. data/examples/wiki/src/org/mirah/wiki/MirahWiki.duby +324 -0
  39. data/examples/wiki/src/org/mirah/wiki/edit.eduby.html +42 -0
  40. data/examples/wiki/src/org/mirah/wiki/error.eduby.html +2 -0
  41. data/examples/wiki/src/org/mirah/wiki/layout.eduby.html +69 -0
  42. data/examples/wiki/src/org/mirah/wiki/parser.eduby.html +7 -0
  43. data/examples/wiki/src/org/mirah/wiki/view.eduby.html +15 -0
  44. data/examples/wiki/war/WEB-INF/classes/test/HeredocContext.class +0 -0
  45. data/examples/wiki/war/WEB-INF/classes/test/MirahParser.class +0 -0
  46. data/examples/wiki/war/WEB-INF/lib/appengine-api.jar +0 -0
  47. data/examples/wiki/war/WEB-INF/lib/dubydatastore.jar +0 -0
  48. data/examples/wiki/war/WEB-INF/lib/jmeta-runtime.jar +0 -0
  49. data/examples/wiki/war/WEB-INF/lib/pegdown-stubs.jar +0 -0
  50. data/examples/wiki/war/WEB-INF/pegdown.jar +0 -0
  51. data/examples/wiki/war/app.yaml +21 -0
  52. data/examples/wiki/war/public/favicon.ico +0 -0
  53. data/examples/wiki/war/public/images/appengine_duby.png +0 -0
  54. data/examples/wiki/war/public/images/back.gif +0 -0
  55. data/examples/wiki/war/public/images/dir.gif +0 -0
  56. data/examples/wiki/war/public/images/file.gif +0 -0
  57. data/examples/wiki/war/public/javascripts/prettify.js +61 -0
  58. data/examples/wiki/war/public/robots.txt +0 -0
  59. data/examples/wiki/war/public/stylesheets/main.css +156 -0
  60. data/examples/wiki/war/public/stylesheets/prettify.css +1 -0
  61. data/examples/wiki/war/public/stylesheets/sh_style.css +66 -0
  62. data/examples/wiki/war/public/stylesheets/source.css +21 -0
  63. data/examples/wiki/war/public/wmd/images/bg-fill.png +0 -0
  64. data/examples/wiki/war/public/wmd/images/bg.png +0 -0
  65. data/examples/wiki/war/public/wmd/images/blockquote.png +0 -0
  66. data/examples/wiki/war/public/wmd/images/bold.png +0 -0
  67. data/examples/wiki/war/public/wmd/images/code.png +0 -0
  68. data/examples/wiki/war/public/wmd/images/h1.png +0 -0
  69. data/examples/wiki/war/public/wmd/images/hr.png +0 -0
  70. data/examples/wiki/war/public/wmd/images/img.png +0 -0
  71. data/examples/wiki/war/public/wmd/images/italic.png +0 -0
  72. data/examples/wiki/war/public/wmd/images/link.png +0 -0
  73. data/examples/wiki/war/public/wmd/images/ol.png +0 -0
  74. data/examples/wiki/war/public/wmd/images/redo.png +0 -0
  75. data/examples/wiki/war/public/wmd/images/separator.png +0 -0
  76. data/examples/wiki/war/public/wmd/images/ul.png +0 -0
  77. data/examples/wiki/war/public/wmd/images/undo.png +0 -0
  78. data/examples/wiki/war/public/wmd/images/wmd-on.png +0 -0
  79. data/examples/wiki/war/public/wmd/images/wmd.png +0 -0
  80. data/examples/wiki/war/public/wmd/showdown.js +421 -0
  81. data/examples/wiki/war/public/wmd/wmd-base.js +1799 -0
  82. data/examples/wiki/war/public/wmd/wmd-plus.js +311 -0
  83. data/examples/wiki/war/public/wmd/wmd.js +73 -0
  84. data/javalib/JRubyParser.jar +0 -0
  85. data/javalib/dynalang-invoke-0.1.jar +0 -0
  86. data/javalib/mirah-bootstrap.jar +0 -0
  87. data/javalib/mirah-parser.jar +0 -0
  88. data/lib/duby.rb +2 -0
  89. data/lib/mirah.rb +338 -0
  90. data/lib/mirah/appengine_tasks.rb +146 -0
  91. data/lib/mirah/ast.rb +615 -0
  92. data/lib/mirah/ast/call.rb +307 -0
  93. data/lib/mirah/ast/class.rb +311 -0
  94. data/lib/mirah/ast/flow.rb +364 -0
  95. data/lib/mirah/ast/intrinsics.rb +470 -0
  96. data/lib/mirah/ast/literal.rb +154 -0
  97. data/lib/mirah/ast/local.rb +89 -0
  98. data/lib/mirah/ast/method.rb +360 -0
  99. data/lib/mirah/ast/scope.rb +208 -0
  100. data/lib/mirah/ast/structure.rb +226 -0
  101. data/lib/mirah/ast/type.rb +130 -0
  102. data/lib/mirah/compiler.rb +341 -0
  103. data/lib/mirah/env.rb +33 -0
  104. data/lib/mirah/jvm/base.rb +258 -0
  105. data/lib/mirah/jvm/compiler.rb +885 -0
  106. data/lib/mirah/jvm/method_lookup.rb +203 -0
  107. data/lib/mirah/jvm/source_compiler.rb +737 -0
  108. data/lib/mirah/jvm/source_generator/builder.rb +444 -0
  109. data/lib/mirah/jvm/source_generator/loops.rb +110 -0
  110. data/lib/mirah/jvm/source_generator/precompile.rb +188 -0
  111. data/lib/mirah/jvm/source_generator/typer.rb +11 -0
  112. data/lib/mirah/jvm/typer.rb +151 -0
  113. data/lib/mirah/jvm/types.rb +416 -0
  114. data/lib/mirah/jvm/types/basic_types.rb +33 -0
  115. data/lib/mirah/jvm/types/boolean.rb +17 -0
  116. data/lib/mirah/jvm/types/enumerable.rb +65 -0
  117. data/lib/mirah/jvm/types/extensions.rb +86 -0
  118. data/lib/mirah/jvm/types/factory.rb +186 -0
  119. data/lib/mirah/jvm/types/floats.rb +86 -0
  120. data/lib/mirah/jvm/types/integers.rb +171 -0
  121. data/lib/mirah/jvm/types/intrinsics.rb +376 -0
  122. data/lib/mirah/jvm/types/literals.rb +74 -0
  123. data/lib/mirah/jvm/types/methods.rb +614 -0
  124. data/lib/mirah/jvm/types/number.rb +143 -0
  125. data/lib/mirah/nbcompiler.rb +29 -0
  126. data/lib/mirah/plugin/edb.rb +29 -0
  127. data/lib/mirah/plugin/gwt.rb +173 -0
  128. data/lib/mirah/plugin/java.rb +55 -0
  129. data/lib/mirah/transform.rb +266 -0
  130. data/lib/mirah/transform2.rb +728 -0
  131. data/lib/mirah/typer.rb +407 -0
  132. data/lib/mirah_task.rb +107 -0
  133. data/test/test_ast.rb +359 -0
  134. data/test/test_compilation.rb +112 -0
  135. data/test/test_env.rb +42 -0
  136. data/test/test_gwt.rb +58 -0
  137. data/test/test_java_typer.rb +183 -0
  138. data/test/test_javac_compiler.rb +63 -0
  139. data/test/test_jvm_compiler.rb +2607 -0
  140. data/test/test_typer.rb +221 -0
  141. metadata +235 -0
@@ -0,0 +1,311 @@
1
+ var Attacklab=Attacklab||{};
2
+ Attacklab.wmdPlus=function(){
3
+ this.symboltable;
4
+ var _1=top;
5
+ var _2=_1["Attacklab"];
6
+ var _3=_1["document"];
7
+ var _4=_1["RegExp"];
8
+ var _5=_1["navigator"];
9
+ var _6=_2.Util;
10
+ var _7=_2.Position;
11
+ var _8=_2.Command;
12
+ _8.doAutoindent=function(_9){
13
+ _9.before=_9.before.replace(/(\n|^)[ ]{0,3}([*+-]|\d+[.])[ \t]*\n$/,"\n\n");
14
+ _9.before=_9.before.replace(/(\n|^)[ ]{0,3}>[ \t]*\n$/,"\n\n");
15
+ _9.before=_9.before.replace(/(\n|^)[ \t]+\n$/,"\n\n");
16
+ if(/(\n|^)[ ]{0,3}([*+-]|\d+[.])[ \t]+.*\n$/.test(_9.before)){
17
+ if(_8.doList){
18
+ _8.doList(_9);
19
+ }
20
+ }
21
+ if(/(\n|^)[ ]{0,3}>[ \t]+.*\n$/.test(_9.before)){
22
+ if(_8.doBlockquote){
23
+ _8.doBlockquote(_9);
24
+ }
25
+ }
26
+ if(/(\n|^)(\t|[ ]{4,}).*\n$/.test(_9.before)){
27
+ if(_8.doCode){
28
+ _8.doCode(_9);
29
+ }
30
+ }
31
+ };
32
+ _8.doBlockquote=function(_a){
33
+ _a.selection=_a.selection.replace(/^(\n*)([^\r]+?)(\n*)$/,function(_b,_c,_d,_e){
34
+ _a.before+=_c;
35
+ _a.after=_e+_a.after;
36
+ return _d;
37
+ });
38
+ _a.before=_a.before.replace(/(>[ \t]*)$/,function(_f,_10){
39
+ _a.selection=_10+_a.selection;
40
+ return "";
41
+ });
42
+ _a.selection=_a.selection.replace(/^(\s|>)+$/,"");
43
+ _a.selection=_a.selection||"Blockquote";
44
+ if(_a.before){
45
+ _a.before=_a.before.replace(/\n?$/,"\n");
46
+ }
47
+ if(_a.after){
48
+ _a.after=_a.after.replace(/^\n?/,"\n");
49
+ }
50
+ _a.before=_a.before.replace(/(((\n|^)(\n[ \t]*)*>(.+\n)*.*)+(\n[ \t]*)*$)/,function(_11){
51
+ _a.startTag=_11;
52
+ return "";
53
+ });
54
+ _a.after=_a.after.replace(/^(((\n|^)(\n[ \t]*)*>(.+\n)*.*)+(\n[ \t]*)*)/,function(_12){
55
+ _a.endTag=_12;
56
+ return "";
57
+ });
58
+ var _13=function(_14){
59
+ var _15=_14?"> ":"";
60
+ if(_a.startTag){
61
+ _a.startTag=_a.startTag.replace(/\n((>|\s)*)\n$/,function(_16,_17){
62
+ return "\n"+_17.replace(/^[ ]{0,3}>?[ \t]*$/gm,_15)+"\n";
63
+ });
64
+ }
65
+ if(_a.endTag){
66
+ _a.endTag=_a.endTag.replace(/^\n((>|\s)*)\n/,function(_18,_19){
67
+ return "\n"+_19.replace(/^[ ]{0,3}>?[ \t]*$/gm,_15)+"\n";
68
+ });
69
+ }
70
+ };
71
+ if(/^(?![ ]{0,3}>)/m.test(_a.selection)){
72
+ _8.wrap(_a,_2.wmd_env.lineLength-2);
73
+ _a.selection=_a.selection.replace(/^/gm,"> ");
74
+ _13(true);
75
+ _a.skipLines();
76
+ }else{
77
+ _a.selection=_a.selection.replace(/^[ ]{0,3}> ?/gm,"");
78
+ _8.unwrap(_a);
79
+ _13(false);
80
+ if(!/^(\n|^)[ ]{0,3}>/.test(_a.selection)){
81
+ if(_a.startTag){
82
+ _a.startTag=_a.startTag.replace(/\n{0,2}$/,"\n\n");
83
+ }
84
+ }
85
+ if(!/(\n|^)[ ]{0,3}>.*$/.test(_a.selection)){
86
+ if(_a.endTag){
87
+ _a.endTag=_a.endTag.replace(/^\n{0,2}/,"\n\n");
88
+ }
89
+ }
90
+ }
91
+ if(!/\n/.test(_a.selection)){
92
+ _a.selection=_a.selection.replace(/^(> *)/,function(_1a,_1b){
93
+ _a.startTag+=_1b;
94
+ return "";
95
+ });
96
+ }
97
+ };
98
+ _8.doCode=function(_1c){
99
+ var _1d=/\S[ ]*$/.test(_1c.before);
100
+ var _1e=/^[ ]*\S/.test(_1c.after);
101
+ if((!_1e&&!_1d)||/\n/.test(_1c.selection)){
102
+ _1c.before=_1c.before.replace(/[ ]{4}$/,function(_1f){
103
+ _1c.selection=_1f+_1c.selection;
104
+ return "";
105
+ });
106
+ var _20=1;
107
+ var _21=1;
108
+ if(/\n(\t|[ ]{4,}).*\n$/.test(_1c.before)){
109
+ _20=0;
110
+ }
111
+ if(/^\n(\t|[ ]{4,})/.test(_1c.after)){
112
+ _21=0;
113
+ }
114
+ _1c.skipLines(_20,_21);
115
+ if(!_1c.selection){
116
+ _1c.startTag=" ";
117
+ _1c.selection="print(\"code sample\");";
118
+ return;
119
+ }
120
+ if(/^[ ]{0,3}\S/m.test(_1c.selection)){
121
+ _1c.selection=_1c.selection.replace(/^/gm," ");
122
+ }else{
123
+ _1c.selection=_1c.selection.replace(/^[ ]{4}/gm,"");
124
+ }
125
+ }else{
126
+ _1c.trimWhitespace();
127
+ _1c.findTags(/`/,/`/);
128
+ if(!_1c.startTag&&!_1c.endTag){
129
+ _1c.startTag=_1c.endTag="`";
130
+ if(!_1c.selection){
131
+ _1c.selection="print(\"code sample\");";
132
+ }
133
+ }else{
134
+ if(_1c.endTag&&!_1c.startTag){
135
+ _1c.before+=_1c.endTag;
136
+ _1c.endTag="";
137
+ }else{
138
+ _1c.startTag=_1c.endTag="";
139
+ }
140
+ }
141
+ }
142
+ };
143
+ _8.autoindent={};
144
+ _8.autoindent.textOp=_8.doAutoindent;
145
+ _8.blockquote={};
146
+ _8.blockquote.description="Blockquote <blockquote>";
147
+ _8.blockquote.image="images/blockquote.png";
148
+ _8.blockquote.key=".";
149
+ _8.blockquote.keyCode=190;
150
+ _8.blockquote.textOp=function(_22){
151
+ return _8.doBlockquote(_22);
152
+ };
153
+ _8.code={};
154
+ _8.code.description="Code Sample <pre><code>";
155
+ _8.code.image="images/code.png";
156
+ _8.code.key="k";
157
+ _8.code.textOp=_8.doCode;
158
+ _8.img={};
159
+ _8.img.description="Image <img>";
160
+ _8.img.image="images/img.png";
161
+ _8.img.key="g";
162
+ _8.img.textOp=function(_23,_24){
163
+ return _8.doLinkOrImage(_23,true,_24);
164
+ };
165
+ _8.doList=function(_25,_26){
166
+ var _27=/(([ ]{0,3}([*+-]|\d+[.])[ \t]+.*)(\n.+|\n{2,}([*+-].*|\d+[.])[ \t]+.*|\n{2,}[ \t]+\S.*)*)\n*/;
167
+ var _28="";
168
+ var _29=1;
169
+ var _2a=function(){
170
+ if(_26){
171
+ var _2b=" "+_29+". ";
172
+ _29++;
173
+ return _2b;
174
+ }
175
+ var _2c=_28||"-";
176
+ return " "+_2c+" ";
177
+ };
178
+ var _2d=function(_2e){
179
+ if(_26==undefined){
180
+ _26=/^\s*\d/.test(_2e);
181
+ }
182
+ _2e=_2e.replace(/^[ ]{0,3}([*+-]|\d+[.])\s/gm,function(_2f){
183
+ return _2a();
184
+ });
185
+ return _2e;
186
+ };
187
+ var _30=function(){
188
+ _31=_6.regexToString(_27);
189
+ _31.expression="^\n*"+_31.expression;
190
+ var _32=_6.stringToRegex(_31);
191
+ _25.after=_25.after.replace(_32,_2d);
192
+ };
193
+ _25.findTags(/(\n|^)*[ ]{0,3}([*+-]|\d+[.])\s+/,null);
194
+ var _33=/^\n/;
195
+ if(_25.before&&!/\n$/.test(_25.before)&&!_33.test(_25.startTag)){
196
+ _25.before+=_25.startTag;
197
+ _25.startTag="";
198
+ }
199
+ if(_25.startTag){
200
+ var _34=/\d+[.]/.test(_25.startTag);
201
+ _25.startTag="";
202
+ _25.selection=_25.selection.replace(/\n[ ]{4}/g,"\n");
203
+ _8.unwrap(_25);
204
+ _25.skipLines();
205
+ if(_34){
206
+ _30();
207
+ }
208
+ if(_26==_34){
209
+ return;
210
+ }
211
+ }
212
+ var _35=1;
213
+ var _31=_6.regexToString(_27);
214
+ _31.expression="(\\n|^)"+_31.expression+"$";
215
+ var _36=_6.stringToRegex(_31);
216
+ _25.before=_25.before.replace(_36,function(_37){
217
+ if(/^\s*([*+-])/.test(_37)){
218
+ _28=_4.$1;
219
+ }
220
+ _35=/[^\n]\n\n[^\n]/.test(_37)?1:0;
221
+ return _2d(_37);
222
+ });
223
+ if(!_25.selection){
224
+ _25.selection="List item";
225
+ }
226
+ var _38=_2a();
227
+ var _39=1;
228
+ _31=_6.regexToString(_27);
229
+ _31.expression="^\n*"+_31.expression;
230
+ _36=_6.stringToRegex(_31);
231
+ _25.after=_25.after.replace(_36,function(_3a){
232
+ _39=/[^\n]\n\n[^\n]/.test(_3a)?1:0;
233
+ return _2d(_3a);
234
+ });
235
+ _25.trimWhitespace(true);
236
+ _25.skipLines(_35,_39,true);
237
+ _25.startTag=_38;
238
+ var _3b=_38.replace(/./g," ");
239
+ _8.wrap(_25,_2.wmd_env.lineLength-_3b.length);
240
+ _25.selection=_25.selection.replace(/\n/g,"\n"+_3b);
241
+ };
242
+ _8.doHeading=function(_3c){
243
+ _3c.selection=_3c.selection.replace(/\s+/g," ");
244
+ _3c.selection=_3c.selection.replace(/(^\s+|\s+$)/g,"");
245
+ var _3d=0;
246
+ _3c.findTags(/#+[ ]*/,/[ ]*#+/);
247
+ if(/#+/.test(_3c.startTag)){
248
+ _3d=_4.lastMatch.length;
249
+ }
250
+ _3c.startTag=_3c.endTag="";
251
+ _3c.findTags(null,/\s?(-+|=+)/);
252
+ if(/=+/.test(_3c.endTag)){
253
+ _3d=1;
254
+ }
255
+ if(/-+/.test(_3c.endTag)){
256
+ _3d=2;
257
+ }
258
+ _3c.startTag=_3c.endTag="";
259
+ _3c.skipLines(1,1);
260
+ if(!_3c.selection){
261
+ _3c.startTag="## ";
262
+ _3c.selection="Heading";
263
+ _3c.endTag=" ##";
264
+ return;
265
+ }
266
+ var _3e=_3d==0?2:_3d-1;
267
+ if(_3e){
268
+ var _3f=_3e>=2?"-":"=";
269
+ var _40=_3c.selection.length;
270
+ if(_40>_2.wmd_env.lineLength){
271
+ _40=_2.wmd_env.lineLength;
272
+ }
273
+ _3c.endTag="\n";
274
+ while(_40--){
275
+ _3c.endTag+=_3f;
276
+ }
277
+ }
278
+ };
279
+ _8.ol={};
280
+ _8.ol.description="Numbered List <ol>";
281
+ _8.ol.image="images/ol.png";
282
+ _8.ol.key="o";
283
+ _8.ol.textOp=function(_41){
284
+ _8.doList(_41,true);
285
+ };
286
+ _8.ul={};
287
+ _8.ul.description="Bulleted List <ul>";
288
+ _8.ul.image="images/ul.png";
289
+ _8.ul.key="u";
290
+ _8.ul.textOp=function(_42){
291
+ _8.doList(_42,false);
292
+ };
293
+ _8.h1={};
294
+ _8.h1.description="Heading <h1>/<h2>";
295
+ _8.h1.image="images/h1.png";
296
+ _8.h1.key="h";
297
+ _8.h1.textOp=_8.doHeading;
298
+ _8.hr={};
299
+ _8.hr.description="Horizontal Rule <hr>";
300
+ _8.hr.image="images/hr.png";
301
+ _8.hr.key="r";
302
+ _8.hr.textOp=function(_43){
303
+ _43.startTag="----------\n";
304
+ _43.selection="";
305
+ _43.skipLines(2,1,true);
306
+ };
307
+ };
308
+ if(Attacklab.fileLoaded){
309
+ Attacklab.fileLoaded("wmd-plus.js");
310
+ }
311
+
@@ -0,0 +1,73 @@
1
+ var Attacklab=Attacklab||{};
2
+ Attacklab.wmd_env={};
3
+ Attacklab.account_options={};
4
+ Attacklab.wmd_defaults={version:1,output:"HTML",lineLength:40,delayLoad:false};
5
+ if(!Attacklab.wmd){
6
+ Attacklab.wmd=function(){
7
+ Attacklab.loadEnv=function(){
8
+ var _1=function(_2){
9
+ if(!_2){
10
+ return;
11
+ }
12
+ for(var _3 in _2){
13
+ Attacklab.wmd_env[_3]=_2[_3];
14
+ }
15
+ };
16
+ _1(Attacklab.wmd_defaults);
17
+ _1(Attacklab.account_options);
18
+ _1(top["wmd_options"]);
19
+ Attacklab.full=true;
20
+ var _4="bold italic | link blockquote code image | ol ul heading hr";
21
+ Attacklab.wmd_env.buttons=Attacklab.wmd_env.buttons||_4;
22
+ };
23
+ Attacklab.loadEnv();
24
+ var _5=["showdown.js","wmd-base.js","wmd-plus.js"];
25
+ var _6=function(_7){
26
+ };
27
+ Attacklab.fileLoaded=function(_8){
28
+ arguments.callee.count=arguments.callee.count||0;
29
+ if(++arguments.callee.count>=_5.length){
30
+ var go=function(){
31
+ Attacklab.wmdBase();
32
+ Attacklab.Util.startEditor();
33
+ };
34
+ if(Attacklab.wmd_env.delayLoad){
35
+ window.setTimeout(go,0);
36
+ }else{
37
+ go();
38
+ }
39
+ }
40
+ };
41
+ Attacklab.editorInit=function(){
42
+ Attacklab.wmdPlus();
43
+ };
44
+ var _a=function(_b,_c){
45
+ var _d=Attacklab.basePath+_b;
46
+ if(_c){
47
+ _d+="?nocache="+(new Date()).getTime();
48
+ }
49
+ var _e=document.createElement("script");
50
+ _e.src=_d;
51
+ top.document.documentElement.firstChild.appendChild(_e);
52
+ };
53
+ var _f=function(_10){
54
+ var _11=RegExp("(.*)"+_10+"(\\?(.+))?$","g");
55
+ var _12=document.getElementsByTagName("script");
56
+ for(var i=0;i<_12.length;i++){
57
+ if(_11.test(_12[i].src)){
58
+ var _14=RegExp.$1;
59
+ if(/wmd-editor.com/.test(_12[i].src)){
60
+ return null;
61
+ }
62
+ return _14;
63
+ }
64
+ }
65
+ };
66
+ Attacklab.basePath=_f("wmd.js")||"http://static.wmd-editor.com/v2/";
67
+ for(var f,i=0;f=_5[i];i++){
68
+ _a(f,false);
69
+ }
70
+ };
71
+ Attacklab.wmd();
72
+ }
73
+
Binary file
Binary file
@@ -0,0 +1,2 @@
1
+ puts "WARNING: Duby is now Mirah. Please require 'mirah'."
2
+ require File.dirname(__FILE__) + '/mirah'
@@ -0,0 +1,338 @@
1
+ require 'fileutils'
2
+ require 'rbconfig'
3
+ require 'mirah/transform'
4
+ require 'mirah/ast'
5
+ require 'mirah/typer'
6
+ require 'mirah/compiler'
7
+ require 'mirah/env'
8
+ begin
9
+ require 'bitescript'
10
+ rescue LoadError
11
+ $: << File.dirname(__FILE__) + '/../../bitescript/lib'
12
+ require 'bitescript'
13
+ end
14
+ require 'mirah/jvm/compiler'
15
+ require 'mirah/jvm/typer'
16
+ Dir[File.dirname(__FILE__) + "/mirah/plugin/*"].each {|file| require "#{file}" if file =~ /\.rb$/}
17
+ require 'jruby'
18
+
19
+ module Duby
20
+ def self.run(*args)
21
+ DubyImpl.new.run(*args)
22
+ end
23
+
24
+ def self.compile(*args)
25
+ DubyImpl.new.compile(*args)
26
+ end
27
+
28
+ def self.parse(*args)
29
+ DubyImpl.new.parse(*args)
30
+ end
31
+
32
+ def self.plugins
33
+ @plugins ||= []
34
+ end
35
+
36
+ def self.reset
37
+ plugins.each {|x| x.reset if x.respond_to?(:reset)}
38
+ end
39
+
40
+ def self.print_error(message, position)
41
+ puts "#{position.file}:#{position.start_line}: #{message}"
42
+ file_offset = 0
43
+ startline = position.start_line - 1
44
+ endline = position.end_line - 1
45
+ start_col = position.start_col - 1
46
+ end_col = position.end_col - 1
47
+ # don't try to search dash_e
48
+ # TODO: show dash_e source the same way
49
+ if File.exist? position.file
50
+ File.open(position.file).each_with_index do |line, lineno|
51
+ if lineno >= startline && lineno <= endline
52
+ puts line.chomp
53
+ if lineno == startline
54
+ print ' ' * start_col
55
+ else
56
+ start_col = 0
57
+ end
58
+ if lineno < endline
59
+ puts '^' * (line.size - start_col)
60
+ else
61
+ puts '^' * [end_col - start_col, 1].max
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+
68
+ class CompilationState
69
+ attr_accessor :verbose, :destination
70
+ end
71
+ end
72
+
73
+ # This is a custom classloader impl to allow loading classes with
74
+ # interdependencies by having findClass retrieve classes as needed from the
75
+ # collection of all classes generated by the target script.
76
+ class DubyClassLoader < java::security::SecureClassLoader
77
+ def initialize(parent, class_map)
78
+ super(parent)
79
+ @class_map = class_map
80
+ end
81
+
82
+ def findClass(name)
83
+ if @class_map[name]
84
+ bytes = @class_map[name].to_java_bytes
85
+ defineClass(name, bytes, 0, bytes.length)
86
+ else
87
+ raise java.lang.ClassNotFoundException.new(name)
88
+ end
89
+ end
90
+
91
+ def loadClass(name, resolve)
92
+ cls = findLoadedClass(name)
93
+ if cls == nil
94
+ if @class_map[name]
95
+ cls = findClass(name)
96
+ else
97
+ cls = super(name, false)
98
+ end
99
+ end
100
+
101
+ resolveClass(cls) if resolve
102
+
103
+ cls
104
+ end
105
+ end
106
+
107
+ class DubyImpl
108
+ def initialize
109
+ Duby::AST.type_factory = Duby::JVM::Types::TypeFactory.new
110
+ end
111
+
112
+ def run(*args)
113
+ main = nil
114
+ class_map = {}
115
+
116
+ # generate all bytes for all classes
117
+ generate(args) do |outfile, builder|
118
+ bytes = builder.generate
119
+ name = builder.class_name.gsub(/\//, '.')
120
+ class_map[name] = bytes
121
+ end
122
+
123
+ # load all classes
124
+ dcl = DubyClassLoader.new(java.lang.ClassLoader.system_class_loader, class_map)
125
+ class_map.each do |name,|
126
+ cls = dcl.load_class(name)
127
+ # TODO: using first main; find correct one
128
+ main ||= cls.get_method("main", java::lang::String[].java_class) #rescue nil
129
+ end
130
+
131
+ # run the main method we found
132
+ if main
133
+ begin
134
+ main.invoke(nil, [args.to_java(:string)].to_java)
135
+ rescue java.lang.Exception => e
136
+ e = e.cause if e.cause
137
+ raise e
138
+ end
139
+ else
140
+ puts "No main found"
141
+ end
142
+ end
143
+
144
+ def compile(*args)
145
+ generate(args) do |filename, builder|
146
+ filename = "#{@state.destination}#{filename}"
147
+ FileUtils.mkdir_p(File.dirname(filename))
148
+ bytes = builder.generate
149
+ File.open(filename, 'wb') {|f| f.write(bytes)}
150
+ end
151
+ end
152
+
153
+ def generate(args, &block)
154
+ process_flags!(args)
155
+
156
+ # collect all ASTs from all files
157
+ all_nodes = []
158
+ expand_files(args).each do |duby_file|
159
+ if duby_file == '-e'
160
+ @filename = '-e'
161
+ next
162
+ elsif @filename == '-e'
163
+ all_nodes << parse('-e', duby_file)
164
+ else
165
+ all_nodes << parse(duby_file)
166
+ end
167
+ @filename = nil
168
+ exit 1 if @error
169
+ end
170
+
171
+ # enter all ASTs into inference engine
172
+ infer_asts(all_nodes)
173
+
174
+ # compile each AST in turn
175
+ all_nodes.each do |ast|
176
+ compile_ast(ast, &block)
177
+ end
178
+ end
179
+
180
+ def parse(*args)
181
+ process_flags!(args)
182
+ @filename = args.shift
183
+
184
+ if @filename
185
+ if @filename == '-e'
186
+ @filename = 'DashE'
187
+ src = args[0]
188
+ else
189
+ src = File.read(@filename)
190
+ end
191
+ else
192
+ print_help
193
+ exit(1)
194
+ end
195
+ begin
196
+ ast = Duby::AST.parse_ruby(src, @filename)
197
+ # rescue org.jrubyparser.lexer.SyntaxException => ex
198
+ # Duby.print_error(ex.message, ex.position)
199
+ # raise ex if @state.verbose
200
+ end
201
+ @transformer = Duby::Transform::Transformer.new(@state)
202
+ Java::MirahImpl::Builtin.initialize_builtins(@transformer)
203
+ @transformer.filename = @filename
204
+ ast = @transformer.transform(ast, nil)
205
+ @transformer.errors.each do |ex|
206
+ Duby.print_error(ex.message, ex.position)
207
+ raise ex.cause || ex if @state.verbose
208
+ end
209
+ @error = @transformer.errors.size > 0
210
+
211
+ ast
212
+ end
213
+
214
+ def infer_asts(asts)
215
+ typer = Duby::Typer::JVM.new(@transformer)
216
+ asts.each {|ast| typer.infer(ast) }
217
+ begin
218
+ typer.resolve(false)
219
+ ensure
220
+ puts asts.inspect if @state.verbose
221
+
222
+ failed = !typer.errors.empty?
223
+ if failed
224
+ puts "Inference Error:"
225
+ typer.errors.each do |ex|
226
+ if ex.node
227
+ Duby.print_error(ex.message, ex.node.position)
228
+ else
229
+ puts ex.message
230
+ end
231
+ puts ex.backtrace if @state.verbose
232
+ end
233
+ exit 1
234
+ end
235
+ end
236
+ end
237
+
238
+ def compile_ast(ast, &block)
239
+ begin
240
+ compiler = @compiler_class.new
241
+ ast.compile(compiler, false)
242
+ compiler.generate(&block)
243
+ rescue Exception => ex
244
+ if ex.respond_to? :node
245
+ Duby.print_error(ex.message, ex.node.position)
246
+ puts ex.backtrace if @state.verbose
247
+ exit 1
248
+ else
249
+ raise ex
250
+ end
251
+ end
252
+
253
+ end
254
+
255
+ def process_flags!(args)
256
+ @state ||= Duby::CompilationState.new
257
+ while args.length > 0 && args[0] =~ /^-/
258
+ case args[0]
259
+ when '--verbose', '-V'
260
+ Duby::Typer.verbose = true
261
+ Duby::AST.verbose = true
262
+ Duby::Compiler::JVM.verbose = true
263
+ @state.verbose = true
264
+ args.shift
265
+ when '--java', '-j'
266
+ require 'mirah/jvm/source_compiler'
267
+ @compiler_class = Duby::Compiler::JavaSource
268
+ args.shift
269
+ when '--dest', '-d'
270
+ args.shift
271
+ @state.destination = File.join(File.expand_path(args.shift), '')
272
+ when '--cd'
273
+ args.shift
274
+ Dir.chdir(args.shift)
275
+ when '--plugin', '-p'
276
+ args.shift
277
+ plugin = args.shift
278
+ require "mirah/plugin/#{plugin}"
279
+ when '-I'
280
+ args.shift
281
+ $: << args.shift
282
+ when '--classpath', '-c'
283
+ args.shift
284
+ Duby::Env.decode_paths(args.shift, $CLASSPATH)
285
+ when '--explicit-packages'
286
+ args.shift
287
+ Duby::AST::Script.explicit_packages = true
288
+ when '--help', '-h'
289
+ print_help
290
+ exit(0)
291
+ when '-e'
292
+ break
293
+ else
294
+ puts "unrecognized flag: " + args[0]
295
+ print_help
296
+ exit(1)
297
+ end
298
+ end
299
+ @state.destination ||= File.join(File.expand_path('.'), '')
300
+ @compiler_class ||= Duby::Compiler::JVM
301
+ end
302
+
303
+ def print_help
304
+ $stdout.puts "#{$0} [flags] <files or \"-e SCRIPT\">
305
+ -V, --verbose\t\tVerbose logging
306
+ -j, --java\t\tOutput .java source (jrubyc only)
307
+ -d, --dir DIR\t\tUse DIR as the base dir for compilation, packages
308
+ -p, --plugin PLUGIN\tLoad and use plugin during compilation
309
+ -c, --classpath PATH\tAdd PATH to the Java classpath for compilation
310
+ --explicit-packages\tDisable guessing the package from the filename
311
+ -h, --help\t\tPrint this help message
312
+ -e\t\t\tCompile or run the script following -e (naming it \"DashE\")"
313
+ end
314
+
315
+ def expand_files(files)
316
+ expanded = []
317
+ files.each do |filename|
318
+ if File.directory?(filename)
319
+ Dir[File.join(filename, '*')].each do |child|
320
+ if File.directory?(child)
321
+ files << child
322
+ elsif child =~ /\.(duby|mirah)$/
323
+ expanded << child
324
+ end
325
+ end
326
+ else
327
+ expanded << filename
328
+ end
329
+ end
330
+ expanded
331
+ end
332
+ end
333
+
334
+ Mirah = Duby
335
+
336
+ if __FILE__ == $0
337
+ Duby.run(ARGV[0], *ARGV[1..-1])
338
+ end