mirah 0.0.12-java → 0.1.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (171) hide show
  1. data/History.txt +372 -0
  2. data/README.txt +4 -5
  3. data/Rakefile +178 -55
  4. data/examples/appengine/Readme +3 -3
  5. data/examples/appengine/src/org/mirah/MirahApp.mirah +1 -1
  6. data/examples/appengine/src/org/mirah/list.dhtml +1 -1
  7. data/examples/bintrees.mirah +1 -1
  8. data/examples/edb.mirah +1 -1
  9. data/examples/fib.mirah +1 -1
  10. data/examples/interfaces.mirah +1 -1
  11. data/examples/macros/{string-each-char.mirah → string_each_char.mirah} +4 -5
  12. data/examples/maven/README.txt +1 -1
  13. data/examples/maven/src/main/mirah/hello_mirah.mirah +1 -1
  14. data/examples/plugins/appengine/Rakefile +1 -1
  15. data/examples/plugins/appengine/src/com/google/appengine/ext/duby/db/MetaModel.mirah +1 -1
  16. data/examples/plugins/appengine/src/com/google/appengine/ext/duby/db/Model.duby +1 -1
  17. data/examples/plugins/appengine/test/com/google/appengine/ext/duby/db/ModelTest.duby +1 -1
  18. data/examples/rosettacode/100-doors.mirah +6 -6
  19. data/examples/rosettacode/README.txt +3 -3
  20. data/examples/rosettacode/boolean-values.mirah +1 -1
  21. data/examples/rosettacode/comments.mirah +1 -1
  22. data/examples/rosettacode/count-occurrences-of-a-substring.mirah +1 -1
  23. data/examples/rosettacode/factorial.mirah +1 -1
  24. data/examples/rosettacode/fibonacci.mirah +1 -1
  25. data/examples/rosettacode/fizz-buzz.mirah +2 -2
  26. data/examples/rosettacode/flatten-a-list.mirah +4 -4
  27. data/examples/rosettacode/guess-the-number.mirah +2 -2
  28. data/examples/rosettacode/hamming-numbers.mirah +4 -4
  29. data/examples/rosettacode/is-string-numeric.mirah +22 -22
  30. data/examples/rosettacode/palindrome.mirah +2 -2
  31. data/examples/rosettacode/random-numbers.mirah +1 -1
  32. data/examples/rosettacode/repeat-a-string.mirah +1 -1
  33. data/examples/rosettacode/reverse-a-string.mirah +1 -1
  34. data/examples/rosettacode/rot-13.mirah +5 -5
  35. data/examples/rosettacode/secure-temporary-file.mirah +2 -2
  36. data/examples/rosettacode/sleep.mirah +1 -1
  37. data/examples/rosettacode/string-length.mirah +5 -5
  38. data/examples/swing.mirah +1 -1
  39. data/examples/test.edb +1 -1
  40. data/javalib/mirah-bootstrap.jar +0 -0
  41. data/javalib/mirah-builtins.jar +0 -0
  42. data/javalib/mirah-parser.jar +0 -0
  43. data/javalib/mirah-util.jar +0 -0
  44. data/lib/duby.rb +1 -1
  45. data/lib/mirah.rb +50 -28
  46. data/lib/mirah/ast.rb +15 -605
  47. data/lib/mirah/ast/scope.rb +98 -69
  48. data/lib/mirah/commands.rb +1 -1
  49. data/lib/mirah/commands/base.rb +7 -7
  50. data/lib/mirah/commands/compile.rb +3 -3
  51. data/lib/mirah/commands/parse.rb +7 -5
  52. data/lib/mirah/commands/run.rb +12 -19
  53. data/lib/mirah/compiler.rb +15 -23
  54. data/lib/mirah/errors.rb +16 -1
  55. data/lib/mirah/generator.rb +79 -39
  56. data/lib/mirah/jvm/compiler.rb +1 -19
  57. data/lib/mirah/jvm/compiler/base.rb +233 -90
  58. data/lib/mirah/jvm/compiler/jvm_bytecode.rb +675 -363
  59. data/lib/mirah/jvm/method_lookup.rb +134 -65
  60. data/lib/mirah/jvm/typer.rb +10 -5
  61. data/lib/mirah/jvm/types.rb +10 -2
  62. data/lib/mirah/jvm/types/array_type.rb +10 -12
  63. data/lib/mirah/{compiler/type.rb → jvm/types/ast_ext.rb} +12 -8
  64. data/lib/mirah/jvm/types/basic_types.rb +26 -33
  65. data/lib/mirah/jvm/types/bitescript_ext.rb +1 -1
  66. data/lib/mirah/jvm/types/block_type.rb +15 -0
  67. data/lib/mirah/jvm/types/boolean.rb +8 -4
  68. data/lib/mirah/jvm/types/dynamic_type.rb +12 -13
  69. data/lib/mirah/jvm/types/enumerable.rb +7 -7
  70. data/lib/mirah/jvm/types/extensions.rb +11 -6
  71. data/lib/mirah/jvm/types/factory.rb +624 -94
  72. data/lib/mirah/jvm/types/floats.rb +21 -15
  73. data/lib/mirah/jvm/types/generic_type.rb +72 -0
  74. data/lib/mirah/jvm/types/implicit_nil_type.rb +29 -0
  75. data/lib/mirah/jvm/types/integers.rb +26 -71
  76. data/lib/mirah/jvm/types/interface_definition.rb +3 -3
  77. data/lib/mirah/jvm/types/intrinsics.rb +203 -168
  78. data/lib/mirah/jvm/types/literals.rb +6 -6
  79. data/lib/mirah/jvm/types/meta_type.rb +13 -4
  80. data/lib/mirah/jvm/types/methods.rb +281 -93
  81. data/lib/mirah/jvm/types/null_type.rb +17 -5
  82. data/lib/mirah/jvm/types/number.rb +10 -7
  83. data/lib/mirah/jvm/types/primitive_type.rb +17 -6
  84. data/lib/mirah/jvm/types/source_mirror.rb +12 -7
  85. data/lib/mirah/jvm/types/type.rb +107 -23
  86. data/lib/mirah/jvm/types/type_definition.rb +25 -10
  87. data/lib/mirah/jvm/types/unreachable_type.rb +1 -1
  88. data/lib/mirah/jvm/types/void_type.rb +3 -3
  89. data/lib/mirah/parser.rb +154 -16
  90. data/lib/mirah/plugin/edb.rb +1 -1
  91. data/lib/mirah/transform.rb +1 -2
  92. data/lib/mirah/transform/ast_ext.rb +24 -43
  93. data/lib/mirah/transform/transformer.rb +29 -224
  94. data/lib/mirah/typer.rb +2 -16
  95. data/lib/mirah/util/argument_processor.rb +25 -10
  96. data/lib/mirah/util/class_loader.rb +1 -1
  97. data/lib/mirah/util/compilation_state.rb +16 -17
  98. data/lib/mirah/util/delegate.rb +2 -2
  99. data/lib/mirah/util/logging.rb +110 -0
  100. data/lib/mirah/util/process_errors.rb +69 -11
  101. data/lib/mirah/version.rb +1 -1
  102. data/test/core/commands_test.rb +6 -24
  103. data/test/core/env_test.rb +5 -5
  104. data/{lib/mirah/jvm/source_generator/typer.rb → test/core/generator_test.rb} +9 -9
  105. data/test/core/typer_test.rb +196 -158
  106. data/test/core/util/argument_processor_test.rb +10 -10
  107. data/test/core/util/class_loader_test.rb +6 -5
  108. data/test/fixtures/org/foo/LowerCaseInnerClass$inner.class +0 -0
  109. data/test/fixtures/org/foo/LowerCaseInnerClass.class +0 -0
  110. data/test/fixtures/org/foo/LowerCaseInnerClass.java +7 -0
  111. data/test/jvm/annotations_test.rb +5 -5
  112. data/test/jvm/blocks_test.rb +140 -88
  113. data/test/jvm/bytecode_test_helper.rb +112 -94
  114. data/test/jvm/cast_test.rb +162 -0
  115. data/test/jvm/constructors_test.rb +18 -8
  116. data/test/jvm/enumerable_test.rb +77 -44
  117. data/test/jvm/example_test.rb +53 -0
  118. data/test/jvm/factory_test.rb +7 -1
  119. data/test/jvm/generics_test.rb +57 -0
  120. data/test/jvm/hash_test.rb +106 -0
  121. data/test/jvm/import_test.rb +81 -0
  122. data/test/jvm/interface_test.rb +73 -0
  123. data/test/jvm/java_typer_test.rb +92 -66
  124. data/{lib/mirah/typer/base.rb → test/jvm/jvm_commands_test.rb} +6 -10
  125. data/test/jvm/jvm_compiler_test.rb +170 -604
  126. data/test/jvm/list_extensions_test.rb +23 -0
  127. data/test/jvm/macros_test.rb +197 -32
  128. data/test/jvm/main_method_test.rb +4 -4
  129. data/test/jvm/numeric_extensions_test.rb +13 -0
  130. data/test/jvm/rescue_test.rb +73 -16
  131. data/test/jvm/varargs_test.rb +65 -0
  132. data/test/test_helper.rb +1 -2
  133. metadata +234 -251
  134. data/examples/SortClosure$__xform_tmp_1.class +0 -0
  135. data/examples/SortClosure$__xform_tmp_2.class +0 -0
  136. data/examples/SortClosure.class +0 -0
  137. data/examples/macros/StringEachChar$Extension1.class +0 -0
  138. data/lib/mirah/ast/call.rb +0 -345
  139. data/lib/mirah/ast/class.rb +0 -359
  140. data/lib/mirah/ast/flow.rb +0 -381
  141. data/lib/mirah/ast/intrinsics.rb +0 -563
  142. data/lib/mirah/ast/literal.rb +0 -178
  143. data/lib/mirah/ast/local.rb +0 -112
  144. data/lib/mirah/ast/method.rb +0 -408
  145. data/lib/mirah/ast/structure.rb +0 -387
  146. data/lib/mirah/ast/type.rb +0 -146
  147. data/lib/mirah/commands/base.rb~ +0 -57
  148. data/lib/mirah/compiler/call.rb +0 -45
  149. data/lib/mirah/compiler/class.rb +0 -81
  150. data/lib/mirah/compiler/flow.rb +0 -109
  151. data/lib/mirah/compiler/literal.rb +0 -130
  152. data/lib/mirah/compiler/local.rb +0 -59
  153. data/lib/mirah/compiler/method.rb +0 -44
  154. data/lib/mirah/compiler/structure.rb +0 -65
  155. data/lib/mirah/jvm/compiler/java_source.rb +0 -787
  156. data/lib/mirah/jvm/method_lookup.rb~ +0 -247
  157. data/lib/mirah/jvm/source_generator/builder.rb +0 -468
  158. data/lib/mirah/jvm/source_generator/loops.rb +0 -131
  159. data/lib/mirah/jvm/source_generator/precompile.rb +0 -210
  160. data/lib/mirah/plugin/gwt.rb +0 -189
  161. data/lib/mirah/plugin/java.rb +0 -70
  162. data/lib/mirah/transform/error.rb +0 -13
  163. data/lib/mirah/transform/helper.rb +0 -765
  164. data/lib/mirah/typer/simple.rb +0 -384
  165. data/lib/mirah/version.rb~ +0 -18
  166. data/test/core/ast_test.rb +0 -382
  167. data/test/core/compilation_test.rb +0 -130
  168. data/test/core/macros_test.rb +0 -61
  169. data/test/jvm/javac_test_helper.rb +0 -89
  170. data/test/jvm/jvm_compiler_test.rb~ +0 -2181
  171. data/test/plugins/gwt_test.rb +0 -69
@@ -12,10 +12,10 @@ Datastore API:
12
12
  Model.all -> Query
13
13
  property foo, String # or any supported datastore type
14
14
  # For numbers use Long or Double
15
-
15
+
16
16
  instance.save
17
17
  instance.key
18
-
18
+
19
19
  instance.foo
20
20
  instance.foo=
21
21
 
@@ -26,4 +26,4 @@ Datastore API:
26
26
  Query.sort(property_name, true) # descending
27
27
  Query.foo('foo').bar(3) # Only return instances where foo = 'foo' and bar = 3
28
28
  Query.offset(10)
29
- Query.limit(5)
29
+ Query.limit(5)
@@ -69,4 +69,4 @@ class MirahApp < HttpServlet
69
69
  return "" unless o
70
70
  h(o.toString)
71
71
  end
72
- end
72
+ end
@@ -12,4 +12,4 @@
12
12
  Content: <textarea name=content></textarea><br>
13
13
  <input type=submit>
14
14
  </form>
15
- </body>
15
+ </body>
@@ -37,7 +37,7 @@ class BinaryTrees
37
37
  check += TreeNode.bottomUpTree(-i,depth).itemCheck
38
38
  i += 1
39
39
  end
40
-
40
+
41
41
  puts "#{iterations * 2}\t trees of depth #{depth}\t check: #{check}"
42
42
  depth += 2
43
43
  end
data/examples/edb.mirah CHANGED
@@ -15,4 +15,4 @@
15
15
 
16
16
  def_edb :render, 'test.edb'
17
17
  @message = "Hello"
18
- puts render
18
+ puts render
data/examples/fib.mirah CHANGED
@@ -13,7 +13,7 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
 
16
- def fib(a:int):int
16
+ def fib(a:int)
17
17
  if a < 2
18
18
  a
19
19
  else
@@ -30,4 +30,4 @@ end
30
30
 
31
31
  list = ['foo', 'bar', 'baz']
32
32
  p = Printer(MyPrinter.new)
33
- p.printAll(list)
33
+ p.printAll(list)
@@ -14,12 +14,11 @@
14
14
  # limitations under the License.
15
15
 
16
16
 
17
- macro def eachChar(value, &block)
18
-
19
- quote {
20
- `value`.toCharArray.each do | my_char |
17
+ macro def eachChar(value, block:Block)
18
+ quote {
19
+ `value`.toCharArray.each do |`block.arguments` |
21
20
  `block.body`
22
- end
21
+ end
23
22
  }
24
23
  end
25
24
 
@@ -1,2 +1,2 @@
1
1
  This is a sample project that uses the Mirah plugin for Maven to
2
- build and compile source.
2
+ build and compile source.
@@ -6,4 +6,4 @@ class HelloMirah
6
6
  puts "Hello, Mirah!"
7
7
  end
8
8
  end
9
- end
9
+ end
@@ -69,4 +69,4 @@ task :test => :compile_test do
69
69
  formatter :type => 'plain', :usefile => 'false'
70
70
  end
71
71
  end
72
- end
72
+ end
@@ -382,4 +382,4 @@ class ModelState
382
382
  ast << mdef
383
383
  @save = Body(mdef.child_nodes.get(2))
384
384
  end
385
- end
385
+ end
@@ -391,4 +391,4 @@ class Model
391
391
 
392
392
  def _read_from(e:Entity):void
393
393
  end
394
- end
394
+ end
@@ -125,4 +125,4 @@ class ModelTest
125
125
  assertEquals(e.key, e2.key)
126
126
  end
127
127
  # TODO more tests.
128
- end
128
+ end
@@ -22,13 +22,13 @@ class Door
22
22
  def initialize
23
23
  @state=false
24
24
  end
25
-
25
+
26
26
  def closed?; !@state; end
27
27
  def open?; @state; end
28
28
 
29
29
  def close; @state=false; end
30
30
  def open; @state=true; end
31
-
31
+
32
32
  def toggle
33
33
  if closed?
34
34
  open
@@ -36,14 +36,14 @@ class Door
36
36
  close
37
37
  end
38
38
  end
39
-
39
+
40
40
  def toString; Boolean.toString(@state); end
41
41
  end
42
-
42
+
43
43
  doors=ArrayList.new
44
44
  1.upto(100) do
45
45
  doors.add(Door.new)
46
- end
46
+ end
47
47
 
48
48
  1.upto(100) do |multiplier|
49
49
  index = 0
@@ -54,7 +54,7 @@ end
54
54
  end
55
55
 
56
56
  i = 0
57
- doors.each do |door|
57
+ doors.each do |door|
58
58
  puts "Door #{i+1} is #{door}."
59
59
  i+=1
60
60
  end
@@ -1,9 +1,9 @@
1
1
 
2
2
  This example set is all the code for Mirah from the Rosetta Code wiki
3
- (http://rosettacode.org/.
3
+ (http://rosettacode.org/.
4
4
 
5
- This code is the canonical source for the wiki. Please add as many more
5
+ This code is the canonical source for the wiki. Please add as many more
6
6
  samples as you'd like. Either add the sample here and send a pull request
7
7
  to the project owners, or add a sample to the Rosetta Code wiki and send
8
8
  a message to the project owners. Either way, we'd like to try and keep
9
- the wiki page and this repository synchronized.
9
+ the wiki page and this repository synchronized.
@@ -16,7 +16,7 @@
16
16
  import java.util.ArrayList
17
17
  import java.util.HashMap
18
18
 
19
- # booleans
19
+ # booleans
20
20
  puts 'true is true' if true
21
21
  puts 'false is false' if (!false)
22
22
 
@@ -18,4 +18,4 @@ puts 'code' # I am a comment
18
18
  /*
19
19
  Here is a multi-
20
20
  line comment.
21
- */
21
+ */
@@ -21,7 +21,7 @@ import java.util.regex.Matcher
21
21
  def count_substring(pattern:string, source:string)
22
22
  (source.length() - source.replace(pattern, "").length()) / pattern.length()
23
23
  end
24
-
24
+
25
25
  puts count_substring("th", "the three truths") # ==> 3
26
26
  puts count_substring("abab", "ababababab") # ==> 2
27
27
  puts count_substring("a*b", "abaabba*bbaba*bbab") # ==> 2
@@ -15,7 +15,7 @@
15
15
 
16
16
  def factorial_iterative(n:int)
17
17
  2.upto(n-1) do |i|
18
- n *= i
18
+ n *= i
19
19
  end
20
20
  n
21
21
  end
@@ -18,7 +18,7 @@ def fibonacci(n:int)
18
18
  return n if n < 2
19
19
  fibPrev = 1
20
20
  fib = 1
21
- 3.upto(Math.abs(n)) do
21
+ 3.upto(Math.abs(n)) do
22
22
  oldFib = fib
23
23
  fib = fib + fibPrev
24
24
  fibPrev = oldFib
@@ -16,12 +16,12 @@
16
16
 
17
17
  1.upto(100) do |n|
18
18
  print "Fizz" if a = ((n % 3) == 0)
19
- print "Buzz" if b = ((n % 5) == 0)
19
+ print "Buzz" if b = ((n % 5) == 0)
20
20
  print n unless (a || b)
21
21
  print "\n"
22
22
  end
23
23
 
24
- # a little more straight forward
24
+ # a little more straight forward
25
25
  1.upto(100) do |n|
26
26
  if (n % 15) == 0
27
27
  puts "FizzBuzz"
@@ -17,18 +17,18 @@ import java.util.ArrayList
17
17
  import java.util.List
18
18
  import java.util.Collection
19
19
 
20
- def flatten(list: Collection)
20
+ def flatten(list: Collection)
21
21
  flatten(list, ArrayList.new)
22
22
  end
23
23
  def flatten(source: Collection, result: List)
24
24
 
25
25
  source.each do |x|
26
- if (Collection.class.isAssignableFrom(x.getClass()))
27
- flatten(Collection(x), result)
26
+ if (Collection.class.isAssignableFrom(x.getClass()))
27
+ flatten(Collection(x), result)
28
28
  else
29
29
  result.add(x)
30
30
  result # if branches must return same type
31
- end
31
+ end
32
32
  end
33
33
  result
34
34
  end
@@ -28,9 +28,9 @@ while !guessed do
28
28
  if userNumber == number
29
29
  guessed = true
30
30
  puts "you guessed it"
31
- elsif userNumber > number
31
+ elsif userNumber > number
32
32
  puts "too high"
33
33
  else
34
- puts "too low"
34
+ puts "too low"
35
35
  end
36
36
  end
@@ -15,13 +15,13 @@
15
15
 
16
16
  import java.math.BigInteger
17
17
  import java.util.PriorityQueue
18
-
18
+
19
19
  def updateFrontier(x:BigInteger, queue:PriorityQueue):void
20
20
  queue.offer(x.shiftLeft(1))
21
21
  queue.offer(x.multiply(BigInteger.valueOf(3)))
22
22
  queue.offer(x.multiply(BigInteger.valueOf(5)))
23
23
  end
24
-
24
+
25
25
  def hamming(n:int):BigInteger
26
26
  raise "Invalid parameter" if (n <= 0)
27
27
 
@@ -42,8 +42,8 @@ end
42
42
  nums = ""
43
43
  1.upto(20) do | i |
44
44
  nums = nums + " #{hamming(i)}"
45
- end
45
+ end
46
46
  puts "Hamming(1 .. 20) =#{nums}"
47
47
  puts "\nHamming(1691) = #{hamming(1691)}"
48
- puts "Hamming(1000000) = #{hamming(1000000)}"
48
+ puts "Hamming(1000000) = #{hamming(1000000)}"
49
49
 
@@ -17,7 +17,7 @@ import java.text.NumberFormat
17
17
  import java.text.ParsePosition
18
18
  import java.util.Scanner
19
19
 
20
- # this first example relies on catching an exception,
20
+ # this first example relies on catching an exception,
21
21
  # which is bad style and poorly performing in Java
22
22
  def is_numeric?(s:string)
23
23
  begin
@@ -40,28 +40,28 @@ puts '1.2.3 is not numeric' unless is_numeric?('1.2.3')
40
40
 
41
41
 
42
42
  # check every element of the string
43
- def is_numeric2?(s: string)
44
- if (s == nil || s.isEmpty())
45
- return false
46
- end
47
- if (!s.startsWith('-'))
43
+ def is_numeric2?(s: string)
44
+ if (s == nil || s.isEmpty())
45
+ return false
46
+ end
47
+ if (!s.startsWith('-'))
48
48
  if s.contains('-')
49
- return false
49
+ return false
50
50
  end
51
- end
52
-
51
+ end
52
+
53
53
  0.upto(s.length()-1) do |x|
54
54
  c = s.charAt(x)
55
55
  if ((x == 0) && (c == '-'.charAt(0)))
56
56
  # negative number
57
57
  elsif (c == '.'.charAt(0))
58
- if (s.indexOf('.', x) > -1)
58
+ if (s.indexOf('.', x) > -1)
59
59
  return false # more than one period
60
- end
60
+ end
61
61
  elsif (!Character.isDigit(c))
62
62
  return false
63
63
  end
64
- end
64
+ end
65
65
  true
66
66
  end
67
67
 
@@ -78,7 +78,7 @@ puts '1.2.3 is not numeric' unless is_numeric2?('1.2.3')
78
78
 
79
79
 
80
80
 
81
- # use a regular expression
81
+ # use a regular expression
82
82
  def is_numeric3?(s:string)
83
83
  s == nil || s.matches("[-+]?\\d+(\\.\\d+)?")
84
84
  end
@@ -94,12 +94,12 @@ puts '123- is not numeric' unless is_numeric3?('123-')
94
94
  puts '1.2.3 is not numeric' unless is_numeric3?('1.2.3')
95
95
 
96
96
 
97
- # use the positional parser in the java.text.NumberFormat object
98
- # (a more robust solution). If, after parsing, the parse position is at
99
- # the end of the string, we can deduce that the entire string was a
97
+ # use the positional parser in the java.text.NumberFormat object
98
+ # (a more robust solution). If, after parsing, the parse position is at
99
+ # the end of the string, we can deduce that the entire string was a
100
100
  # valid number.
101
- def is_numeric4?(s:string)
102
- return false if s == nil
101
+ def is_numeric4?(s:string)
102
+ return false if s == nil
103
103
  formatter = NumberFormat.getInstance()
104
104
  pos = ParsePosition.new(0)
105
105
  formatter.parse(s, pos)
@@ -118,10 +118,10 @@ puts '123- is not numeric' unless is_numeric4?('123-')
118
118
  puts '1.2.3 is not numeric' unless is_numeric4?('1.2.3')
119
119
 
120
120
 
121
- # use the java.util.Scanner object. Very useful if you have to
122
- # scan multiple entries. Scanner also has similar methods for longs,
123
- # shorts, bytes, doubles, floats, BigIntegers, and BigDecimals as well
124
- # as methods for integral types where you may input a base/radix other than
121
+ # use the java.util.Scanner object. Very useful if you have to
122
+ # scan multiple entries. Scanner also has similar methods for longs,
123
+ # shorts, bytes, doubles, floats, BigIntegers, and BigDecimals as well
124
+ # as methods for integral types where you may input a base/radix other than
125
125
  # 10 (10 is the default, which can be changed using the useRadix method).
126
126
  def is_numeric5?(s:string)
127
127
  return false if s == nil
@@ -14,11 +14,11 @@
14
14
  # limitations under the License.
15
15
 
16
16
 
17
- def reverse(s:string)
17
+ def reverse(s:string)
18
18
  StringBuilder.new(s).reverse.toString()
19
19
  end
20
20
 
21
- def palindrome?(s:string)
21
+ def palindrome?(s:string)
22
22
  s.equals(reverse(s))
23
23
  end
24
24
 
@@ -19,7 +19,7 @@ list = double[999]
19
19
  mean = 1.0
20
20
  std = 0.5
21
21
  rng = Random.new
22
- 0.upto(998) do | i |
22
+ 0.upto(998) do | i |
23
23
  list[i] = mean + std * rng.nextGaussian
24
24
  end
25
25
 
@@ -16,7 +16,7 @@
16
16
 
17
17
  x = ""
18
18
 
19
- 5.times do
19
+ 5.times do
20
20
  x = x + "ha"
21
21
  end
22
22
 
@@ -14,7 +14,7 @@
14
14
  # limitations under the License.
15
15
 
16
16
 
17
- def reverse(s:string)
17
+ def reverse(s:string)
18
18
  StringBuilder.new(s).reverse
19
19
  end
20
20