mirah 0.1.4-java → 0.2.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +0 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/History.txt +531 -0
- data/README.md +23 -10
- data/Rakefile +239 -156
- data/TODO.md +71 -10
- data/bin/mirah +1 -1
- data/bin/mirahc +1 -1
- data/dist/mirahc.jar +0 -0
- data/examples/bintrees.mirah +2 -2
- data/examples/construction.mirah +2 -2
- data/examples/fields.mirah +1 -1
- data/examples/fractal.mirah +1 -1
- data/examples/fractal.rb +70 -0
- data/examples/interfaces.mirah +1 -1
- data/examples/java_thing.mirah +1 -1
- data/examples/macros/square.mirah +3 -3
- data/examples/macros/square_int.mirah +3 -3
- data/examples/macros/string_each_char.mirah +6 -6
- data/examples/rosettacode/100-doors.mirah +0 -2
- data/examples/rosettacode/count-occurrences-of-a-substring.mirah +3 -3
- data/examples/rosettacode/empty-string.mirah +1 -1
- data/examples/rosettacode/fizz-buzz.mirah +4 -4
- data/examples/rosettacode/is-string-numeric.mirah +7 -7
- data/examples/rosettacode/palindrome.mirah +2 -2
- data/examples/rosettacode/reverse-a-string.mirah +1 -1
- data/examples/rosettacode/rot-13.mirah +1 -1
- data/examples/{edb.mirah → rosettacode/simple_character_math.mirah} +13 -4
- data/examples/rosettacode/string-case.mirah +2 -2
- data/examples/rosettacode/string-length.mirah +1 -1
- data/examples/swing.mirah +9 -14
- data/extensions_and_macros.md +117 -0
- data/lib/mirah.rb +1 -1
- data/lib/mirah/errors.rb +3 -1
- data/lib/mirah/transform/ast_ext.rb +3 -2
- data/lib/mirah/util/process_errors.rb +1 -2
- data/lib/mirah/version.rb +1 -1
- data/test/A.class +0 -0
- data/test/core/util/jvm_version_test.rb +10 -0
- data/test/core/util/mirah_arguments_test.rb +51 -4
- data/test/fixtures/cp1251_test.mirah +7 -0
- data/test/fixtures/org/foo/AbstractExecutorJava8.java +30 -0
- data/test/fixtures/org/foo/ClassWithSelfReferencingTypeParameter.java +24 -0
- data/test/fixtures/org/foo/InnerInterfaceClass.java +12 -0
- data/test/fixtures/org/foo/IntAnno.class +0 -0
- data/test/fixtures/org/foo/TypeFixtureJava8.java +10 -0
- data/test/fixtures/utf8_test.mirah +7 -0
- data/test/jvm/access_levels_test.rb +31 -0
- data/test/jvm/annotations_test.rb +3 -6
- data/test/jvm/blocks_test.rb +303 -120
- data/test/jvm/cast_test.rb +123 -50
- data/test/jvm/closure_test.rb +242 -0
- data/test/jvm/constructors_test.rb +1 -3
- data/test/jvm/example_test.rb +6 -2
- data/test/jvm/extensions/array_extensions_test.rb +181 -0
- data/test/jvm/extensions/collection_extensions_test.rb +195 -0
- data/test/jvm/{enumerable_test.rb → extensions/enumerable_test.rb} +81 -13
- data/test/jvm/extensions/hash_extensions_test.rb +56 -0
- data/test/jvm/extensions/list_extensions_test.rb +143 -0
- data/test/jvm/extensions/lock_extensions_test.rb +43 -0
- data/test/jvm/{numeric_extensions_test.rb → extensions/numeric_extensions_test.rb} +0 -0
- data/test/jvm/extensions/numeric_operators_test.rb +86 -0
- data/test/jvm/extensions/object_extensions_test.rb +122 -0
- data/test/jvm/{string_builder_extensions_test.rb → extensions/string_builder_extensions_test.rb} +0 -0
- data/test/jvm/{string_extensions_test.rb → extensions/string_extensions_test.rb} +57 -4
- data/test/jvm/generics_test.rb +14 -6
- data/test/jvm/import_test.rb +38 -1
- data/test/jvm/interface_test.rb +17 -0
- data/test/jvm/jvm_commands_test.rb +9 -0
- data/test/jvm/jvm_compiler_test.rb +568 -43
- data/test/jvm/macros_test.rb +343 -19
- data/test/jvm/main_method_test.rb +1 -3
- data/test/jvm/new_backend_test_helper.rb +54 -7
- data/test/jvm/rescue_test.rb +20 -5
- data/test/jvm/static_fields_test.rb +52 -10
- data/test/jvm/{mirror_compilation_test_helper.rb → string_test.rb} +10 -9
- data/test/jvm/varargs_test.rb +6 -16
- data/test/mirrors/base_type_test.rb +20 -7
- data/test/mirrors/bytecode_mirror_test.rb +8 -3
- data/test/mirrors/generics_test.rb +89 -10
- data/test/mirrors/member_test.rb +1 -1
- data/test/mirrors/method_lookup_test.rb +10 -3
- data/test/mirrors/mirrors_test.rb +20 -20
- data/test/mirrors/simple_async_mirror_loader_test.rb +1 -1
- data/test/mirrors/simple_mirror_loader_test.rb +1 -1
- data/test/newMirahClass$Closure2.class +0 -0
- data/test/newMirahClass.class +0 -0
- data/test/test_helper.rb +8 -1
- metadata +31 -16
- data/bin/bundler +0 -16
- data/bin/rake +0 -16
- data/examples/ant/example-build.xml~ +0 -7
- data/examples/test.edb +0 -9
- data/lib/mirah/compiler.rb +0 -67
- data/lib/mirah/parser.rb +0 -224
- data/lib/mirah/util/delegate.rb +0 -65
- data/test/jvm/list_extensions_test.rb +0 -23
data/README.md
CHANGED
@@ -6,6 +6,7 @@ Mirah
|
|
6
6
|
* http://groups.google.com/group/mirah
|
7
7
|
* http://github.com/mirah/mirah/issues
|
8
8
|
|
9
|
+
|
9
10
|
DESCRIPTION
|
10
11
|
-----------------
|
11
12
|
|
@@ -14,6 +15,7 @@ local type inference and a heavily Ruby-inspired syntax. Mirah
|
|
14
15
|
currently includes a typer/compiler backend for the JVM which can
|
15
16
|
output JVM bytecode.
|
16
17
|
|
18
|
+
|
17
19
|
FEATURES
|
18
20
|
-----------------
|
19
21
|
|
@@ -22,6 +24,7 @@ FEATURES
|
|
22
24
|
* Fast as Java
|
23
25
|
* No runtime library
|
24
26
|
|
27
|
+
|
25
28
|
SYNOPSIS
|
26
29
|
-----------------
|
27
30
|
|
@@ -30,41 +33,51 @@ SYNOPSIS
|
|
30
33
|
mirahc <script.mirah>
|
31
34
|
mirahc -e "inline script" # produces DashE.class
|
32
35
|
|
36
|
+
|
33
37
|
REQUIREMENTS
|
34
38
|
-----------------
|
35
39
|
|
36
40
|
* Java 1.7 or higher.
|
37
41
|
|
42
|
+
|
38
43
|
INSTALL
|
39
44
|
-----------------
|
40
45
|
|
41
|
-
RUBY
|
42
|
-
-----------------
|
46
|
+
### RUBY
|
43
47
|
|
44
48
|
If your gem and rake are not from from JRuby, prefix the commands with `jruby -S`
|
45
49
|
|
46
50
|
$ gem install mirah
|
47
51
|
|
48
|
-
|
49
|
-
|
52
|
+
### JAR
|
53
|
+
|
54
|
+
Mirah is distributed as a jar through maven central. You can download the latest jar from
|
55
|
+
[maven.org](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.mirah%22%20a%3A%22mirah%22).
|
56
|
+
|
57
|
+
### ZIP
|
50
58
|
|
51
59
|
You can also install Mirah from a zip file. Download the latest stable
|
52
60
|
release from https://github.com/mirah/mirah/downloads.
|
53
61
|
Extract it, and add `bin` to your `$PATH` to be able to use `mirah`, `mirahc`, etc.
|
54
62
|
|
55
|
-
SOURCE
|
56
|
-
-----------------
|
63
|
+
### SOURCE
|
57
64
|
|
58
|
-
|
65
|
+
Setup building locally and installing from source, you'll need jruby 1.7.12 or
|
59
66
|
higher. Then just follow these commands.
|
60
67
|
|
68
|
+
#### To get the repository setup locally run the following:
|
69
|
+
|
61
70
|
$ git clone http://github.com/mirah/mirah.git
|
62
71
|
$ cd mirah
|
63
72
|
$ bundle install
|
73
|
+
|
74
|
+
#### To install mirah as a gem from source:
|
75
|
+
|
64
76
|
$ rake gem
|
65
77
|
$ gem install pkg/mirah-*.gem
|
66
78
|
|
67
|
-
|
68
|
-
|
79
|
+
#### To create the mirahc jar:
|
80
|
+
|
81
|
+
$ rake dist/mirahc.jar
|
69
82
|
|
70
|
-
|
83
|
+
This will create a mirahc.jar file in dist that you can run to compile mirah source files.
|
data/Rakefile
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2010-
|
1
|
+
# Copyright (c) 2010-2016 The Mirah project authors. All Rights Reserved.
|
2
2
|
# All contributing project authors may be found in the NOTICE file.
|
3
3
|
#
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -25,6 +25,11 @@ require 'java'
|
|
25
25
|
require 'jruby/compiler'
|
26
26
|
require 'ant'
|
27
27
|
|
28
|
+
# We use jarjar to do some rewritting of packages in the parser.
|
29
|
+
ant.taskdef 'name' => 'jarjar',
|
30
|
+
'classpath' => 'mirah-parser/javalib/jarjar-1.1.jar',
|
31
|
+
'classname'=>"com.tonicsystems.jarjar.JarJarTask"
|
32
|
+
|
28
33
|
#TODO update downloads st build reqs that are not run reqs go in a different dir
|
29
34
|
# put run reqs in javalib
|
30
35
|
# final artifacts got in dist
|
@@ -41,7 +46,11 @@ end
|
|
41
46
|
task :default => :new_ci
|
42
47
|
|
43
48
|
desc "run new backend ci"
|
44
|
-
task :new_ci => [:'test:
|
49
|
+
task :new_ci => [:'test:parser',
|
50
|
+
:'test:core',
|
51
|
+
:'test:jvm',
|
52
|
+
:'test:artifacts',
|
53
|
+
'dist/mirahc3.jar']
|
45
54
|
|
46
55
|
def run_tests tests
|
47
56
|
results = tests.map do |name|
|
@@ -56,28 +65,29 @@ def run_tests tests
|
|
56
65
|
puts "Errors in #{name}"
|
57
66
|
end
|
58
67
|
end
|
59
|
-
fail
|
68
|
+
fail unless results.all? { |passed| passed }
|
60
69
|
end
|
61
70
|
|
62
71
|
desc "run full test suite"
|
63
72
|
task :test do
|
64
|
-
run_tests [ 'test:core',
|
73
|
+
run_tests [ 'test:core',
|
74
|
+
'test:jvm',
|
75
|
+
'test:artifacts',
|
76
|
+
'test:parser']
|
65
77
|
end
|
66
78
|
|
67
79
|
namespace :test do
|
68
80
|
|
69
|
-
desc "run
|
70
|
-
Rake::TestTask.new :
|
71
|
-
t.
|
72
|
-
t.test_files = FileList["test/core/**/*test.rb"]
|
73
|
-
java.lang.System.set_property("jruby.duby.enabled", "true")
|
81
|
+
desc "run parser tests"
|
82
|
+
Rake::TestTask.new :parser => ['build/mirah-parser.jar'] do |t|
|
83
|
+
t.test_files = FileList["mirah-parser/test/**/test*.rb"]
|
74
84
|
end
|
75
85
|
|
76
|
-
|
77
|
-
|
86
|
+
|
87
|
+
desc "run the core tests"
|
88
|
+
Rake::TestTask.new :core => :compile do |t|
|
78
89
|
t.libs << 'test'
|
79
|
-
t.test_files = FileList["test/
|
80
|
-
java.lang.System.set_property("jruby.duby.enabled", "true")
|
90
|
+
t.test_files = FileList["test/core/**/*test.rb"]
|
81
91
|
end
|
82
92
|
|
83
93
|
desc "run the artifact tests"
|
@@ -86,7 +96,6 @@ namespace :test do
|
|
86
96
|
t.test_files = FileList["test/artifacts/**/*test.rb"]
|
87
97
|
end
|
88
98
|
|
89
|
-
|
90
99
|
desc "run jvm tests"
|
91
100
|
task :jvm => 'test:jvm:all'
|
92
101
|
|
@@ -95,7 +104,7 @@ namespace :test do
|
|
95
104
|
|
96
105
|
desc "run jvm tests using the new self hosted backend"
|
97
106
|
task :all do
|
98
|
-
run_tests ["test:jvm:
|
107
|
+
run_tests ["test:jvm:rest", "test:jvm:mirrors"]
|
99
108
|
end
|
100
109
|
|
101
110
|
desc "run tests for mirror type system"
|
@@ -104,7 +113,7 @@ namespace :test do
|
|
104
113
|
t.test_files = FileList["test/mirrors/**/*test.rb"]
|
105
114
|
end
|
106
115
|
|
107
|
-
Rake::TestTask.new :
|
116
|
+
Rake::TestTask.new :rest => ["dist/mirahc.jar", :test_setup] do |t|
|
108
117
|
t.libs << 'test' << 'test/jvm'
|
109
118
|
t.ruby_opts.concat ["-r", "new_backend_test_helper"]
|
110
119
|
t.test_files = FileList["test/jvm/**/*test.rb"]
|
@@ -117,17 +126,23 @@ task :clean_tmp_test_classes do
|
|
117
126
|
FileUtils.mkdir_p "tmp_test/test_classes"
|
118
127
|
end
|
119
128
|
|
120
|
-
|
121
|
-
|
122
129
|
task :build_test_fixtures => 'tmp_test/fixtures/fixtures_built.txt'
|
123
130
|
directory 'tmp_test/fixtures'
|
131
|
+
|
124
132
|
file 'tmp_test/fixtures/fixtures_built.txt' => ['tmp_test/fixtures'] + Dir['test/fixtures/**/*.java'] do
|
133
|
+
|
134
|
+
javac_args = {
|
135
|
+
'destdir' => "tmp_test/fixtures",
|
136
|
+
'srcdir' => 'test/fixtures',
|
137
|
+
'includeantruntime' => false,
|
138
|
+
'debug' => true,
|
139
|
+
'listfiles' => true
|
140
|
+
}
|
141
|
+
jvm_version = java.lang.System.getProperty('java.specification.version').to_f
|
142
|
+
|
143
|
+
javac_args['excludes'] = '**/*Java8.java' if jvm_version < 1.8
|
144
|
+
ant.javac javac_args
|
125
145
|
`touch tmp_test/fixtures/fixtures_built.txt`
|
126
|
-
ant.javac 'destdir' => "tmp_test/fixtures",
|
127
|
-
'srcdir' => 'test/fixtures',
|
128
|
-
'includeantruntime' => false,
|
129
|
-
'debug' => true,
|
130
|
-
'listfiles' => true
|
131
146
|
end
|
132
147
|
|
133
148
|
task :init do
|
@@ -142,6 +157,7 @@ task :clean do
|
|
142
157
|
rm_f 'dist/mirahc.jar'
|
143
158
|
rm_rf 'tmp'
|
144
159
|
rm_rf 'tmp_test'
|
160
|
+
rm_rf 'pkg'
|
145
161
|
end
|
146
162
|
|
147
163
|
desc "clean downloaded dependencies"
|
@@ -157,6 +173,7 @@ task :jvm_backend => 'dist/mirahc.jar'
|
|
157
173
|
desc "build backwards-compatible ruby jar"
|
158
174
|
task :jar => :compile do
|
159
175
|
ant.jar 'jarfile' => 'dist/mirah.jar' do
|
176
|
+
# TODO this is wrong. :(
|
160
177
|
fileset 'dir' => 'lib'
|
161
178
|
fileset 'dir' => 'build'
|
162
179
|
fileset 'dir' => '.', 'includes' => 'bin/*'
|
@@ -203,11 +220,10 @@ end
|
|
203
220
|
desc "Build all redistributable files"
|
204
221
|
task :dist => [:gem, :zip]
|
205
222
|
|
206
|
-
#TODO find/create ssl location for this jar
|
207
223
|
file_create 'javalib/asm-5.jar' do
|
208
224
|
require 'open-uri'
|
209
225
|
puts "Downloading asm-5.jar"
|
210
|
-
url = 'https://search.maven.org/remotecontent?filepath=org/ow2/asm/asm-all/5.0.
|
226
|
+
url = 'https://search.maven.org/remotecontent?filepath=org/ow2/asm/asm-all/5.0.4/asm-all-5.0.4.jar'
|
211
227
|
open(url, 'rb') do |src|
|
212
228
|
open('javalib/asm-5.jar', 'wb') do |dest|
|
213
229
|
dest.write(src.read)
|
@@ -228,15 +244,10 @@ file_create 'javalib/mirahc-prev.jar' do
|
|
228
244
|
end
|
229
245
|
end
|
230
246
|
|
231
|
-
|
232
247
|
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 /[.\/]/, '_'
|
248
|
+
name = new_jar.gsub /[\.\/]/, '_'
|
238
249
|
|
239
|
-
|
250
|
+
# Compile Java parts of the compiler.
|
240
251
|
java_build_dir = "build/#{name}-java"
|
241
252
|
java_jar = "#{java_build_dir}.jar"
|
242
253
|
file java_jar => Dir["src/**/*.java"].sort do
|
@@ -256,185 +267,257 @@ if false
|
|
256
267
|
end
|
257
268
|
end
|
258
269
|
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
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
|
270
|
+
core_build_dir = "build/#{name}-core"
|
271
|
+
core_jar = "#{core_build_dir}.jar"
|
272
|
+
core_mirah_srcs = Dir['src/org/mirah/*.mirah'].sort +
|
273
|
+
Dir['src/org/mirah/{jvm/types,macros,util}/*.mirah'].sort +
|
274
|
+
Dir['src/org/mirah/typer/**/*.mirah'].sort +
|
275
|
+
Dir['src/org/mirah/jvm/{compiler,mirrors,model}/**/*.mirah'].sort -
|
276
|
+
# org.mirah.MirahCommand depends on .tool., so remove from core
|
277
|
+
['src/org/mirah/mirah_command.mirah']
|
278
|
+
|
279
|
+
file core_jar => core_mirah_srcs + [java_jar, old_jar, 'javalib/asm-5.jar', 'javalib/mirah-parser.jar'] do
|
280
|
+
compile_mirah_with_jar old_jar, core_build_dir, core_mirah_srcs, [java_jar]
|
281
|
+
ant.jar 'jarfile' => core_jar do
|
282
|
+
fileset 'dir' => core_build_dir
|
284
283
|
end
|
285
284
|
end
|
286
285
|
|
286
|
+
# Tool jar rule.
|
287
|
+
tool_mirah_srcs = Dir['src/org/mirah/tool/*.mirah'].sort +
|
288
|
+
['src/org/mirah/mirah_command.mirah'] # add it back in here.
|
287
289
|
tool_build_dir = "build/#{name}-tool"
|
288
290
|
tool_jar = "#{tool_build_dir}.jar"
|
289
|
-
file tool_jar =>
|
290
|
-
|
291
|
+
file tool_jar => tool_mirah_srcs + [core_jar, old_jar, 'javalib/asm-5.jar', 'javalib/mirah-parser.jar'] do
|
292
|
+
compile_mirah_with_jar old_jar, tool_build_dir, tool_mirah_srcs, [core_jar, java_jar]
|
291
293
|
ant.jar 'jarfile' => tool_jar do
|
292
294
|
fileset 'dir' => tool_build_dir
|
293
295
|
end
|
294
296
|
end
|
295
297
|
|
298
|
+
# Ant jar rule.
|
299
|
+
ant_mirah_srcs = Dir['src/org/mirah/ant/*.mirah'].sort
|
296
300
|
ant_build_dir = "build/#{name}-ant"
|
297
301
|
ant_jar = "#{ant_build_dir}.jar"
|
298
|
-
file ant_jar =>
|
299
|
-
|
302
|
+
file ant_jar => ant_mirah_srcs + [core_jar, tool_jar, java_jar, old_jar, 'javalib/asm-5.jar', 'javalib/mirah-parser.jar'] do
|
303
|
+
ant_classpath = $CLASSPATH.grep(/ant/).map{|x| x.sub(/^file:/,'')}
|
304
|
+
compile_mirah_with_jar old_jar, ant_build_dir, ant_mirah_srcs, [core_jar, tool_jar, java_jar] + ant_classpath
|
300
305
|
ant.jar 'jarfile' => ant_jar do
|
301
306
|
fileset 'dir' => ant_build_dir
|
302
307
|
end
|
303
308
|
end
|
304
|
-
|
309
|
+
|
310
|
+
# Extensions
|
311
|
+
# NB: we compile extensions with the current version of the compiler.
|
312
|
+
#
|
313
|
+
extensions_mirah_srcs = Dir['src/org/mirah/builtins/*.mirah'].sort
|
314
|
+
extensions_build_dir = "build/#{name}-extensions"
|
315
|
+
extensions_jar = "#{extensions_build_dir}.jar"
|
316
|
+
file extensions_jar => extensions_mirah_srcs + [core_jar, tool_jar, java_jar, 'javalib/asm-5.jar', 'javalib/mirah-parser.jar'] do
|
317
|
+
|
318
|
+
classpath = [core_jar, tool_jar, java_jar,
|
319
|
+
"javalib/mirah-parser.jar",
|
320
|
+
"javalib/asm-5.jar"].join(File::PATH_SEPARATOR)
|
321
|
+
|
322
|
+
runjava('-Xmx512m',
|
323
|
+
'-classpath', classpath,
|
324
|
+
'org.mirah.MirahCommand',
|
325
|
+
'-d', extensions_build_dir,
|
326
|
+
'-classpath', classpath,
|
327
|
+
'--jvm', build_version,
|
328
|
+
*extensions_mirah_srcs)
|
329
|
+
ant.jar 'jarfile' => extensions_jar do
|
330
|
+
fileset 'dir' => extensions_build_dir
|
331
|
+
# TODO clean up
|
332
|
+
#metainf 'dir' => File.dirname(__FILE__), 'includes' => 'LICENSE,COPYING,NOTICE'
|
333
|
+
metainf 'dir' => File.dirname(__FILE__)+'/src/org/mirah/builtins',
|
334
|
+
'includes' => 'services/*'
|
335
|
+
end
|
336
|
+
end
|
337
|
+
jars = [java_jar, core_jar, tool_jar, ant_jar, extensions_jar]
|
305
338
|
file new_jar => jars +
|
306
339
|
[old_jar, 'javalib/asm-5.jar', 'javalib/mirah-parser.jar'] do
|
340
|
+
# TODO use ant.jarjarto shade asm-5 in the fat jar
|
307
341
|
ant.jar 'jarfile' => new_jar do
|
308
342
|
jars.each {|j| zipfileset 'src' => j }
|
309
343
|
zipfileset 'src' => 'javalib/asm-5.jar', 'includes' => 'org/objectweb/**/*'
|
310
344
|
zipfileset 'src' => 'javalib/mirah-parser.jar'
|
311
345
|
metainf 'dir' => File.dirname(__FILE__), 'includes' => 'LICENSE,COPYING,NOTICE'
|
346
|
+
metainf 'dir' => File.dirname(__FILE__)+'/src/org/mirah/builtins',
|
347
|
+
'includes' => 'services/*'
|
348
|
+
|
312
349
|
manifest do
|
313
350
|
attribute 'name' => 'Main-Class', 'value' => 'org.mirah.MirahCommand'
|
314
351
|
end
|
315
352
|
end
|
316
|
-
|
317
353
|
end
|
354
|
+
end
|
318
355
|
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
file new_jar => mirah_srcs + ['src/org/mirah/ant/compile.mirah'] + [old_jar, 'javalib/asm-5.jar', 'javalib/mirah-parser.jar'] do
|
328
|
-
build_dir = 'build/bootstrap'
|
329
|
-
rm_rf build_dir
|
330
|
-
mkdir_p build_dir
|
331
|
-
|
332
|
-
# Compile Java sources
|
333
|
-
ant.javac 'source' => '1.6',
|
334
|
-
'target' => '1.6',
|
335
|
-
'destdir' => build_dir,
|
336
|
-
'srcdir' => 'src',
|
337
|
-
'includeantruntime' => false,
|
338
|
-
'debug' => true,
|
339
|
-
'listfiles' => true
|
340
|
-
|
341
|
-
# mirahc needs to be 1.7 or lower
|
342
|
-
build_version = java.lang.System.getProperty('java.specification.version')
|
343
|
-
if build_version.to_f > 1.7
|
344
|
-
build_version = '1.7'
|
356
|
+
# compiles to the build dir
|
357
|
+
def compile_mirah_with_jar old_jar, build_dir, mirah_srcs, classpath=[], clean=true
|
358
|
+
if clean
|
359
|
+
puts "cleaning #{build_dir} before compile"
|
360
|
+
rm_rf build_dir
|
361
|
+
mkdir_p build_dir
|
362
|
+
else
|
363
|
+
puts "skipping cleaning #{build_dir}"
|
345
364
|
end
|
346
365
|
|
347
|
-
default_class_path = ["javalib/mirah-parser.jar", build_dir,"javalib/asm-5.jar"].join(File::PATH_SEPARATOR)
|
366
|
+
default_class_path = ["javalib/mirah-parser.jar", build_dir, "javalib/asm-5.jar", *classpath].join(File::PATH_SEPARATOR)
|
348
367
|
|
349
368
|
# Compile Mirah sources
|
350
369
|
runjava('-Xmx512m',
|
370
|
+
'-jar',
|
351
371
|
old_jar,
|
352
372
|
'-d', build_dir,
|
353
373
|
'-classpath', default_class_path,
|
354
374
|
'--jvm', build_version,
|
355
|
-
|
356
|
-
#'--verbose',
|
357
|
-
|
358
375
|
*mirah_srcs)
|
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'
|
376
|
+
end
|
368
377
|
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
+
bootstrap_mirah_from('javalib/mirahc-prev.jar', 'dist/mirahc.jar')
|
379
|
+
bootstrap_mirah_from('dist/mirahc.jar', 'dist/mirahc2.jar')
|
380
|
+
bootstrap_mirah_from('dist/mirahc2.jar', 'dist/mirahc3.jar')
|
381
|
+
|
382
|
+
# Parser tasks!
|
383
|
+
|
384
|
+
# TODO maybe add these back at some point?
|
385
|
+
#task :doc => 'build/mirahparser/lang/ast/Node.java' do
|
386
|
+
# ant.javadoc :sourcepath => 'build', :destdir => 'doc'
|
387
|
+
#end
|
388
|
+
|
389
|
+
mirah_parser_gen_src = 'build/mirah-parser-gen/mirahparser/impl/Mirah.mirah'
|
390
|
+
mirah_parser_build_dir = "build/mirah-parser"
|
391
|
+
parser_node_meta_class = "#{mirah_parser_build_dir}/org/mirahparser/ast/NodeMeta.class"
|
392
|
+
parser_node_java_gen_src = "#{mirah_parser_build_dir}-gen/mirahparser/lang/ast/Node.java"
|
393
|
+
parser_node_class = "#{mirah_parser_build_dir}/mirahparser/lang/ast/Node.class"
|
394
|
+
parser_meta_src = 'mirah-parser/src/org/mirah/ast/meta.mirah'
|
395
|
+
prev_jar = 'javalib/mirahc-prev.jar'
|
396
|
+
directory "#{mirah_parser_build_dir}/mirah-parser/mirahparser/impl"
|
397
|
+
|
398
|
+
|
399
|
+
file 'build/mirah-parser.jar' => ["#{mirah_parser_build_dir}/mirahparser/lang/ast/Node.class",
|
400
|
+
"#{mirah_parser_build_dir}/mirahparser/impl/MirahParser.class",
|
401
|
+
"#{mirah_parser_build_dir}/mirahparser/impl/MirahLexer.class"] do
|
402
|
+
ant.jarjar 'jarfile' => 'build/mirah-parser.jar' do
|
403
|
+
fileset 'dir' => mirah_parser_build_dir, 'includes' => 'mirahparser/impl/*.class'
|
404
|
+
fileset 'dir' => mirah_parser_build_dir, 'includes' => 'mirahparser/lang/ast/*.class'
|
405
|
+
fileset 'dir' => mirah_parser_build_dir, 'includes' => 'org/mirahparser/ast/*.class'
|
406
|
+
zipfileset 'src' => 'mirah-parser/javalib/mmeta-runtime.jar'
|
407
|
+
_element 'rule', 'pattern'=>'mmeta.**', 'result'=>'org.mirahparser.mmeta.@1'
|
408
|
+
manifest do
|
409
|
+
attribute 'name'=>"Main-Class", 'value'=>"mirahparser.impl.MirahParser"
|
378
410
|
end
|
379
411
|
end
|
380
|
-
end # feature flag
|
381
412
|
end
|
382
413
|
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
414
|
+
file 'dist/mirah-parser.jar' => 'build/mirah-parser.jar' do
|
415
|
+
# Mirahc picks up the built in classes instead of our versions.
|
416
|
+
# So we compile in a different package and then jarjar them to the correct
|
417
|
+
# one.
|
418
|
+
ant.jarjar 'jarfile' => 'dist/mirah-parser.jar' do
|
419
|
+
zipfileset 'src' => 'build/mirah-parser.jar'
|
420
|
+
_element 'rule', 'pattern'=>'mirahparser.**', 'result'=>'mirah.@1'
|
421
|
+
_element 'rule', 'pattern'=>'org.mirahparser.**', 'result'=>'org.mirah.@1'
|
422
|
+
manifest do
|
423
|
+
attribute 'name'=>"Main-Class", 'value'=>"mirah.impl.MirahParser"
|
393
424
|
end
|
425
|
+
end
|
426
|
+
end
|
394
427
|
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
runjava('-Xmx512m',
|
399
|
-
old_jar,
|
400
|
-
'-d', build_dir,
|
401
|
-
'-classpath', default_class_path,
|
402
|
-
'--jvm', build_version,
|
403
|
-
*mirah_srcs)
|
404
|
-
|
428
|
+
file 'javalib/mirah-parser.jar' => 'dist/mirah-parser.jar' do
|
429
|
+
cp 'dist/mirah-parser.jar', 'javalib/mirah-parser.jar'
|
430
|
+
end
|
405
431
|
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
#
|
411
|
-
#
|
412
|
-
|
413
|
-
|
414
|
-
|
432
|
+
file "#{mirah_parser_build_dir}/mirahparser/impl/MirahParser.class" => [
|
433
|
+
prev_jar,
|
434
|
+
mirah_parser_gen_src,
|
435
|
+
parser_node_meta_class,
|
436
|
+
"#{mirah_parser_build_dir}/mirahparser/impl/MirahLexer.class",
|
437
|
+
#"#{mirah_parser_build_dir}/mirahparser/impl/Tokens.class",
|
438
|
+
] do
|
439
|
+
compile_mirah_with_jar prev_jar,
|
440
|
+
mirah_parser_build_dir,
|
441
|
+
[mirah_parser_gen_src],
|
442
|
+
[mirah_parser_build_dir,
|
443
|
+
'mirah-parser/javalib/mmeta-runtime.jar',
|
444
|
+
prev_jar],
|
445
|
+
clean=false
|
446
|
+
end
|
415
447
|
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
448
|
+
file parser_node_meta_class => parser_meta_src do
|
449
|
+
compile_mirah_with_jar prev_jar,
|
450
|
+
mirah_parser_build_dir,
|
451
|
+
[parser_meta_src],
|
452
|
+
[mirah_parser_build_dir, prev_jar],
|
453
|
+
clean=false
|
454
|
+
#mirahc(parser_meta_src,
|
455
|
+
# :dest => mirah_parser_build_dir
|
456
|
+
# #:options => ['-V']
|
457
|
+
# )
|
458
|
+
end
|
459
|
+
parser_ast_srcs = Dir['mirah-parser/src/mirah/lang/ast/*.mirah'].sort
|
460
|
+
file parser_node_class =>
|
461
|
+
[prev_jar, parser_node_meta_class] + parser_ast_srcs do
|
462
|
+
compile_mirah_with_jar prev_jar,
|
463
|
+
mirah_parser_build_dir,
|
464
|
+
parser_ast_srcs,
|
465
|
+
[mirah_parser_build_dir,
|
466
|
+
'mirah-parser/javalib/mmeta-runtime.jar', prev_jar],
|
467
|
+
clean = false
|
468
|
+
end
|
426
469
|
|
470
|
+
file parser_node_java_gen_src =>
|
471
|
+
[parser_node_meta_class] + parser_ast_srcs do
|
472
|
+
#TODO. --java is nolonger supported.
|
473
|
+
# compile_mirah_with_jar prev_jar,
|
474
|
+
# mirah_parser_build_dir,
|
475
|
+
# parser_ast_srcs,
|
476
|
+
# [mirah_parser_build_dir,
|
477
|
+
# 'mirah-parser/javalib/mmeta-runtime.jar']
|
478
|
+
|
479
|
+
mirahc('.',
|
480
|
+
:dir => 'mirah-parser/src/mirah/lang/ast',
|
481
|
+
:dest => 'build',
|
482
|
+
:classpath => ['build'],
|
483
|
+
:options => ['--java'])
|
484
|
+
end
|
427
485
|
|
486
|
+
parser_java_impl_src = Dir['mirah-parser/src/mirahparser/impl/*.java'].sort
|
487
|
+
parser_lexer_class = "#{mirah_parser_build_dir}/mirahparser/impl/MirahLexer.class"
|
488
|
+
file parser_lexer_class => parser_java_impl_src do
|
489
|
+
ant.javac 'srcDir' => 'mirah-parser/src',
|
490
|
+
'destDir' => mirah_parser_build_dir,
|
491
|
+
'source' => '1.6',
|
492
|
+
'target' => '1.6',
|
493
|
+
'debug' => true do
|
494
|
+
include 'name' => 'mirahparser/impl/Tokens.java'
|
495
|
+
include 'name' => 'mirahparser/impl/MirahLexer.java'
|
496
|
+
classpath 'path' => "#{mirah_parser_build_dir}:mirah-parser/javalib/mmeta-runtime.jar"
|
497
|
+
end
|
498
|
+
end
|
428
499
|
|
500
|
+
file mirah_parser_gen_src => 'mirah-parser/src/mirahparser/impl/Mirah.mmeta' do
|
501
|
+
ant.mkdir 'dir' => "#{mirah_parser_build_dir}-gen/mirahparser/impl"
|
502
|
+
runjava '-jar', 'mirah-parser/javalib/mmeta.jar',
|
503
|
+
'--tpl', 'node=mirah-parser/src/mirahparser/impl/node.xtm',
|
504
|
+
'mirah-parser/src/mirahparser/impl/Mirah.mmeta',
|
505
|
+
mirah_parser_gen_src
|
429
506
|
end
|
430
507
|
|
431
|
-
bootstrap_mirah_from('javalib/mirahc-prev.jar', 'dist/mirahc.jar')
|
432
|
-
bootstrap_mirah_from('dist/mirahc.jar', 'dist/mirahc2.jar')
|
433
|
-
bootstrap_mirah_from('dist/mirahc2.jar', 'dist/mirahc3.jar')
|
434
508
|
|
509
|
+
def build_version
|
510
|
+
# mirahc needs to be 1.7 or lower
|
511
|
+
java_version = java.lang.System.getProperty('java.specification.version')
|
512
|
+
if java_version.to_f > 1.7
|
513
|
+
'1.7'
|
514
|
+
else
|
515
|
+
java_version
|
516
|
+
end
|
517
|
+
end
|
435
518
|
|
436
|
-
def runjava(
|
437
|
-
sh 'java'
|
519
|
+
def runjava(*args)
|
520
|
+
sh 'java',*args
|
438
521
|
unless $?.success?
|
439
522
|
exit $?.exitstatus
|
440
523
|
end
|