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.
Files changed (98) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +0 -0
  3. data/CODE_OF_CONDUCT.md +74 -0
  4. data/History.txt +531 -0
  5. data/README.md +23 -10
  6. data/Rakefile +239 -156
  7. data/TODO.md +71 -10
  8. data/bin/mirah +1 -1
  9. data/bin/mirahc +1 -1
  10. data/dist/mirahc.jar +0 -0
  11. data/examples/bintrees.mirah +2 -2
  12. data/examples/construction.mirah +2 -2
  13. data/examples/fields.mirah +1 -1
  14. data/examples/fractal.mirah +1 -1
  15. data/examples/fractal.rb +70 -0
  16. data/examples/interfaces.mirah +1 -1
  17. data/examples/java_thing.mirah +1 -1
  18. data/examples/macros/square.mirah +3 -3
  19. data/examples/macros/square_int.mirah +3 -3
  20. data/examples/macros/string_each_char.mirah +6 -6
  21. data/examples/rosettacode/100-doors.mirah +0 -2
  22. data/examples/rosettacode/count-occurrences-of-a-substring.mirah +3 -3
  23. data/examples/rosettacode/empty-string.mirah +1 -1
  24. data/examples/rosettacode/fizz-buzz.mirah +4 -4
  25. data/examples/rosettacode/is-string-numeric.mirah +7 -7
  26. data/examples/rosettacode/palindrome.mirah +2 -2
  27. data/examples/rosettacode/reverse-a-string.mirah +1 -1
  28. data/examples/rosettacode/rot-13.mirah +1 -1
  29. data/examples/{edb.mirah → rosettacode/simple_character_math.mirah} +13 -4
  30. data/examples/rosettacode/string-case.mirah +2 -2
  31. data/examples/rosettacode/string-length.mirah +1 -1
  32. data/examples/swing.mirah +9 -14
  33. data/extensions_and_macros.md +117 -0
  34. data/lib/mirah.rb +1 -1
  35. data/lib/mirah/errors.rb +3 -1
  36. data/lib/mirah/transform/ast_ext.rb +3 -2
  37. data/lib/mirah/util/process_errors.rb +1 -2
  38. data/lib/mirah/version.rb +1 -1
  39. data/test/A.class +0 -0
  40. data/test/core/util/jvm_version_test.rb +10 -0
  41. data/test/core/util/mirah_arguments_test.rb +51 -4
  42. data/test/fixtures/cp1251_test.mirah +7 -0
  43. data/test/fixtures/org/foo/AbstractExecutorJava8.java +30 -0
  44. data/test/fixtures/org/foo/ClassWithSelfReferencingTypeParameter.java +24 -0
  45. data/test/fixtures/org/foo/InnerInterfaceClass.java +12 -0
  46. data/test/fixtures/org/foo/IntAnno.class +0 -0
  47. data/test/fixtures/org/foo/TypeFixtureJava8.java +10 -0
  48. data/test/fixtures/utf8_test.mirah +7 -0
  49. data/test/jvm/access_levels_test.rb +31 -0
  50. data/test/jvm/annotations_test.rb +3 -6
  51. data/test/jvm/blocks_test.rb +303 -120
  52. data/test/jvm/cast_test.rb +123 -50
  53. data/test/jvm/closure_test.rb +242 -0
  54. data/test/jvm/constructors_test.rb +1 -3
  55. data/test/jvm/example_test.rb +6 -2
  56. data/test/jvm/extensions/array_extensions_test.rb +181 -0
  57. data/test/jvm/extensions/collection_extensions_test.rb +195 -0
  58. data/test/jvm/{enumerable_test.rb → extensions/enumerable_test.rb} +81 -13
  59. data/test/jvm/extensions/hash_extensions_test.rb +56 -0
  60. data/test/jvm/extensions/list_extensions_test.rb +143 -0
  61. data/test/jvm/extensions/lock_extensions_test.rb +43 -0
  62. data/test/jvm/{numeric_extensions_test.rb → extensions/numeric_extensions_test.rb} +0 -0
  63. data/test/jvm/extensions/numeric_operators_test.rb +86 -0
  64. data/test/jvm/extensions/object_extensions_test.rb +122 -0
  65. data/test/jvm/{string_builder_extensions_test.rb → extensions/string_builder_extensions_test.rb} +0 -0
  66. data/test/jvm/{string_extensions_test.rb → extensions/string_extensions_test.rb} +57 -4
  67. data/test/jvm/generics_test.rb +14 -6
  68. data/test/jvm/import_test.rb +38 -1
  69. data/test/jvm/interface_test.rb +17 -0
  70. data/test/jvm/jvm_commands_test.rb +9 -0
  71. data/test/jvm/jvm_compiler_test.rb +568 -43
  72. data/test/jvm/macros_test.rb +343 -19
  73. data/test/jvm/main_method_test.rb +1 -3
  74. data/test/jvm/new_backend_test_helper.rb +54 -7
  75. data/test/jvm/rescue_test.rb +20 -5
  76. data/test/jvm/static_fields_test.rb +52 -10
  77. data/test/jvm/{mirror_compilation_test_helper.rb → string_test.rb} +10 -9
  78. data/test/jvm/varargs_test.rb +6 -16
  79. data/test/mirrors/base_type_test.rb +20 -7
  80. data/test/mirrors/bytecode_mirror_test.rb +8 -3
  81. data/test/mirrors/generics_test.rb +89 -10
  82. data/test/mirrors/member_test.rb +1 -1
  83. data/test/mirrors/method_lookup_test.rb +10 -3
  84. data/test/mirrors/mirrors_test.rb +20 -20
  85. data/test/mirrors/simple_async_mirror_loader_test.rb +1 -1
  86. data/test/mirrors/simple_mirror_loader_test.rb +1 -1
  87. data/test/newMirahClass$Closure2.class +0 -0
  88. data/test/newMirahClass.class +0 -0
  89. data/test/test_helper.rb +8 -1
  90. metadata +31 -16
  91. data/bin/bundler +0 -16
  92. data/bin/rake +0 -16
  93. data/examples/ant/example-build.xml~ +0 -7
  94. data/examples/test.edb +0 -9
  95. data/lib/mirah/compiler.rb +0 -67
  96. data/lib/mirah/parser.rb +0 -224
  97. data/lib/mirah/util/delegate.rb +0 -65
  98. data/test/jvm/list_extensions_test.rb +0 -23
@@ -1,224 +0,0 @@
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
- require 'mirah/util/process_errors'
17
- require 'mirah/util/logging'
18
- require 'mirah/transform'
19
- require 'java'
20
-
21
- module Mirah
22
- class Parser
23
- include Mirah::Util::ProcessErrors
24
- include Mirah::Logging::Logged
25
-
26
- def initialize(state, typer, logging)
27
- @transformer = Mirah::Transform::Transformer.new(state, typer)
28
- @logging = logging
29
- end
30
-
31
- attr_accessor :transformer, :logging
32
-
33
- def parse_from_args(files_or_scripts)
34
- nodes = []
35
- inline = false
36
- puts "Parsing..." if logging
37
- expand_files(files_or_scripts).each do |script|
38
- if script == '-e'
39
- inline = true
40
- next
41
- elsif inline
42
- nodes << parse_inline(script)
43
- break
44
- else
45
- nodes << parse_file(script)
46
- end
47
- end
48
- raise 'nothing to parse? ' + files_or_scripts.inspect unless nodes.length > 0
49
- nodes = nodes.compact
50
- if self.logging
51
- nodes.each {|node| log "Parsed:\n #{format_ast(node)}"}
52
- end
53
- nodes
54
- end
55
-
56
- def parse_inline(source)
57
- puts " <inline script>" if logging
58
- parse_and_transform('DashE', source)
59
- end
60
-
61
- def parse_file(filename)
62
- puts " #{filename}" if logging
63
- parse_and_transform(filename, File.read(filename))
64
- end
65
-
66
- def parse_and_transform(filename, src)
67
- Mirah::AST.parse_ruby(transformer, src, filename)
68
- end
69
-
70
- def format_ast(ast)
71
- AstPrinter.new.scan(ast, ast)
72
- end
73
-
74
- def expand_files(files_or_scripts)
75
- expanded = []
76
- files_or_scripts.each do |filename|
77
- if File.directory?(filename)
78
- Dir[File.join(filename, '*')].each do |child|
79
- if File.directory?(child)
80
- files_or_scripts << child
81
- elsif child =~ /\.(duby|mirah)$/
82
- expanded << child
83
- end
84
- end
85
- else
86
- expanded << filename
87
- end
88
- end
89
- expanded
90
- end
91
-
92
- class AstPrinter < NodeScanner
93
- java_import "mirah.lang.ast.Node"
94
- def initialize
95
- @out = ""
96
- @indent = 0
97
- @newline = true
98
- end
99
- def puts(*args)
100
- print(*args)
101
- @newline = true
102
- @out << "\n"
103
- end
104
- def print(*args)
105
- @out << (" " * @indent) if @newline
106
- args.each {|arg| @out << arg}
107
- @newline = false
108
- @out
109
- end
110
- def indent
111
- @indent += 2
112
- end
113
- def dedent
114
- @indent -= 2
115
- end
116
- def enterNullChild(obj)
117
- puts("nil")
118
- end
119
-
120
- def startNode(node)
121
- print("[#{node.java_class.simple_name}")
122
- indent
123
- end
124
-
125
- def enterDefault(node, arg)
126
- startNode(node)
127
- puts
128
- true
129
- end
130
-
131
- def exitDefault(node, arg)
132
- dedent
133
- if @out[-2,2] =~ /^[\[\]"]\n/
134
- @out[-1,0] = "]"
135
- @out
136
- else
137
- no_children = @out.rindex(/[\]\n]/, -2) < @out.rindex("[")
138
- if no_children
139
- @out[-1,0] = "]"
140
- else
141
- puts("]")
142
- end
143
- end
144
- end
145
-
146
- %w(Boolean Fixnum Float CharLiteral).each do |name|
147
- eval(<<-EOF)
148
- def enter#{name}(node, arg)
149
- startNode(node)
150
- print(" ", node.value.to_s)
151
- true
152
- end
153
- EOF
154
- end
155
-
156
- def enterSimpleString(node, arg)
157
- first_child = @out.rindex(/[\]\n]/, -2) < @out.rindex("[")
158
- if first_child
159
- @newline = false
160
- @out[-1,1] = " "
161
- end
162
- print '"', node.value
163
- true
164
- end
165
-
166
- def exitSimpleString(node, arg)
167
- puts '"'
168
- end
169
-
170
- def enterTypeRefImpl(node, arg)
171
- startNode(node)
172
- print " #{node.name}"
173
- print " array" if node.isArray
174
- print " static" if node.isStatic
175
- true
176
- end
177
-
178
- def enterNodeList(node, arg)
179
- puts "["
180
- indent
181
- true
182
- end
183
-
184
- def enterBlockArgument(node, arg)
185
- enterDefault(node, arg)
186
- puts "optional" if node.optional
187
- true
188
- end
189
-
190
- def enterLoop(node, arg)
191
- enterDefault(node, arg)
192
- puts "skipFirstCheck" if node.skipFirstCheck
193
- puts "negative" if node.negative
194
- true
195
- end
196
-
197
- def exitFieldAccess(node, arg)
198
- puts "static" if node.isStatic
199
- exitDefault(node, arg)
200
- end
201
- alias exitFieldAssign exitFieldAccess
202
-
203
- def enterUnquote(node, arg)
204
- enterDefault(node, arg)
205
- object = node.object
206
- if object
207
- if object.kind_of?(Node)
208
- scan(object, arg)
209
- elsif object.kind_of?(java.util.List) && object.all? {|i| i.kind_of?(Node)}
210
- object.each {|o| scan(o, arg)}
211
- else
212
- str = if node.object.respond_to?(:toString)
213
- node.object.toString
214
- else
215
- node.object.inspect
216
- end
217
- puts "<", str, ">"
218
- end
219
- end
220
- object.nil?
221
- end
222
- end
223
- end
224
- end
@@ -1,65 +0,0 @@
1
- # Ripped from 1.8 stdlib
2
-
3
- module Mirah
4
- module Util
5
- class Delegator
6
- IgnoreBacktracePat = %r"\A#{Regexp.quote(__FILE__)}:\d+:in `"
7
- end
8
-
9
- def self.DelegateClass(superclass)
10
- klass = Class.new
11
- methods = superclass.public_instance_methods(true).map(&:to_s)
12
- methods -= ::Kernel.public_instance_methods(false).map(&:to_s)
13
- methods -= ["__id__", "__send__"] if RUBY_VERSION > '1.9' # avoid warnings
14
- methods |= ["to_s","to_a","inspect","==","=~","==="]
15
- klass.module_eval {
16
- def initialize(obj) # :nodoc:
17
- @_dc_obj = obj
18
- end
19
- def method_missing(m, *args) # :nodoc:
20
- unless @_dc_obj.respond_to?(m)
21
- super(m, *args)
22
- end
23
- @_dc_obj.__send__(m, *args)
24
- end
25
- def respond_to?(m, include_private = false) # :nodoc:
26
- return true if super
27
- return @_dc_obj.respond_to?(m, include_private)
28
- end
29
- def __getobj__ # :nodoc:
30
- @_dc_obj
31
- end
32
- def __setobj__(obj) # :nodoc:
33
- raise ArgumentError, "cannot delegate to self" if self.equal?(obj)
34
- @_dc_obj = obj
35
- end
36
- def clone # :nodoc:
37
- new = super
38
- new.__setobj__(__getobj__.clone)
39
- new
40
- end
41
- def dup # :nodoc:
42
- new = super
43
- new.__setobj__(__getobj__.clone)
44
- new
45
- end
46
- }
47
- for method in methods
48
- begin
49
- klass.module_eval <<-EOS, __FILE__, __LINE__+1
50
- def #{method}(*args, &block)
51
- begin
52
- @_dc_obj.__send__(:#{method}, *args, &block)
53
- ensure
54
- $@.delete_if{|s| ::Mirah::Util::Delegator::IgnoreBacktracePat =~ s} if $@
55
- end
56
- end
57
- EOS
58
- rescue SyntaxError
59
- raise NameError, "invalid identifier %s" % method, caller(3)
60
- end
61
- end
62
- return klass
63
- end
64
- end
65
- end
@@ -1,23 +0,0 @@
1
- class ListExtensionsTest < Test::Unit::TestCase
2
- def test_bracket_getter
3
- cls, = compile(<<-EOF)
4
- x = [1,2]
5
- puts x[0]
6
- EOF
7
- assert_output("1\n") do
8
- cls.main(nil)
9
- end
10
- end
11
-
12
- def test_bracket_assignment
13
- cls, = compile(<<-EOF)
14
- import java.util.ArrayList
15
- x = ArrayList.new
16
- x[0]= "2"
17
- puts x
18
- EOF
19
- assert_output("[2]\n") do
20
- cls.main(nil)
21
- end
22
- end
23
- end