mirah 0.1.4-java → 0.2.0-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/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
|