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: 9498ddfc97ab
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: fad58756c801
Choose a head ref

Commits on Feb 16, 2016

  1. [build] update compiler plugin

    kares committed Feb 16, 2016
    Copy the full SHA
    a02628a View commit details
  2. Copy the full SHA
    a5c9372 View commit details
  3. Copy the full SHA
    b7f7d31 View commit details
  4. Copy the full SHA
    3f273c4 View commit details
  5. Copy the full SHA
    94a13c0 View commit details
  6. handle :gid/:uid popen options as unimplemented instead of raising Ar…

    …gumentError
    
    ... a unsupported warning might have worked as well but not sure if its a good idea
    kares committed Feb 16, 2016
    Copy the full SHA
    aaddd18 View commit details
  7. Copy the full SHA
    d1eecd1 View commit details
  8. Copy the full SHA
    249a291 View commit details
  9. [ji] make sure const_missing is properly delegated on Java proxies (f…

    …ixes #3669)
    
    ... this has regressed since e7ea92d
    kares committed Feb 16, 2016
    Copy the full SHA
    de96f4f View commit details
  10. Copy the full SHA
    059c913 View commit details
  11. Copy the full SHA
    d27bb97 View commit details
  12. Copy the full SHA
    500a642 View commit details
  13. [Truffle] getCallerFrame -> getCallerFrameIgnoringSend, rather than j…

    …ust keep that information in a comment
    chrisseaton committed Feb 16, 2016
    1
    Copy the full SHA
    c18b79f View commit details
  14. Copy the full SHA
    89cc9e8 View commit details
  15. Copy the full SHA
    4bc72b9 View commit details
  16. Copy the full SHA
    11a189b View commit details
  17. Copy the full SHA
    72f806e View commit details
  18. Copy the full SHA
    1781496 View commit details
  19. Copy the full SHA
    24abcd3 View commit details
  20. Copy the full SHA
    2951c36 View commit details
  21. Copy the full SHA
    c460290 View commit details
  22. make sure auto-load does set-up parent module and name (see #3645)

    ... previously this worked as a side effect of fetchConstant "loading" auto-loads
    but since (b216c5d) `autoload` has been fixed to not initialize prematurely
    kares committed Feb 16, 2016
    Copy the full SHA
    538fc48 View commit details
  23. set parent module and name early on even for auto-load (closing #3645)

    ... this is not crucial but restores the same behavior as in JRuby < 9.0.5.0
    kares committed Feb 16, 2016
    Copy the full SHA
    482c35a View commit details
  24. none throws IOException here

    kares committed Feb 16, 2016
    Copy the full SHA
    6c01511 View commit details
  25. untag passing require tests

    kares committed Feb 16, 2016
    Copy the full SHA
    b4ed241 View commit details
  26. Copy the full SHA
    bdd6868 View commit details
  27. Copy the full SHA
    caacd95 View commit details
  28. Copy the full SHA
    6a78582 View commit details

Commits on Feb 17, 2016

  1. Copy the full SHA
    9b3a6bb View commit details
  2. Copy the full SHA
    53c2c85 View commit details
  3. generic JavaMethodN call with [] args should delegate to correct arit…

    …y (due overriders)
    
    fixes #3668
    kares committed Feb 17, 2016
    Copy the full SHA
    59db950 View commit details
  4. Copy the full SHA
    c81b335 View commit details
  5. Merge branch 'jruby-1_7'

    * jruby-1_7:
      test that public_send correctly dispatches native Java methods (closing #3668)
      generic JavaMethodN call with [] args should delegate to correct arity (due overriders)
      explicitly mark required arg count for RubyString squeeze impls
    kares committed Feb 17, 2016
    Copy the full SHA
    d3bfea1 View commit details
  6. 2
    Copy the full SHA
    5a4d4e8 View commit details
  7. Copy the full SHA
    07f4c87 View commit details
  8. Copy the full SHA
    c468c77 View commit details
  9. Copy the full SHA
    11210b0 View commit details
  10. 1
    Copy the full SHA
    9766552 View commit details
  11. [Truffle] Remove print_interleaved_backtrace, as we can do it with -X…

    …truffle.backtraces.interleave_java now.
    chrisseaton committed Feb 17, 2016
    Copy the full SHA
    7b1b158 View commit details
  12. Copy the full SHA
    2f6f0c4 View commit details
  13. Copy the full SHA
    f235cb0 View commit details
  14. Copy the full SHA
    1407e2c View commit details
  15. [Truffle] Tidy up OrNode.

    chrisseaton committed Feb 17, 2016
    Copy the full SHA
    b57de6c View commit details
  16. [Truffle] Tidy up IfNode.

    chrisseaton committed Feb 17, 2016
    Copy the full SHA
    bd48295 View commit details
  17. Copy the full SHA
    68c2f19 View commit details
  18. Copy the full SHA
    2f55695 View commit details
  19. 2
    Copy the full SHA
    88da599 View commit details
  20. Copy the full SHA
    bb67a89 View commit details
  21. 1
    Copy the full SHA
    107b6ce View commit details

Commits on Feb 18, 2016

  1. make JavaMethod arity sub-classes open-closed with call overrides (fo…

    …r less surprises)
    
    ... without following the introduced conventions one can not guarantee correct dispatch
    in corner cases such as native over-loaded (multi) method impls (e.g. using public_send)
    kares committed Feb 18, 2016
    Copy the full SHA
    62aaa9c View commit details
Showing with 1,297 additions and 1,155 deletions.
  1. +8 −0 .travis.yml
  2. +34 −0 ISSUE_TEMPLATE.md
  3. +10 −5 core/src/main/java/org/jruby/RubyHash.java
  4. +13 −26 core/src/main/java/org/jruby/RubyIO.java
  5. +14 −7 core/src/main/java/org/jruby/RubyKernel.java
  6. +12 −14 core/src/main/java/org/jruby/RubyModule.java
  7. +16 −16 core/src/main/java/org/jruby/RubyString.java
  8. +1 −1 core/src/main/java/org/jruby/ext/ripper/StringTerm.java
  9. +1 −2 core/src/main/java/org/jruby/ext/socket/Addrinfo.java
  10. +1 −1 core/src/main/java/org/jruby/ext/zlib/JZlibDeflate.java
  11. +1 −3 core/src/main/java/org/jruby/ext/zlib/ZlibLibrary.java
  12. +44 −32 core/src/main/java/org/jruby/internal/runtime/methods/JavaMethod.java
  13. +1 −1 core/src/main/java/org/jruby/java/proxies/JavaProxy.java
  14. +2 −3 core/src/main/java/org/jruby/javasupport/Java.java
  15. +1 −1 core/src/main/java/org/jruby/parser/ParserSupport.java
  16. +15 −23 core/src/main/java/org/jruby/runtime/load/LoadService.java
  17. +11 −7 core/src/main/java/org/jruby/runtime/load/LoadServiceResourceInputStream.java
  18. +10 −17 core/src/main/java/org/jruby/util/StringSupport.java
  19. +2 −0 core/src/main/java/org/jruby/util/cli/Options.java
  20. +3 −3 core/src/main/java/org/jruby/util/io/EncodingUtils.java
  21. +19 −5 core/src/main/java/org/jruby/util/io/PopenExecutor.java
  22. +2 −4 pom.rb
  23. +2 −9 pom.xml
  24. +25 −0 spec/java_integration/types/retrieval_spec.rb
  25. +9 −6 spec/regression/GH-1371_gzip_spec.rb
  26. +6 −0 spec/regression/GH-3645_autoload.rb
  27. +25 −0 spec/regression/GH-3645_set_non_anonymous_constant.rb
  28. +2 −0 test/jruby/hello_dummy.rb
  29. +17 −0 test/jruby/test_hash.rb
  30. +7 −3 test/jruby/test_load.rb
  31. +28 −0 test/jruby/test_require_once.rb
  32. +21 −0 test/jruby/test_string.rb
  33. +7 −7 test/mri/excludes/TestProcess.rb
  34. +2 −5 test/mri/excludes/TestRequire.rb
  35. +1 −1 truffle/pom.rb
  36. +4 −4 truffle/pom.xml
  37. +6 −0 truffle/src/main/java/org/jruby/truffle/RubyContext.java
  38. +49 −28 truffle/src/main/java/org/jruby/truffle/core/CoreLibrary.java
  39. +2 −1 truffle/src/main/java/org/jruby/truffle/core/CoreMethodNodeManager.java
  40. +1 −1 truffle/src/main/java/org/jruby/truffle/core/RubyMethodForeignAccessFactory.java
  41. +5 −5 truffle/src/main/java/org/jruby/truffle/core/array/ArrayDupNode.java
  42. +1 −1 truffle/src/main/java/org/jruby/truffle/core/array/ArrayForeignAccessFactory.java
  43. +12 −12 truffle/src/main/java/org/jruby/truffle/core/array/ArrayNodes.java
  44. +4 −4 truffle/src/main/java/org/jruby/truffle/core/array/PrimitiveArrayNodeFactory.java
  45. +1 −1 truffle/src/main/java/org/jruby/truffle/core/basicobject/BasicForeignAccessFactory.java
  46. +1 −1 truffle/src/main/java/org/jruby/truffle/core/coerce/NameToJavaStringNode.java
  47. +1 −1 truffle/src/main/java/org/jruby/truffle/core/coerce/NameToSymbolOrStringNode.java
  48. +1 −1 truffle/src/main/java/org/jruby/truffle/core/coerce/ToAryNode.java
  49. +1 −1 truffle/src/main/java/org/jruby/truffle/core/coerce/ToFNode.java
  50. +1 −1 truffle/src/main/java/org/jruby/truffle/core/coerce/ToIntNode.java
  51. +1 −1 truffle/src/main/java/org/jruby/truffle/core/coerce/ToPathNode.java
  52. +1 −1 truffle/src/main/java/org/jruby/truffle/core/coerce/ToProcNode.java
  53. +1 −1 truffle/src/main/java/org/jruby/truffle/core/coerce/ToStrNode.java
  54. +1 −2 truffle/src/main/java/org/jruby/truffle/core/exception/ExceptionNodes.java
  55. +3 −3 truffle/src/main/java/org/jruby/truffle/core/fiber/FiberNodes.java
  56. +1 −1 truffle/src/main/java/org/jruby/truffle/core/format/nodes/PackRootNode.java
  57. +1 −1 truffle/src/main/java/org/jruby/truffle/core/format/nodes/UnpackRootNode.java
  58. +1 −1 truffle/src/main/java/org/jruby/truffle/core/hash/HashForeignAccessFactory.java
  59. +2 −2 truffle/src/main/java/org/jruby/truffle/core/hash/HashNodes.java
  60. +1 −1 truffle/src/main/java/org/jruby/truffle/core/kernel/AtExitManager.java
  61. +10 −11 truffle/src/main/java/org/jruby/truffle/core/kernel/KernelNodes.java
  62. +1 −1 truffle/src/main/java/org/jruby/truffle/core/kernel/TraceManager.java
  63. +2 −2 truffle/src/main/java/org/jruby/truffle/core/module/ModuleFields.java
  64. +8 −7 truffle/src/main/java/org/jruby/truffle/core/module/ModuleNodes.java
  65. +6 −6 truffle/src/main/java/org/jruby/truffle/core/numeric/BignumNodes.java
  66. +0 −73 truffle/src/main/java/org/jruby/truffle/core/numeric/FixnumLiteralNode.java
  67. +14 −14 truffle/src/main/java/org/jruby/truffle/core/numeric/FixnumNodes.java
  68. +11 −11 truffle/src/main/java/org/jruby/truffle/core/numeric/FloatNodes.java
  69. +1 −2 truffle/src/main/java/org/jruby/truffle/core/proc/ProcNodes.java
  70. +2 −3 truffle/src/main/java/org/jruby/truffle/core/regexp/RegexpNodes.java
  71. +2 −2 truffle/src/main/java/org/jruby/truffle/core/rubinius/PosixNodes.java
  72. +1 −2 truffle/src/main/java/org/jruby/truffle/core/rubinius/RubiniusLastStringReadNode.java
  73. +1 −2 truffle/src/main/java/org/jruby/truffle/core/rubinius/RubiniusLastStringWriteNode.java
  74. +3 −3 truffle/src/main/java/org/jruby/truffle/core/rubinius/RubiniusPrimitiveCallConstructor.java
  75. +3 −3 truffle/src/main/java/org/jruby/truffle/core/rubinius/StatPrimitiveNodes.java
  76. +1 −2 truffle/src/main/java/org/jruby/truffle/core/rubinius/ThreadPrimitiveNodes.java
  77. +63 −5 truffle/src/main/java/org/jruby/truffle/core/rubinius/TimePrimitiveNodes.java
  78. +1 −1 truffle/src/main/java/org/jruby/truffle/core/string/StringForeignAccessFactory.java
  79. +10 −10 truffle/src/main/java/org/jruby/truffle/core/string/StringNodes.java
  80. +5 −5 truffle/src/main/java/org/jruby/truffle/core/symbol/SymbolNodes.java
  81. +1 −1 truffle/src/main/java/org/jruby/truffle/core/thread/ThreadManager.java
  82. +2 −3 truffle/src/main/java/org/jruby/truffle/core/thread/ThreadNodes.java
  83. +2 −2 truffle/src/main/java/org/jruby/truffle/core/time/ReadTimeZoneNode.java
  84. +2 −28 truffle/src/main/java/org/jruby/truffle/extra/TrufflePrimitiveNodes.java
  85. +0 −1 truffle/src/main/java/org/jruby/truffle/instrument/RubyDefaultASTProber.java
  86. +1 −1 truffle/src/main/java/org/jruby/truffle/{language → instrument}/RubySyntaxTag.java
  87. +76 −38 truffle/src/main/java/org/jruby/truffle/language/{RubyCallStack.java → CallStackManager.java}
  88. +1 −0 truffle/src/main/java/org/jruby/truffle/language/LazyRubyRootNode.java
  89. +3 −1 truffle/src/main/java/org/jruby/truffle/language/LexicalScope.java
  90. +1 −3 truffle/src/main/java/org/jruby/truffle/language/NotProvided.java
  91. +2 −0 truffle/src/main/java/org/jruby/truffle/language/Options.java
  92. +0 −4 truffle/src/main/java/org/jruby/truffle/language/RubyNode.java
  93. +51 −43 truffle/src/main/java/org/jruby/truffle/language/SafepointManager.java
  94. +2 −2 truffle/src/main/java/org/jruby/truffle/language/arguments/ReadUserKeywordsHashNode.java
  95. +1 −1 truffle/src/main/java/org/jruby/truffle/language/arguments/RunBlockKWArgsHelperNode.java
  96. +1 −0 truffle/src/main/java/org/jruby/truffle/language/backtrace/Activation.java
  97. +7 −1 truffle/src/main/java/org/jruby/truffle/language/backtrace/Backtrace.java
  98. +15 −6 truffle/src/main/java/org/jruby/truffle/language/backtrace/BacktraceFormatter.java
  99. +1 −1 truffle/src/main/java/org/jruby/truffle/language/{ → backtrace}/InternalRootNode.java
  100. +1 −1 truffle/src/main/java/org/jruby/truffle/language/constants/ReadConstantWithLexicalScopeNode.java
  101. +4 −4 truffle/src/main/java/org/jruby/truffle/language/constants/ReadLiteralConstantNode.java
  102. +8 −7 truffle/src/main/java/org/jruby/truffle/language/control/AndNode.java
  103. +0 −5 truffle/src/main/java/org/jruby/truffle/language/control/BreakException.java
  104. +1 −0 truffle/src/main/java/org/jruby/truffle/language/control/BreakID.java
  105. +7 −5 truffle/src/main/java/org/jruby/truffle/language/control/BreakNode.java
  106. +0 −21 truffle/src/main/java/org/jruby/truffle/language/control/BreakShellException.java
  107. +2 −18 truffle/src/main/java/org/jruby/truffle/language/control/ElidableResultNode.java
  108. +0 −3 truffle/src/main/java/org/jruby/truffle/language/control/FrameOnStackMarker.java
  109. +45 −0 truffle/src/main/java/org/jruby/truffle/language/control/IfElseNode.java
  110. +4 −12 truffle/src/main/java/org/jruby/truffle/language/control/IfNode.java
  111. +0 −5 truffle/src/main/java/org/jruby/truffle/language/control/NextException.java
  112. +0 −1 truffle/src/main/java/org/jruby/truffle/language/control/NextNode.java
  113. +0 −3 truffle/src/main/java/org/jruby/truffle/language/control/NotNode.java
  114. +7 −2 truffle/src/main/java/org/jruby/truffle/language/control/OnceNode.java
  115. +8 −6 truffle/src/main/java/org/jruby/truffle/language/control/OrNode.java
  116. +0 −21 truffle/src/main/java/org/jruby/truffle/language/control/QuitException.java
  117. +5 −23 truffle/src/main/java/org/jruby/truffle/language/control/RaiseException.java
  118. +0 −5 truffle/src/main/java/org/jruby/truffle/language/control/RedoException.java
  119. +0 −5 truffle/src/main/java/org/jruby/truffle/language/control/RetryException.java
  120. +0 −11 truffle/src/main/java/org/jruby/truffle/language/control/ReturnException.java
  121. +1 −3 truffle/src/main/java/org/jruby/truffle/language/control/ReturnID.java
  122. +1 −4 truffle/src/main/java/org/jruby/truffle/language/control/ReturnNode.java
  123. +2 −140 truffle/src/main/java/org/jruby/truffle/language/control/SequenceNode.java
  124. +0 −2 truffle/src/main/java/org/jruby/truffle/language/control/ThreadExitException.java
  125. +0 −6 truffle/src/main/java/org/jruby/truffle/language/control/ThrowException.java
  126. +0 −3 truffle/src/main/java/org/jruby/truffle/language/control/TruffleFatalException.java
  127. +43 −0 truffle/src/main/java/org/jruby/truffle/language/control/UnlessNode.java
  128. +0 −70 truffle/src/main/java/org/jruby/truffle/language/control/WhenSplatNode.java
  129. +3 −7 truffle/src/main/java/org/jruby/truffle/language/control/WhileNode.java
  130. +1 −2 truffle/src/main/java/org/jruby/truffle/language/dispatch/UnresolvedDispatchNode.java
  131. +1 −1 truffle/src/main/java/org/jruby/truffle/language/exceptions/EnsureNode.java
  132. +2 −2 truffle/src/main/java/org/jruby/truffle/language/exceptions/TryNode.java
  133. +0 −1 truffle/src/main/java/org/jruby/truffle/language/literal/BooleanLiteralNode.java
  134. +39 −0 truffle/src/main/java/org/jruby/truffle/language/literal/IntegerFixnumLiteralNode.java
  135. +39 −0 truffle/src/main/java/org/jruby/truffle/language/literal/LongFixnumLiteralNode.java
  136. +9 −3 truffle/src/main/java/org/jruby/truffle/language/literal/{NilNode.java → NilLiteralNode.java}
  137. +3 −2 truffle/src/main/java/org/jruby/truffle/language/literal/{LiteralNode.java → ObjectLiteralNode.java}
  138. +2 −3 truffle/src/main/java/org/jruby/truffle/language/literal/StringLiteralNode.java
  139. +3 −4 truffle/src/main/java/org/jruby/truffle/language/loader/CodeLoader.java
  140. +15 −7 truffle/src/main/java/org/jruby/truffle/language/methods/ExceptionTranslatingNode.java
  141. +33 −13 truffle/src/main/java/org/jruby/truffle/language/objects/AllocateObjectNode.java
  142. +1 −1 truffle/src/main/java/org/jruby/truffle/language/objects/OpenModuleNode.java
  143. +78 −79 truffle/src/main/java/org/jruby/truffle/language/translator/BodyTranslator.java
  144. +18 −20 truffle/src/main/java/org/jruby/truffle/language/translator/LoadArgumentsTranslator.java
  145. +12 −17 truffle/src/main/java/org/jruby/truffle/language/translator/MethodTranslator.java
  146. +1 −1 truffle/src/main/java/org/jruby/truffle/language/translator/ReloadArgumentsTranslator.java
  147. +90 −2 truffle/src/main/java/org/jruby/truffle/language/translator/Translator.java
  148. +3 −2 truffle/src/main/java/org/jruby/truffle/language/translator/TranslatorDriver.java
  149. +5 −17 truffle/src/main/java/org/jruby/truffle/stdlib/BigDecimalNodes.java
  150. +1 −2 truffle/src/main/java/org/jruby/truffle/tools/InstrumentationServerManager.java
  151. +3 −4 truffle/src/main/java/org/jruby/truffle/tools/SimpleShell.java
  152. +6 −0 truffle/src/main/ruby/core/shims.rb
8 changes: 8 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -35,8 +35,16 @@ matrix:
include:
- env: COMMAND=test/check_versions.sh
jdk: oraclejdk8
allow_failures:
- env: PHASE='-Prake -Dtask=test:mri:fullint'
- env: JT=check_ambiguous_arguments
jdk: oraclejdk8
# NOTE: build seems to never start (waited for any to finish for more than a day) - probably a travis-ci bug
#- env: PHASE='-Pmain'
# sudo: required
# dist: trusty
# group: edge
# jdk: oraclejdk9

branches:
only:
34 changes: 34 additions & 0 deletions ISSUE_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<!--
This is a simple template for filing JRuby isuses.
Please help us help you by providing the information below.
Text inside XML comment tags will not be shown in your report.
-->

### Environment

<!--
Provide at least:
* JRuby version (`jruby -v`) and command line (flags, JRUBY_OPTS, etc)
* Operating system and platform (e.g. `uname -a`)
Other relevant info you may wish to add:
* Installed or activated gems
* Application/framework version (e.g. Rails, Sinatra)
* Environment variables
-->

### Expected Behavior

<!--
Describe your expectation of how JRuby should behave.
Provide an executable Ruby script or a link to an example repository.
-->

### Actual Behavior

<!--
Describe or show the actual behavior.
Provide text or screen capture showing the behavior.
-->
15 changes: 10 additions & 5 deletions core/src/main/java/org/jruby/RubyHash.java
Original file line number Diff line number Diff line change
@@ -485,6 +485,11 @@ protected static int hashValue(final int h) {
return MRI_HASH ? MRIHashValue(h) : JavaSoftHashValue(h);
}

protected final int hashValue(final IRubyObject key) {
final int h = isComparedByIdentity() ? System.identityHashCode(key) : key.hashCode();
return MRI_HASH ? MRIHashValue(h) : JavaSoftHashValue(h);
}

private static int bucketIndex(final int h, final int length) {
return MRI_HASH ? MRIBucketIndex(h, length) : JavaSoftBucketIndex(h, length);
}
@@ -518,7 +523,7 @@ protected void internalPut(final IRubyObject key, final IRubyObject value, final
}

protected void internalPutSmall(final IRubyObject key, final IRubyObject value, final boolean checkForExisting) {
final int hash = hashValue(key.hashCode());
final int hash = hashValue(key);
final int i = bucketIndex(hash, table.length);

// if (table[i] != null) collisions++;
@@ -547,7 +552,7 @@ protected IRubyObject internalGet(IRubyObject key) { // specialized for value
protected RubyHashEntry internalGetEntry(IRubyObject key) {
if (size == 0) return NO_ENTRY;

final int hash = hashValue(key.hashCode());
final int hash = hashValue(key);
for (RubyHashEntry entry = table[bucketIndex(hash, table.length)]; entry != null; entry = entry.next) {
if (internalKeyExist(entry, hash, key)) {
return entry;
@@ -567,12 +572,12 @@ private boolean internalKeyExist(RubyHashEntry entry, int hash, IRubyObject key)
protected RubyHashEntry internalDelete(final IRubyObject key) {
if (size == 0) return NO_ENTRY;

return internalDelete(hashValue(key.hashCode()), MATCH_KEY, key);
return internalDelete(hashValue(key), MATCH_KEY, key);
}

protected RubyHashEntry internalDeleteEntry(final RubyHashEntry entry) {
// n.b. we need to recompute the hash in case the key object was modified
return internalDelete(hashValue(entry.key.hashCode()), MATCH_ENTRY, entry);
return internalDelete(hashValue(entry.key), MATCH_ENTRY, entry);
}

private final RubyHashEntry internalDelete(final int hash, final EntryMatchType matchType, final Object obj) {
@@ -923,7 +928,7 @@ public RubyHash rehash() {
oldTable[j] = null;
while (entry != null) {
RubyHashEntry next = entry.next;
entry.hash = hashValue(entry.key.hashCode()); // update the hash value
entry.hash = hashValue(entry.key); // update the hash value
int i = bucketIndex(entry.hash, newTable.length);
entry.next = newTable[i];
newTable[i] = entry;
39 changes: 13 additions & 26 deletions core/src/main/java/org/jruby/RubyIO.java
Original file line number Diff line number Diff line change
@@ -2408,8 +2408,6 @@ public IRubyObject ctl(Ruby runtime, IRubyObject cmd, IRubyObject arg) {
return runtime.newFixnum(0);
}

private static final byte[] EMPTY_BYTE_ARRAY = new byte[0];

@JRubyMethod(name = "puts")
public IRubyObject puts(ThreadContext context) {
return puts0(context, this);
@@ -3743,13 +3741,13 @@ private void setupPopen(ModeFlags modes, POpenProcess process) throws RaiseExcep
}

private static class Ruby19POpen {
public final RubyString cmd;
public final IRubyObject[] cmdPlusArgs;
public final RubyHash env;
final RubyString cmd;
final IRubyObject[] cmdPlusArgs;
final RubyHash env;

public Ruby19POpen(Ruby runtime, IRubyObject[] args) {
IRubyObject[] _cmdPlusArgs = null;
IRubyObject _env = null;
Ruby19POpen(Ruby runtime, IRubyObject[] args) {
IRubyObject[] _cmdPlusArgs;
IRubyObject _env;
IRubyObject _cmd;

int firstArg = 0;
@@ -3865,18 +3863,6 @@ public static IRubyObject popen(ThreadContext context, IRubyObject recv, IRubyOb
process = ShellLauncher.popen(runtime, r19Popen.cmdPlusArgs, r19Popen.env, modes);
}

// Yes, this is gross. java.lang.Process does not appear to be guaranteed
// "ready" when we get it back from Runtime#exec, so we try to give it a
// chance by waiting for 10ms before we proceed. Only doing this on 1.5
// since Hotspot 1.6+ does not seem to exhibit the problem.
if (System.getProperty("java.specification.version", "").equals("1.5")) {
synchronized (process) {
try {
process.wait(100);
} catch (InterruptedException ie) {}
}
}

checkPopenOptions(options);

io.setupPopen(modes, process);
@@ -4304,14 +4290,15 @@ protected void interruptBlockingThreads() {
* @author realjenius
*/
private static class ByteListCache {
private byte[] buffer = EMPTY_BYTE_ARRAY;
public void release(ByteList l) {
buffer = l.getUnsafeBytes();

private byte[] buffer = ByteList.NULL_ARRAY;

final void release(ByteList bytes) {
buffer = bytes.getUnsafeBytes();
}

public ByteList allocate(int size) {
ByteList l = new ByteList(buffer, 0, size, false);
return l;
final ByteList allocate(int size) {
return new ByteList(buffer, 0, size, false);
}
}

21 changes: 14 additions & 7 deletions core/src/main/java/org/jruby/RubyKernel.java
Original file line number Diff line number Diff line change
@@ -1553,7 +1553,7 @@ public static IRubyObject system19(ThreadContext context, IRubyObject recv, IRub
if (pid < 0) {
return runtime.getNil();
}
status[0] = (int)((RubyProcess.RubyStatus)context.getLastExitStatus()).getStatus();
status[0] = (int)((RubyProcess.RubyStatus) context.getLastExitStatus()).getStatus();
if (status[0] == 0) return runtime.getTrue();
return runtime.getFalse();
}
@@ -1582,11 +1582,7 @@ private static int systemCommon(ThreadContext context, IRubyObject recv, IRubyOb
long[] tuple;

try {
IRubyObject lastArg = args[args.length - 1];
if (lastArg instanceof RubyHash) {
runtime.getWarnings().warn(ID.UNSUPPORTED_SUBPROCESS_OPTION, "system does not support options in JRuby yet: " + lastArg.inspect());
args = Arrays.copyOf(args, args.length - 1);
}
args = dropLastArgIfOptions(runtime, args);
if (! Platform.IS_WINDOWS && args[args.length -1].asJavaString().matches(".*[^&]&\\s*")) {
// looks like we need to send process to the background
ShellLauncher.runWithoutWait(runtime, args);
@@ -1599,7 +1595,18 @@ private static int systemCommon(ThreadContext context, IRubyObject recv, IRubyOb

// RubyStatus uses real native status now, so we unshift Java's shifted exit status
context.setLastExitStatus(RubyProcess.RubyStatus.newProcessStatus(runtime, tuple[0] << 8, tuple[1]));
return (int)tuple[0];
return (int) tuple[0];
}

private static IRubyObject[] dropLastArgIfOptions(final Ruby runtime, final IRubyObject[] args) {
IRubyObject lastArg = args[args.length - 1];
if (lastArg instanceof RubyHash) {
if (!((RubyHash) lastArg).isEmpty()) {
runtime.getWarnings().warn(ID.UNSUPPORTED_SUBPROCESS_OPTION, "system does not support options in JRuby yet: " + lastArg);
}
return Arrays.copyOf(args, args.length - 1);
}
return args;
}

public static IRubyObject exec(ThreadContext context, IRubyObject recv, IRubyObject[] args) {
26 changes: 12 additions & 14 deletions core/src/main/java/org/jruby/RubyModule.java
Original file line number Diff line number Diff line change
@@ -3649,21 +3649,21 @@ public IRubyObject setConstant(String name, IRubyObject value, boolean hidden) {
*/
private IRubyObject setConstantCommon(String name, IRubyObject value, boolean hidden, boolean warn) {
IRubyObject oldValue = fetchConstant(name);

setParentForModule(name, value);

if (oldValue != null) {
if (oldValue == UNDEF) {
setAutoloadConstant(name, value);
} else {
if (warn) {
boolean notAutoload = oldValue != UNDEF;
if (notAutoload || !setAutoloadConstant(name, value)) {
if (warn && notAutoload) {
getRuntime().getWarnings().warn(ID.CONSTANT_ALREADY_INITIALIZED, "already initialized constant " + name);
}
setParentForModule(name, value);
// might just call storeConstant(name, value, hidden) but to maintain
// backwards compatibility with calling #storeConstant overrides
if (hidden) storeConstant(name, value, true);
else storeConstant(name, value);
}
} else {
setParentForModule(name, value);
if (hidden) storeConstant(name, value, true);
else storeConstant(name, value);
}
@@ -4148,6 +4148,7 @@ protected final IRubyObject finishAutoload(String name) {
storeConstant(name, value);
}
removeAutoload(name);
invalidateConstantCache(name);
return value;
}

@@ -4170,17 +4171,14 @@ protected IRubyObject getAutoloadConstant(String name, boolean loadConstant) {
/**
* Set an Object as a defined constant in autoloading.
*/
private void setAutoloadConstant(String name, IRubyObject value) {
private boolean setAutoloadConstant(String name, IRubyObject value) {
final Autoload autoload = getAutoloadMap().get(name);
if ( autoload != null ) {
if ( ! autoload.setConstant(getRuntime().getCurrentContext(), value) ) {
storeConstant(name, value);
removeAutoload(name);
}
}
else {
storeConstant(name, value);
boolean set = autoload.setConstant(getRuntime().getCurrentContext(), value);
if ( ! set ) removeAutoload(name);
return set;
}
return false;
}

/**
32 changes: 16 additions & 16 deletions core/src/main/java/org/jruby/RubyString.java
Original file line number Diff line number Diff line change
@@ -115,7 +115,6 @@ public class RubyString extends RubyObject implements EncodingCapable, MarshalEn

private static final ASCIIEncoding ASCII = ASCIIEncoding.INSTANCE;
private static final UTF8Encoding UTF8 = UTF8Encoding.INSTANCE;
private static final byte[] EMPTY_BYTE_ARRAY = ByteList.NULL_ARRAY;

// string doesn't share any resources
private static final int SHARE_LEVEL_NONE = 0;
@@ -340,7 +339,7 @@ private boolean eql19(IRubyObject other) {
}

public RubyString(Ruby runtime, RubyClass rubyClass) {
this(runtime, rubyClass, EMPTY_BYTE_ARRAY);
this(runtime, rubyClass, ByteList.NULL_ARRAY);
}

public RubyString(Ruby runtime, RubyClass rubyClass, CharSequence value) {
@@ -593,8 +592,8 @@ public static RubyString newEmptyString(Ruby runtime) {
return newEmptyString(runtime, runtime.getString());
}

private static final ByteList EMPTY_ASCII8BIT_BYTELIST = new ByteList(new byte[0], ASCIIEncoding.INSTANCE);
private static final ByteList EMPTY_USASCII_BYTELIST = new ByteList(new byte[0], USASCIIEncoding.INSTANCE);
private static final ByteList EMPTY_ASCII8BIT_BYTELIST = new ByteList(ByteList.NULL_ARRAY, ASCIIEncoding.INSTANCE);
private static final ByteList EMPTY_USASCII_BYTELIST = new ByteList(ByteList.NULL_ARRAY, USASCIIEncoding.INSTANCE);

public static RubyString newAllocatedString(Ruby runtime, RubyClass metaClass) {
RubyString empty = new RubyString(runtime, metaClass, EMPTY_ASCII8BIT_BYTELIST);
@@ -4536,14 +4535,14 @@ public IRubyObject squeeze19(ThreadContext context) {
return str;
}

@JRubyMethod(name = "squeeze")
@JRubyMethod(name = "squeeze", required = 1)
public IRubyObject squeeze19(ThreadContext context, IRubyObject arg) {
RubyString str = strDup(context.runtime);
str.squeeze_bang19(context, arg);
return str;
}

@JRubyMethod(name = "squeeze", rest = true)
@JRubyMethod(name = "squeeze", required = 2, rest = true)
public IRubyObject squeeze19(ThreadContext context, IRubyObject[] args) {
RubyString str = strDup(context.runtime);
str.squeeze_bang19(context, args);
@@ -4552,11 +4551,12 @@ public IRubyObject squeeze19(ThreadContext context, IRubyObject[] args) {

@JRubyMethod(name = "squeeze!")
public IRubyObject squeeze_bang19(ThreadContext context) {
Ruby runtime = context.runtime;
if (value.getRealSize() == 0) {
modifyCheck();
return runtime.getNil();
return context.nil;
}
final Ruby runtime = context.runtime;

final boolean squeeze[] = new boolean[StringSupport.TRANS_SIZE];
for (int i=0; i< StringSupport.TRANS_SIZE; i++) squeeze[i] = true;

@@ -4574,9 +4574,9 @@ public IRubyObject squeeze_bang19(ThreadContext context) {
return this;
}

@JRubyMethod(name = "squeeze!")
@JRubyMethod(name = "squeeze!", required = 1)
public IRubyObject squeeze_bang19(ThreadContext context, IRubyObject arg) {
Ruby runtime = context.runtime;
final Ruby runtime = context.runtime;

RubyString otherStr = arg.convertToString();
final boolean squeeze[] = new boolean[StringSupport.TRANS_SIZE + 1];
@@ -4596,29 +4596,29 @@ public IRubyObject squeeze_bang19(ThreadContext context, IRubyObject arg) {
return this;
}

@JRubyMethod(name = "squeeze!", rest = true)
@JRubyMethod(name = "squeeze!", rest = true, required = 2)
public IRubyObject squeeze_bang19(ThreadContext context, IRubyObject[] args) {
Ruby runtime = context.runtime;
if (value.getRealSize() == 0) {
modifyCheck();
return runtime.getNil();
return context.nil;
}
final Ruby runtime = context.runtime;

RubyString otherStr = args[0].convertToString();
Encoding enc = checkEncoding(otherStr);
final boolean squeeze[] = new boolean[StringSupport.TRANS_SIZE + 1];
StringSupport.TrTables tables = StringSupport.trSetupTable(otherStr.value, runtime, squeeze, null, true, enc);

boolean singlebyte = singleByteOptimizable() && otherStr.singleByteOptimizable();
boolean singleByte = singleByteOptimizable() && otherStr.singleByteOptimizable();
for (int i=1; i<args.length; i++) {
otherStr = args[i].convertToString();
enc = checkEncoding(otherStr);
singlebyte = singlebyte && otherStr.singleByteOptimizable();
singleByte = singleByte && otherStr.singleByteOptimizable();
tables = StringSupport.trSetupTable(otherStr.value, runtime, squeeze, tables, false, enc);
}

modifyAndKeepCodeRange();
if (singlebyte) {
if (singleByte) {
if (! StringSupport.singleByteSqueeze(value, squeeze)) {
return runtime.getNil();
}
2 changes: 1 addition & 1 deletion core/src/main/java/org/jruby/ext/ripper/StringTerm.java
Original file line number Diff line number Diff line change
@@ -55,7 +55,7 @@ public StringTerm(int flags, int begin, int end) {
}

protected ByteList createByteList(RipperLexer lexer) {
return new ByteList(new byte[]{}, lexer.getEncoding());
return new ByteList(ByteList.NULL_ARRAY, lexer.getEncoding());
}

private int endFound(RipperLexer lexer, LexerSource src, ByteList buffer) throws IOException {
Loading