mirah 0.1.0.pre-java → 0.1.1-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.
- data/History.txt +736 -0
- data/README.md +71 -0
- data/Rakefile +227 -73
- data/examples/Fib.class +0 -0
- data/examples/macros/{string-each-char.mirah → string_each_char.mirah} +2 -3
- data/examples/simple_class.mirah +3 -3
- data/examples/{dynamic.mirah → simple_class.mirah~} +7 -12
- data/javalib/mirah-bootstrap.jar +0 -0
- data/javalib/mirah-builtins.jar +0 -0
- data/javalib/mirah-compiler.jar +0 -0
- data/javalib/mirah-parser.jar +0 -0
- data/javalib/mirah-util.jar +0 -0
- data/lib/mirah.rb +8 -1
- data/lib/mirah/ast.rb +1 -1
- data/lib/mirah/ast/scope.rb +16 -0
- data/lib/mirah/commands/base.rb +1 -3
- data/lib/mirah/compiler.rb +17 -3
- data/lib/mirah/errors.rb +10 -10
- data/lib/mirah/generator.rb +21 -9
- data/lib/mirah/jvm/compiler.rb +17 -0
- data/lib/mirah/jvm/compiler/base.rb +24 -5
- data/lib/mirah/jvm/compiler/jvm_bytecode.rb +83 -20
- data/lib/mirah/jvm/method_lookup.rb +43 -22
- data/lib/mirah/jvm/types.rb +1 -2
- data/lib/mirah/jvm/types/array_type.rb +1 -6
- data/lib/mirah/jvm/types/ast_ext.rb +31 -0
- data/lib/mirah/jvm/types/basic_types.rb +1 -2
- data/lib/mirah/jvm/types/boolean.rb +11 -10
- data/lib/mirah/jvm/types/extensions.rb +14 -5
- data/lib/mirah/jvm/types/factory.rb +128 -43
- data/lib/mirah/jvm/types/floats.rb +8 -10
- data/lib/mirah/jvm/types/integers.rb +16 -9
- data/lib/mirah/jvm/types/intrinsics.rb +17 -69
- data/lib/mirah/jvm/types/meta_type.rb +5 -0
- data/lib/mirah/jvm/types/methods.rb +317 -151
- data/lib/mirah/jvm/types/methods.rb~ +973 -0
- data/lib/mirah/jvm/types/number.rb +29 -6
- data/lib/mirah/jvm/types/primitive_type.rb +35 -7
- data/lib/mirah/jvm/types/source_mirror.rb +11 -6
- data/lib/mirah/jvm/types/type.rb +52 -0
- data/lib/mirah/jvm/types/type_definition.rb +8 -2
- data/lib/mirah/transform/ast_ext.rb +9 -31
- data/lib/mirah/transform/transformer.rb +1 -1
- data/lib/mirah/typer.rb +2 -1
- data/lib/mirah/util/argument_processor.rb +10 -14
- data/lib/mirah/util/argument_processor.rb~ +146 -0
- data/lib/mirah/util/compilation_state.rb +15 -9
- data/lib/mirah/util/process_errors.rb +8 -2
- data/lib/mirah/version.rb +2 -2
- data/lib/mirah_task.rb +0 -7
- data/test/core/typer_test.rb +21 -13
- data/test/core/util/argument_processor_test.rb +19 -19
- data/test/core/util/class_loader_test.rb +19 -4
- data/test/core/util/compilation_state_test.rb +38 -0
- data/test/fixtures/org/foo/LowerCaseInnerClass$inner.class +0 -0
- data/test/fixtures/org/foo/LowerCaseInnerClass.class +0 -0
- data/test/fixtures/org/foo/LowerCaseInnerClass.java +7 -0
- data/test/jvm/blocks_test.rb +50 -29
- data/test/jvm/bytecode_test_helper.rb +71 -57
- data/test/jvm/cast_test.rb +162 -0
- data/test/jvm/constructors_test.rb +48 -0
- data/test/jvm/enumerable_test.rb +136 -7
- data/test/jvm/example_test.rb +39 -0
- data/test/jvm/factory_test.rb +6 -0
- data/test/jvm/generics_test.rb +0 -5
- data/test/jvm/import_test.rb +81 -0
- data/test/jvm/interface_test.rb +113 -0
- data/test/jvm/java_typer_test.rb +57 -11
- data/test/jvm/jvm_commands_test.rb +24 -0
- data/test/jvm/jvm_compiler_test.rb +186 -370
- data/test/jvm/macros_test.rb +67 -6
- data/test/jvm/main_method_test.rb +1 -1
- data/test/jvm/mirror_compilation_test_helper.rb +24 -0
- data/test/jvm/new_backend_test_helper.rb +25 -0
- data/test/jvm/rescue_test.rb +153 -18
- data/test/jvm/string_test.rb +41 -0
- data/test/jvm/varargs_test.rb +65 -0
- data/test/mirrors/base_type_test.rb +96 -0
- data/test/mirrors/bytecode_mirror_test.rb +86 -0
- data/test/mirrors/generics_test.rb +776 -0
- data/test/mirrors/member_test.rb +69 -0
- data/test/mirrors/method_lookup_test.rb +574 -0
- data/test/mirrors/mirrors_test.rb +562 -0
- data/test/mirrors/simple_async_mirror_loader_test.rb +110 -0
- data/test/mirrors/simple_mirror_loader_test.rb +104 -0
- data/test/test_helper.rb +2 -1
- metadata +244 -217
- data/README.txt +0 -59
- data/javalib/dynalink-0.2.jar +0 -0
- data/lib/mirah/jvm/typer.rb +0 -177
- data/lib/mirah/jvm/types/dynamic_type.rb +0 -45
- data/lib/mirah/jvm/types/unreachable_type.rb +0 -27
data/README.md
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
Mirah
|
|
2
|
+
================
|
|
3
|
+
|
|
4
|
+
[](http://travis-ci.org/mirah/mirah)
|
|
5
|
+
|
|
6
|
+
* http://groups.google.com/group/mirah
|
|
7
|
+
* http://github.com/mirah/mirah/issues
|
|
8
|
+
|
|
9
|
+
DESCRIPTION
|
|
10
|
+
-----------------
|
|
11
|
+
|
|
12
|
+
Mirah is a customizable programming language featuring static types,
|
|
13
|
+
local type inference and a heavily Ruby-inspired syntax. Mirah
|
|
14
|
+
currently includes a typer/compiler backend for the JVM which can
|
|
15
|
+
output JVM bytecode.
|
|
16
|
+
|
|
17
|
+
FEATURES
|
|
18
|
+
-----------------
|
|
19
|
+
|
|
20
|
+
* Ruby-like syntax
|
|
21
|
+
* Compiles to .class
|
|
22
|
+
* Fast as Java
|
|
23
|
+
* No runtime library
|
|
24
|
+
|
|
25
|
+
SYNOPSIS
|
|
26
|
+
-----------------
|
|
27
|
+
|
|
28
|
+
mirah <script.mirah>
|
|
29
|
+
mirah -e "inline script"
|
|
30
|
+
mirahc <script.mirah>
|
|
31
|
+
mirahc -e "inline script" # produces DashE.class
|
|
32
|
+
|
|
33
|
+
REQUIREMENTS
|
|
34
|
+
-----------------
|
|
35
|
+
|
|
36
|
+
* JRuby 1.6.0 or higher.
|
|
37
|
+
* BiteScript 0.0.8 or higher
|
|
38
|
+
|
|
39
|
+
INSTALL
|
|
40
|
+
-----------------
|
|
41
|
+
|
|
42
|
+
RUBY
|
|
43
|
+
-----------------
|
|
44
|
+
|
|
45
|
+
If your gem and rake are not from from JRuby, prefix the commands with `jruby -S`
|
|
46
|
+
|
|
47
|
+
$ gem install mirah
|
|
48
|
+
|
|
49
|
+
ZIP
|
|
50
|
+
-----------------
|
|
51
|
+
|
|
52
|
+
You can also install Mirah from a zip file. Download the latest stable
|
|
53
|
+
release from https://github.com/mirah/mirah/downloads.
|
|
54
|
+
Extract it, and add `bin` to your `$PATH` to be able to use `mirah`, `mirahc`, etc.
|
|
55
|
+
|
|
56
|
+
SOURCE
|
|
57
|
+
-----------------
|
|
58
|
+
|
|
59
|
+
To build and install from source, you'll need jruby 1.7.0 or
|
|
60
|
+
higher. Then just follow these commands.
|
|
61
|
+
|
|
62
|
+
$ git clone http://github.com/mirah/mirah.git
|
|
63
|
+
$ cd mirah
|
|
64
|
+
$ bundle install
|
|
65
|
+
$ rake gem
|
|
66
|
+
$ gem install pkg/mirah-*.gem
|
|
67
|
+
|
|
68
|
+
For Java tools
|
|
69
|
+
-----------------
|
|
70
|
+
|
|
71
|
+
To build the Mirah jar from source run `rake jar` in the mirah directory.
|
data/Rakefile
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) 2010 The Mirah project authors. All Rights Reserved.
|
|
1
|
+
# Copyright (c) 2010-2013 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");
|
|
@@ -29,9 +29,17 @@ end
|
|
|
29
29
|
|
|
30
30
|
bitescript_lib_dir = File.dirname Gem.find_files('bitescript').first
|
|
31
31
|
|
|
32
|
-
task :gem => 'jar:bootstrap'
|
|
33
|
-
task :bootstrap => ['javalib/mirah-bootstrap.jar', 'javalib/mirah-builtins.jar']
|
|
34
|
-
|
|
32
|
+
task :gem => ['jar:bootstrap', "javalib/mirah-compiler.jar", "javalib/mirah-mirrors.jar"]
|
|
33
|
+
task :bootstrap => ['javalib/mirah-bootstrap.jar', 'javalib/mirah-builtins.jar', 'javalib/mirah-util.jar']
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
task :default => :bytecode_ci
|
|
37
|
+
|
|
38
|
+
desc "run bytecode backend ci"
|
|
39
|
+
task :bytecode_ci => [:'test:core', :'test:jvm:bytecode']
|
|
40
|
+
desc "run new backend ci"
|
|
41
|
+
task :new_ci => [:'test:core', :'test:jvm:new']
|
|
42
|
+
|
|
35
43
|
def run_tests tests
|
|
36
44
|
results = tests.map do |name|
|
|
37
45
|
begin
|
|
@@ -50,7 +58,7 @@ end
|
|
|
50
58
|
|
|
51
59
|
desc "run full test suite"
|
|
52
60
|
task :test do
|
|
53
|
-
run_tests [ 'test:core', 'test:plugins', 'test:jvm' ]
|
|
61
|
+
run_tests [ 'test:core', 'test:plugins', 'test:jvm', 'test:jvm:new' ]
|
|
54
62
|
end
|
|
55
63
|
|
|
56
64
|
namespace :test do
|
|
@@ -75,15 +83,49 @@ namespace :test do
|
|
|
75
83
|
end
|
|
76
84
|
|
|
77
85
|
namespace :jvm do
|
|
86
|
+
task :test_setup => [:clean_tmp_test_directory, :build_test_fixtures]
|
|
87
|
+
|
|
78
88
|
desc "run jvm tests compiling to bytecode"
|
|
79
|
-
Rake::TestTask.new :bytecode => :bootstrap do |t|
|
|
89
|
+
Rake::TestTask.new :bytecode => [:bootstrap, :test_setup] do |t|
|
|
80
90
|
t.libs << 'test' <<'test/jvm'
|
|
81
91
|
t.ruby_opts.concat ["-r", "bytecode_test_helper"]
|
|
82
92
|
t.test_files = FileList["test/jvm/**/*test.rb"]
|
|
83
93
|
end
|
|
94
|
+
|
|
95
|
+
desc "run jvm tests using the new self hosted backend"
|
|
96
|
+
task :new do
|
|
97
|
+
run_tests ["test:jvm:new_backend", "test:jvm:mirrors"]
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
Rake::TestTask.new :new_backend => [:bootstrap, "javalib/mirah-compiler.jar", :test_setup] do |t|
|
|
101
|
+
t.libs << 'test' << 'test/jvm'
|
|
102
|
+
t.ruby_opts.concat ["-r", "new_backend_test_helper"]
|
|
103
|
+
t.test_files = FileList["test/jvm/**/*test.rb"]
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
desc "run tests for mirror type system"
|
|
107
|
+
Rake::TestTask.new :mirrors => "javalib/mirah-mirrors.jar" do |t|
|
|
108
|
+
t.libs << 'test'
|
|
109
|
+
t.test_files = FileList["test/mirrors/**/*test.rb"]
|
|
110
|
+
end
|
|
111
|
+
Rake::TestTask.new :mirror_compilation => "javalib/mirah-mirrors.jar" do |t|
|
|
112
|
+
t.libs << 'test' << 'test/jvm'
|
|
113
|
+
t.ruby_opts.concat ["-r", "mirror_compilation_test_helper"]
|
|
114
|
+
t.test_files = FileList["test/jvm/**/*test.rb"]
|
|
115
|
+
end
|
|
84
116
|
end
|
|
85
117
|
end
|
|
86
118
|
|
|
119
|
+
task :clean_tmp_test_directory do
|
|
120
|
+
FileUtils.rm_rf "tmp_test"
|
|
121
|
+
FileUtils.mkdir_p "tmp_test"
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
task :build_test_fixtures do
|
|
125
|
+
ant.javac 'destdir' => "tmp_test", 'srcdir' => 'test/fixtures',
|
|
126
|
+
'includeantruntime' => false, 'debug' => true, 'listfiles' => true
|
|
127
|
+
end
|
|
128
|
+
|
|
87
129
|
task :init do
|
|
88
130
|
mkdir_p 'dist'
|
|
89
131
|
mkdir_p 'build'
|
|
@@ -91,42 +133,31 @@ end
|
|
|
91
133
|
|
|
92
134
|
desc "clean up build artifacts"
|
|
93
135
|
task :clean do
|
|
94
|
-
ant.delete
|
|
95
|
-
ant.delete
|
|
96
|
-
|
|
97
|
-
|
|
136
|
+
ant.delete 'quiet' => true, 'dir' => 'build'
|
|
137
|
+
ant.delete 'quiet' => true, 'dir' => 'dist'
|
|
138
|
+
rm_f 'javalib/mirah-bootstrap.jar'
|
|
139
|
+
rm_f 'javalib/mirah-builtins.jar'
|
|
140
|
+
rm_f 'javalib/mirah-util.jar'
|
|
141
|
+
rm_rf 'tmp'
|
|
98
142
|
end
|
|
99
143
|
|
|
100
|
-
task :compile => [:init, :bootstrap]
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
puts "Compiling Ruby sources"
|
|
104
|
-
JRuby::Compiler.compile_argv([
|
|
105
|
-
'-t', 'build',
|
|
106
|
-
'--javac',
|
|
107
|
-
'src/org/mirah/mirah_command.rb'
|
|
108
|
-
])
|
|
109
|
-
|
|
110
|
-
# TODO compile ant stuff
|
|
111
|
-
|
|
112
|
-
# compile invokedynamic stuff
|
|
113
|
-
ant.javac :destdir => 'build', :srcdir => 'src',
|
|
114
|
-
:includes => 'org/mirah/DynalangBootstrap.java',
|
|
115
|
-
:classpath => 'javalib/dynalink-0.1.jar:javalib/jsr292-mock.jar',
|
|
116
|
-
:includeantruntime => false
|
|
117
|
-
end
|
|
144
|
+
task :compile => [:init, :bootstrap, :util, :jvm_backend]
|
|
145
|
+
task :util => 'javalib/mirah-util.jar'
|
|
146
|
+
task :jvm_backend => 'javalib/mirah-compiler.jar'
|
|
118
147
|
|
|
119
148
|
desc "build basic jar for distribution"
|
|
120
149
|
task :jar => :compile do
|
|
121
|
-
ant.jar
|
|
122
|
-
fileset
|
|
123
|
-
fileset
|
|
124
|
-
fileset
|
|
125
|
-
fileset
|
|
126
|
-
zipfileset
|
|
127
|
-
zipfileset
|
|
150
|
+
ant.jar 'jarfile' => 'dist/mirah.jar' do
|
|
151
|
+
fileset 'dir' => 'lib'
|
|
152
|
+
fileset 'dir' => 'build'
|
|
153
|
+
fileset 'dir' => '.', 'includes' => 'bin/*'
|
|
154
|
+
fileset 'dir' => bitescript_lib_dir
|
|
155
|
+
zipfileset 'src' => 'javalib/mirah-bootstrap.jar'
|
|
156
|
+
zipfileset 'src' => 'javalib/mirah-builtins.jar'
|
|
157
|
+
zipfileset 'src' => 'javalib/mirah-util.jar'
|
|
158
|
+
zipfileset 'src' => 'javalib/mirah-compiler.jar'
|
|
128
159
|
manifest do
|
|
129
|
-
attribute
|
|
160
|
+
attribute 'name' => 'Main-Class', 'value' => 'org.mirah.MirahCommand'
|
|
130
161
|
end
|
|
131
162
|
end
|
|
132
163
|
end
|
|
@@ -134,13 +165,12 @@ end
|
|
|
134
165
|
namespace :jar do
|
|
135
166
|
desc "build self-contained, complete jar"
|
|
136
167
|
task :complete => :jar do
|
|
137
|
-
ant.jar
|
|
138
|
-
zipfileset
|
|
139
|
-
zipfileset
|
|
140
|
-
zipfileset
|
|
141
|
-
zipfileset :src => 'javalib/dynalink-0.2.jar'
|
|
168
|
+
ant.jar 'jarfile' => 'dist/mirah-complete.jar' do
|
|
169
|
+
zipfileset 'src' => 'dist/mirah.jar'
|
|
170
|
+
zipfileset 'src' => 'javalib/jruby-complete.jar'
|
|
171
|
+
zipfileset 'src' => 'javalib/mirah-parser.jar'
|
|
142
172
|
manifest do
|
|
143
|
-
attribute
|
|
173
|
+
attribute 'name' => 'Main-Class', 'value' => 'org.mirah.MirahCommand'
|
|
144
174
|
end
|
|
145
175
|
end
|
|
146
176
|
end
|
|
@@ -160,7 +190,7 @@ task :zip => 'jar:complete' do
|
|
|
160
190
|
cp Dir['{distbin/*.bat}'], "#{basedir}/bin/"
|
|
161
191
|
cp_r 'examples', "#{basedir}/examples"
|
|
162
192
|
rm_rf "#{basedir}/examples/wiki"
|
|
163
|
-
cp 'README.
|
|
193
|
+
cp 'README.md', "#{basedir}"
|
|
164
194
|
cp 'NOTICE', "#{basedir}"
|
|
165
195
|
cp 'LICENSE', "#{basedir}"
|
|
166
196
|
cp 'History.txt', "#{basedir}"
|
|
@@ -184,64 +214,171 @@ end
|
|
|
184
214
|
file 'javalib/mirah-bootstrap.jar' => ['javalib/mirah-newast-transitional.jar',
|
|
185
215
|
'src/org/mirah/MirahClassLoader.java',
|
|
186
216
|
'src/org/mirah/IsolatedResourceLoader.java',
|
|
187
|
-
'src/org/mirah/MirahLogFormatter.mirah'
|
|
217
|
+
'src/org/mirah/MirahLogFormatter.mirah',
|
|
218
|
+
'src/org/mirah/util/simple_diagnostics.mirah'] +
|
|
188
219
|
Dir['src/org/mirah/{macros,typer}/*.mirah'] +
|
|
189
220
|
Dir['src/org/mirah/typer/simple/*.mirah'] +
|
|
190
221
|
Dir['src/org/mirah/macros/anno/*.java'] do
|
|
191
|
-
|
|
192
|
-
|
|
222
|
+
build_dir = 'build/bootstrap'
|
|
223
|
+
rm_rf build_dir
|
|
224
|
+
mkdir_p build_dir
|
|
193
225
|
|
|
194
226
|
# Compile annotations and class loader
|
|
195
|
-
ant.javac
|
|
196
|
-
|
|
227
|
+
ant.javac 'destdir' => build_dir, 'srcdir' => 'src',
|
|
228
|
+
'includeantruntime' => false, 'debug' => true, 'listfiles' => true
|
|
197
229
|
|
|
198
230
|
# Compile the Typer and Macro compiler
|
|
199
231
|
bootstrap_mirahc('src/org/mirah/macros', 'src/org/mirah/MirahLogFormatter.mirah', 'src/org/mirah/typer',
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
232
|
+
'src/org/mirah/util/simple_diagnostics.mirah',
|
|
233
|
+
:classpath => ['javalib/mirah-parser.jar', 'build/bootstrap'],
|
|
234
|
+
:dest => build_dir
|
|
235
|
+
# :options => ['-V']
|
|
236
|
+
)
|
|
204
237
|
add_quote_macro
|
|
205
|
-
cp Dir['src/org/mirah/macros/*.tpl'],
|
|
238
|
+
cp Dir['src/org/mirah/macros/*.tpl'], "#{build_dir}/org/mirah/macros"
|
|
206
239
|
|
|
207
240
|
# Build the jar
|
|
208
|
-
ant.jar
|
|
209
|
-
fileset
|
|
241
|
+
ant.jar 'jarfile' => 'javalib/mirah-bootstrap.jar' do
|
|
242
|
+
fileset 'dir' => build_dir
|
|
210
243
|
end
|
|
244
|
+
end
|
|
211
245
|
|
|
212
|
-
|
|
246
|
+
|
|
247
|
+
file 'javalib/mirah-util.jar' do
|
|
248
|
+
require 'mirah'
|
|
249
|
+
build_dir = 'build/util'
|
|
250
|
+
rm_rf build_dir
|
|
251
|
+
mkdir_p build_dir
|
|
252
|
+
|
|
253
|
+
# build the Ruby sources
|
|
254
|
+
puts "Compiling Ruby sources"
|
|
255
|
+
JRuby::Compiler.compile_argv([
|
|
256
|
+
'-t', build_dir,
|
|
257
|
+
'--javac',
|
|
258
|
+
'src/org/mirah/mirah_command.rb'
|
|
259
|
+
])
|
|
260
|
+
|
|
261
|
+
# compile ant stuff
|
|
262
|
+
ant_classpath = $CLASSPATH.grep(/ant/).map{|x| x.sub(/^file:/,'')}.join(File::PATH_SEPARATOR)
|
|
263
|
+
sh *%W(jruby -Ilib bin/mirahc --classpath #{ant_classpath}:#{build_dir} --dest #{build_dir} src/org/mirah/ant)
|
|
264
|
+
|
|
265
|
+
# compile invokedynamic stuff
|
|
266
|
+
ant.javac 'destdir' => build_dir, 'srcdir' => 'src',
|
|
267
|
+
'includes' => 'org/mirah/DynalangBootstrap.java',
|
|
268
|
+
'classpath' => 'javalib/dynalink-0.1.jar:javalib/jsr292-mock.jar',
|
|
269
|
+
'includeantruntime' => false
|
|
270
|
+
|
|
271
|
+
# Build the jar
|
|
272
|
+
ant.jar 'jarfile' => 'javalib/mirah-util.jar' do
|
|
273
|
+
fileset 'dir' => build_dir
|
|
274
|
+
end
|
|
213
275
|
end
|
|
214
276
|
|
|
277
|
+
|
|
215
278
|
file 'javalib/mirah-builtins.jar' => ['javalib/mirah-bootstrap.jar'] + Dir['src/org/mirah/builtins/*.mirah'] do
|
|
216
279
|
rm_f 'javalib/mirah-builtins.jar'
|
|
217
280
|
rm_rf 'build/builtins'
|
|
218
281
|
mkdir_p 'build/builtins'
|
|
219
282
|
sh *%w(jruby -Ilib bin/mirahc --dest build/builtins src/org/mirah/builtins)
|
|
220
|
-
ant.jar
|
|
221
|
-
fileset
|
|
283
|
+
ant.jar 'jarfile' => 'javalib/mirah-builtins.jar' do
|
|
284
|
+
fileset 'dir' => 'build/builtins'
|
|
222
285
|
end
|
|
223
286
|
rm_rf 'build/builtins'
|
|
224
287
|
end
|
|
225
288
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
289
|
+
file 'javalib/mirah-compiler.jar' => ['javalib/mirah-builtins.jar'] + Dir['src/org/mirah/{util,jvm/types,jvm/compiler}/*.mirah'] do
|
|
290
|
+
rm_f 'javalib/mirah-compiler.jar'
|
|
291
|
+
rm_rf 'build/compiler'
|
|
292
|
+
mkdir_p 'build/compiler'
|
|
293
|
+
phase3_files = Dir['src/org/mirah/jvm/compiler/{class,interface,script}_compiler.mirah'] + ['src/org/mirah/jvm/compiler/backend.mirah']
|
|
294
|
+
phase2_files = Dir['src/org/mirah/jvm/compiler/{condition,method,string}_compiler.mirah']
|
|
295
|
+
phase1_files = Dir['src/org/mirah/jvm/compiler/*.mirah'] - phase2_files - phase3_files
|
|
296
|
+
sh *(%w(jruby -Ilib bin/mirahc --dest build/compiler ) +
|
|
297
|
+
%w(--classpath javalib/mirah-parser.jar:javalib/mirah-bootstrap.jar) +
|
|
298
|
+
%w(src/org/mirah/util src/org/mirah/jvm/types src/org/mirah/jvm/compiler/base_compiler.mirah))
|
|
299
|
+
sh *(%w(jruby -Ilib bin/mirahc --dest build/compiler ) +
|
|
300
|
+
%w(--classpath javalib/mirah-parser.jar:javalib/mirah-bootstrap.jar:build/compiler) +
|
|
301
|
+
%w(src/org/mirah/util/context.mirah) + phase1_files)
|
|
302
|
+
sh *(%w(jruby -Ilib bin/mirahc --dest build/compiler ) +
|
|
303
|
+
%w(--classpath javalib/mirah-parser.jar:javalib/mirah-bootstrap.jar:build/compiler) +
|
|
304
|
+
%w(src/org/mirah/util/context.mirah) + phase2_files)
|
|
305
|
+
sh *(%w(jruby -Ilib bin/mirahc --dest build/compiler ) +
|
|
306
|
+
%w(--classpath javalib/mirah-parser.jar:javalib/mirah-bootstrap.jar:build/compiler) +
|
|
307
|
+
%w(src/org/mirah/util/context.mirah) + phase3_files)
|
|
308
|
+
ant.jar 'jarfile' => 'javalib/mirah-compiler.jar' do
|
|
309
|
+
fileset 'dir' => 'build/compiler'
|
|
310
|
+
end
|
|
311
|
+
rm_rf 'build/compiler'
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
file 'javalib/mirah-mirrors.jar' => ['javalib/mirah-compiler.jar'] + Dir['src/org/mirah/jvm/mirrors/**/*.mirah','src/org/mirah/jvm/model/**/*.mirah'] do
|
|
315
|
+
rm_f 'javalib/mirah-mirrors.jar'
|
|
316
|
+
rm_rf 'build/mirrors'
|
|
317
|
+
mkdir_p 'build/mirrors'
|
|
318
|
+
sh *(%w(jruby -Ilib bin/mirahc -N --dest build/mirrors ) +
|
|
319
|
+
%w(--classpath javalib/mirah-parser.jar:javalib/mirah-bootstrap.jar:javalib/mirah-compiler.jar) +
|
|
320
|
+
%w(src/org/mirah/jvm/mirrors/ src/org/mirah/jvm/model/))
|
|
321
|
+
ant.jar 'jarfile' => 'javalib/mirah-mirrors.jar' do
|
|
322
|
+
fileset 'dir' => 'build/mirrors'
|
|
323
|
+
end
|
|
324
|
+
rm_rf 'build/mirrors'
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
def find_jruby_jar
|
|
328
|
+
require 'java'
|
|
329
|
+
java_import 'org.jruby.Ruby'
|
|
330
|
+
path = Ruby.java_class.resource('Ruby.class').toString
|
|
331
|
+
path =~ %r{^jar:file:(.+)!/org/jruby/Ruby.class}
|
|
332
|
+
$1
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
file 'javalib/mirahc.jar' => ['javalib/mirah-mirrors.jar',
|
|
336
|
+
'src/org/mirah/tool/mirahc.mirah',
|
|
337
|
+
] do
|
|
338
|
+
rm_f 'javalib/mirahc.jar'
|
|
339
|
+
rm_rf 'build/mirahc'
|
|
340
|
+
mkdir_p 'build/mirahc'
|
|
341
|
+
sh *(%w(jruby -Ilib bin/mirahc -N --dest build/mirahc ) +
|
|
342
|
+
%w(--classpath javalib/mirah-parser.jar:javalib/mirah-bootstrap.jar:javalib/mirah-compiler.jar:javalib/mirah-mirrors.jar) +
|
|
343
|
+
%w(src/org/mirah/tool/))
|
|
344
|
+
ant.jar :jarfile => 'javalib/mirahc.jar' do
|
|
345
|
+
fileset :dir => 'build/mirahc'
|
|
346
|
+
zipfileset :src => 'javalib/mirah-bootstrap.jar'
|
|
347
|
+
zipfileset :src => 'javalib/mirah-builtins.jar'
|
|
348
|
+
zipfileset :src => 'javalib/mirah-util.jar'
|
|
349
|
+
zipfileset :src => 'javalib/mirah-compiler.jar'
|
|
350
|
+
zipfileset :src => 'javalib/mirah-mirrors.jar'
|
|
351
|
+
zipfileset :src => find_jruby_jar, :includes => 'org/jruby/org/objectweb/**/*'
|
|
352
|
+
zipfileset :src => 'javalib/mirah-parser.jar'
|
|
353
|
+
manifest do
|
|
354
|
+
attribute :name => 'Main-Class', :value => 'org.mirah.tool.Mirahc'
|
|
355
|
+
end
|
|
236
356
|
end
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
if Float(JRUBY_VERSION[0..2]) >= 1.7
|
|
360
|
+
require 'bitescript'
|
|
361
|
+
class Annotater < BiteScript::ASM::ClassVisitor
|
|
362
|
+
def initialize(filename, &block)
|
|
363
|
+
cr = BiteScript::ASM::ClassReader.new(java.io.FileInputStream.new(filename))
|
|
364
|
+
cw = BiteScript::ASM::ClassWriter.new(0)
|
|
365
|
+
super(BiteScript::ASM::Opcodes::ASM4, cw)
|
|
366
|
+
@block = block
|
|
367
|
+
cr.accept(self, 0)
|
|
368
|
+
f = java.io.FileOutputStream.new(filename)
|
|
369
|
+
f.write(cw.toByteArray)
|
|
370
|
+
f.close
|
|
371
|
+
end
|
|
372
|
+
def visitSource(*args); end
|
|
373
|
+
def visit(version, access, name, sig, superclass, interfaces)
|
|
374
|
+
super
|
|
375
|
+
@block.call(self)
|
|
376
|
+
end
|
|
241
377
|
end
|
|
242
378
|
end
|
|
243
379
|
|
|
244
380
|
def add_quote_macro
|
|
381
|
+
raise "Can't compile on JRuby less than 1.7" unless defined?(Annotater)
|
|
245
382
|
Annotater.new('build/bootstrap/org/mirah/macros/QuoteMacro.class') do |klass|
|
|
246
383
|
av = klass.visitAnnotation('Lorg/mirah/macros/anno/MacroDef;', true)
|
|
247
384
|
av.visit("name", "quote")
|
|
@@ -252,6 +389,16 @@ def add_quote_macro
|
|
|
252
389
|
args.visitEnd
|
|
253
390
|
av.visitEnd
|
|
254
391
|
end
|
|
392
|
+
Annotater.new('build/bootstrap/org/mirah/macros/CompilerQuoteMacro.class') do |klass|
|
|
393
|
+
av = klass.visitAnnotation('Lorg/mirah/macros/anno/MacroDef;', true)
|
|
394
|
+
av.visit("name", "quote")
|
|
395
|
+
args = av.visitAnnotation('arguments', 'Lorg/mirah/macros/anno/MacroArgs;')
|
|
396
|
+
req = args.visitArray('required')
|
|
397
|
+
req.visit(nil, 'mirah.lang.ast.Block')
|
|
398
|
+
req.visitEnd
|
|
399
|
+
args.visitEnd
|
|
400
|
+
av.visitEnd
|
|
401
|
+
end
|
|
255
402
|
Annotater.new('build/bootstrap/org/mirah/macros/Macro.class') do |klass|
|
|
256
403
|
av = klass.visitAnnotation('Lorg/mirah/macros/anno/Extensions;', false)
|
|
257
404
|
macros = av.visitArray('macros')
|
|
@@ -259,6 +406,13 @@ def add_quote_macro
|
|
|
259
406
|
macros.visitEnd
|
|
260
407
|
av.visitEnd
|
|
261
408
|
end
|
|
409
|
+
Annotater.new('build/bootstrap/org/mirah/macros/Compiler.class') do |klass|
|
|
410
|
+
av = klass.visitAnnotation('Lorg/mirah/macros/anno/Extensions;', false)
|
|
411
|
+
macros = av.visitArray('macros')
|
|
412
|
+
macros.visit(nil, 'org.mirah.macros.CompilerQuoteMacro')
|
|
413
|
+
macros.visitEnd
|
|
414
|
+
av.visitEnd
|
|
415
|
+
end
|
|
262
416
|
end
|
|
263
417
|
|
|
264
418
|
def bootstrap_mirahc(*paths)
|
|
@@ -271,7 +425,7 @@ def bootstrap_mirahc(*paths)
|
|
|
271
425
|
if options[:classpath]
|
|
272
426
|
args << '--classpath' << options[:classpath].map {|p| File.expand_path(p)}.join(File::PATH_SEPARATOR)
|
|
273
427
|
end
|
|
274
|
-
args << '-d' << File.expand_path(options[:dest])
|
|
428
|
+
args << '-d' << File.expand_path(options[:dest]) << '--jvm' << '1.5'
|
|
275
429
|
jarfile = File.expand_path('javalib/mirah-newast-transitional.jar')
|
|
276
430
|
Dir.chdir(options[:dir] || '.') do
|
|
277
431
|
runjava(jarfile, 'compile', *(args + paths))
|