mirah 0.0.4-java → 0.0.5-java
Sign up to get free protection for your applications and to get access to all the features.
- 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
|