mirah 0.1.3-java → 0.1.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.
- checksums.yaml +4 -4
- data/History.txt +97 -1
- data/README.md +2 -3
- data/Rakefile +172 -15
- data/TODO.md +293 -49
- data/dist/mirahc.jar +0 -0
- data/examples/ant/README.md +8 -0
- data/examples/ant/build/Fib.class +0 -0
- data/examples/ant/example-build.xml +3 -3
- data/examples/ant/example-build.xml~ +7 -0
- data/examples/rosettacode/100-doors.mirah +2 -2
- data/examples/sort_closure.mirah +1 -1
- data/lib/mirah.rb +0 -2
- data/lib/mirah/version.rb +1 -1
- data/test/core/util/class_loader_test.rb +1 -1
- data/test/core/util/{argument_processor_test.rb → mirah_arguments_test.rb} +2 -2
- data/test/jvm/annotations_test.rb +19 -0
- data/test/jvm/blocks_test.rb +198 -32
- data/test/jvm/import_test.rb +3 -0
- data/test/jvm/interface_test.rb +14 -0
- data/test/jvm/jvm_compiler_test.rb +11 -0
- data/test/jvm/new_backend_test_helper.rb +1 -1
- data/test/jvm/static_fields_test.rb +11 -1
- data/test/mirrors/method_lookup_test.rb +20 -7
- data/test/mirrors/mirrors_test.rb +51 -7
- metadata +6 -5
- data/lib/mirah/util/argument_processor.rb +0 -150
- data/lib/mirah/util/class_loader.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1af0c232deb319793169771869237071abe16677
|
4
|
+
data.tar.gz: 59f8f8f68b83436eb954eb357d0dadcf78ac9dbe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0045ae4be5b4c916096ce797f8f6b2db53f3aa5f499d8cee50882555593729905a06fd7d4001d6911de45bc807286273c38cd1026af09fb940fe8c5e32e3b03f
|
7
|
+
data.tar.gz: 04edb6509392c2cb73c92872e26c25a3402d88c2785dc2d08555e7a0a98bbe5d0a18d5f698ad0034fa620e6f933c1c3b5b503e8d033d727d166f25cfc77543db
|
data/History.txt
CHANGED
@@ -1,6 +1,102 @@
|
|
1
|
+
=== 0.1.4 November Chill / 2014-11-13
|
1
2
|
|
2
|
-
|
3
|
+
d73e6d4 ignore ruby version management / test temp files
|
4
|
+
4090b8d add a number of new block tests
|
5
|
+
b29a845 some work in progress wrt new closure impl.
|
6
|
+
aa92d0f add some whitespace to scopes.mirah
|
7
|
+
010e16a add a few things to TODO, rm return error message todo
|
8
|
+
140cd96 catch another explicit cast that could be implicit in a block
|
9
|
+
78122d6 change type incompat error on returns to use be clearer
|
10
|
+
71d9ea3 add declared_binding_type= definitions to BetterScope
|
11
|
+
5fad461 update TODO w/ some more issue numbers
|
12
|
+
c6bbd73 reformat method_lookup_test
|
13
|
+
266889f add add_import to Scope interface for java interop
|
14
|
+
2e0b0de rm old scope impl
|
15
|
+
8e15cd0 pass new closure flag through to typers
|
16
|
+
6067583 mark differing type sig test as pending
|
17
|
+
2ecbea4 add flag for enabling new closures, default to off
|
18
|
+
a6d6e54 add a couple TODOs, make issues for most warnings related todos
|
19
|
+
c68c5a1 rm local return in mirror_type_system.mirah
|
20
|
+
c2cdd2d clean should rm generated test files
|
21
|
+
0f9b6ce bytecode generation should blow up if it encounters a call with a block
|
22
|
+
bc4f351 reenable better closures, now that some bugs are fixed
|
23
|
+
2e7118b attempt to fix test fixtures
|
24
|
+
8ee1764 reformat long line in typer
|
25
|
+
0fc0cb2 add some things to better closures
|
26
|
+
c33f4f8 fix build by moving back to old closure impl + fixing ProxyNode clone
|
27
|
+
56c528f if a node doesn't have a position, still have a good error
|
28
|
+
2c23611 rm usage of import sorter
|
29
|
+
f40f2e5 update java bits to 1.6 from 1.5 in Rakefile, to get rid of warnings
|
30
|
+
2d983ff only compile test fixtures if needed
|
31
|
+
7946057 rm unused file from previous closure rewrite attempt
|
32
|
+
1f8590f rm unused assert method
|
33
|
+
5210e2f clean up better closures a bit
|
34
|
+
54fe717 rm finest logging call in test
|
35
|
+
d94068e only drop stacktraces when fine logging enabled
|
36
|
+
25efb58 fix interface problem. It was a problem w/ a closure w/o a binding having its class def inserted incorrectly
|
37
|
+
508fb5a rm puts in test
|
38
|
+
4d9363d do a proxy cleanup before adjusting bindings
|
39
|
+
f054ae6 WIP I
|
40
|
+
f91eec0 better asm download link in Rakefile
|
41
|
+
104082e fix import sorter so that nested packages don't cause it to blow up
|
42
|
+
bdf29f9 use https for maven
|
43
|
+
dbc36ea fix import sorter by using NodeScanner
|
44
|
+
7eecc9d add new closure impl, but off
|
45
|
+
006622e bump copyright
|
46
|
+
6b9439e rm nlr from old closure builder
|
47
|
+
73f9866 add call to finish closures to mirah_compiler.mirah
|
48
|
+
6e8ce48 if we're about to create a loop in scope, just continue
|
49
|
+
4cc0841 dump stack trace on internal typer errors when running in verbose mode
|
50
|
+
1249e63 do something slightly more reasonable when a lambda's type arg is no good
|
51
|
+
80a7151 add expln at top of better_scope.mirah
|
52
|
+
2f3606d add new args tests
|
53
|
+
9fe02d0 update maven instructions w/ dist/mirahc.jar
|
54
|
+
993135c roughly sort asts before performing type inference.
|
55
|
+
32e2189 add building mirah w/ mirah to ci
|
56
|
+
8adf80b adding some fine logging to closure building / commentary
|
57
|
+
69ffe75 complain in a better way if generic inference has a problem
|
58
|
+
5ef8965 add some tests for lambdas in the blocks test
|
59
|
+
245badf clean up block test for param to not use threads
|
60
|
+
16c4071 rm commented puts from async_type_builder
|
61
|
+
7717d61 fix up better scope to act like JVMScope
|
62
|
+
9c4cf81 fix blocks in rescues
|
63
|
+
6d5e408 add interface for closure building to make it easier to defer it later
|
64
|
+
8e538e7 format org/mirah/macros/builder.mirah / move inference of annotation to after ast attachment
|
65
|
+
b4876e4 bump copyright on mirah_compiler.mirah
|
66
|
+
5d41f16 format src/org/mirah/typer/assignable_type_future.mirah
|
67
|
+
eae844d flesh out remaining better scope bits, use better scope
|
68
|
+
0526803 break up import test a bit
|
69
|
+
bfbeaae rm unneeded semi colon in test
|
70
|
+
b7079fd add more information to default error message
|
71
|
+
aa84912 start putting together a MirrorScope interface
|
72
|
+
28a6a15 update ant task, update ant example
|
73
|
+
c8b4930 make tmp script names for tests shorter
|
74
|
+
b367886 move binding creation to class building
|
75
|
+
e0344c4 formatting jvm_scope + base_type_future, w/ better logging in base_type_future
|
76
|
+
a373f3b format array_compiler.mirah
|
77
|
+
829e85a move scope related typer methods together
|
78
|
+
676394d name closure inner classes w/ good names
|
79
|
+
6ffe551 add ant classes to mirahc.jar
|
80
|
+
52f0acd add pending test for bad nested closure binding generation
|
81
|
+
fd3d1cb update versions in readme
|
82
|
+
7a47048 start converting to implicit casting in block arg defs
|
83
|
+
6a814e6 add whitespace, rm unneeded manual boxing
|
84
|
+
ba7ef3e rm unneeded ruby files
|
85
|
+
aec965b add constant support
|
86
|
+
0fcf899 rm unnecessary test logging
|
87
|
+
4a080d4 Merge branch 'shannah-parser_issue_14_fix2'
|
88
|
+
89b56fc Merge branch 'parser_issue_14_fix2' of git://github.com/shannah/mirah into shannah-parser_issue_14_fix2
|
89
|
+
b377e66 fix version test
|
90
|
+
40cd50f bump version
|
91
|
+
839416d use released mirah for builds
|
92
|
+
60aa9be Updated parser to include support for including whitespace and comment tokens in the lexer. https://github.com/mirah/mirah-parser/issues/14
|
3
93
|
|
94
|
+
=== 0.1.3 Metacircularity: Achieved / 2014-08-08
|
95
|
+
|
96
|
+
0a17b30 doh, java 7 parser
|
97
|
+
607f9ae update to fixed parser
|
98
|
+
4f78f2b reverting mirah-parser while trying to fix things
|
99
|
+
394fd95 add history for 0.1.3
|
4
100
|
5b1454c bump parser w/ java 7 jar
|
5
101
|
8c0be9d de-SNAPSHOT/dev ify versions
|
6
102
|
0bb1553 update parser
|
data/README.md
CHANGED
@@ -33,8 +33,7 @@ SYNOPSIS
|
|
33
33
|
REQUIREMENTS
|
34
34
|
-----------------
|
35
35
|
|
36
|
-
*
|
37
|
-
* BiteScript 0.0.8 or higher
|
36
|
+
* Java 1.7 or higher.
|
38
37
|
|
39
38
|
INSTALL
|
40
39
|
-----------------
|
@@ -56,7 +55,7 @@ Extract it, and add `bin` to your `$PATH` to be able to use `mirah`, `mirahc`, e
|
|
56
55
|
SOURCE
|
57
56
|
-----------------
|
58
57
|
|
59
|
-
To build and install from source, you'll need jruby 1.7.
|
58
|
+
To build and install from source, you'll need jruby 1.7.12 or
|
60
59
|
higher. Then just follow these commands.
|
61
60
|
|
62
61
|
$ git clone http://github.com/mirah/mirah.git
|
data/Rakefile
CHANGED
@@ -41,7 +41,7 @@ end
|
|
41
41
|
task :default => :new_ci
|
42
42
|
|
43
43
|
desc "run new backend ci"
|
44
|
-
task :new_ci => [:'test:core', :'test:jvm', :'test:artifacts']
|
44
|
+
task :new_ci => [:'test:core', :'test:jvm', :'test:artifacts', 'dist/mirahc3.jar']
|
45
45
|
|
46
46
|
def run_tests tests
|
47
47
|
results = tests.map do |name|
|
@@ -91,7 +91,7 @@ namespace :test do
|
|
91
91
|
task :jvm => 'test:jvm:all'
|
92
92
|
|
93
93
|
namespace :jvm do
|
94
|
-
task :test_setup => [:
|
94
|
+
task :test_setup => [:clean_tmp_test_classes, :build_test_fixtures]
|
95
95
|
|
96
96
|
desc "run jvm tests using the new self hosted backend"
|
97
97
|
task :all do
|
@@ -112,14 +112,17 @@ namespace :test do
|
|
112
112
|
end
|
113
113
|
end
|
114
114
|
|
115
|
-
task :
|
116
|
-
FileUtils.rm_rf "tmp_test"
|
117
|
-
FileUtils.mkdir_p "tmp_test"
|
115
|
+
task :clean_tmp_test_classes do
|
116
|
+
FileUtils.rm_rf "tmp_test/test_classes"
|
118
117
|
FileUtils.mkdir_p "tmp_test/test_classes"
|
119
|
-
FileUtils.mkdir_p "tmp_test/fixtures"
|
120
118
|
end
|
121
119
|
|
122
|
-
|
120
|
+
|
121
|
+
|
122
|
+
task :build_test_fixtures => 'tmp_test/fixtures/fixtures_built.txt'
|
123
|
+
directory 'tmp_test/fixtures'
|
124
|
+
file 'tmp_test/fixtures/fixtures_built.txt' => ['tmp_test/fixtures'] + Dir['test/fixtures/**/*.java'] do
|
125
|
+
`touch tmp_test/fixtures/fixtures_built.txt`
|
123
126
|
ant.javac 'destdir' => "tmp_test/fixtures",
|
124
127
|
'srcdir' => 'test/fixtures',
|
125
128
|
'includeantruntime' => false,
|
@@ -138,6 +141,7 @@ task :clean do
|
|
138
141
|
ant.delete 'quiet' => true, 'dir' => 'dist'
|
139
142
|
rm_f 'dist/mirahc.jar'
|
140
143
|
rm_rf 'tmp'
|
144
|
+
rm_rf 'tmp_test'
|
141
145
|
end
|
142
146
|
|
143
147
|
desc "clean downloaded dependencies"
|
@@ -203,7 +207,8 @@ task :dist => [:gem, :zip]
|
|
203
207
|
file_create 'javalib/asm-5.jar' do
|
204
208
|
require 'open-uri'
|
205
209
|
puts "Downloading asm-5.jar"
|
206
|
-
|
210
|
+
url = 'https://search.maven.org/remotecontent?filepath=org/ow2/asm/asm-all/5.0.3/asm-all-5.0.3.jar'
|
211
|
+
open(url, 'rb') do |src|
|
207
212
|
open('javalib/asm-5.jar', 'wb') do |dest|
|
208
213
|
dest.write(src.read)
|
209
214
|
end
|
@@ -212,9 +217,7 @@ end
|
|
212
217
|
|
213
218
|
file_create 'javalib/mirahc-prev.jar' do
|
214
219
|
require 'open-uri'
|
215
|
-
|
216
|
-
xml = open('https://oss.sonatype.org/service/local/repositories/snapshots/content/org/mirah/mirah/0.1.3-SNAPSHOT/').read
|
217
|
-
url = xml.scan(%r{<resourceURI>(https:.*\.jar)</resourceURI>}).map(&:first).sort.last
|
220
|
+
url = 'https://search.maven.org/remotecontent?filepath=org/mirah/mirah/0.1.3/mirah-0.1.3.jar'
|
218
221
|
|
219
222
|
puts "Downloading mirahc-prev.jar from #{url}"
|
220
223
|
|
@@ -227,18 +230,108 @@ end
|
|
227
230
|
|
228
231
|
|
229
232
|
def bootstrap_mirah_from(old_jar, new_jar)
|
233
|
+
|
234
|
+
#typer_srcs = Dir['src/org/mirah/typer/**/*.mirah'].sort
|
235
|
+
#typer_classes = typer_srcs.map {|s| s.sub 'src', build_dir }
|
236
|
+
if false
|
237
|
+
name = new_jar.sub /[.\/]/, '_'
|
238
|
+
|
239
|
+
|
240
|
+
java_build_dir = "build/#{name}-java"
|
241
|
+
java_jar = "#{java_build_dir}.jar"
|
242
|
+
file java_jar => Dir["src/**/*.java"].sort do
|
243
|
+
rm_rf java_build_dir
|
244
|
+
mkdir_p java_build_dir
|
245
|
+
|
246
|
+
# Compile Java sources
|
247
|
+
ant.javac 'source' => '1.6',
|
248
|
+
'target' => '1.6',
|
249
|
+
'destdir' => java_build_dir,
|
250
|
+
'srcdir' => 'src',
|
251
|
+
'includeantruntime' => false,
|
252
|
+
'debug' => true,
|
253
|
+
'listfiles' => true
|
254
|
+
ant.jar 'jarfile' => java_jar do
|
255
|
+
fileset 'dir' => java_build_dir
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
bootstrap_build_dir = "build/#{name}-bootstrap"
|
260
|
+
bootstrap_jar = "#{bootstrap_build_dir}.jar"
|
261
|
+
bootstrap_srcs = Dir['src/org/mirah/{builtins,jvm/types,macros,util,}/*.mirah'].sort
|
262
|
+
file bootstrap_jar => bootstrap_srcs do
|
263
|
+
build_mirah_stuff old_jar, bootstrap_build_dir, bootstrap_srcs
|
264
|
+
ant.jar 'jarfile' => bootstrap_jar do
|
265
|
+
fileset 'dir' => bootstrap_build_dir
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
typer_build_dir = "build/#{name}-typer"
|
270
|
+
typer_jar = "#{typer_build_dir}.jar"
|
271
|
+
file typer_jar => Dir['src/org/mirah/typer/**/*.mirah'].sort do
|
272
|
+
build_mirah_stuff old_jar, typer_build_dir, typer_srcs
|
273
|
+
ant.jar 'jarfile' => typer_jar do
|
274
|
+
fileset 'dir' => typer_build_dir
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
compiler_build_dir = "build/#{name}-compiler"
|
279
|
+
compiler_jar = "#{compiler_build_dir}.jar"
|
280
|
+
file compiler_jar => Dir['src/org/mirah/jvm/{compiler,mirrors,model}/**/*.mirah'].sort do
|
281
|
+
build_mirah_stuff old_jar, compiler_build_dir, compiler_srcs
|
282
|
+
ant.jar 'jarfile' => compiler_jar do
|
283
|
+
fileset 'dir' => compiler_build_dir
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
tool_build_dir = "build/#{name}-tool"
|
288
|
+
tool_jar = "#{tool_build_dir}.jar"
|
289
|
+
file tool_jar => Dir['src/org/mirah/tool/**/*.mirah'].sort do
|
290
|
+
build_mirah_stuff old_jar, tool_build_dir, tool_srcs
|
291
|
+
ant.jar 'jarfile' => tool_jar do
|
292
|
+
fileset 'dir' => tool_build_dir
|
293
|
+
end
|
294
|
+
end
|
295
|
+
|
296
|
+
ant_build_dir = "build/#{name}-ant"
|
297
|
+
ant_jar = "#{ant_build_dir}.jar"
|
298
|
+
file ant_jar => Dir['src/org/mirah/ant/**/*.mirah'].sort do
|
299
|
+
build_mirah_stuff old_jar, ant_build_dir, ant_srcs
|
300
|
+
ant.jar 'jarfile' => ant_jar do
|
301
|
+
fileset 'dir' => ant_build_dir
|
302
|
+
end
|
303
|
+
end
|
304
|
+
jars = [java_jar, bootstrap_jar, typer_jar, compiler_jar, tool_jar, ant_jar]
|
305
|
+
file new_jar => jars +
|
306
|
+
[old_jar, 'javalib/asm-5.jar', 'javalib/mirah-parser.jar'] do
|
307
|
+
ant.jar 'jarfile' => new_jar do
|
308
|
+
jars.each {|j| zipfileset 'src' => j }
|
309
|
+
zipfileset 'src' => 'javalib/asm-5.jar', 'includes' => 'org/objectweb/**/*'
|
310
|
+
zipfileset 'src' => 'javalib/mirah-parser.jar'
|
311
|
+
metainf 'dir' => File.dirname(__FILE__), 'includes' => 'LICENSE,COPYING,NOTICE'
|
312
|
+
manifest do
|
313
|
+
attribute 'name' => 'Main-Class', 'value' => 'org.mirah.MirahCommand'
|
314
|
+
end
|
315
|
+
end
|
316
|
+
|
317
|
+
end
|
318
|
+
|
319
|
+
else # original
|
320
|
+
|
321
|
+
|
230
322
|
mirah_srcs = Dir['src/org/mirah/{builtins,jvm/types,macros,util,}/*.mirah'].sort +
|
231
323
|
Dir['src/org/mirah/typer/**/*.mirah'].sort +
|
232
324
|
Dir['src/org/mirah/jvm/{compiler,mirrors,model}/**/*.mirah'].sort +
|
233
325
|
Dir['src/org/mirah/tool/*.mirah'].sort
|
234
|
-
|
326
|
+
|
327
|
+
file new_jar => mirah_srcs + ['src/org/mirah/ant/compile.mirah'] + [old_jar, 'javalib/asm-5.jar', 'javalib/mirah-parser.jar'] do
|
235
328
|
build_dir = 'build/bootstrap'
|
236
329
|
rm_rf build_dir
|
237
330
|
mkdir_p build_dir
|
238
331
|
|
239
332
|
# Compile Java sources
|
240
|
-
ant.javac 'source' => '1.
|
241
|
-
'target' => '1.
|
333
|
+
ant.javac 'source' => '1.6',
|
334
|
+
'target' => '1.6',
|
242
335
|
'destdir' => build_dir,
|
243
336
|
'srcdir' => 'src',
|
244
337
|
'includeantruntime' => false,
|
@@ -250,14 +343,29 @@ def bootstrap_mirah_from(old_jar, new_jar)
|
|
250
343
|
if build_version.to_f > 1.7
|
251
344
|
build_version = '1.7'
|
252
345
|
end
|
346
|
+
|
347
|
+
default_class_path = ["javalib/mirah-parser.jar", build_dir,"javalib/asm-5.jar"].join(File::PATH_SEPARATOR)
|
348
|
+
|
253
349
|
# Compile Mirah sources
|
254
350
|
runjava('-Xmx512m',
|
255
351
|
old_jar,
|
256
352
|
'-d', build_dir,
|
257
|
-
'-classpath',
|
353
|
+
'-classpath', default_class_path,
|
258
354
|
'--jvm', build_version,
|
355
|
+
|
356
|
+
#'--verbose',
|
357
|
+
|
259
358
|
*mirah_srcs)
|
260
359
|
|
360
|
+
# compile ant stuff
|
361
|
+
ant_classpath = $CLASSPATH.grep(/ant/).map{|x| x.sub(/^file:/,'')}.join(File::PATH_SEPARATOR)
|
362
|
+
runjava '-Xmx512m',
|
363
|
+
old_jar,
|
364
|
+
'-d', build_dir,
|
365
|
+
'-classpath', [default_class_path, ant_classpath].join(File::PATH_SEPARATOR),
|
366
|
+
'--jvm', build_version,
|
367
|
+
'src/org/mirah/ant'
|
368
|
+
|
261
369
|
# Build the jar
|
262
370
|
ant.jar 'jarfile' => new_jar do
|
263
371
|
fileset 'dir' => build_dir
|
@@ -269,6 +377,55 @@ def bootstrap_mirah_from(old_jar, new_jar)
|
|
269
377
|
end
|
270
378
|
end
|
271
379
|
end
|
380
|
+
end # feature flag
|
381
|
+
end
|
382
|
+
|
383
|
+
def build_mirah_stuff old_jar, build_dir, mirah_srcs
|
384
|
+
|
385
|
+
rm_rf build_dir
|
386
|
+
mkdir_p build_dir
|
387
|
+
|
388
|
+
|
389
|
+
# mirahc needs to be 1.7 or lower
|
390
|
+
build_version = java.lang.System.getProperty('java.specification.version')
|
391
|
+
if build_version.to_f > 1.7
|
392
|
+
build_version = '1.7'
|
393
|
+
end
|
394
|
+
|
395
|
+
default_class_path = ["javalib/mirah-parser.jar", build_dir,"javalib/asm-5.jar"].join(File::PATH_SEPARATOR)
|
396
|
+
|
397
|
+
# Compile Mirah sources
|
398
|
+
runjava('-Xmx512m',
|
399
|
+
old_jar,
|
400
|
+
'-d', build_dir,
|
401
|
+
'-classpath', default_class_path,
|
402
|
+
'--jvm', build_version,
|
403
|
+
*mirah_srcs)
|
404
|
+
|
405
|
+
|
406
|
+
|
407
|
+
# compile ant stuff
|
408
|
+
# ant_classpath = $CLASSPATH.grep(/ant/).map{|x| x.sub(/^file:/,'')}.join(File::PATH_SEPARATOR)
|
409
|
+
# runjava '-Xmx512m',
|
410
|
+
# old_jar,
|
411
|
+
# '-d', build_dir,
|
412
|
+
# '-classpath', [default_class_path, ant_classpath].join(File::PATH_SEPARATOR),
|
413
|
+
# '--jvm', build_version,
|
414
|
+
# 'src/org/mirah/ant'
|
415
|
+
|
416
|
+
# Build the jar
|
417
|
+
ant.jar 'jarfile' => new_jar do
|
418
|
+
fileset 'dir' => build_dir
|
419
|
+
zipfileset 'src' => 'javalib/asm-5.jar', 'includes' => 'org/objectweb/**/*'
|
420
|
+
zipfileset 'src' => 'javalib/mirah-parser.jar'
|
421
|
+
metainf 'dir' => File.dirname(__FILE__), 'includes' => 'LICENSE,COPYING,NOTICE'
|
422
|
+
manifest do
|
423
|
+
attribute 'name' => 'Main-Class', 'value' => 'org.mirah.MirahCommand'
|
424
|
+
end
|
425
|
+
end
|
426
|
+
|
427
|
+
|
428
|
+
|
272
429
|
end
|
273
430
|
|
274
431
|
bootstrap_mirah_from('javalib/mirahc-prev.jar', 'dist/mirahc.jar')
|
data/TODO.md
CHANGED
@@ -1,60 +1,207 @@
|
|
1
1
|
|
2
|
-
0.1.3 checklist
|
3
|
-
=============
|
4
2
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
otoh, probably no one is using them since they don't work
|
3
|
+
The TODO list of DOOM
|
4
|
+
=======================
|
5
|
+
100 char or less per feature, points included
|
6
|
+
syntax
|
10
7
|
|
11
|
-
-
|
12
|
-
0.1.2 is the broken :(
|
8
|
+
- (points) description
|
13
9
|
|
14
|
-
|
15
|
-
-
|
16
|
-
-
|
10
|
+
points logrithmicy difficulty 0-3
|
11
|
+
- 0 know what to do, how to do it, and it's trivial < 15 min
|
12
|
+
- 1 know what to do, how to do it, but not trivial < 1/2 day, > 1 hour
|
13
|
+
- 2 know what to do, but not how to do it, < 1 day, > 1/2 day
|
14
|
+
- 3 don't know exactly what to do, or how to do it, est is undefined
|
17
15
|
|
18
16
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
Dist
|
18
|
+
===========
|
19
|
+
- mirah-parser maven artifact https://github.com/mirah/mirah-parser/issues/16
|
20
|
+
- Java 8 ...
|
21
|
+
- look at java 9 features we could use
|
22
|
+
- update mvn compiler plugin
|
23
|
+
- add regression test for ant task example!
|
24
|
+
- rm implicit ant dependency... break out ant support as separate maven artifact
|
25
|
+
- mvn artifacts:
|
26
|
+
-- mirah-core
|
27
|
+
-- mirah-parser
|
28
|
+
-- mirah-ant
|
29
|
+
-- mirah
|
30
|
+
|
24
31
|
|
25
|
-
|
32
|
+
Compiler Internals Improvements
|
33
|
+
======================
|
34
|
+
- make Mirror type systems addDefaultImports more obvious
|
35
|
+
- faster mirah compiler build: src => class is tricky, I could make src => jar, jar => jar tho
|
36
|
+
- switch to minitest
|
37
|
+
- tests for imports at different scopes
|
38
|
+
- shade asm lib for dev happiness
|
39
|
+
- keep version in fewer places whew. Current is
|
40
|
+
version.rb
|
41
|
+
various pom.xmls
|
42
|
+
some random mirah file in src
|
26
43
|
- automated tests for distribution artifacts
|
27
|
-
-
|
44
|
+
- verify bytecode version of compiler
|
45
|
+
should have dist jar check that does this as part of acceptance suite
|
28
46
|
|
47
|
+
- silence logging from JRuby interfaces, unless overridden.
|
29
48
|
|
30
|
-
|
49
|
+
- get rid of all outputs that escape from tests
|
50
|
+
- move build artifacts to javalib for gem so that we don't depend on dist directory
|
51
|
+
- clean up javalib dir
|
52
|
+
- don't use 1.5 as java compile target
|
53
|
+
- make it obvious when ASTs have been dropped during macro expansion
|
31
54
|
|
55
|
+
- break compiler into phases
|
56
|
+
---------------
|
57
|
+
# parse
|
58
|
+
# typer prep
|
32
59
|
|
60
|
+
- sort files by import graph (could cache this)
|
61
|
+
- load macros
|
62
|
+
- load type systems
|
63
|
+
- load types for System, & predefs maybe?
|
64
|
+
- load scoped macros / extensions
|
65
|
+
# typer
|
66
|
+
- visit script body / class bodies, skipping method bodies
|
67
|
+
- compile macros
|
68
|
+
- visit method bodies
|
69
|
+
# finishs resolving typer wip
|
70
|
+
- resolve proxies
|
71
|
+
- change captured locals into binding fields
|
72
|
+
# clean up / compiler prep
|
73
|
+
- clean ast up
|
74
|
+
# compile
|
33
75
|
|
76
|
+
- maybe after parse, check built files to see if they need to be rebuilt, and ignore them otherwise
|
77
|
+
- investigate using Java 8 Lambda impl hooks for closures.
|
34
78
|
|
79
|
+
Warnings / Logging
|
80
|
+
============
|
81
|
+
- fix import not found so that it says can't find com.blah for import com.blah, or at least both package scoped & absolute packages. mirah#267
|
82
|
+
- warn about unused imports mirah#268
|
83
|
+
- initial not found should not be error in fine logging mirah#269
|
84
|
+
- log bindings as they are created
|
85
|
+
- don't warn on self.initialize mirah#270
|
86
|
+
- can't find method error could list nearly matching methods mirah#271
|
87
|
+
- error on not all methods implemented for interfaces mirah#272
|
35
88
|
|
36
|
-
-
|
37
|
-
-
|
89
|
+
- improve duplicate name/sig error when multiple method defs w/ same sig mirah#273
|
90
|
+
- code sources from macro expansion should know both the macro location and the invoke location and report both on errors so that users know where to look to debug
|
38
91
|
|
39
|
-
|
40
|
-
|
92
|
+
Parser
|
93
|
+
======
|
94
|
+
- variables w/ name package are not allowed :/ mirah-parser#18
|
95
|
+
- case expressions mirah-parser#17
|
96
|
+
- lambda literals mirah-parser#19
|
41
97
|
|
42
|
-
|
43
|
-
|
44
|
-
-
|
98
|
+
Features
|
99
|
+
==========
|
100
|
+
- Reflection Macros
|
101
|
+
- AST formatter that converts back to something the parser can parse
|
102
|
+
- default toString?
|
103
|
+
- default hashCode / equals
|
104
|
+
- change == to use equals
|
105
|
+
- default val/no type that defers to indy
|
106
|
+
|
107
|
+
eg
|
108
|
+
def foo(x: int, y=1)
|
109
|
+
end
|
110
|
+
should work
|
111
|
+
|
112
|
+
- attr_reader/et al as varargs instead of just Hash. It would mean that the type info would have to come from somewhere else
|
113
|
+
- goto: headius wants it
|
114
|
+
- synchronize intrinsic ala java's
|
115
|
+
- file scoped macros / extensions
|
116
|
+
- extension syntax
|
117
|
+
- move macro / mirahc anno to separate class dir to improve javac interop
|
118
|
+
- public / private / protected / package scope helpers
|
119
|
+
- subclass access to super protected fields w/ @syntax
|
120
|
+
- (0) add a gets function like Ruby
|
121
|
+
- (2) a more "batteries included" set of imports
|
122
|
+
- (3) generics generics generics
|
123
|
+
- (???) ARGV
|
124
|
+
- (???) field access from closures, synthesize synthetic accessors
|
125
|
+
- (???) self in closures should be lexical self
|
126
|
+
- covariant interface impl overrides
|
127
|
+
- macro helpers for inserting things into initializers
|
128
|
+
- macro helpers for add method if not already there
|
129
|
+
- reverse macro on collections
|
130
|
+
- inner classes don't get nested names
|
131
|
+
class A
|
132
|
+
class B
|
133
|
+
end
|
134
|
+
end
|
135
|
+
# => pkg.A, pkg.B
|
136
|
+
- understand Java 8 default methods
|
137
|
+
- default args on non-last position params. eg when a method takes a block(read: functional interface), it should be allowed to have default args before the block arg.
|
138
|
+
- do jruby style method lookup
|
139
|
+
|
140
|
+
Bugs
|
141
|
+
==========
|
45
142
|
|
46
|
-
-
|
143
|
+
- "foo: #{x || y} acts weird", my guess is that interpolation doesn't generate the right code sometimes
|
144
|
+
- lambda's can't exist in methods! !! by which I mean that they can't close over things in methods. You can have them there, they just don't close. >:[]
|
145
|
+
- parser can't deal w/ unquotes in hash literals when key is unquote
|
146
|
+
quote { puts `key`: 1 }
|
47
147
|
- implicit void methods w/ explicit return generate incorrect bytecode. Let's see if that's true of explicit. nope.
|
48
|
-
-
|
49
|
-
-
|
148
|
+
- import * doesn't always work correctly
|
149
|
+
- Inner class issues. Two inner classes w/ the same name will confuse the type system
|
150
|
+
class A
|
151
|
+
class B
|
152
|
+
def b
|
153
|
+
@b = 1
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
class C
|
158
|
+
class B
|
159
|
+
def b
|
160
|
+
@b = 1
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
- if with no else has type of the bool expression not type of the body. It should return nil w/ the body type, or just be an error
|
166
|
+
This might be just a error reporting issue
|
167
|
+
ERROR: Invalid return type org.mirah.typer.Scope, expected org.mirah.typer.ResolvedType
|
168
|
+
if parent
|
169
|
+
^^^^^^^^^
|
170
|
+
|
171
|
+
|
172
|
+
Libraries
|
173
|
+
===============
|
174
|
+
- delegation macro library
|
175
|
+
- (???) testing framework
|
176
|
+
- (???) fix up shatner
|
177
|
+
- (???) fix dubious
|
178
|
+
|
179
|
+
|
180
|
+
Compiled Code Usability
|
181
|
+
=======================
|
182
|
+
- name extension / macro classes after method name
|
183
|
+
- break annotations / macro build path to make javac happier
|
184
|
+
currently macros are compiled to same tree as runtime code. We should make it so you can compile them to a different dir. Additionally, the annotations used for macros are unfriendly to javac, so we should put them in the macro dir
|
50
185
|
|
51
186
|
etc
|
52
187
|
=========
|
53
188
|
|
54
|
-
-
|
55
|
-
|
189
|
+
- overriding interface req type atm :( apparently. -- nope wrong method name
|
190
|
+
interface Bar
|
191
|
+
def bar(i: int):void;end
|
192
|
+
end
|
193
|
+
class Foo; implements Bar
|
194
|
+
def bar(i) puts i; end
|
195
|
+
end
|
196
|
+
|
197
|
+
- ArrayList.new(list) should do generic inference, perhaps, so T of list -> T of the resulting object
|
198
|
+
|
199
|
+
- when dealing in generics, error messages should highlight generic types somehow
|
200
|
+
|
201
|
+
|
202
|
+
blocks don't introduce new scopes when they are part of a macro currently :/
|
203
|
+
|
56
204
|
|
57
|
-
- switch to minitest
|
58
205
|
|
59
206
|
from notes, uncategorized
|
60
207
|
============================
|
@@ -74,27 +221,124 @@ puts e # e is LUB(X, Y)
|
|
74
221
|
list o example code + what the compiler says when you give it to the compiler
|
75
222
|
things like errors, & behavior
|
76
223
|
|
77
|
-
feature requests
|
78
|
-
----------------
|
79
|
-
- goto: headius wants it
|
80
|
-
- synchronize intrinsic ala java's
|
81
|
-
- file scoped macros
|
82
|
-
- move macro / mirahc anno to separate class dir to improve javac interop
|
83
224
|
|
84
|
-
|
85
|
-
-------
|
225
|
+
fix maven plugins
|
86
226
|
|
87
|
-
foo {|a| !a || ''.equals(a) }
|
88
|
-
doesn't parse
|
89
227
|
|
90
|
-
does now :)
|
91
228
|
|
92
229
|
|
93
|
-
|
230
|
+
what I want is to be able to say
|
231
|
+
this might be a field access,
|
232
|
+
if a field w/ that name exists on the class, then use it
|
233
|
+
if it's a constant that's in scope that's not on the current class target, use it
|
234
|
+
|
235
|
+
def a
|
236
|
+
CONST
|
237
|
+
end
|
238
|
+
|
239
|
+
CONST=1
|
240
|
+
|
241
|
+
|
242
|
+
|
243
|
+
fixing closures
|
244
|
+
|
245
|
+
add block scope
|
246
|
+
block scope
|
247
|
+
"self" is captured self
|
248
|
+
if in closure self may also be closure type, for method lookup.
|
249
|
+
I think this means that the proxy node for calls might need another elem
|
250
|
+
|
251
|
+
what's happening is
|
252
|
+
hit 1st block
|
253
|
+
look for parent binding, none
|
254
|
+
create binding for 'm' scope
|
255
|
+
resolve block type, build closure
|
256
|
+
hit 2nd block
|
257
|
+
look for parent binding, walks up to 'm'
|
258
|
+
but in m's scope y is not captured, so not added to binding
|
259
|
+
|
260
|
+
|
261
|
+
def m # b = Binding1.new()
|
262
|
+
r do # Closure1.new b; b2 = Binding2.new
|
263
|
+
y = 1 # b2.y = 1
|
264
|
+
r do # Closure2.new b2
|
265
|
+
y += 4 # b2.y += 4
|
266
|
+
end
|
267
|
+
puts y
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
update binding/closure generation
|
272
|
+
|
273
|
+
one top level binding, 2 closures
|
274
|
+
def m # b = Binding1.new()
|
275
|
+
x = 1 # b.x = 1
|
276
|
+
r do # Closure1.new b
|
277
|
+
x += 1 # b.x += 1
|
278
|
+
r do # Closure2.new b
|
279
|
+
x += 4 # b.x += 4
|
280
|
+
end
|
281
|
+
end
|
282
|
+
puts x # puts b.x
|
283
|
+
end
|
284
|
+
|
285
|
+
one tl binding, one closure binding
|
286
|
+
def m # b = Binding1.new()
|
287
|
+
x = 1 # b.x = 1
|
288
|
+
r do # Closure1.new b; b2 = Binding2.new
|
289
|
+
y = 1 # b2.y = 1
|
290
|
+
r do # Closure2.new b2
|
291
|
+
y += 4 # b2.y += 4
|
292
|
+
end
|
293
|
+
x += y # b.x += b2.y
|
294
|
+
end
|
295
|
+
puts x # puts b.x
|
296
|
+
end
|
297
|
+
|
298
|
+
binding shared across closures
|
299
|
+
either pull binding construction above 1st ref, or
|
300
|
+
copy binding back after.
|
301
|
+
Not sure if I like that
|
302
|
+
it's probably better to pull binding up, because you don't know when things are run
|
303
|
+
def m
|
304
|
+
x = 1
|
305
|
+
r { x += 1 }
|
306
|
+
r { x += 2 }
|
307
|
+
puts x
|
308
|
+
end
|
309
|
+
|
310
|
+
|
311
|
+
def m
|
312
|
+
x = 1
|
313
|
+
l { x += 1 }
|
314
|
+
l { x += 2 }
|
315
|
+
puts x # => 1
|
316
|
+
run_ls
|
317
|
+
puts x # => 4
|
318
|
+
end
|
319
|
+
|
320
|
+
|
321
|
+
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
322
|
+
|
323
|
+
SimpleNodeVisitor sucks. It doesn't seem to work unless you define all the things to visit :(
|
324
|
+
|
325
|
+
sometimes implicit nil in return screws everything up, and you get a stack error from the jvm
|
326
|
+
|
327
|
+
|
328
|
+
Hash (things w/ init_list) needs a position, or they blow up w/ NPE somewhere
|
329
|
+
|
330
|
+
|
331
|
+
can't have block args w/ name interface
|
332
|
+
|
333
|
+
|
334
|
+
wierd error for VV
|
335
|
+
def foo: int
|
336
|
+
if a < b
|
337
|
+
end
|
338
|
+
end
|
339
|
+
|
94
340
|
|
95
341
|
|
96
|
-
Release management
|
97
|
-
------------------
|
98
342
|
|
99
|
-
|
100
|
-
|
343
|
+
compile rake task doesn't fail, if it doesn't work for some things, it goes on anyway
|
344
|
+
in generics. hmm
|