Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jruby/jruby
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: ee6a4a1d8639
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 4ede1932b571
Choose a head ref

Commits on Apr 6, 2015

  1. Copy the full SHA
    30d1b93 View commit details
  2. Copy the full SHA
    1a407ae View commit details

Commits on Apr 7, 2015

  1. 3
    Copy the full SHA
    c8a94e6 View commit details

Commits on Apr 8, 2015

  1. Copy the full SHA
    07f12b9 View commit details
  2. make ObjectSpacer public

    with this you can have a custom implementation of ObjectSpacer and plug it into the runtime
    via reflection.
    mkristian committed Apr 8, 2015
    Copy the full SHA
    a41293b View commit details
  3. permit to set -C uri:classloader:/ via commandline

    to set the current directory uri:classloader:/ is already possible.
    mkristian committed Apr 8, 2015
    Copy the full SHA
    175c8c9 View commit details
  4. Copy the full SHA
    c39a170 View commit details

Commits on Apr 9, 2015

  1. Add PowerPC64 little endian support in FFI on 1_7

    Adds support for the ppc64le architecture in JRuby FFI in the branch
    jruby-1_7
    Leonardo Bianconi authored and mkristian committed Apr 9, 2015
    Copy the full SHA
    7952772 View commit details
  2. Copy the full SHA
    2bd3f4c View commit details
  3. [Truffle] Add missing specialization for Kernel#raise and untag the w…

    …hole Matrix specs!
    
    * See #2804.
    eregon committed Apr 9, 2015
    3
    Copy the full SHA
    e2c64c6 View commit details
  4. Merge branch 'new-readme' of github.com:jruby/jruby

    Conflicts:
    	README.md
    chrisseaton committed Apr 9, 2015
    Copy the full SHA
    c1376d2 View commit details
  5. Copy the full SHA
    f0b1605 View commit details
  6. Copy the full SHA
    fe8ed1c View commit details
  7. Copy the full SHA
    971b87c View commit details
  8. Fixed remaining mri kwargs issues sans parsing bug (did not untag bec…

    …ause of some JIT failures with kwargs)
    enebo committed Apr 9, 2015
    Copy the full SHA
    af2e4db View commit details
  9. Copy the full SHA
    1bc0d90 View commit details
  10. Copy the full SHA
    8a4ac9c View commit details
  11. Mark as used by JIT.

    headius committed Apr 9, 2015
    Copy the full SHA
    20e0a16 View commit details
  12. Copy the full SHA
    870aa4a View commit details
  13. Copy the full SHA
    fd67247 View commit details
  14. Copy the full SHA
    730cd7e View commit details
  15. Copy the full SHA
    fba81a9 View commit details
  16. Copy the full SHA
    be07196 View commit details
  17. moved packaging to 'jar' again

    apparently the 'bundle' package shades the dependency or so. last release with the correct jar was 1.7.15.
    fixes #2810
    
    Sponsored by Lookout Inc.
    mkristian committed Apr 9, 2015
    Copy the full SHA
    206d9d6 View commit details
  18. Copy the full SHA
    6eb69a5 View commit details
  19. Fixes #2816. UnboundMethod#parameters for an assignment method wrongl…

    …y returns blank array
    enebo committed Apr 9, 2015
    Copy the full SHA
    adf874c View commit details
  20. Fixes #2816. UnboundMethod#parameters for an assignment method wrongl…

    …y returns blank array
    enebo committed Apr 9, 2015
    Copy the full SHA
    7861be0 View commit details
  21. ensure MBean names are unique by using a timestamp

    merging the ruby.runtime_number with a timestamp with milli granularity
    for the MBean name
    
    fixes #2582
    
    Sponsored by Lookout Inc.
    mkristian committed Apr 9, 2015
    Copy the full SHA
    f959d12 View commit details

Commits on Apr 10, 2015

  1. Copy the full SHA
    e788e1d View commit details

Commits on Apr 11, 2015

  1. Merge branch 'jruby-1_7'

    Conflicts:
    	core/src/main/java/org/jruby/Main.java
    	maven/jruby/pom.rb
    mkristian committed Apr 11, 2015
    Copy the full SHA
    deecb15 View commit details
  2. fix merge issue

    mkristian committed Apr 11, 2015
    Copy the full SHA
    4abd53d View commit details
  3. Copy the full SHA
    d8d14a1 View commit details
  4. [Truffle] When randomising array storage strategy, we already checked…

    … for empty before canonicalising.
    chrisseaton committed Apr 11, 2015
    Copy the full SHA
    d3e34a5 View commit details
  5. Copy the full SHA
    aa74e72 View commit details
  6. Remove random error log.

    chrisseaton committed Apr 11, 2015
    Copy the full SHA
    26eb258 View commit details
  7. Merge branch 'master' into truffle-head

    Conflicts:
    	truffle/src/main/java/org/jruby/truffle/nodes/core/KernelNodes.java
    	truffle/src/main/java/org/jruby/truffle/runtime/RubyContext.java
    chrisseaton committed Apr 11, 2015
    Copy the full SHA
    4ede193 View commit details
Showing with 631 additions and 3,177 deletions.
  1. +56 −37 README.md
  2. +1 −1 core/src/main/java/org/jruby/Main.java
  3. +1 −1 core/src/main/java/org/jruby/Ruby.java
  4. +26 −12 core/src/main/java/org/jruby/RubyProc.java
  5. +11 −0 core/src/main/java/org/jruby/internal/runtime/methods/JavaMethod.java
  6. +3 −2 core/src/main/java/org/jruby/ir/instructions/ReceivePostReqdArgInstr.java
  7. +2 −3 core/src/main/java/org/jruby/ir/interpreter/InterpreterEngine.java
  8. +4 −2 core/src/main/java/org/jruby/ir/runtime/IRRuntimeHelpers.java
  9. +2 −1 core/src/main/java/org/jruby/ir/targets/JVMVisitor.java
  10. +7 −1 core/src/main/java/org/jruby/management/BeanManagerImpl.java
  11. +5 −0 core/src/main/java/org/jruby/runtime/DynamicScope.java
  12. +5 −18 core/src/main/java/org/jruby/runtime/IRBlockBody.java
  13. +41 −15 core/src/main/java/org/jruby/runtime/Signature.java
  14. +8 −4 core/src/main/java/org/jruby/util/cli/ArgumentProcessor.java
  15. +47 −0 core/src/test/java/org/jruby/management/ManagementBeanTest.java
  16. +100 −0 lib/ruby/shared/ffi/platform/ppc64le-linux/types.conf
  17. +1 −0 lib/ruby/truffle/mri/ostruct.rb
  18. +0 −4 spec/truffle/tags/core/module/remove_method_tags.txt
  19. +0 −1 spec/truffle/tags/library/matrix/det_tags.txt
  20. +0 −1 spec/truffle/tags/library/matrix/determinant_tags.txt
  21. +0 −1 spec/truffle/tags/library/matrix/diagonal_tags.txt
  22. +0 −1 spec/truffle/tags/library/matrix/divide_tags.txt
  23. +0 −1 spec/truffle/tags/library/matrix/eigenvalue_decomposition/initialize_tags.txt
  24. +0 −2 spec/truffle/tags/library/matrix/exponent_tags.txt
  25. +0 −1 spec/truffle/tags/library/matrix/hermitian_tags.txt
  26. +0 −1 spec/truffle/tags/library/matrix/inv_tags.txt
  27. +0 −1 spec/truffle/tags/library/matrix/inverse_tags.txt
  28. +0 −1 spec/truffle/tags/library/matrix/lup_decomposition/determinant_tags.txt
  29. +0 −3 spec/truffle/tags/library/matrix/lup_decomposition/solve_tags.txt
  30. +0 −2 spec/truffle/tags/library/matrix/minus_tags.txt
  31. +0 −1 spec/truffle/tags/library/matrix/multiply_tags.txt
  32. +0 −1 spec/truffle/tags/library/matrix/normal_tags.txt
  33. +0 −1 spec/truffle/tags/library/matrix/orthogonal_tags.txt
  34. +0 −1 spec/truffle/tags/library/matrix/permutation_tags.txt
  35. +0 −2 spec/truffle/tags/library/matrix/plus_tags.txt
  36. +0 −1 spec/truffle/tags/library/matrix/regular_tags.txt
  37. +0 −1 spec/truffle/tags/library/matrix/singular_tags.txt
  38. +0 −1 spec/truffle/tags/library/matrix/symmetric_tags.txt
  39. +0 −1 spec/truffle/tags/library/matrix/tr_tags.txt
  40. +0 −1 spec/truffle/tags/library/matrix/trace_tags.txt
  41. +0 −1 spec/truffle/tags/library/matrix/unitary_tags.txt
  42. +0 −1 spec/truffle/tags/library/matrix/vector/each2_tags.txt
  43. +0 −1 spec/truffle/tags/library/matrix/vector/inner_product_tags.txt
  44. +1 −0 spec/truffle/truffle.mspec
  45. +0 −4 test/mri/excludes/TestKeywordArguments.rb
  46. +0 −5 truffle/src/main/java/org/jruby/truffle/nodes/array/ArrayReadDenormalizedNode.java
  47. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/array/ArrayReadNormalizedNode.java
  48. +0 −5 truffle/src/main/java/org/jruby/truffle/nodes/array/ArrayReadSliceDenormalizedNode.java
  49. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/array/ArrayReadSliceNormalizedNode.java
  50. +0 −5 truffle/src/main/java/org/jruby/truffle/nodes/array/ArrayWriteDenormalizedNode.java
  51. +0 −6 truffle/src/main/java/org/jruby/truffle/nodes/array/ArrayWriteNormalizedNode.java
  52. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/array/EnsureCapacityArrayNode.java
  53. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/array/GeneralizeArrayNode.java
  54. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/array/NewFixnumLowerNode.java
  55. +0 −6 truffle/src/main/java/org/jruby/truffle/nodes/cast/ArrayCastNode.java
  56. +0 −6 truffle/src/main/java/org/jruby/truffle/nodes/cast/CmpIntNode.java
  57. +0 −5 truffle/src/main/java/org/jruby/truffle/nodes/cast/HashCastNode.java
  58. +0 −5 truffle/src/main/java/org/jruby/truffle/nodes/cast/ProcCastNode.java
  59. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/cast/ProcOrNullNode.java
  60. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/cast/SingleValueCastNode.java
  61. +0 −10 truffle/src/main/java/org/jruby/truffle/nodes/cast/SplatCastNode.java
  62. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/cast/StringToSymbolNode.java
  63. +0 −6 truffle/src/main/java/org/jruby/truffle/nodes/cast/ToSNode.java
  64. +0 −5 truffle/src/main/java/org/jruby/truffle/nodes/coerce/SymbolOrToStrNode.java
  65. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/coerce/ToAryNode.java
  66. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/coerce/ToIntNode.java
  67. +0 −5 truffle/src/main/java/org/jruby/truffle/nodes/coerce/ToStrNode.java
  68. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/conversion/ToJavaStringNode.java
  69. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/conversion/ToSymbolNode.java
  70. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/core/ArrayCoreMethodNode.java
  71. +0 −5 truffle/src/main/java/org/jruby/truffle/nodes/core/ArrayDropTailNode.java
  72. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/core/ArrayDupNode.java
  73. +0 −5 truffle/src/main/java/org/jruby/truffle/nodes/core/ArrayGetTailNode.java
  74. +0 −186 truffle/src/main/java/org/jruby/truffle/nodes/core/ArrayNodes.java
  75. +0 −6 truffle/src/main/java/org/jruby/truffle/nodes/core/ArraySliceNode.java
  76. +0 −39 truffle/src/main/java/org/jruby/truffle/nodes/core/BasicObjectNodes.java
  77. +0 −110 truffle/src/main/java/org/jruby/truffle/nodes/core/BignumNodes.java
  78. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/core/BinaryCoreMethodNode.java
  79. +0 −16 truffle/src/main/java/org/jruby/truffle/nodes/core/BindingNodes.java
  80. +0 −22 truffle/src/main/java/org/jruby/truffle/nodes/core/ClassNodes.java
  81. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/core/CoreMethodNode.java
  82. +0 −24 truffle/src/main/java/org/jruby/truffle/nodes/core/DirNodes.java
  83. +0 −13 truffle/src/main/java/org/jruby/truffle/nodes/core/EncodingConverterNodes.java
  84. +0 −42 truffle/src/main/java/org/jruby/truffle/nodes/core/EncodingNodes.java
  85. +0 −16 truffle/src/main/java/org/jruby/truffle/nodes/core/ExceptionNodes.java
  86. +0 −8 truffle/src/main/java/org/jruby/truffle/nodes/core/FalseClassNodes.java
  87. +0 −18 truffle/src/main/java/org/jruby/truffle/nodes/core/FiberNodes.java
  88. +0 −56 truffle/src/main/java/org/jruby/truffle/nodes/core/FileNodes.java
  89. +6 −117 truffle/src/main/java/org/jruby/truffle/nodes/core/FixnumNodes.java
  90. +0 −98 truffle/src/main/java/org/jruby/truffle/nodes/core/FloatNodes.java
  91. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/core/HashCoreMethodNode.java
  92. +0 −104 truffle/src/main/java/org/jruby/truffle/nodes/core/HashNodes.java
  93. +0 −16 truffle/src/main/java/org/jruby/truffle/nodes/core/IONodes.java
  94. +0 −17 truffle/src/main/java/org/jruby/truffle/nodes/core/IntegerNodes.java
  95. +9 −277 truffle/src/main/java/org/jruby/truffle/nodes/core/KernelNodes.java
  96. +0 −10 truffle/src/main/java/org/jruby/truffle/nodes/core/MainNodes.java
  97. +0 −44 truffle/src/main/java/org/jruby/truffle/nodes/core/MatchDataNodes.java
  98. +0 −124 truffle/src/main/java/org/jruby/truffle/nodes/core/MathNodes.java
  99. +0 −34 truffle/src/main/java/org/jruby/truffle/nodes/core/MethodNodes.java
  100. +32 −221 truffle/src/main/java/org/jruby/truffle/nodes/core/ModuleNodes.java
  101. +0 −20 truffle/src/main/java/org/jruby/truffle/nodes/core/MutexNodes.java
  102. +0 −16 truffle/src/main/java/org/jruby/truffle/nodes/core/ObjectSpaceNodes.java
  103. +0 −29 truffle/src/main/java/org/jruby/truffle/nodes/core/ProcNodes.java
  104. +0 −14 truffle/src/main/java/org/jruby/truffle/nodes/core/ProcessNodes.java
  105. +0 −33 truffle/src/main/java/org/jruby/truffle/nodes/core/RangeNodes.java
  106. +0 −60 truffle/src/main/java/org/jruby/truffle/nodes/core/RegexpNodes.java
  107. +0 −272 truffle/src/main/java/org/jruby/truffle/nodes/core/StringNodes.java
  108. +0 −68 truffle/src/main/java/org/jruby/truffle/nodes/core/SymbolNodes.java
  109. +0 −58 truffle/src/main/java/org/jruby/truffle/nodes/core/ThreadNodes.java
  110. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/core/ThreadPassNode.java
  111. +0 −16 truffle/src/main/java/org/jruby/truffle/nodes/core/TimeNodes.java
  112. +0 −12 truffle/src/main/java/org/jruby/truffle/nodes/core/TrueClassNodes.java
  113. +0 −92 truffle/src/main/java/org/jruby/truffle/nodes/core/TrufflePrimitiveNodes.java
  114. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/core/UnaryCoreMethodNode.java
  115. +0 −25 truffle/src/main/java/org/jruby/truffle/nodes/core/UnboundMethodNodes.java
  116. +0 −5 truffle/src/main/java/org/jruby/truffle/nodes/core/YieldingCoreMethodNode.java
  117. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/debug/AssertConstantNode.java
  118. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/debug/AssertNotCompiledNode.java
  119. +0 −8 truffle/src/main/java/org/jruby/truffle/nodes/dispatch/CachedDispatchNode.java
  120. +0 −5 truffle/src/main/java/org/jruby/truffle/nodes/dispatch/DispatchNode.java
  121. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/globals/GetFromThreadLocalNode.java
  122. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/globals/WrapInThreadLocalNode.java
  123. +0 −6 truffle/src/main/java/org/jruby/truffle/nodes/methods/AliasNode.java
  124. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/objects/ClassNode.java
  125. +0 −5 truffle/src/main/java/org/jruby/truffle/nodes/objects/FreezeNode.java
  126. +0 −5 truffle/src/main/java/org/jruby/truffle/nodes/objects/IsFrozenNode.java
  127. +0 −5 truffle/src/main/java/org/jruby/truffle/nodes/objects/IsTaintedNode.java
  128. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/objects/MetaClassNode.java
  129. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/objects/SingletonClassNode.java
  130. +0 −5 truffle/src/main/java/org/jruby/truffle/nodes/objects/TaintNode.java
  131. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/ArrayPrimitiveNodes.java
  132. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/BignumPrimitiveNodes.java
  133. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/ByteArrayNodes.java
  134. +0 −22 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/EncodingConverterPrimitiveNodes.java
  135. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/EncodingPrimitiveNodes.java
  136. +0 −10 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/FixnumPrimitiveNodes.java
  137. +0 −13 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/FloatPrimitiveNodes.java
  138. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/ModulePrimitiveNodes.java
  139. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/NativeFunctionPrimitiveNodes.java
  140. +0 −10 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/ObjectPrimitiveNodes.java
  141. +0 −32 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/PointerPrimitiveNodes.java
  142. +0 −28 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/PosixNodes.java
  143. +0 −16 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/RandomPrimitiveNodes.java
  144. +0 −16 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/RegexpPrimitiveNodes.java
  145. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/RubiniusPrimitiveNode.java
  146. +0 −26 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/StatPrimitiveNodes.java
  147. +0 −98 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/StringPrimitiveNodes.java
  148. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/SymbolPrimitiveNodes.java
  149. +0 −50 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/TimePrimitiveNodes.java
  150. +0 −4 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/UndefinedPrimitiveNodes.java
  151. +46 −61 truffle/src/main/java/org/jruby/truffle/nodes/rubinius/VMPrimitiveNodes.java
  152. +7 −0 truffle/src/main/java/org/jruby/truffle/runtime/RubyContext.java
  153. +0 −37 truffle/src/main/java/org/jruby/truffle/runtime/core/CoreLibrary.java
  154. +0 −16 truffle/src/main/java/org/jruby/truffle/runtime/core/RubyArray.java
  155. +0 −5 truffle/src/main/java/org/jruby/truffle/runtime/core/RubyBasicObject.java
  156. +68 −0 truffle/src/main/java/org/jruby/truffle/runtime/subsystems/RubiniusConfiguration.java
  157. +2 −2 truffle/src/main/ruby/core.rb
  158. +62 −0 truffle/src/main/ruby/core/rubinius/bootstrap/configuration.rb
  159. +12 −0 truffle/src/main/ruby/core/rubinius/common/exception.rb
  160. +16 −0 truffle/src/main/ruby/core/rubinius/common/kernel.rb
  161. +47 −0 truffle/src/main/ruby/core/rubinius/common/module.rb
  162. +3 −4 truffle/src/main/ruby/core/rubinius/platform/ffi.rb
93 changes: 56 additions & 37 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,62 +1,81 @@
# JRuby - A Java implementation of the Ruby language
# JRuby - an implementation of the Ruby language on the JVM

Master: [![Build Status](https://travis-ci.org/jruby/jruby.png?branch=master)](https://travis-ci.org/jruby/jruby)
1.7 branch: [![Build Status](https://travis-ci.org/jruby/jruby.png?branch=jruby-1_7)](https://travis-ci.org/jruby/jruby/branches)

Authors: Stefan Matthias Aust, Anders Bengtsson, Geert Bevin, Ola Bini,
Piergiuliano Bossi, Johannes Brodwall, Rocky Burt, Paul Butcher,
Benoit Cerrina, Wyss Clemens, David Corbin, Benoit Daloze, Thomas E Enebo,
Robert Feldt, Chad Fowler, Russ Freeman, Joey Gibson, Kiel Hodges,
Xandy Johnson, Kelvin Liu, Kevin Menard, Alan Moore, Akinori Musha,
Charles Nutter, Takashi Okamoto, Jan Arne Petersen, Tobias Reif, David Saff,
Subramanya Sastry, Chris Seaton, Nick Sieger, Ed Sinjiashvili, Vladimir Sizikov,
Daiki Ueno, Matthias Veit, Jason Voegele, Sergey Yevtushenko, Robert Yokota,
and many gracious contributors from the community.
## About

Project Contact: Thomas E Enebo <tom.enebo@gmail.com>
JRuby is an implementation of the [Ruby language](http://www.ruby-lang.org)
using the JVM.

JRuby also uses code generously shared by the creator of the Ruby language,
Yukihiro Matsumoto <matz@netlab.co.jp>.
It aims to be a complete, correct and fast implementation of Ruby, at the same
time as providing powerful new features such as concurrency without a
[global-interpreter-lock](http://en.wikipedia.org/wiki/Global_Interpreter_Lock),
true parallelism, and tight integration to the Java language to allow you to
uses Java classes in your Ruby program and to allow JRuby to be embedded into a
Java application.

## About
You can use JRuby simply as a faster version of Ruby, you can use it to run Ruby
on the JVM and access powerful JVM libraries such as highly tuned concurrency
primitives, you can use it to embed Ruby as a scripting language in your Java
program, or many other possibilites.

JRuby is the effort to recreate the Ruby (http://www.ruby-lang.org) interpreter
in Java.
We're a welcoming community - you can talk to us on [#jruby on Freenode](http://richard.esplins.org/siwi/2011/07/08/getting-started-freenode-irc/).
There are core team members in the EU and US time zones.

The Java version is tightly integrated with Java to allow both to script
any Java class and to embed the interpreter into any Java application.
See the [docs](docs) directory for more information.
Visit the [JRuby website](http://jruby.org) and the [JRuby wiki](https://github.com/jruby/jruby/wiki)
for more information.

## Prerequisites
## Getting JRuby

* A Java 7-compatible (or higher) Java development kit (JDK)
* Maven 3+
* Apache Ant 1.8+ (see https://github.com/jruby/jruby/issues/2236)
To run JRuby you will need a JRE (the JVM runtime environment) version 7 or higher.

## Run
Your operating system may provide a JRE and JRuby in a package manager, but you may find that this
version is very old.

bin/jruby rubyfile.rb
An alternative is to use one of the Ruby version managers.

interprets the file `rubyfile.rb`.
For [`rbenv`](https://github.com/sstephenson/rbenv) you will need the
[`ruby-build`](https://github.com/sstephenson/ruby-build) plugin. You may find that your system
package manager can provide these. Then you can run:

If you checked out from the repository or downloaded the source distribution,
see the next section to build JRuby first.
```
$ rbenv install rbenv install jruby-9.0.0.0-dev
```

## Compiling from source
For [`rvm`](https://rvm.io) you can simply do:

See [BUILDING](BUILDING.md) for more information.
```
$ rvm install jruby
```

## Testing
You can also [download packages from the JRuby website](http://jruby.org/download) that
you can unpack and run in place.

See [BUILDING: Developing and Testing](BUILDING.md#developing-and-testing) for
more information.
## Building JRuby from source

## More Information
See [BUILDING](BUILDING.md) for information about prerequisites, how to compile JRuby from source
and how to test it.

Visit http://jruby.org for more information.
## Authors

Visit http://jruby.github.io/jruby for the Maven Site documentation.
Stefan Matthias Aust, Anders Bengtsson, Geert Bevin, Ola Bini,
Piergiuliano Bossi, Johannes Brodwall, Rocky Burt, Paul Butcher,
Benoit Cerrina, Wyss Clemens, David Corbin, Benoit Daloze, Thomas E Enebo,
Robert Feldt, Chad Fowler, Russ Freeman, Joey Gibson, Kiel Hodges,
Xandy Johnson, Kelvin Liu, Kevin Menard, Alan Moore, Akinori Musha,
Charles Nutter, Takashi Okamoto, Jan Arne Petersen, Tobias Reif, David Saff,
Subramanya Sastry, Chris Seaton, Nick Sieger, Ed Sinjiashvili, Vladimir Sizikov,
Daiki Ueno, Matthias Veit, Jason Voegele, Sergey Yevtushenko, Robert Yokota,
and many gracious contributors from the community.

JRuby uses code generously shared by the creator of the Ruby language,
Yukihiro Matsumoto <matz@netlab.co.jp>.

Project Contact: Thomas E Enebo <tom.enebo@gmail.com>

## License

Read the [COPYING](COPYING) file.
JRuby is licensed to you under three licenses - the EPL 1.0, GPL 2 and LGPL 2.1.
Some components have other licenses and copyright. See the [COPYING](COPYING)
file for more specifics.
2 changes: 1 addition & 1 deletion core/src/main/java/org/jruby/Main.java
Original file line number Diff line number Diff line change
@@ -517,7 +517,7 @@ private void doCheckSecurityManager() {
* @param rj
* @return
*/
private static int handleRaiseException(RaiseException rj) {
protected static int handleRaiseException(RaiseException rj) {
RubyException raisedException = rj.getException();
Ruby runtime = raisedException.getRuntime();
if (runtime.getSystemExit().isInstance(raisedException)) {
2 changes: 1 addition & 1 deletion core/src/main/java/org/jruby/Ruby.java
Original file line number Diff line number Diff line change
@@ -5073,7 +5073,7 @@ public FilenoUtil getFilenoUtil() {
private EnumMap<DefinedMessage, RubyString> definedMessages = new EnumMap<DefinedMessage, RubyString>(DefinedMessage.class);
private EnumMap<RubyThread.Status, RubyString> threadStatuses = new EnumMap<RubyThread.Status, RubyString>(RubyThread.Status.class);

private interface ObjectSpacer {
public interface ObjectSpacer {
public void addToObjectSpace(Ruby runtime, boolean useObjectSpace, IRubyObject object);
}

38 changes: 26 additions & 12 deletions core/src/main/java/org/jruby/RubyProc.java
Original file line number Diff line number Diff line change
@@ -249,8 +249,8 @@ public static IRubyObject[] prepareArgs(ThreadContext context, Block.Type type,
if (args == null) return IRubyObject.NULL_ARRAY;

if (type == Block.Type.LAMBDA) {
if (blockBody instanceof InterpretedIRBlockBody) {
((InterpretedIRBlockBody) blockBody).getSignature().checkArity(context.runtime, args);
if (blockBody instanceof IRBlockBody) {
((IRBlockBody) blockBody).getSignature().checkArity(context.runtime, args);
} else {
arity.checkArity(context.runtime, args.length);
}
@@ -260,27 +260,41 @@ public static IRubyObject[] prepareArgs(ThreadContext context, Block.Type type,
boolean isFixed = arity.isFixed();
int required = arity.required();
int actual = args.length;
boolean restKwargs = blockBody instanceof IRBlockBody && ((IRBlockBody) blockBody).getSignature().kwargs();

// FIXME: This is a hot mess. restkwargs factors into destructing a single element array as well. I just weaved it into this logic.
// for procs and blocks, single array passed to multi-arg must be spread
if (arity != Arity.ONE_ARGUMENT && required != 0 &&
(isFixed || arity != Arity.OPTIONAL) &&
if ((arity != Arity.ONE_ARGUMENT && required != 0 && (isFixed || arity != Arity.OPTIONAL) || restKwargs) &&
actual == 1 && args[0].respondsTo("to_ary")) {
args = args[0].convertToArray().toJavaArray();
actual = args.length;
}

// FIXME: This code is horrible so I named it poorly. We add 1 if we have kwargs so we do not accidentally
// chomp it off of args array. Much of this logic needs to be encapsulated as part of our transition from
// Arity to Signature.
int fudge = blockBody instanceof IRBlockBody && ((IRBlockBody) blockBody).getSignature().kwargs() ? 1 : 0;
// FIXME: NOTE IN THE BLOCKCAPALYPSE: I think we only care if there is any kwargs syntax at all and if so it is +1
// argument. This ended up more complex because required() on signature adds +1 is required kwargs. I suspect
// required() is used for two purposes and the +1 might be useful in some other way so I made it all work and
// after this we should clean this up (IRBlockBody and BlockBody are also messing with args[] so that should
// be part of this cleanup.

// We add one to our fill and adjust number of incoming args code when there are kwargs. We subtract one
// if it happens to be requiredkwargs since required gets a +1. This is horrible :)
int needsKwargs = blockBody instanceof IRBlockBody && ((IRBlockBody) blockBody).getSignature().kwargs() ?
1 - ((IRBlockBody) blockBody).getSignature().getRequiredKeywordCount() : 0;

// fixed arity > 0 with mismatch needs a new args array
if (isFixed && required > 0 && required+fudge != actual) {
IRubyObject[] newArgs = Arrays.copyOf(args, required);
if (isFixed && required > 0 && required+needsKwargs != actual) {
IRubyObject[] newArgs = Arrays.copyOf(args, required+needsKwargs);


// pad with nil
if (required > actual) {
if (required > actual) { // Not enough required args pad.
Helpers.fillNil(newArgs, actual, required, context.runtime);
// ENEBO: what if we need kwargs here?
} else if (needsKwargs != 0) {
if (args.length < required+needsKwargs) { // Not enough args and we need an empty {} for kwargs processing.
newArgs[newArgs.length - 1] = RubyHash.newHash(context.runtime);
} else { // We have more args than we need and kwargs is always the last arg.
newArgs[newArgs.length - 1] = args[args.length - 1];
}
}

args = newArgs;
Original file line number Diff line number Diff line change
@@ -46,6 +46,10 @@ public abstract class JavaMethod extends DynamicMethod implements Cloneable, Met
private String[] parameterList;
private CallConfiguration callerRequirement = CallConfiguration.FrameNoneScopeNone;

private static String[] ONE_REQ = new String[] { "q" };
private static String[] TWO_REQ = new String[] { "q", "q" };
private static String[] THREE_REQ = new String[] { "q", "q", "q" };

public static final Class[][] METHODS = {
{JavaMethodZero.class, JavaMethodZeroOrOne.class, JavaMethodZeroOrOneOrTwo.class, JavaMethodZeroOrOneOrTwoOrThree.class},
{null, JavaMethodOne.class, JavaMethodOneOrTwo.class, JavaMethodOneOrTwoOrThree.class},
@@ -972,12 +976,15 @@ public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule claz
public static abstract class JavaMethodOne extends JavaMethodOneOrN {
public JavaMethodOne(RubyModule implementationClass, Visibility visibility) {
super(implementationClass, visibility);
setParameterList(ONE_REQ);
}
public JavaMethodOne(RubyModule implementationClass, Visibility visibility, CallConfiguration callConfig) {
super(implementationClass, visibility, callConfig);
setParameterList(ONE_REQ);
}
public JavaMethodOne(RubyModule implementationClass, Visibility visibility, CallConfiguration callConfig, String name) {
super(implementationClass, visibility, callConfig, name);
setParameterList(ONE_REQ);
}

public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject[] args) {
@@ -1038,9 +1045,11 @@ public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule claz
public static abstract class JavaMethodTwo extends JavaMethodTwoOrN {
public JavaMethodTwo(RubyModule implementationClass, Visibility visibility) {
super(implementationClass, visibility);
setParameterList(TWO_REQ);
}
public JavaMethodTwo(RubyModule implementationClass, Visibility visibility, CallConfiguration callConfig) {
super(implementationClass, visibility, callConfig);
setParameterList(TWO_REQ);
}

public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject[] args) {
@@ -1079,9 +1088,11 @@ public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule claz
public static abstract class JavaMethodThree extends JavaMethodThreeOrN {
public JavaMethodThree(RubyModule implementationClass, Visibility visibility) {
super(implementationClass, visibility);
setParameterList(THREE_REQ);
}
public JavaMethodThree(RubyModule implementationClass, Visibility visibility, CallConfiguration callConfig) {
super(implementationClass, visibility, callConfig);
setParameterList(THREE_REQ);
}

public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name, IRubyObject[] args) {
Original file line number Diff line number Diff line change
@@ -10,6 +10,7 @@
import org.jruby.ir.transformations.inlining.CloneInfo;
import org.jruby.ir.transformations.inlining.InlineCloneInfo;
import org.jruby.ir.transformations.inlining.SimpleCloneInfo;
import org.jruby.runtime.ThreadContext;
import org.jruby.runtime.builtin.IRubyObject;

/**
@@ -70,8 +71,8 @@ public static ReceivePostReqdArgInstr decode(IRReaderDecoder d) {
return new ReceivePostReqdArgInstr(d.decodeVariable(), d.decodeInt(), d.decodeInt(), d.decodeInt());
}

public IRubyObject receivePostReqdArg(IRubyObject[] args, boolean acceptsKeywordArgument) {
return IRRuntimeHelpers.receivePostReqdArg(args, preReqdArgsCount, postReqdArgsCount, argIndex, acceptsKeywordArgument);
public IRubyObject receivePostReqdArg(ThreadContext context, IRubyObject[] args, boolean acceptsKeywordArgument) {
return IRRuntimeHelpers.receivePostReqdArg(context, args, preReqdArgsCount, postReqdArgsCount, argIndex, acceptsKeywordArgument);
}

@Override
Original file line number Diff line number Diff line change
@@ -247,9 +247,8 @@ protected static void receiveArg(ThreadContext context, Instr i, Operation opera
setResult(temp, currDynScope, instr.getResult(), result);
return;
case RECV_POST_REQD_ARG:
result = ((ReceivePostReqdArgInstr)instr).receivePostReqdArg(args, acceptsKeywordArgument);
// For blocks, missing arg translates to nil
setResult(temp, currDynScope, instr.getResult(), result == null ? context.nil : result);
result = ((ReceivePostReqdArgInstr)instr).receivePostReqdArg(context, args, acceptsKeywordArgument);
setResult(temp, currDynScope, instr.getResult(), result);
return;
case RECV_RUBY_EXC:
setResult(temp, currDynScope, instr.getResult(), IRRuntimeHelpers.unwrapRubyException(exception));
6 changes: 4 additions & 2 deletions core/src/main/java/org/jruby/ir/runtime/IRRuntimeHelpers.java
Original file line number Diff line number Diff line change
@@ -489,6 +489,7 @@ public static IRubyObject[] convertValueIntoArgArray(ThreadContext context, IRub
}
}

@JIT
public static Block getBlockFromObject(ThreadContext context, Object value) {
Block block;
if (value instanceof Block) {
@@ -790,11 +791,12 @@ public static IRubyObject constructRestArg(ThreadContext context, Object[] args,
return context.runtime.newArray(restArgs);
}

public static IRubyObject receivePostReqdArg(IRubyObject[] args, int preReqdArgsCount, int postReqdArgsCount, int argIndex, boolean acceptsKeywordArgument) {
@JIT
public static IRubyObject receivePostReqdArg(ThreadContext context, IRubyObject[] args, int preReqdArgsCount, int postReqdArgsCount, int argIndex, boolean acceptsKeywordArgument) {
boolean kwargs = extractKwargsHash(args, preReqdArgsCount + postReqdArgsCount, acceptsKeywordArgument) != null;
int n = kwargs ? args.length - 1 : args.length;
int remaining = n - preReqdArgsCount;
if (remaining <= argIndex) return null; // For blocks!
if (remaining <= argIndex) return context.nil;

return (remaining > postReqdArgsCount) ? args[n - postReqdArgsCount + argIndex] : args[preReqdArgsCount + argIndex];
}
3 changes: 2 additions & 1 deletion core/src/main/java/org/jruby/ir/targets/JVMVisitor.java
Original file line number Diff line number Diff line change
@@ -1546,12 +1546,13 @@ public void ReceivePreReqdArgInstr(ReceivePreReqdArgInstr instr) {

@Override
public void ReceivePostReqdArgInstr(ReceivePostReqdArgInstr instr) {
jvmMethod().loadContext();
jvmMethod().loadArgs();
jvmAdapter().pushInt(instr.preReqdArgsCount);
jvmAdapter().pushInt(instr.postReqdArgsCount);
jvmAdapter().pushInt(instr.getArgIndex());
jvmAdapter().ldc(jvm.methodData().scope.receivesKeywordArgs());
jvmMethod().invokeIRHelper("receivePostReqdArg", sig(IRubyObject.class, IRubyObject[].class, int.class, int.class, int.class, boolean.class));
jvmMethod().invokeIRHelper("receivePostReqdArg", sig(IRubyObject.class, ThreadContext.class, IRubyObject[].class, int.class, int.class, int.class, boolean.class));
jvmStoreLocal(instr.getResult());
}

8 changes: 7 additions & 1 deletion core/src/main/java/org/jruby/management/BeanManagerImpl.java
Original file line number Diff line number Diff line change
@@ -3,6 +3,9 @@
import java.lang.management.ManagementFactory;
import java.lang.reflect.Method;
import java.security.AccessControlException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.management.InstanceAlreadyExistsException;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanRegistrationException;
@@ -19,13 +22,16 @@ public class BeanManagerImpl implements BeanManager {

private static final Logger LOG = LoggerFactory.getLogger("BeanManagerImpl");

private static final SimpleDateFormat FORMAT = new SimpleDateFormat("yyyyMMddHHmmssSSS");

public final String base;

private final boolean managementEnabled;

public BeanManagerImpl(Ruby ruby, boolean managementEnabled) {
this.managementEnabled = managementEnabled;
this.base = "org.jruby:type=Runtime,name=" + ruby.getRuntimeNumber() + ",";
this.base = "org.jruby:type=Runtime,name=" + FORMAT.format(new Date()) +
ruby.getRuntimeNumber() + ",";
}

public void register(JITCompilerMBean jitCompiler) {
5 changes: 5 additions & 0 deletions core/src/main/java/org/jruby/runtime/DynamicScope.java
Original file line number Diff line number Diff line change
@@ -100,6 +100,11 @@ public final DynamicScope getParentScope() {
return parent;
}

@Deprecated
public DynamicScope getNextCapturedScope() { // Used by ruby-debug-ide
return getParentScope();
}

/**
* Returns the n-th parent scope of this scope.
* May return <code>null</code>.
Loading