mirah 0.0.4-java → 0.0.5-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 +23 -0
- data/README.txt +13 -5
- data/Rakefile +30 -2
- data/bin/duby +16 -0
- data/bin/dubyc +16 -0
- data/bin/dubyp +16 -0
- data/bin/jrubyp +16 -0
- data/bin/mirah +17 -1
- data/bin/mirah.cmd +15 -0
- data/bin/mirahc +17 -1
- data/bin/mirahc.cmd +16 -1
- data/bin/mirahp +17 -1
- data/bin/mirahp.cmd +16 -1
- data/examples/appengine/Rakefile +17 -2
- data/examples/appengine/src/org/mirah/MirahApp.mirah +15 -0
- data/examples/bintrees.mirah +15 -0
- data/examples/construction.mirah +15 -0
- data/examples/dynamic.mirah +15 -0
- data/examples/edb.mirah +15 -0
- data/examples/fib.mirah +15 -0
- data/examples/fields.mirah +15 -0
- data/examples/fractal.mirah +15 -0
- data/examples/java_thing.mirah +15 -0
- data/examples/plugins/appengine/Rakefile +19 -4
- data/examples/plugins/appengine/lib/com/google/appengine/ext/duby/db/datastore.rb +21 -6
- data/examples/plugins/appengine/src/com/google/appengine/ext/duby/db/Model.duby +15 -0
- data/examples/plugins/appengine/test/com/google/appengine/ext/duby/db/ModelTest.duby +15 -0
- data/examples/simple_class.mirah +16 -1
- data/examples/sort_closure.mirah +15 -0
- data/examples/swing.mirah +17 -2
- data/examples/tak.mirah +15 -0
- data/examples/wiki/Rakefile +17 -2
- data/examples/wiki/src/org/mirah/wiki/MirahWiki.duby +15 -0
- data/examples/wiki/war/src/org/mirah/wiki/MirahWiki.duby +339 -0
- data/examples/wiki/war/src/org/mirah/wiki/edit.eduby.html +42 -0
- data/examples/wiki/war/src/org/mirah/wiki/error.eduby.html +2 -0
- data/examples/wiki/war/src/org/mirah/wiki/layout.eduby.html +69 -0
- data/examples/wiki/war/src/org/mirah/wiki/parser.eduby.html +7 -0
- data/examples/wiki/war/src/org/mirah/wiki/view.eduby.html +15 -0
- data/javalib/mirah-bootstrap.jar +0 -0
- data/javalib/mirah-parser.jar +0 -0
- data/lib/duby.rb +15 -0
- data/lib/mirah/appengine_tasks.rb +20 -6
- data/lib/mirah/ast/call.rb +19 -4
- data/lib/mirah/ast/class.rb +19 -4
- data/lib/mirah/ast/flow.rb +16 -1
- data/lib/mirah/ast/intrinsics.rb +36 -21
- data/lib/mirah/ast/literal.rb +16 -1
- data/lib/mirah/ast/local.rb +16 -1
- data/lib/mirah/ast/method.rb +18 -3
- data/lib/mirah/ast/scope.rb +19 -4
- data/lib/mirah/ast/structure.rb +16 -1
- data/lib/mirah/ast/type.rb +24 -9
- data/lib/mirah/ast.rb +24 -9
- data/lib/mirah/compiler.rb +16 -1
- data/lib/mirah/env.rb +16 -1
- data/lib/mirah/jvm/base.rb +18 -3
- data/lib/mirah/jvm/compiler.rb +35 -21
- data/lib/mirah/jvm/method_lookup.rb +16 -1
- data/lib/mirah/jvm/source_compiler.rb +29 -14
- data/lib/mirah/jvm/source_generator/builder.rb +21 -6
- data/lib/mirah/jvm/source_generator/loops.rb +16 -1
- data/lib/mirah/jvm/source_generator/precompile.rb +17 -2
- data/lib/mirah/jvm/source_generator/typer.rb +17 -2
- data/lib/mirah/jvm/typer.rb +19 -4
- data/lib/mirah/jvm/types/basic_types.rb +16 -1
- data/lib/mirah/jvm/types/boolean.rb +17 -2
- data/lib/mirah/jvm/types/enumerable.rb +21 -6
- data/lib/mirah/jvm/types/extensions.rb +16 -1
- data/lib/mirah/jvm/types/factory.rb +18 -3
- data/lib/mirah/jvm/types/floats.rb +16 -1
- data/lib/mirah/jvm/types/integers.rb +22 -7
- data/lib/mirah/jvm/types/intrinsics.rb +29 -14
- data/lib/mirah/jvm/types/literals.rb +16 -1
- data/lib/mirah/jvm/types/methods.rb +24 -9
- data/lib/mirah/jvm/types/number.rb +16 -1
- data/lib/mirah/jvm/types.rb +23 -4
- data/lib/mirah/nbcompiler.rb +19 -4
- data/lib/mirah/plugin/edb.rb +18 -3
- data/lib/mirah/plugin/gwt.rb +22 -7
- data/lib/mirah/plugin/java.rb +18 -3
- data/lib/mirah/transform.rb +35 -20
- data/lib/mirah/transform2.rb +20 -5
- data/lib/mirah/typer.rb +23 -8
- data/lib/mirah/version.rb +18 -0
- data/lib/mirah.rb +101 -50
- data/lib/mirah_task.rb +27 -12
- data/test/test_ast.rb +16 -1
- data/test/test_compilation.rb +18 -3
- data/test/test_env.rb +26 -11
- data/test/test_gwt.rb +18 -3
- data/test/test_java_typer.rb +27 -12
- data/test/test_javac_compiler.rb +17 -2
- data/test/test_jvm_compiler.rb +44 -14
- data/test/test_typer.rb +16 -1
- metadata +203 -193
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
|
5
|
+
<title><%=h @title %></title>
|
|
6
|
+
<link type="text/css" rel="stylesheet" href="/stylesheets/main.css">
|
|
7
|
+
<link href="/stylesheets/prettify.css" type="text/css" rel="stylesheet" />
|
|
8
|
+
<script type="text/javascript" src="/javascripts/prettify.js"></script>
|
|
9
|
+
</head>
|
|
10
|
+
<body onload="prettyPrint()">
|
|
11
|
+
<div id="page">
|
|
12
|
+
<div id="sidebar">
|
|
13
|
+
|
|
14
|
+
<h1>Mirah</h1>
|
|
15
|
+
|
|
16
|
+
<ul id="sidebar-items">
|
|
17
|
+
|
|
18
|
+
<li>
|
|
19
|
+
<h3>Join the community</h3>
|
|
20
|
+
<ul class="links">
|
|
21
|
+
<li><a href="/">Home Page</a></li>
|
|
22
|
+
<li><a href="http://github.com/mirah/mirah">github</a></li>
|
|
23
|
+
<li><a href="/wiki/Resources">Resources</a></li>
|
|
24
|
+
<li><a href="/wiki/MirahHowto">Howto</a></li>
|
|
25
|
+
<li><a
|
|
26
|
+
href="http://groups.google.com/group/mirah/"
|
|
27
|
+
target="_new">Send Feedback</a></li>
|
|
28
|
+
</ul>
|
|
29
|
+
</li>
|
|
30
|
+
|
|
31
|
+
<li>
|
|
32
|
+
<h3>Sample Apps</h3>
|
|
33
|
+
<ul class="links">
|
|
34
|
+
<li><a href="http://github.com/mirah/mirah/tree/master/examples/appengine/">Guestbook</a> |
|
|
35
|
+
<a href="http://github.com/jacortinas/appengine-rails-jquery-demo">Mustache</a></li>
|
|
36
|
+
</ul>
|
|
37
|
+
<a href="/wiki/MirahSamples">Sample Code</a>
|
|
38
|
+
</li>
|
|
39
|
+
|
|
40
|
+
<li>
|
|
41
|
+
<h3>Mirah Videos</h3>
|
|
42
|
+
<ul class="links">
|
|
43
|
+
<li><a href="http://www.youtube.com/watch?v=08rNKxW0PPo">ribrdb</a> |
|
|
44
|
+
<a href="http://confreaks.net/videos/196-rubyconf2009-ruby-mutants">headius</a></li>
|
|
45
|
+
</ul>
|
|
46
|
+
</li>
|
|
47
|
+
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
<div id="content">
|
|
51
|
+
<div id=hlinks>
|
|
52
|
+
<% if user %>
|
|
53
|
+
<%=h user.getEmail %> |
|
|
54
|
+
<% extra_links.each do |_pair|;pair = List(_pair) %>
|
|
55
|
+
<a href="<%=h pair.get(1)%>"><%=h pair.get(0)%></a> |
|
|
56
|
+
<% end %>
|
|
57
|
+
<a href="<%=h users.createLogoutURL('/')%>">Sign Out</a>
|
|
58
|
+
<% else %>
|
|
59
|
+
<a href="<%=users.createLoginURL(url)%>">Sign In</a>
|
|
60
|
+
<% end %>
|
|
61
|
+
</div>
|
|
62
|
+
<div id=wikicontent>
|
|
63
|
+
<%= @content %>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
</body>
|
|
68
|
+
</html>
|
|
69
|
+
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
function newPage() {
|
|
3
|
+
var p=prompt('Page name', '')
|
|
4
|
+
if (p) {
|
|
5
|
+
document.location = '/edit/' + p
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
</script>
|
|
9
|
+
<% if @page %>
|
|
10
|
+
<%= markdown @page.body %>
|
|
11
|
+
<% else %>
|
|
12
|
+
<h1><%=h @name%></h1>
|
|
13
|
+
<p>That page does not exist. Click <a href="/edit/<%=h @name%>">here</a>
|
|
14
|
+
to create it.</p>
|
|
15
|
+
<% end%>
|
data/javalib/mirah-bootstrap.jar
CHANGED
|
Binary file
|
data/javalib/mirah-parser.jar
CHANGED
|
Binary file
|
data/lib/duby.rb
CHANGED
|
@@ -1,2 +1,17 @@
|
|
|
1
|
+
# Copyright (c) 2010 The Mirah project authors. All Rights Reserved.
|
|
2
|
+
# All contributing project authors may be found in the NOTICE file.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
1
16
|
puts "WARNING: Duby is now Mirah. Please require 'mirah'."
|
|
2
17
|
require File.dirname(__FILE__) + '/mirah'
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
# Copyright (c) 2010 The Mirah project authors. All Rights Reserved.
|
|
2
|
+
# All contributing project authors may be found in the NOTICE file.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
1
16
|
require 'appengine-sdk'
|
|
2
17
|
require 'mirah_task'
|
|
3
18
|
require 'java'
|
|
@@ -6,8 +21,7 @@ require 'rake'
|
|
|
6
21
|
require 'yaml'
|
|
7
22
|
|
|
8
23
|
module AppEngine::Rake
|
|
9
|
-
SERVLET = AppEngine::SDK::SDK_ROOT +
|
|
10
|
-
'/lib/shared/geronimo-servlet_2.5_spec-1.2.jar'
|
|
24
|
+
SERVLET = AppEngine::SDK::SDK_ROOT + '/lib/shared/servlet-api.jar'
|
|
11
25
|
APIS = AppEngine::SDK::API_JAR
|
|
12
26
|
TOOLS = AppEngine::SDK::TOOLS_JAR
|
|
13
27
|
|
|
@@ -30,8 +44,8 @@ module AppEngine::Rake
|
|
|
30
44
|
webinf_lib_jars.each do |jar|
|
|
31
45
|
$CLASSPATH << jar unless $CLASSPATH.include?(jar)
|
|
32
46
|
end
|
|
33
|
-
|
|
34
|
-
|
|
47
|
+
Mirah.source_paths << src
|
|
48
|
+
Mirah.dest_paths << webinf_classes
|
|
35
49
|
directory(webinf_classes)
|
|
36
50
|
directory(webinf_lib)
|
|
37
51
|
|
|
@@ -108,7 +122,7 @@ module AppEngine::Rake
|
|
|
108
122
|
end
|
|
109
123
|
|
|
110
124
|
def app_yaml
|
|
111
|
-
@war + '/app.yaml'
|
|
125
|
+
@war + '/WEB-INF/app.yaml'
|
|
112
126
|
end
|
|
113
127
|
|
|
114
128
|
def webinf_classes
|
|
@@ -143,4 +157,4 @@ def appengine_app(*args, &block)
|
|
|
143
157
|
war = File.expand_path(war || 'war')
|
|
144
158
|
task.init(src, war)
|
|
145
159
|
task
|
|
146
|
-
end
|
|
160
|
+
end
|
data/lib/mirah/ast/call.rb
CHANGED
|
@@ -1,6 +1,21 @@
|
|
|
1
|
+
# Copyright (c) 2010 The Mirah project authors. All Rights Reserved.
|
|
2
|
+
# All contributing project authors may be found in the NOTICE file.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
1
16
|
require 'delegate'
|
|
2
17
|
|
|
3
|
-
module
|
|
18
|
+
module Mirah::AST
|
|
4
19
|
class NodeProxy < DelegateClass(Node)
|
|
5
20
|
include Java::DubyLangCompiler::Node
|
|
6
21
|
def __inline__(node)
|
|
@@ -89,7 +104,7 @@ module Duby::AST
|
|
|
89
104
|
typer.infer(param) || should_defer = true
|
|
90
105
|
end
|
|
91
106
|
|
|
92
|
-
parameter_types <<
|
|
107
|
+
parameter_types << Mirah::AST.block_type if block
|
|
93
108
|
|
|
94
109
|
unless should_defer
|
|
95
110
|
if parameters.size == 1 && typer.known_type(scope, name)
|
|
@@ -189,7 +204,7 @@ module Duby::AST
|
|
|
189
204
|
typer.infer(param) || should_defer = true
|
|
190
205
|
end
|
|
191
206
|
|
|
192
|
-
parameter_types <<
|
|
207
|
+
parameter_types << Mirah::AST.block_type if block
|
|
193
208
|
|
|
194
209
|
unless should_defer
|
|
195
210
|
@inferred_type = typer.method_type(receiver_type, name,
|
|
@@ -254,7 +269,7 @@ module Duby::AST
|
|
|
254
269
|
begin
|
|
255
270
|
typer.type_reference(scope, class_name, array)
|
|
256
271
|
rescue NameError => ex
|
|
257
|
-
typer.known_types[class_name] =
|
|
272
|
+
typer.known_types[class_name] = Mirah::AST.error_type
|
|
258
273
|
raise ex
|
|
259
274
|
end
|
|
260
275
|
end
|
data/lib/mirah/ast/class.rb
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
# Copyright (c) 2010 The Mirah project authors. All Rights Reserved.
|
|
2
|
+
# All contributing project authors may be found in the NOTICE file.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
module Mirah::AST
|
|
2
17
|
class ClassDefinition < Node
|
|
3
18
|
include Annotated
|
|
4
19
|
include Named
|
|
@@ -19,8 +34,8 @@ module Duby::AST
|
|
|
19
34
|
@interface_nodes = []
|
|
20
35
|
@name = name
|
|
21
36
|
self.parent = parent
|
|
22
|
-
if
|
|
23
|
-
|
|
37
|
+
if Mirah::AST.type_factory.respond_to? :define_type
|
|
38
|
+
Mirah::AST.type_factory.define_type(self)
|
|
24
39
|
end
|
|
25
40
|
# We need somewhere to collect nodes that get appended during
|
|
26
41
|
# the transform phase.
|
|
@@ -103,7 +118,7 @@ module Duby::AST
|
|
|
103
118
|
def implements(*types)
|
|
104
119
|
raise ArgumentError if types.any? {|x| x.nil?}
|
|
105
120
|
types.each do |type|
|
|
106
|
-
if
|
|
121
|
+
if Mirah::AST::TypeReference === type
|
|
107
122
|
@interfaces << type
|
|
108
123
|
else
|
|
109
124
|
@interface_nodes << type
|
data/lib/mirah/ast/flow.rb
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
# Copyright (c) 2010 The Mirah project authors. All Rights Reserved.
|
|
2
|
+
# All contributing project authors may be found in the NOTICE file.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
module Mirah
|
|
2
17
|
module AST
|
|
3
18
|
class Condition < Node
|
|
4
19
|
child :predicate
|
data/lib/mirah/ast/intrinsics.rb
CHANGED
|
@@ -1,6 +1,21 @@
|
|
|
1
|
+
# Copyright (c) 2010 The Mirah project authors. All Rights Reserved.
|
|
2
|
+
# All contributing project authors may be found in the NOTICE file.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
1
16
|
require 'fileutils'
|
|
2
17
|
|
|
3
|
-
module
|
|
18
|
+
module Mirah::AST
|
|
4
19
|
|
|
5
20
|
class Unquote < Node
|
|
6
21
|
child :value
|
|
@@ -39,19 +54,19 @@ module Duby::AST
|
|
|
39
54
|
end
|
|
40
55
|
|
|
41
56
|
def self.__extracted
|
|
42
|
-
Thread.current[:'
|
|
57
|
+
Thread.current[:'Mirah::AST::Unqote.extracted']
|
|
43
58
|
end
|
|
44
59
|
|
|
45
60
|
def self.__extracted=(value)
|
|
46
|
-
Thread.current[:'
|
|
61
|
+
Thread.current[:'Mirah::AST::Unqote.extracted'] = value
|
|
47
62
|
end
|
|
48
63
|
|
|
49
64
|
def self.__injected
|
|
50
|
-
Thread.current[:'
|
|
65
|
+
Thread.current[:'Mirah::AST::Unqote.injected']
|
|
51
66
|
end
|
|
52
67
|
|
|
53
68
|
def self.__injected=(value)
|
|
54
|
-
Thread.current[:'
|
|
69
|
+
Thread.current[:'Mirah::AST::Unqote.injected'] = value
|
|
55
70
|
end
|
|
56
71
|
|
|
57
72
|
def self.extract_values
|
|
@@ -80,7 +95,7 @@ module Duby::AST
|
|
|
80
95
|
|
|
81
96
|
def name
|
|
82
97
|
case value
|
|
83
|
-
when
|
|
98
|
+
when Mirah::AST::String
|
|
84
99
|
value.literal
|
|
85
100
|
when ::String
|
|
86
101
|
value
|
|
@@ -235,7 +250,7 @@ module Duby::AST
|
|
|
235
250
|
else
|
|
236
251
|
# TODO support typed args. Also there should be a way
|
|
237
252
|
# to accept any AST node.
|
|
238
|
-
|
|
253
|
+
Mirah::JVM::Types::Object
|
|
239
254
|
end
|
|
240
255
|
end
|
|
241
256
|
end
|
|
@@ -249,19 +264,19 @@ module Duby::AST
|
|
|
249
264
|
end
|
|
250
265
|
|
|
251
266
|
def build_and_load_extension(parent, name, state)
|
|
252
|
-
transformer =
|
|
267
|
+
transformer = Mirah::Transform::Transformer.new(state)
|
|
253
268
|
transformer.filename = name.gsub(".", "/")
|
|
254
|
-
orig_factory =
|
|
269
|
+
orig_factory = Mirah::AST.type_factory
|
|
255
270
|
new_factory = orig_factory.dup
|
|
256
|
-
|
|
271
|
+
Mirah::AST.type_factory = new_factory
|
|
257
272
|
ast = build_ast(name, parent, transformer)
|
|
258
273
|
puts ast.inspect if state.verbose
|
|
259
274
|
classes = compile_ast(name, ast, transformer)
|
|
260
|
-
loader =
|
|
275
|
+
loader = MirahClassLoader.new(
|
|
261
276
|
JRuby.runtime.jruby_class_loader, classes)
|
|
262
277
|
klass = loader.loadClass(name, true)
|
|
263
278
|
annotate(parent, name)
|
|
264
|
-
|
|
279
|
+
Mirah::AST.type_factory = orig_factory
|
|
265
280
|
klass
|
|
266
281
|
end
|
|
267
282
|
|
|
@@ -289,10 +304,10 @@ module Duby::AST
|
|
|
289
304
|
end
|
|
290
305
|
|
|
291
306
|
def compile_ast(name, ast, transformer)
|
|
292
|
-
typer =
|
|
307
|
+
typer = Mirah::Typer::JVM.new(transformer)
|
|
293
308
|
typer.infer(ast)
|
|
294
309
|
typer.resolve(true)
|
|
295
|
-
compiler =
|
|
310
|
+
compiler = Mirah::Compiler::JVM.new
|
|
296
311
|
ast.compile(compiler, false)
|
|
297
312
|
class_map = {}
|
|
298
313
|
compiler.generate do |outfile, builder|
|
|
@@ -311,25 +326,25 @@ module Duby::AST
|
|
|
311
326
|
def build_ast(name, parent, transformer)
|
|
312
327
|
# TODO should use a new type factory too.
|
|
313
328
|
|
|
314
|
-
ast =
|
|
329
|
+
ast = Mirah::AST.parse_ruby("begin;end")
|
|
315
330
|
ast = transformer.transform(ast, nil)
|
|
316
331
|
|
|
317
332
|
# Start building the extension class
|
|
318
333
|
extension = transformer.define_class(position, name)
|
|
319
|
-
#extension.superclass =
|
|
320
|
-
extension.implements(
|
|
334
|
+
#extension.superclass = Mirah::AST.type(nil, 'duby.lang.compiler.Macro')
|
|
335
|
+
extension.implements(Mirah::AST.type(nil, 'duby.lang.compiler.Macro'))
|
|
321
336
|
|
|
322
337
|
extension.static_scope.import('duby.lang.compiler.Node', 'Node')
|
|
323
338
|
|
|
324
339
|
# The constructor just saves the state
|
|
325
340
|
extension.define_constructor(
|
|
326
341
|
position,
|
|
327
|
-
['mirah',
|
|
328
|
-
['call',
|
|
342
|
+
['mirah', Mirah::AST.type(nil, 'duby.lang.compiler.Compiler')],
|
|
343
|
+
['call', Mirah::AST.type(nil, 'duby.lang.compiler.Call')]) do |c|
|
|
329
344
|
transformer.eval("@mirah = mirah;@call = call", '-', c, 'mirah', 'call')
|
|
330
345
|
end
|
|
331
346
|
|
|
332
|
-
node_type =
|
|
347
|
+
node_type = Mirah::AST.type(nil, 'duby.lang.compiler.Node')
|
|
333
348
|
|
|
334
349
|
# expand() parses the arguments out of call and then passes them off to
|
|
335
350
|
# _expand
|
|
@@ -350,7 +365,7 @@ module Duby::AST
|
|
|
350
365
|
end
|
|
351
366
|
actual_args = arguments.map do |arg|
|
|
352
367
|
type = if arg.kind_of?(BlockArgument)
|
|
353
|
-
|
|
368
|
+
Mirah::AST.type(nil, 'duby.lang.compiler.Block')
|
|
354
369
|
else
|
|
355
370
|
node_type
|
|
356
371
|
end
|
data/lib/mirah/ast/literal.rb
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
# Copyright (c) 2010 The Mirah project authors. All Rights Reserved.
|
|
2
|
+
# All contributing project authors may be found in the NOTICE file.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
module Mirah::AST
|
|
2
17
|
class Array < Node
|
|
3
18
|
def initialize(parent, line_number, &block)
|
|
4
19
|
super(parent, line_number, &block)
|
data/lib/mirah/ast/local.rb
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
# Copyright (c) 2010 The Mirah project authors. All Rights Reserved.
|
|
2
|
+
# All contributing project authors may be found in the NOTICE file.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
module Mirah::AST
|
|
2
17
|
class LocalDeclaration < Node
|
|
3
18
|
include Named
|
|
4
19
|
include Typed
|
data/lib/mirah/ast/method.rb
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
# Copyright (c) 2010 The Mirah project authors. All Rights Reserved.
|
|
2
|
+
# All contributing project authors may be found in the NOTICE file.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
module Mirah::AST
|
|
2
17
|
class Arguments < Node
|
|
3
18
|
child :required
|
|
4
19
|
child :opt_args
|
|
@@ -241,7 +256,7 @@ module Duby::AST
|
|
|
241
256
|
if !abstract? &&
|
|
242
257
|
forced_type != typer.no_type &&
|
|
243
258
|
!actual_type.is_parent(inferred_type)
|
|
244
|
-
raise
|
|
259
|
+
raise Mirah::Typer::InferenceError.new(
|
|
245
260
|
"Inferred return type %s is incompatible with declared %s" %
|
|
246
261
|
[inferred_type, actual_type], self)
|
|
247
262
|
end
|
|
@@ -259,7 +274,7 @@ module Duby::AST
|
|
|
259
274
|
# even if we can't infer the body yet.
|
|
260
275
|
type ||= signature[:return] if argument_types && argument_types.all?
|
|
261
276
|
if type
|
|
262
|
-
argument_types ||= [
|
|
277
|
+
argument_types ||= [Mirah::AST.error_type] if type.error?
|
|
263
278
|
typer.learn_method_type(defining_class, name, argument_types, type, signature[:throws])
|
|
264
279
|
|
|
265
280
|
# learn the other overloads as well
|
data/lib/mirah/ast/scope.rb
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
# Copyright (c) 2010 The Mirah project authors. All Rights Reserved.
|
|
2
|
+
# All contributing project authors may be found in the NOTICE file.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
module Mirah
|
|
2
17
|
module AST
|
|
3
18
|
module Scoped
|
|
4
19
|
def scope
|
|
@@ -79,7 +94,7 @@ module Duby
|
|
|
79
94
|
existing_type = local_type(name)
|
|
80
95
|
if existing_type
|
|
81
96
|
unless existing_type.assignable_from?(type)
|
|
82
|
-
raise
|
|
97
|
+
raise Mirah::Typer::InferenceError.new(
|
|
83
98
|
"Can't assign #{type.full_name} to " \
|
|
84
99
|
"variable of type #{existing_type.full_name}")
|
|
85
100
|
end
|
|
@@ -147,11 +162,11 @@ module Duby
|
|
|
147
162
|
parent.binding_type(defining_class, duby)
|
|
148
163
|
else
|
|
149
164
|
name = "#{defining_class.name}$#{duby.tmp}"
|
|
150
|
-
factory =
|
|
165
|
+
factory = Mirah::AST.type_factory
|
|
151
166
|
if factory
|
|
152
167
|
factory.declare_type(@scope_node, name)
|
|
153
168
|
else
|
|
154
|
-
|
|
169
|
+
Mirah::AST::TypeReference.new(name, false, false)
|
|
155
170
|
end
|
|
156
171
|
end
|
|
157
172
|
end
|
data/lib/mirah/ast/structure.rb
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
# Copyright (c) 2010 The Mirah project authors. All Rights Reserved.
|
|
2
|
+
# All contributing project authors may be found in the NOTICE file.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
module Mirah::AST
|
|
2
17
|
class Body < Node
|
|
3
18
|
def initialize(parent, line_number, &block)
|
|
4
19
|
super(parent, line_number, &block)
|
data/lib/mirah/ast/type.rb
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
# Copyright (c) 2010 The Mirah project authors. All Rights Reserved.
|
|
2
|
+
# All contributing project authors may be found in the NOTICE file.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
module Mirah::AST
|
|
2
17
|
class Import < Node
|
|
3
18
|
include Scoped
|
|
4
19
|
attr_accessor :short
|
|
@@ -18,7 +33,7 @@ module Duby::AST
|
|
|
18
33
|
begin
|
|
19
34
|
typer.type_reference(scope, @long)
|
|
20
35
|
rescue NameError => ex
|
|
21
|
-
typer.known_types[short] =
|
|
36
|
+
typer.known_types[short] = Mirah::AST.error_type
|
|
22
37
|
raise ex
|
|
23
38
|
end
|
|
24
39
|
typer.no_type
|
|
@@ -47,7 +62,7 @@ module Duby::AST
|
|
|
47
62
|
arg = node.parameters[0]
|
|
48
63
|
unless (FunctionalCall === arg &&
|
|
49
64
|
arg.name == 'as' && arg.parameters.size == 1)
|
|
50
|
-
raise
|
|
65
|
+
raise Mirah::TransformError.new("unknown import syntax", fcall)
|
|
51
66
|
end
|
|
52
67
|
short = arg.parameters[0].name
|
|
53
68
|
pieces = [node.name]
|
|
@@ -57,16 +72,16 @@ module Duby::AST
|
|
|
57
72
|
end
|
|
58
73
|
long = pieces.reverse.join '.'
|
|
59
74
|
else
|
|
60
|
-
raise
|
|
75
|
+
raise Mirah::TransformError.new("unknown import syntax", fcall)
|
|
61
76
|
end
|
|
62
77
|
else
|
|
63
|
-
raise
|
|
78
|
+
raise Mirah::TransformError.new("unknown import syntax", fcall)
|
|
64
79
|
end
|
|
65
80
|
when 2
|
|
66
81
|
short = fcall.parameters[0].literal
|
|
67
82
|
long = fcall.parameters[1].literal
|
|
68
83
|
else
|
|
69
|
-
raise
|
|
84
|
+
raise Mirah::TransformError.new("unknown import syntax", fcall)
|
|
70
85
|
end
|
|
71
86
|
Import.new(parent, fcall.position, short, long)
|
|
72
87
|
end
|
|
@@ -90,10 +105,10 @@ module Duby::AST
|
|
|
90
105
|
name = node.name
|
|
91
106
|
block ||= node.block
|
|
92
107
|
else
|
|
93
|
-
raise
|
|
108
|
+
raise Mirah::TransformError.new("unknown package syntax", fcall)
|
|
94
109
|
end
|
|
95
110
|
if block
|
|
96
|
-
raise
|
|
111
|
+
raise Mirah::TransformError.new("unknown package syntax", block)
|
|
97
112
|
new_scope = ScopedBody.new(parent, fcall.position)
|
|
98
113
|
new_scope.static_scope.package = name
|
|
99
114
|
new_scope << block.body
|
|
@@ -124,7 +139,7 @@ module Duby::AST
|
|
|
124
139
|
|
|
125
140
|
class Builtin < Node
|
|
126
141
|
def infer(typer)
|
|
127
|
-
resolve_if(typer) {
|
|
142
|
+
resolve_if(typer) {Mirah::AST.type(nil, 'mirah.impl.Builtin')}
|
|
128
143
|
end
|
|
129
144
|
end
|
|
130
145
|
end
|