Merge ~vpa1977/ubuntu/+source/jruby:2054619 into ubuntu/+source/jruby:ubuntu/devel

Proposed by Vladimir Petko
Status: Superseded
Proposed branch: ~vpa1977/ubuntu/+source/jruby:2054619
Merge into: ubuntu/+source/jruby:ubuntu/devel
Diff against target: 546774 lines (+265070/-62871) (has conflicts)
3425 files modified
.github/workflows/ci.yml (+210/-327)
.github/workflows/nightly-snapshot-publish.yml (+21/-0)
.github/workflows/snapshot-publish.yml (+6/-1)
.gitignore (+46/-14)
.mvn/extensions.xml (+1/-1)
.mvn/wrapper/maven-wrapper.properties (+18/-1)
BUILDING.md (+1/-1)
Gemfile (+1/-1)
README.md (+3/-3)
VERSION (+1/-1)
bin/jirb_swing (+1/-0)
bin/jruby.sh (+652/-204)
core/pom.rb (+69/-32)
core/pom.xml (+87/-40)
core/src/main/java/org/jruby/AbstractRubyMethod.java (+17/-2)
core/src/main/java/org/jruby/BasicObjectStub.java (+1/-4)
core/src/main/java/org/jruby/DelegatedModule.java (+5/-0)
core/src/main/java/org/jruby/EvalType.java (+4/-1)
core/src/main/java/org/jruby/FiberScheduler.java (+210/-0)
core/src/main/java/org/jruby/IncludedModule.java (+1/-1)
core/src/main/java/org/jruby/Main.java (+40/-14)
core/src/main/java/org/jruby/ObjectFlags.java (+5/-5)
core/src/main/java/org/jruby/PrependedModule.java (+1/-1)
core/src/main/java/org/jruby/Ruby.java (+361/-260)
core/src/main/java/org/jruby/RubyArgsFile.java (+144/-49)
core/src/main/java/org/jruby/RubyArithmeticSequence.java (+77/-5)
core/src/main/java/org/jruby/RubyArray.java (+358/-113)
core/src/main/java/org/jruby/RubyBasicObject.java (+271/-285)
core/src/main/java/org/jruby/RubyBignum.java (+180/-11)
core/src/main/java/org/jruby/RubyBinding.java (+26/-10)
core/src/main/java/org/jruby/RubyBoolean.java (+23/-8)
core/src/main/java/org/jruby/RubyChain.java (+31/-1)
core/src/main/java/org/jruby/RubyClass.java (+73/-36)
core/src/main/java/org/jruby/RubyComparable.java (+32/-8)
core/src/main/java/org/jruby/RubyComplex.java (+121/-82)
core/src/main/java/org/jruby/RubyConverter.java (+22/-17)
core/src/main/java/org/jruby/RubyDir.java (+78/-34)
core/src/main/java/org/jruby/RubyEnumerable.java (+365/-347)
core/src/main/java/org/jruby/RubyEnumerator.java (+121/-185)
core/src/main/java/org/jruby/RubyException.java (+36/-15)
core/src/main/java/org/jruby/RubyFile.java (+164/-68)
core/src/main/java/org/jruby/RubyFileStat.java (+3/-3)
core/src/main/java/org/jruby/RubyFixnum.java (+28/-13)
core/src/main/java/org/jruby/RubyFloat.java (+63/-30)
core/src/main/java/org/jruby/RubyFrozenError.java (+59/-0)
core/src/main/java/org/jruby/RubyGC.java (+51/-2)
core/src/main/java/org/jruby/RubyGenerator.java (+6/-4)
core/src/main/java/org/jruby/RubyGlobal.java (+123/-79)
core/src/main/java/org/jruby/RubyHash.java (+321/-195)
core/src/main/java/org/jruby/RubyIO.java (+173/-143)
core/src/main/java/org/jruby/RubyIOBuffer.java (+2260/-0)
core/src/main/java/org/jruby/RubyInstanceConfig.java (+43/-23)
core/src/main/java/org/jruby/RubyInteger.java (+162/-25)
core/src/main/java/org/jruby/RubyInterrupt.java (+3/-3)
core/src/main/java/org/jruby/RubyKernel.java (+314/-143)
core/src/main/java/org/jruby/RubyKeyError.java (+5/-5)
core/src/main/java/org/jruby/RubyMarshal.java (+26/-14)
core/src/main/java/org/jruby/RubyMatchData.java (+115/-65)
core/src/main/java/org/jruby/RubyMath.java (+47/-13)
core/src/main/java/org/jruby/RubyMethod.java (+60/-16)
core/src/main/java/org/jruby/RubyModule.java (+715/-161)
core/src/main/java/org/jruby/RubyNameError.java (+13/-4)
core/src/main/java/org/jruby/RubyNil.java (+11/-7)
core/src/main/java/org/jruby/RubyNoMatchingPatternError.java (+28/-7)
core/src/main/java/org/jruby/RubyNumeric.java (+56/-27)
core/src/main/java/org/jruby/RubyObject.java (+13/-4)
core/src/main/java/org/jruby/RubyObjectSpace.java (+30/-13)
core/src/main/java/org/jruby/RubyProc.java (+61/-11)
core/src/main/java/org/jruby/RubyProcess.java (+129/-21)
core/src/main/java/org/jruby/RubyProducer.java (+97/-0)
core/src/main/java/org/jruby/RubyRandom.java (+101/-398)
core/src/main/java/org/jruby/RubyRandomBase.java (+547/-0)
core/src/main/java/org/jruby/RubyRange.java (+186/-82)
core/src/main/java/org/jruby/RubyRational.java (+123/-45)
core/src/main/java/org/jruby/RubyRegexp.java (+75/-66)
core/src/main/java/org/jruby/RubySignalException.java (+4/-3)
core/src/main/java/org/jruby/RubyString.java (+509/-343)
core/src/main/java/org/jruby/RubyStruct.java (+134/-51)
core/src/main/java/org/jruby/RubySymbol.java (+108/-29)
core/src/main/java/org/jruby/RubySystemCallError.java (+12/-13)
core/src/main/java/org/jruby/RubySystemExit.java (+11/-7)
core/src/main/java/org/jruby/RubyThread.java (+231/-136)
core/src/main/java/org/jruby/RubyThreadGroup.java (+0/-1)
core/src/main/java/org/jruby/RubyTime.java (+265/-122)
core/src/main/java/org/jruby/RubyUnboundMethod.java (+48/-5)
core/src/main/java/org/jruby/RubyUncaughtThrowError.java (+5/-2)
core/src/main/java/org/jruby/RubyYielder.java (+11/-1)
core/src/main/java/org/jruby/TopSelfFactory.java (+9/-2)
core/src/main/java/org/jruby/anno/AnnotationBinder.java (+10/-4)
core/src/main/java/org/jruby/anno/InvokerGenerator.java (+10/-2)
core/src/main/java/org/jruby/anno/JRubyMethod.java (+13/-0)
core/src/main/java/org/jruby/ast/AndNode.java (+1/-1)
core/src/main/java/org/jruby/ast/ArgsCatNode.java (+1/-1)
core/src/main/java/org/jruby/ast/ArgsNode.java (+13/-3)
core/src/main/java/org/jruby/ast/ArgsPushNode.java (+1/-1)
core/src/main/java/org/jruby/ast/ArrayPatternNode.java (+92/-0)
core/src/main/java/org/jruby/ast/BlockAcceptingNode.java (+1/-1)
core/src/main/java/org/jruby/ast/BlockPassNode.java (+2/-2)
core/src/main/java/org/jruby/ast/CallNode.java (+2/-3)
core/src/main/java/org/jruby/ast/CanRaise.java (+4/-0)
core/src/main/java/org/jruby/ast/DefHolder.java (+45/-0)
core/src/main/java/org/jruby/ast/FCallNode.java (+1/-2)
core/src/main/java/org/jruby/ast/FindPatternNode.java (+59/-0)
core/src/main/java/org/jruby/ast/ForwardingBlockArgNode.java (+7/-0)
core/src/main/java/org/jruby/ast/HashNode.java (+49/-18)
core/src/main/java/org/jruby/ast/HashPatternNode.java (+84/-0)
core/src/main/java/org/jruby/ast/InNode.java (+51/-0)
core/src/main/java/org/jruby/ast/NilRestArgNode.java (+28/-0)
core/src/main/java/org/jruby/ast/NodeType.java (+2/-1)
core/src/main/java/org/jruby/ast/OpElementAsgnNode.java (+1/-1)
core/src/main/java/org/jruby/ast/PatternCaseNode.java (+100/-0)
core/src/main/java/org/jruby/ast/SymbolNode.java (+6/-0)
core/src/main/java/org/jruby/ast/TwoValueNode.java (+6/-0)
core/src/main/java/org/jruby/ast/VCallNode.java (+1/-2)
core/src/main/java/org/jruby/ast/executable/RuntimeCache.java (+14/-23)
core/src/main/java/org/jruby/ast/util/ArgsUtil.java (+76/-16)
core/src/main/java/org/jruby/ast/visitor/AbstractNodeVisitor.java (+30/-0)
core/src/main/java/org/jruby/ast/visitor/InstanceVariableFinder.java (+6/-0)
core/src/main/java/org/jruby/ast/visitor/NodeVisitor.java (+6/-0)
core/src/main/java/org/jruby/common/IRubyWarnings.java (+8/-2)
core/src/main/java/org/jruby/common/RubyWarnings.java (+159/-49)
core/src/main/java/org/jruby/embed/AttributeName.java (+2/-2)
core/src/main/java/org/jruby/embed/EmbedEvalUnit.java (+1/-1)
core/src/main/java/org/jruby/embed/EmbedRubyInstanceConfigAdapter.java (+1/-1)
core/src/main/java/org/jruby/embed/EmbedRubyInterfaceAdapter.java (+1/-1)
core/src/main/java/org/jruby/embed/EmbedRubyObjectAdapter.java (+1/-1)
core/src/main/java/org/jruby/embed/EmbedRubyRuntimeAdapter.java (+1/-1)
core/src/main/java/org/jruby/embed/EvalFailedException.java (+1/-1)
core/src/main/java/org/jruby/embed/InvokeFailedException.java (+1/-1)
core/src/main/java/org/jruby/embed/LocalContextScope.java (+2/-2)
core/src/main/java/org/jruby/embed/LocalVariableBehavior.java (+1/-1)
core/src/main/java/org/jruby/embed/ParseFailedException.java (+1/-1)
core/src/main/java/org/jruby/embed/PathType.java (+1/-1)
core/src/main/java/org/jruby/embed/PropertyName.java (+1/-1)
core/src/main/java/org/jruby/embed/ScriptingContainer.java (+7/-7)
core/src/main/java/org/jruby/embed/internal/AbstractLocalContextProvider.java (+1/-1)
core/src/main/java/org/jruby/embed/internal/BiVariableMap.java (+22/-23)
core/src/main/java/org/jruby/embed/internal/ConcurrentLocalContextProvider.java (+1/-1)
core/src/main/java/org/jruby/embed/internal/EmbedEvalUnitImpl.java (+1/-1)
core/src/main/java/org/jruby/embed/internal/EmbedRubyInterfaceAdapterImpl.java (+1/-1)
core/src/main/java/org/jruby/embed/internal/EmbedRubyObjectAdapterImpl.java (+8/-12)
core/src/main/java/org/jruby/embed/internal/EmbedRubyRuntimeAdapterImpl.java (+1/-1)
core/src/main/java/org/jruby/embed/internal/LocalContext.java (+1/-1)
core/src/main/java/org/jruby/embed/internal/LocalContextProvider.java (+1/-1)
core/src/main/java/org/jruby/embed/internal/SingleThreadLocalContextProvider.java (+1/-1)
core/src/main/java/org/jruby/embed/internal/SingletonLocalContextProvider.java (+1/-1)
core/src/main/java/org/jruby/embed/internal/ThreadSafeLocalContextProvider.java (+1/-1)
core/src/main/java/org/jruby/embed/io/ReaderInputStream.java (+1/-1)
core/src/main/java/org/jruby/embed/io/WriterOutputStream.java (+2/-2)
core/src/main/java/org/jruby/embed/jsr223/JRubyCompiledScript.java (+1/-1)
core/src/main/java/org/jruby/embed/jsr223/JRubyContext.java (+1/-1)
core/src/main/java/org/jruby/embed/jsr223/JRubyEngine.java (+1/-1)
core/src/main/java/org/jruby/embed/jsr223/JRubyEngineFactory.java (+1/-1)
core/src/main/java/org/jruby/embed/jsr223/JRubyScriptEngineManager.java (+1/-1)
core/src/main/java/org/jruby/embed/jsr223/Utils.java (+1/-1)
core/src/main/java/org/jruby/embed/osgi/OSGiScriptingContainer.java (+12/-6)
core/src/main/java/org/jruby/embed/osgi/internal/JRubyOSGiBundleClassLoader.java (+4/-25)
core/src/main/java/org/jruby/embed/osgi/internal/OSGiBundleLibrary.java (+2/-2)
core/src/main/java/org/jruby/embed/osgi/internal/OSGiLoadService.java (+3/-36)
core/src/main/java/org/jruby/embed/osgi/package.html (+1/-2)
core/src/main/java/org/jruby/embed/osgi/utils/OSGiFileLocator.java (+1/-1)
core/src/main/java/org/jruby/embed/util/SystemPropertyCatcher.java (+1/-1)
core/src/main/java/org/jruby/embed/variable/AbstractVariable.java (+1/-1)
core/src/main/java/org/jruby/embed/variable/Argv.java (+1/-5)
core/src/main/java/org/jruby/embed/variable/BiVariable.java (+4/-5)
core/src/main/java/org/jruby/embed/variable/ClassVariable.java (+3/-7)
core/src/main/java/org/jruby/embed/variable/Constant.java (+1/-1)
core/src/main/java/org/jruby/embed/variable/GlobalVariable.java (+3/-6)
core/src/main/java/org/jruby/embed/variable/InstanceVariable.java (+2/-6)
core/src/main/java/org/jruby/embed/variable/LocalGlobalVariable.java (+2/-4)
core/src/main/java/org/jruby/embed/variable/PersistentLocalVariable.java (+2/-3)
core/src/main/java/org/jruby/embed/variable/TransientLocalVariable.java (+2/-3)
core/src/main/java/org/jruby/embed/variable/VariableInterceptor.java (+4/-6)
core/src/main/java/org/jruby/exceptions/NoMatchingPatternError.java (+12/-7)
core/src/main/java/org/jruby/exceptions/RaiseException.java (+3/-8)
core/src/main/java/org/jruby/ext/bigdecimal/RubyBigDecimal.java (+495/-262)
core/src/main/java/org/jruby/ext/coverage/CoverageData.java (+80/-28)
core/src/main/java/org/jruby/ext/coverage/CoverageModule.java (+144/-53)
core/src/main/java/org/jruby/ext/date/RubyDate.java (+85/-55)
core/src/main/java/org/jruby/ext/date/RubyDateTime.java (+23/-22)
core/src/main/java/org/jruby/ext/digest/RubyDigest.java (+29/-18)
core/src/main/java/org/jruby/ext/etc/RubyEtc.java (+17/-8)
core/src/main/java/org/jruby/ext/ffi/AbstractInvoker.java (+4/-3)
core/src/main/java/org/jruby/ext/ffi/AbstractMemory.java (+98/-52)
core/src/main/java/org/jruby/ext/ffi/CallbackInfo.java (+11/-10)
core/src/main/java/org/jruby/ext/ffi/Factory.java (+12/-11)
core/src/main/java/org/jruby/ext/ffi/MemoryIO.java (+20/-20)
core/src/main/java/org/jruby/ext/ffi/MemoryUtil.java (+2/-3)
core/src/main/java/org/jruby/ext/ffi/Platform.java (+9/-5)
core/src/main/java/org/jruby/ext/ffi/Pointer.java (+3/-4)
core/src/main/java/org/jruby/ext/ffi/Struct.java (+9/-9)
core/src/main/java/org/jruby/ext/ffi/StructLayout.java (+24/-18)
core/src/main/java/org/jruby/ext/ffi/Type.java (+10/-10)
core/src/main/java/org/jruby/ext/ffi/Util.java (+1/-4)
core/src/main/java/org/jruby/ext/ffi/io/FileDescriptorByteChannel.java (+5/-5)
core/src/main/java/org/jruby/ext/ffi/jffi/DefaultMethod.java (+1/-1)
core/src/main/java/org/jruby/ext/ffi/jffi/DefaultMethodFactory.java (+3/-3)
core/src/main/java/org/jruby/ext/ffi/jffi/DynamicLibrary.java (+58/-4)
core/src/main/java/org/jruby/ext/ffi/jffi/FFIUtil.java (+1/-2)
core/src/main/java/org/jruby/ext/ffi/jffi/Factory.java (+10/-12)
core/src/main/java/org/jruby/ext/ffi/jffi/FastIntMethodGenerator.java (+1/-0)
core/src/main/java/org/jruby/ext/ffi/jffi/FastLongMethodGenerator.java (+1/-0)
core/src/main/java/org/jruby/ext/ffi/jffi/FastNumericMethodGenerator.java (+1/-1)
core/src/main/java/org/jruby/ext/ffi/jffi/Function.java (+7/-4)
core/src/main/java/org/jruby/ext/ffi/jffi/NativeCallbackFactory.java (+2/-2)
core/src/main/java/org/jruby/ext/ffi/jffi/NativeInvoker.java (+1/-1)
core/src/main/java/org/jruby/ext/ffi/jffi/VariadicInvoker.java (+1/-1)
core/src/main/java/org/jruby/ext/fiber/FiberQueue.java (+9/-8)
core/src/main/java/org/jruby/ext/fiber/ThreadFiber.java (+349/-59)
core/src/main/java/org/jruby/ext/fiber/ThreadFiberLibrary.java (+6/-0)
core/src/main/java/org/jruby/ext/jruby/JRubyExecutionContextLocal.java (+1/-1)
core/src/main/java/org/jruby/ext/jruby/JRubyLibrary.java (+9/-6)
core/src/main/java/org/jruby/ext/jruby/JRubyUtilLibrary.java (+7/-4)
core/src/main/java/org/jruby/ext/pathname/RubyPathname.java (+26/-21)
core/src/main/java/org/jruby/ext/rbconfig/RbConfigLibrary.java (+6/-0)
core/src/main/java/org/jruby/ext/ripper/HeredocTerm.java (+31/-15)
core/src/main/java/org/jruby/ext/ripper/RipperLibrary.java (+0/-2)
core/src/main/java/org/jruby/ext/ripper/RipperParser.java (+4875/-2127)
core/src/main/java/org/jruby/ext/ripper/RipperParserBase.java (+591/-86)
core/src/main/java/org/jruby/ext/ripper/RubyLexer.java (+2499/-0)
core/src/main/java/org/jruby/ext/ripper/RubyRipper.java (+27/-19)
core/src/main/java/org/jruby/ext/ripper/StrTerm.java (+1/-1)
core/src/main/java/org/jruby/ext/ripper/StringTerm.java (+57/-38)
core/src/main/java/org/jruby/ext/ripper/YyTables.java (+6177/-4833)
core/src/main/java/org/jruby/ext/ripper/skeleton.parser (+146/-123)
core/src/main/java/org/jruby/ext/set/RubySet.java (+90/-40)
core/src/main/java/org/jruby/ext/set/RubySortedSet.java (+7/-3)
core/src/main/java/org/jruby/ext/socket/Addrinfo.java (+39/-13)
core/src/main/java/org/jruby/ext/socket/Ifaddr.java (+7/-3)
core/src/main/java/org/jruby/ext/socket/Option.java (+1/-1)
core/src/main/java/org/jruby/ext/socket/RubyBasicSocket.java (+17/-13)
core/src/main/java/org/jruby/ext/socket/RubySocket.java (+30/-9)
core/src/main/java/org/jruby/ext/socket/RubyTCPServer.java (+1/-1)
core/src/main/java/org/jruby/ext/socket/RubyTCPSocket.java (+87/-21)
core/src/main/java/org/jruby/ext/socket/RubyUDPSocket.java (+9/-4)
core/src/main/java/org/jruby/ext/socket/RubyUNIXSocket.java (+13/-6)
core/src/main/java/org/jruby/ext/socket/Shutdownable.java (+1/-1)
core/src/main/java/org/jruby/ext/socket/SocketUtils.java (+16/-6)
core/src/main/java/org/jruby/ext/socket/SubnetUtils.java (+1/-1)
core/src/main/java/org/jruby/ext/tempfile/Tempfile.java (+8/-4)
core/src/main/java/org/jruby/ext/thread/Queue.java (+19/-0)
core/src/main/java/org/jruby/ext/thread/SizedQueue.java (+1/-1)
core/src/main/java/org/jruby/ext/tracepoint/TracePoint.java (+2/-2)
core/src/main/java/org/jruby/ext/zlib/JZlibDeflate.java (+6/-4)
core/src/main/java/org/jruby/ext/zlib/JZlibInflate.java (+4/-1)
core/src/main/java/org/jruby/ext/zlib/JZlibRubyGzipReader.java (+101/-20)
core/src/main/java/org/jruby/ext/zlib/JZlibRubyGzipWriter.java (+17/-18)
core/src/main/java/org/jruby/ext/zlib/RubyGzipFile.java (+4/-5)
core/src/main/java/org/jruby/ext/zlib/RubyZlib.java (+4/-7)
core/src/main/java/org/jruby/ext/zlib/ZStream.java (+1/-1)
core/src/main/java/org/jruby/internal/runtime/AbstractIRMethod.java (+12/-0)
core/src/main/java/org/jruby/internal/runtime/RubyRunnable.java (+7/-3)
core/src/main/java/org/jruby/internal/runtime/ThreadService.java (+13/-14)
core/src/main/java/org/jruby/internal/runtime/methods/AliasMethod.java (+29/-12)
core/src/main/java/org/jruby/internal/runtime/methods/AttrReaderMethod.java (+1/-0)
core/src/main/java/org/jruby/internal/runtime/methods/AttrWriterMethod.java (+1/-0)
core/src/main/java/org/jruby/internal/runtime/methods/CompiledIRMethod.java (+3/-3)
core/src/main/java/org/jruby/internal/runtime/methods/CompiledIRNoProtocolMethod.java (+3/-3)
core/src/main/java/org/jruby/internal/runtime/methods/DelegatingDynamicMethod.java (+5/-0)
core/src/main/java/org/jruby/internal/runtime/methods/DescriptorInfo.java (+8/-0)
core/src/main/java/org/jruby/internal/runtime/methods/DynamicMethod.java (+27/-0)
core/src/main/java/org/jruby/internal/runtime/methods/HandleMethod.java (+94/-37)
core/src/main/java/org/jruby/internal/runtime/methods/IRMethodArgs.java (+1/-0)
core/src/main/java/org/jruby/internal/runtime/methods/InterpretedIRMethod.java (+3/-5)
core/src/main/java/org/jruby/internal/runtime/methods/InvocationMethodFactory.java (+15/-6)
core/src/main/java/org/jruby/internal/runtime/methods/InvokeDynamicMethodFactory.java (+17/-22)
core/src/main/java/org/jruby/internal/runtime/methods/JavaMethod.java (+5/-4)
core/src/main/java/org/jruby/internal/runtime/methods/MethodMethod.java (+0/-7)
core/src/main/java/org/jruby/internal/runtime/methods/MixedModeIRMethod.java (+4/-5)
core/src/main/java/org/jruby/internal/runtime/methods/NullMethod.java (+1/-1)
core/src/main/java/org/jruby/internal/runtime/methods/ProcMethod.java (+10/-0)
core/src/main/java/org/jruby/internal/runtime/methods/ProfilingDynamicMethod.java (+7/-0)
core/src/main/java/org/jruby/internal/runtime/methods/SynchronizedDynamicMethod.java (+9/-0)
core/src/main/java/org/jruby/ir/IRBuilder.java (+1122/-358)
core/src/main/java/org/jruby/ir/IRClosure.java (+2/-2)
core/src/main/java/org/jruby/ir/IRManager.java (+15/-0)
core/src/main/java/org/jruby/ir/IRMethod.java (+33/-8)
core/src/main/java/org/jruby/ir/IRScope.java (+33/-4)
core/src/main/java/org/jruby/ir/IRVisitor.java (+8/-1)
core/src/main/java/org/jruby/ir/Operation.java (+5/-1)
core/src/main/java/org/jruby/ir/dataflow/analyses/LoadLocalVarPlacementNode.java (+6/-6)
core/src/main/java/org/jruby/ir/instructions/ArgReceiver.java (+11/-0)
core/src/main/java/org/jruby/ir/instructions/ArrayDerefInstr.java (+12/-8)
core/src/main/java/org/jruby/ir/instructions/AsFixnumInstr.java (+37/-0)
core/src/main/java/org/jruby/ir/instructions/AsStringInstr.java (+8/-5)
core/src/main/java/org/jruby/ir/instructions/AttrAssignInstr.java (+18/-13)
core/src/main/java/org/jruby/ir/instructions/BIntInstr.java (+97/-0)
core/src/main/java/org/jruby/ir/instructions/BSwitchInstr.java (+27/-9)
core/src/main/java/org/jruby/ir/instructions/BlockGivenInstr.java (+0/-6)
core/src/main/java/org/jruby/ir/instructions/BuildCompoundArrayInstr.java (+13/-5)
core/src/main/java/org/jruby/ir/instructions/BuildCompoundStringInstr.java (+8/-9)
core/src/main/java/org/jruby/ir/instructions/BuildLambdaInstr.java (+0/-6)
core/src/main/java/org/jruby/ir/instructions/BuildSplatInstr.java (+0/-1)
core/src/main/java/org/jruby/ir/instructions/CallBase.java (+22/-23)
core/src/main/java/org/jruby/ir/instructions/CallInstr.java (+23/-35)
core/src/main/java/org/jruby/ir/instructions/CheckArityInstr.java (+17/-11)
core/src/main/java/org/jruby/ir/instructions/ClassSuperInstr.java (+16/-9)
core/src/main/java/org/jruby/ir/instructions/CopyInstr.java (+0/-6)
core/src/main/java/org/jruby/ir/instructions/DebugOutputInstr.java (+35/-0)
core/src/main/java/org/jruby/ir/instructions/DefineClassInstr.java (+0/-2)
core/src/main/java/org/jruby/ir/instructions/DefineMetaClassInstr.java (+0/-1)
core/src/main/java/org/jruby/ir/instructions/DefineModuleInstr.java (+3/-4)
core/src/main/java/org/jruby/ir/instructions/EQQInstr.java (+8/-2)
core/src/main/java/org/jruby/ir/instructions/GetClassVariableInstr.java (+4/-1)
core/src/main/java/org/jruby/ir/instructions/GetFieldInstr.java (+25/-12)
core/src/main/java/org/jruby/ir/instructions/GetGlobalVariableInstr.java (+0/-6)
core/src/main/java/org/jruby/ir/instructions/GetInstr.java (+0/-1)
core/src/main/java/org/jruby/ir/instructions/InheritanceSearchConstInstr.java (+0/-1)
core/src/main/java/org/jruby/ir/instructions/InstanceSuperInstr.java (+16/-8)
core/src/main/java/org/jruby/ir/instructions/IntegerMathInstr.java (+80/-0)
core/src/main/java/org/jruby/ir/instructions/LexicalSearchConstInstr.java (+0/-1)
core/src/main/java/org/jruby/ir/instructions/LineNumberInstr.java (+1/-1)
core/src/main/java/org/jruby/ir/instructions/LoadLocalVarInstr.java (+4/-6)
core/src/main/java/org/jruby/ir/instructions/MatchInstr.java (+4/-2)
core/src/main/java/org/jruby/ir/instructions/MultipleAsgnBase.java (+7/-0)
core/src/main/java/org/jruby/ir/instructions/NoResultCallInstr.java (+19/-14)
core/src/main/java/org/jruby/ir/instructions/NopInstr.java (+1/-1)
core/src/main/java/org/jruby/ir/instructions/OneOperandResultBaseInstr.java (+7/-0)
core/src/main/java/org/jruby/ir/instructions/OptArgMultipleAsgnInstr.java (+0/-2)
core/src/main/java/org/jruby/ir/instructions/ProcessModuleBodyInstr.java (+6/-19)
core/src/main/java/org/jruby/ir/instructions/ReceiveArgBase.java (+9/-17)
core/src/main/java/org/jruby/ir/instructions/ReceiveIndexedArgBase.java (+27/-0)
core/src/main/java/org/jruby/ir/instructions/ReceiveKeywordArgInstr.java (+11/-6)
core/src/main/java/org/jruby/ir/instructions/ReceiveKeywordRestArgInstr.java (+11/-19)
core/src/main/java/org/jruby/ir/instructions/ReceiveKeywordsInstr.java (+71/-0)
core/src/main/java/org/jruby/ir/instructions/ReceiveOptArgInstr.java (+12/-8)
core/src/main/java/org/jruby/ir/instructions/ReceivePostReqdArgInstr.java (+14/-10)
core/src/main/java/org/jruby/ir/instructions/ReceivePreReqdArgInstr.java (+6/-12)
core/src/main/java/org/jruby/ir/instructions/ReceiveRestArgInstr.java (+13/-9)
core/src/main/java/org/jruby/ir/instructions/ReifyClosureInstr.java (+0/-6)
core/src/main/java/org/jruby/ir/instructions/ReqdArgMultipleAsgnInstr.java (+4/-5)
core/src/main/java/org/jruby/ir/instructions/RestArgMultipleAsgnInstr.java (+3/-5)
core/src/main/java/org/jruby/ir/instructions/RuntimeHelperCall.java (+15/-12)
core/src/main/java/org/jruby/ir/instructions/SearchConstInstr.java (+3/-4)
core/src/main/java/org/jruby/ir/instructions/SearchModuleForConstInstr.java (+0/-1)
core/src/main/java/org/jruby/ir/instructions/SetCapturedVarInstr.java (+0/-1)
core/src/main/java/org/jruby/ir/instructions/ToAryInstr.java (+0/-6)
core/src/main/java/org/jruby/ir/instructions/TraceInstr.java (+19/-6)
core/src/main/java/org/jruby/ir/instructions/UndefMethodInstr.java (+0/-6)
core/src/main/java/org/jruby/ir/instructions/UnresolvedSuperInstr.java (+16/-10)
core/src/main/java/org/jruby/ir/instructions/YieldInstr.java (+14/-4)
core/src/main/java/org/jruby/ir/instructions/ZSuperInstr.java (+13/-7)
core/src/main/java/org/jruby/ir/instructions/specialized/OneArgOperandAttrAssignInstr.java (+8/-5)
core/src/main/java/org/jruby/ir/instructions/specialized/OneFixnumArgNoBlockCallInstr.java (+13/-6)
core/src/main/java/org/jruby/ir/instructions/specialized/OneFloatArgNoBlockCallInstr.java (+13/-6)
core/src/main/java/org/jruby/ir/instructions/specialized/OneOperandArgBlockCallInstr.java (+12/-7)
core/src/main/java/org/jruby/ir/instructions/specialized/OneOperandArgNoBlockCallInstr.java (+17/-10)
core/src/main/java/org/jruby/ir/instructions/specialized/OneOperandArgNoBlockNoResultCallInstr.java (+9/-6)
core/src/main/java/org/jruby/ir/instructions/specialized/TwoOperandArgNoBlockCallInstr.java (+15/-7)
core/src/main/java/org/jruby/ir/instructions/specialized/ZeroOperandArgNoBlockCallInstr.java (+17/-15)
core/src/main/java/org/jruby/ir/interpreter/ExitableInterpreterContext.java (+22/-8)
core/src/main/java/org/jruby/ir/interpreter/ExitableInterpreterEngine.java (+3/-19)
core/src/main/java/org/jruby/ir/interpreter/Interpreter.java (+9/-7)
core/src/main/java/org/jruby/ir/interpreter/InterpreterContext.java (+6/-2)
core/src/main/java/org/jruby/ir/interpreter/InterpreterEngine.java (+23/-17)
core/src/main/java/org/jruby/ir/interpreter/Profiler.java (+2/-1)
core/src/main/java/org/jruby/ir/interpreter/StartupInterpreterEngine.java (+3/-24)
core/src/main/java/org/jruby/ir/operands/Bignum.java (+1/-1)
core/src/main/java/org/jruby/ir/operands/BuiltinClass.java (+56/-6)
core/src/main/java/org/jruby/ir/operands/ClosureLocalVariable.java (+4/-12)
core/src/main/java/org/jruby/ir/operands/Fixnum.java (+1/-1)
core/src/main/java/org/jruby/ir/operands/Hash.java (+21/-21)
core/src/main/java/org/jruby/ir/operands/Integer.java (+67/-0)
core/src/main/java/org/jruby/ir/operands/LocalVariable.java (+5/-15)
core/src/main/java/org/jruby/ir/operands/OperandType.java (+2/-1)
core/src/main/java/org/jruby/ir/operands/Range.java (+82/-0)
core/src/main/java/org/jruby/ir/operands/Self.java (+5/-5)
core/src/main/java/org/jruby/ir/operands/Symbol.java (+6/-0)
core/src/main/java/org/jruby/ir/operands/SymbolProc.java (+1/-1)
core/src/main/java/org/jruby/ir/operands/TemporaryVariable.java (+0/-7)
core/src/main/java/org/jruby/ir/operands/UnboxedFixnum.java (+1/-1)
core/src/main/java/org/jruby/ir/operands/UndefinedValue.java (+82/-170)
core/src/main/java/org/jruby/ir/operands/Variable.java (+1/-2)
core/src/main/java/org/jruby/ir/passes/CompilerPass.java (+2/-2)
core/src/main/java/org/jruby/ir/persistence/IRDumper.java (+6/-7)
core/src/main/java/org/jruby/ir/persistence/IRReaderStream.java (+14/-4)
core/src/main/java/org/jruby/ir/representations/BasicBlock.java (+2/-4)
core/src/main/java/org/jruby/ir/representations/CFG.java (+2/-2)
core/src/main/java/org/jruby/ir/runtime/IRRuntimeHelpers.java (+432/-278)
core/src/main/java/org/jruby/ir/targets/BranchCompiler.java (+6/-0)
core/src/main/java/org/jruby/ir/targets/IRBytecodeAdapter.java (+18/-5)
core/src/main/java/org/jruby/ir/targets/InstanceVariableCompiler.java (+8/-4)
core/src/main/java/org/jruby/ir/targets/InvocationCompiler.java (+50/-27)
core/src/main/java/org/jruby/ir/targets/JVMVisitor.java (+273/-152)
core/src/main/java/org/jruby/ir/targets/LocalVariableCompiler.java (+24/-0)
core/src/main/java/org/jruby/ir/targets/ValueCompiler.java (+41/-0)
core/src/main/java/org/jruby/ir/targets/indy/ArrayBootstrap.java (+48/-0)
core/src/main/java/org/jruby/ir/targets/indy/ArrayDerefInvokeSite.java (+35/-10)
core/src/main/java/org/jruby/ir/targets/indy/AsStringSite.java (+68/-0)
core/src/main/java/org/jruby/ir/targets/indy/Bootstrap.java (+13/-1485)
core/src/main/java/org/jruby/ir/targets/indy/CallInfoBootstrap.java (+37/-0)
core/src/main/java/org/jruby/ir/targets/indy/CallSiteCacheBootstrap.java (+44/-0)
core/src/main/java/org/jruby/ir/targets/indy/CallTraceSite.java (+27/-11)
core/src/main/java/org/jruby/ir/targets/indy/CheckArityBootstrap.java (+76/-0)
core/src/main/java/org/jruby/ir/targets/indy/CheckpointSite.java (+60/-0)
core/src/main/java/org/jruby/ir/targets/indy/ClassSuperInvokeSite.java (+3/-2)
core/src/main/java/org/jruby/ir/targets/indy/ClassSuperIterInvokeSite.java (+3/-2)
core/src/main/java/org/jruby/ir/targets/indy/ConstantLookupSite.java (+8/-6)
core/src/main/java/org/jruby/ir/targets/indy/ConstructBlockBootstrap.java (+104/-0)
core/src/main/java/org/jruby/ir/targets/indy/CoverageSite.java (+44/-0)
core/src/main/java/org/jruby/ir/targets/indy/HashBootstrap.java (+99/-0)
core/src/main/java/org/jruby/ir/targets/indy/HeapVariableBootstrap.java (+84/-0)
core/src/main/java/org/jruby/ir/targets/indy/IndyArgumentsCompiler.java (+1/-1)
core/src/main/java/org/jruby/ir/targets/indy/IndyBlockCompiler.java (+1/-1)
core/src/main/java/org/jruby/ir/targets/indy/IndyBranchCompiler.java (+28/-2)
core/src/main/java/org/jruby/ir/targets/indy/IndyCheckpointCompiler.java (+1/-1)
core/src/main/java/org/jruby/ir/targets/indy/IndyDynamicValueCompiler.java (+2/-2)
core/src/main/java/org/jruby/ir/targets/indy/IndyGlobalVariableCompiler.java (+3/-2)
core/src/main/java/org/jruby/ir/targets/indy/IndyInstanceVariableCompiler.java (+6/-3)
core/src/main/java/org/jruby/ir/targets/indy/IndyInvocationCompiler.java (+44/-22)
core/src/main/java/org/jruby/ir/targets/indy/IndyLocalVariableCompiler.java (+37/-0)
core/src/main/java/org/jruby/ir/targets/indy/IndyValueCompiler.java (+36/-9)
core/src/main/java/org/jruby/ir/targets/indy/InstanceSuperInvokeSite.java (+3/-2)
core/src/main/java/org/jruby/ir/targets/indy/InstanceSuperIterInvokeSite.java (+3/-2)
core/src/main/java/org/jruby/ir/targets/indy/InvokeSite.java (+750/-82)
core/src/main/java/org/jruby/ir/targets/indy/IsNilSite.java (+60/-0)
core/src/main/java/org/jruby/ir/targets/indy/IsTrueSite.java (+64/-0)
core/src/main/java/org/jruby/ir/targets/indy/JavaBootstrap.java (+292/-0)
core/src/main/java/org/jruby/ir/targets/indy/LiteralValueBootstrap.java (+175/-0)
core/src/main/java/org/jruby/ir/targets/indy/MetaClassBootstrap.java (+57/-0)
core/src/main/java/org/jruby/ir/targets/indy/RangeObjectSite.java (+39/-0)
core/src/main/java/org/jruby/ir/targets/indy/RegexpObjectSite.java (+1/-1)
core/src/main/java/org/jruby/ir/targets/indy/ResolvedSuperInvokeSite.java (+5/-5)
core/src/main/java/org/jruby/ir/targets/indy/SelfInvokeSite.java (+7/-14)
core/src/main/java/org/jruby/ir/targets/indy/StringBootstrap.java (+142/-0)
core/src/main/java/org/jruby/ir/targets/indy/SuperInvokeSite.java (+11/-11)
core/src/main/java/org/jruby/ir/targets/indy/UnresolvedSuperInvokeSite.java (+3/-2)
core/src/main/java/org/jruby/ir/targets/indy/UnresolvedSuperIterInvokeSite.java (+3/-2)
core/src/main/java/org/jruby/ir/targets/indy/ZSuperInvokeSite.java (+3/-2)
core/src/main/java/org/jruby/ir/targets/simple/NormalBranchCompiler.java (+33/-0)
core/src/main/java/org/jruby/ir/targets/simple/NormalInstanceVariableCompiler.java (+16/-11)
core/src/main/java/org/jruby/ir/targets/simple/NormalInvocationCompiler.java (+178/-69)
core/src/main/java/org/jruby/ir/targets/simple/NormalInvokeSite.java (+7/-14)
core/src/main/java/org/jruby/ir/targets/simple/NormalLocalVariableCompiler.java (+56/-0)
core/src/main/java/org/jruby/ir/targets/simple/NormalValueCompiler.java (+40/-4)
core/src/main/java/org/jruby/ir/transformations/inlining/CFGInliner.java (+1/-1)
core/src/main/java/org/jruby/java/addons/ArrayJavaAddons.java (+29/-17)
core/src/main/java/org/jruby/java/addons/ClassJavaAddons.java (+6/-3)
core/src/main/java/org/jruby/java/codegen/RealClassGenerator.java (+3/-3)
core/src/main/java/org/jruby/java/dispatch/CallableSelector.java (+2/-2)
core/src/main/java/org/jruby/java/invokers/ConstructorInvoker.java (+1/-2)
core/src/main/java/org/jruby/java/proxies/ArrayJavaProxy.java (+34/-18)
core/src/main/java/org/jruby/java/proxies/ArrayJavaProxyCreator.java (+1/-2)
core/src/main/java/org/jruby/java/proxies/ConcreteJavaProxy.java (+68/-59)
core/src/main/java/org/jruby/java/proxies/InterfaceJavaProxy.java (+0/-1)
core/src/main/java/org/jruby/java/proxies/JavaInterfaceTemplate.java (+8/-10)
core/src/main/java/org/jruby/java/proxies/JavaProxy.java (+61/-30)
core/src/main/java/org/jruby/java/proxies/MapJavaProxy.java (+20/-12)
core/src/main/java/org/jruby/java/util/ArrayUtils.java (+2/-3)
core/src/main/java/org/jruby/java/util/ClassUtils.java (+198/-0)
core/src/main/java/org/jruby/javasupport/Java.java (+52/-69)
core/src/main/java/org/jruby/javasupport/JavaArray.java (+8/-13)
core/src/main/java/org/jruby/javasupport/JavaArrayUtilities.java (+0/-6)
core/src/main/java/org/jruby/javasupport/JavaCallable.java (+9/-69)
core/src/main/java/org/jruby/javasupport/JavaClass.java (+42/-748)
core/src/main/java/org/jruby/javasupport/JavaConstructor.java (+14/-120)
core/src/main/java/org/jruby/javasupport/JavaEmbedUtils.java (+25/-17)
core/src/main/java/org/jruby/javasupport/JavaField.java (+1/-18)
core/src/main/java/org/jruby/javasupport/JavaMethod.java (+7/-168)
core/src/main/java/org/jruby/javasupport/JavaObject.java (+16/-46)
core/src/main/java/org/jruby/javasupport/JavaPackage.java (+11/-5)
core/src/main/java/org/jruby/javasupport/JavaProxyMethods.java (+72/-29)
core/src/main/java/org/jruby/javasupport/JavaSupport.java (+222/-131)
core/src/main/java/org/jruby/javasupport/JavaSupportImpl.java (+77/-232)
core/src/main/java/org/jruby/javasupport/JavaUtil.java (+71/-13)
core/src/main/java/org/jruby/javasupport/binding/MethodGatherer.java (+10/-9)
core/src/main/java/org/jruby/javasupport/binding/MethodInstaller.java (+1/-1)
core/src/main/java/org/jruby/javasupport/ext/JavaExtensions.java (+1/-1)
core/src/main/java/org/jruby/javasupport/ext/JavaLang.java (+37/-22)
core/src/main/java/org/jruby/javasupport/ext/JavaLangReflect.java (+3/-3)
core/src/main/java/org/jruby/javasupport/ext/JavaUtil.java (+3/-2)
core/src/main/java/org/jruby/javasupport/ext/JavaUtilRegex.java (+1/-1)
core/src/main/java/org/jruby/javasupport/ext/Module.java (+2/-2)
core/src/main/java/org/jruby/javasupport/proxy/JavaProxyClass.java (+19/-19)
core/src/main/java/org/jruby/javasupport/proxy/JavaProxyConstructor.java (+20/-24)
core/src/main/java/org/jruby/javasupport/proxy/JavaProxyReflectionObject.java (+2/-6)
core/src/main/java/org/jruby/javasupport/util/JavaClassConfiguration.java (+3/-3)
core/src/main/java/org/jruby/lexer/JavaSignatureLexer.java (+3/-3)
core/src/main/java/org/jruby/lexer/LexingCommon.java (+297/-15)
core/src/main/java/org/jruby/lexer/StrptimeLexer.java (+4/-4)
core/src/main/java/org/jruby/lexer/yacc/HeredocTerm.java (+1/-2)
core/src/main/java/org/jruby/lexer/yacc/LexContext.java (+37/-0)
core/src/main/java/org/jruby/lexer/yacc/RubyLexer.java (+381/-573)
core/src/main/java/org/jruby/lexer/yacc/ShareableConstantValue.java (+8/-0)
core/src/main/java/org/jruby/lexer/yacc/StringTerm.java (+17/-20)
core/src/main/java/org/jruby/parser/JavaSignatureParser.java (+4/-4)
core/src/main/java/org/jruby/parser/Parser.java (+0/-9)
core/src/main/java/org/jruby/parser/ParserConfiguration.java (+22/-17)
core/src/main/java/org/jruby/parser/ParserState.java (+2/-4)
core/src/main/java/org/jruby/parser/ProductionState.java (+9/-2)
core/src/main/java/org/jruby/parser/RubyParser.java (+4423/-2201)
core/src/main/java/org/jruby/parser/RubyParser.y (+3267/-1250)
core/src/main/java/org/jruby/parser/RubyParserBase.java (+762/-107)
core/src/main/java/org/jruby/parser/ScopedParserState.java (+6/-4)
core/src/main/java/org/jruby/parser/StaticScope.java (+12/-0)
core/src/main/java/org/jruby/parser/YyTables.java (+6131/-4691)
core/src/main/java/org/jruby/parser/signature_skeleton.parser (+5/-5)
core/src/main/java/org/jruby/parser/skeleton.parser (+11/-7)
core/src/main/java/org/jruby/platform/Platform.java (+2/-31)
core/src/main/java/org/jruby/runtime/ArgumentDescriptor.java (+31/-0)
core/src/main/java/org/jruby/runtime/Arity.java (+5/-0)
core/src/main/java/org/jruby/runtime/Binding.java (+13/-12)
core/src/main/java/org/jruby/runtime/Block.java (+15/-1)
core/src/main/java/org/jruby/runtime/BlockBody.java (+7/-0)
core/src/main/java/org/jruby/runtime/CallSite.java (+32/-6)
core/src/main/java/org/jruby/runtime/ClassIndex.java (+1/-0)
core/src/main/java/org/jruby/runtime/CompiledIRBlockBody.java (+1/-1)
core/src/main/java/org/jruby/runtime/DynamicScope.java (+1/-1)
core/src/main/java/org/jruby/runtime/EventHook.java (+2/-3)
core/src/main/java/org/jruby/runtime/Frame.java (+3/-6)
core/src/main/java/org/jruby/runtime/Helpers.java (+180/-88)
core/src/main/java/org/jruby/runtime/IRBlockBody.java (+14/-9)
core/src/main/java/org/jruby/runtime/InterpretedIRBlockBody.java (+1/-1)
core/src/main/java/org/jruby/runtime/JavaSites.java (+25/-1)
core/src/main/java/org/jruby/runtime/MethodIndex.java (+4/-1)
core/src/main/java/org/jruby/runtime/MixedModeIRBlockBody.java (+1/-1)
core/src/main/java/org/jruby/runtime/ObjectSpace.java (+3/-0)
core/src/main/java/org/jruby/runtime/RubyEvent.java (+3/-3)
core/src/main/java/org/jruby/runtime/Signature.java (+6/-0)
core/src/main/java/org/jruby/runtime/ThreadContext.java (+111/-26)
core/src/main/java/org/jruby/runtime/TraceEventManager.java (+278/-0)
core/src/main/java/org/jruby/runtime/backtrace/TraceType.java (+31/-7)
core/src/main/java/org/jruby/runtime/builtin/IRubyObject.java (+20/-23)
core/src/main/java/org/jruby/runtime/callsite/ArefCallSite.java (+1/-1)
core/src/main/java/org/jruby/runtime/callsite/BimorphicCallSite.java (+1/-1)
core/src/main/java/org/jruby/runtime/callsite/CachingCallSite.java (+170/-143)
core/src/main/java/org/jruby/runtime/callsite/NotEqCallSite.java (+113/-0)
core/src/main/java/org/jruby/runtime/callsite/ProfilingCachingCallSite.java (+10/-130)
core/src/main/java/org/jruby/runtime/callsite/RefinedCachingCallSite.java (+11/-10)
core/src/main/java/org/jruby/runtime/callsite/RespondToCallSite.java (+32/-28)
core/src/main/java/org/jruby/runtime/encoding/EncodingService.java (+8/-6)
core/src/main/java/org/jruby/runtime/invokedynamic/GlobalSite.java (+104/-5)
core/src/main/java/org/jruby/runtime/invokedynamic/JRubyCallSite.java (+9/-0)
core/src/main/java/org/jruby/runtime/invokedynamic/MathLinker.java (+22/-5)
core/src/main/java/org/jruby/runtime/invokedynamic/VariableSite.java (+11/-4)
core/src/main/java/org/jruby/runtime/ivars/FieldVariableAccessor.java (+19/-0)
core/src/main/java/org/jruby/runtime/ivars/VariableAccessor.java (+23/-0)
core/src/main/java/org/jruby/runtime/ivars/VariableTableManager.java (+5/-4)
core/src/main/java/org/jruby/runtime/load/LibrarySearcher.java (+4/-16)
core/src/main/java/org/jruby/runtime/load/LoadService.java (+87/-745)
core/src/main/java/org/jruby/runtime/marshal/MarshalCommon.java (+33/-0)
core/src/main/java/org/jruby/runtime/marshal/MarshalStream.java (+6/-14)
core/src/main/java/org/jruby/runtime/marshal/UnmarshalCache.java (+48/-22)
core/src/main/java/org/jruby/runtime/marshal/UnmarshalStream.java (+487/-219)
core/src/main/java/org/jruby/runtime/opto/ConstantCache.java (+2/-1)
core/src/main/java/org/jruby/runtime/profile/package-info.java (+2/-2)
core/src/main/java/org/jruby/specialized/RubyArrayOneObject.java (+0/-4)
core/src/main/java/org/jruby/specialized/RubyArraySpecialized.java (+1/-1)
core/src/main/java/org/jruby/specialized/RubyArrayTwoObject.java (+0/-5)
core/src/main/java/org/jruby/util/ByteList.java (+1/-1)
core/src/main/java/org/jruby/util/CommonByteLists.java (+13/-1)
core/src/main/java/org/jruby/util/Dir.java (+53/-18)
core/src/main/java/org/jruby/util/IdUtil.java (+1/-1)
core/src/main/java/org/jruby/util/JRubyClassLoader.java (+4/-3)
core/src/main/java/org/jruby/util/JRubyFile.java (+10/-0)
core/src/main/java/org/jruby/util/KCode.java (+2/-1)
core/src/main/java/org/jruby/util/Numeric.java (+3/-4)
core/src/main/java/org/jruby/util/OSEnvironment.java (+6/-16)
core/src/main/java/org/jruby/util/OneShotClassLoader.java (+1/-1)
core/src/main/java/org/jruby/util/Pack.java (+225/-178)
core/src/main/java/org/jruby/util/Random.java (+12/-3)
core/src/main/java/org/jruby/util/RecursiveComparator.java (+7/-1)
core/src/main/java/org/jruby/util/ReferenceReaper.java (+1/-1)
core/src/main/java/org/jruby/util/RegexpSupport.java (+21/-9)
core/src/main/java/org/jruby/util/ResourceException.java (+1/-1)
core/src/main/java/org/jruby/util/RubyDateFormatter.java (+14/-9)
core/src/main/java/org/jruby/util/RubyDateParser.java (+2/-4)
core/src/main/java/org/jruby/util/RubyStringBuilder.java (+13/-0)
core/src/main/java/org/jruby/util/RubyTimeOutputFormatter.java (+1/-1)
core/src/main/java/org/jruby/util/SafeDecimalParser.java (+1/-2)
core/src/main/java/org/jruby/util/ShellLauncher.java (+1/-1)
core/src/main/java/org/jruby/util/SipHashInline.java (+18/-18)
core/src/main/java/org/jruby/util/Sprintf.java (+20/-20)
core/src/main/java/org/jruby/util/StringSupport.java (+114/-23)
core/src/main/java/org/jruby/util/StrptimeFormat.java (+1/-1)
core/src/main/java/org/jruby/util/StrptimeToken.java (+1/-1)
core/src/main/java/org/jruby/util/TypeConverter.java (+57/-36)
core/src/main/java/org/jruby/util/cli/ArgumentProcessor.java (+96/-24)
core/src/main/java/org/jruby/util/cli/Category.java (+3/-2)
core/src/main/java/org/jruby/util/cli/Options.java (+9/-2)
core/src/main/java/org/jruby/util/cli/OutputStrings.java (+152/-80)
core/src/main/java/org/jruby/util/collections/ConcurrentWeakHashMap.java (+51/-51)
core/src/main/java/org/jruby/util/collections/DoubleObject.java (+16/-0)
core/src/main/java/org/jruby/util/collections/NonBlockingHashMapLong.java (+39/-35)
core/src/main/java/org/jruby/util/collections/SingleBoolean.java (+14/-0)
core/src/main/java/org/jruby/util/collections/SingleDouble.java (+14/-0)
core/src/main/java/org/jruby/util/collections/SingleInt.java (+14/-0)
core/src/main/java/org/jruby/util/collections/SingleLong.java (+14/-0)
core/src/main/java/org/jruby/util/collections/SingleObject.java (+14/-0)
core/src/main/java/org/jruby/util/func/ObjectObjectIntFunction.java (+5/-0)
core/src/main/java/org/jruby/util/io/EncodingUtils.java (+18/-13)
core/src/main/java/org/jruby/util/io/FilenoUtil.java (+10/-7)
core/src/main/java/org/jruby/util/io/Getline.java (+15/-0)
core/src/main/java/org/jruby/util/io/OpenFile.java (+226/-34)
core/src/main/java/org/jruby/util/io/PopenExecutor.java (+21/-8)
core/src/main/java/org/jruby/util/io/PosixShim.java (+71/-42)
core/src/main/java/org/jruby/util/io/SelectExecutor.java (+4/-4)
core/src/main/java/org/jruby/util/io/SelectorPool.java (+35/-26)
core/src/main/java/org/jruby/util/log/StandardErrorLogger.java (+1/-1)
core/src/main/resources/org/jruby/runtime/Constants.java (+4/-13)
core/src/main/ruby/jruby/bigdecimal.rb (+5/-3)
core/src/main/ruby/jruby/java/core_ext/object.rb (+0/-13)
core/src/main/ruby/jruby/kernel.rb (+1/-0)
core/src/main/ruby/jruby/kernel/enumerator.rb (+30/-3)
core/src/main/ruby/jruby/kernel/gc.rb (+4/-2)
core/src/main/ruby/jruby/kernel/kernel.rb (+1/-1)
core/src/main/ruby/jruby/kernel/prelude.rb (+1/-7)
core/src/main/ruby/jruby/kernel/proc.rb (+16/-7)
core/src/main/ruby/jruby/kernel/signal.rb (+4/-3)
core/src/main/ruby/jruby/kernel/thread.rb (+7/-0)
core/src/test/java/org/jruby/embed/ReaderInputStreamTest.java (+1/-1)
core/src/test/java/org/jruby/embed/ScriptingContainerTest.java (+41/-39)
core/src/test/java/org/jruby/javasupport/JavaEmbedUtilsTest.java (+93/-1)
core/src/test/java/org/jruby/javasupport/TestJava.java (+24/-27)
core/src/test/java/org/jruby/runtime/EventHookTest.java (+1/-1)
core/src/test/java/org/jruby/runtime/load/TestLoadService.java (+11/-2)
core/src/test/java/org/jruby/test/TestCommandlineParser.java (+0/-1)
core/src/test/java/org/jruby/test/TestMethodFactories.java (+43/-0)
core/src/test/java/org/jruby/test/TestRuby.java (+1/-1)
core/src/test/java/org/jruby/test/TestRubyObject.java (+0/-6)
core/src/test/java/org/jruby/util/TestIOChannel.java (+0/-2)
debian/README.source (+9/-23)
debian/changelog (+90/-0)
debian/control (+33/-18)
debian/copyright (+27/-17)
debian/gbp.conf (+5/-0)
debian/jruby.classpath (+1/-1)
debian/jruby.dirs (+1/-0)
debian/jruby.install (+0/-1)
debian/jruby.links (+13/-9)
debian/jruby.lintian-overrides.in (+2/-1)
debian/maven.ignoreRules (+1/-4)
debian/maven.rules (+1/-0)
debian/patches/0001-patch-ruby-poms.patch (+284/-0)
debian/patches/0002-disable-buildnumber-maven-plugin.patch (+26/-0)
debian/patches/0003-disable-checksum-maven-plugin.patch (+65/-0)
debian/patches/0004-disable-truezip-plugin.patch (+27/-0)
debian/patches/0005-disable-jnr-ffi-native-usage.patch (+33/-0)
debian/patches/0007-omit-bundled-gems.patch (+26/-0)
debian/patches/0011-Fix-testRevision-testcase.patch (+3/-3)
debian/patches/0012-Fix-test-failures-related-to-Module-PTY.patch (+6/-7)
debian/patches/0013-Work-around-JarResourceTest-failure.patch (+29/-0)
debian/patches/Update-to-use-non-expired-certificates.patch (+239/-0)
debian/patches/gems/io-console-architectures.patch (+16/-0)
debian/patches/gems/load-java-libraries-from-usj.patch (+29/-0)
debian/patches/gems/series (+2/-0)
debian/patches/series (+14/-0)
debian/rubygems-download.sh (+57/-0)
debian/rules (+63/-88)
debian/salsa-ci.yml (+15/-0)
debian/source/lintian-overrides (+4/-2)
debian/tests/common.sh (+53/-11)
debian/tests/control (+22/-1)
debian/tests/jgem (+5/-0)
debian/tests/jirb.exp (+6/-4)
debian/tests/jruby (+19/-9)
debian/tests/mri-core (+29/-16)
debian/tests/mri-stdlib (+31/-22)
debian/tests/smoke (+2/-0)
debian/tests/spec-ffi (+3/-3)
debian/tests/spec-ruby (+26/-30)
default.build.properties (+3/-4)
dev/null (+0/-55)
install/jruby.install4j (+2/-0)
lib/pom.rb (+151/-63)
lib/pom.xml (+795/-171)
lib/ruby/stdlib/date.rb (+24/-20)
lib/ruby/stdlib/fiddle.rb (+28/-5)
lib/ruby/stdlib/fiddle/cparser.rb (+94/-27)
lib/ruby/stdlib/fiddle/function.rb (+11/-0)
lib/ruby/stdlib/fiddle/import.rb (+3/-5)
lib/ruby/stdlib/fiddle/struct.rb (+338/-43)
lib/ruby/stdlib/fiddle/types.rb (+18/-17)
lib/ruby/stdlib/fiddle/version.rb (+3/-0)
lib/ruby/stdlib/jruby/open3_windows.rb (+9/-0)
lib/ruby/stdlib/monitor.rb (+1/-1)
lib/ruby/stdlib/net/imap.rb (+14/-11)
lib/ruby/stdlib/net/net-ftp.gemspec (+36/-0)
lib/ruby/stdlib/net/net-imap.gemspec (+37/-0)
lib/ruby/stdlib/net/net-pop.gemspec (+34/-0)
lib/ruby/stdlib/net/net-protocol.gemspec (+36/-0)
lib/ruby/stdlib/net/net-smtp.gemspec (+35/-0)
lib/ruby/stdlib/objspace.rb (+3/-1)
lib/ruby/stdlib/pathname.rb (+26/-13)
lib/ruby/stdlib/pty.rb (+16/-31)
lib/ruby/stdlib/rbconfig/sizeof.rb (+7/-0)
lib/ruby/stdlib/resolv.rb (+46/-17)
lib/ruby/stdlib/ripper/core.rb (+2/-0)
lib/ruby/stdlib/ripper/lexer.rb (+162/-46)
lib/ruby/stdlib/ripper/sexp.rb (+34/-5)
lib/ruby/stdlib/rubygems/defaults/jruby.rb (+9/-7)
lib/ruby/stdlib/socket.rb (+5/-4)
lib/ruby/stdlib/syslog.rb (+131/-0)
lib/ruby/stdlib/syslog/logger.rb (+2/-2)
lib/ruby/stdlib/tempfile.rb (+2/-2)
lib/ruby/stdlib/tmpdir.rb (+37/-27)
lib/ruby/stdlib/unicode_normalize/tables.rb (+36/-0)
lib/ruby/stdlib/win32/resolv.rb (+0/-13)
lib/ruby/stdlib/win32/sspi.rb (+317/-310)
lifecycle-mapping-metadata.xml (+4/-4)
maven/jruby-complete/pom.rb (+1/-1)
maven/jruby-complete/src/it/GH-3095-gem-install-with-forked-jruby/pom.xml (+2/-2)
maven/jruby-complete/src/it/extended/Mavenfile (+1/-1)
maven/jruby-complete/src/it/runnable/Mavenfile (+3/-3)
maven/jruby-complete/src/templates/osgi_many_bundles_with_embedded_gems/gems-bundle/pom.rb (+2/-2)
maven/jruby-complete/src/templates/osgi_many_bundles_with_embedded_gems/pom.rb (+1/-1)
maven/jruby-jars/Mavenfile (+1/-1)
maven/jruby-jars/jruby-jars.gemspec (+1/-1)
maven/jruby-jars/src/it/integrity/pom.xml (+2/-5)
maven/jruby/src/it/j2ee_jetty/pom.rb (+2/-2)
maven/jruby/src/it/j2ee_jetty_rack/Mavenfile (+2/-2)
maven/jruby/src/it/j2ee_tomcat/pom.rb (+2/-2)
maven/jruby/src/it/j2ee_tomcat_rack/Mavenfile (+2/-2)
maven/jruby/src/it/j2ee_wildfly/pom.rb (+2/-2)
maven/jruby/src/it/jetty/Mavenfile (+2/-2)
maven/jruby/src/it/many_jars_with_embedded_gems/app/pom.rb (+1/-1)
maven/jruby/src/it/many_jars_with_embedded_gems/pom.rb (+1/-1)
maven/jruby/src/it/many_jars_with_embedded_gems/zip_gem/pom.rb (+1/-1)
maven/jruby/src/it/many_jars_with_embedded_gems_ng/gem1/pom.rb (+1/-1)
maven/jruby/src/it/many_jars_with_embedded_gems_ng/gem2/Gemfile (+1/-1)
maven/jruby/src/it/many_jars_with_embedded_gems_ng/gem2/pom.rb (+1/-1)
maven/jruby/src/it/many_jars_with_embedded_gems_ng/pom.rb (+1/-1)
maven/jruby/src/it/terminate-container-and-extensions-GH-3300/pom.xml (+4/-7)
maven/jruby/src/it/tomcat/pom.rb (+2/-2)
maven/jruby/src/templates/hellowarld/Mavenfile (+2/-2)
maven/jruby/src/templates/j2ee_wlp/pom.rb (+2/-2)
maven/jruby/src/templates/osgi_all_inclusive/pom.rb (+2/-2)
mvnw (+179/-109)
mvnw.cmd (+205/-145)
pom.rb (+5/-5)
pom.xml (+6/-6)
rakelib/commands.rake (+5/-1)
rakelib/rubyspec.rake (+13/-1)
rakelib/test.rake (+14/-3)
samples/ffi/pty.rb (+2/-2)
shaded/pom.xml (+1/-1)
spec/compiler/general_spec.rb (+137/-42)
spec/ffi/fixtures/GNUmakefile (+3/-1)
spec/ffi/fixtures/compile.rb (+2/-0)
spec/ffi/function_spec.rb (+0/-4)
spec/java_integration/addons/net_spec.rb (+1/-1)
spec/java_integration/extensions/collection_spec.rb (+10/-8)
spec/java_integration/extensions/list_spec.rb (+8/-25)
spec/java_integration/extensions/thread_spec.rb (+29/-0)
spec/java_integration/fixtures/CoreTypeMethods.java (+40/-0)
spec/java_integration/fixtures/MethodNames.java (+4/-0)
spec/java_integration/fixtures/UsesSingleMethodInterface.java (+4/-0)
spec/java_integration/interfaces/implementation_spec.rb (+1/-1)
spec/java_integration/methods/dispatch_spec.rb (+15/-0)
spec/java_integration/methods/java_alias_spec.rb (+21/-0)
spec/java_integration/methods/naming_spec.rb (+4/-0)
spec/java_integration/methods/reflecting_spec.rb (+3/-3)
spec/java_integration/reify/become_java_spec.rb (+11/-2)
spec/java_integration/types/array_spec.rb (+4/-3)
spec/java_integration/types/construction_spec.rb (+1/-2)
spec/java_integration/types/map_spec.rb (+2/-15)
spec/java_integration/types/wrapping_spec.rb (+5/-3)
spec/jruby.mspec (+6/-3)
spec/jruby/core/dir/glob_spec.rb (+13/-2)
spec/jruby/core/file/absolute_path_spec.rb (+109/-0)
spec/jruby/core/kernel/require_spec.rb (+18/-2)
spec/jruby/core/module/define_method_spec.rb (+17/-16)
spec/jruby/language/return_spec.rb (+2/-4)
spec/jruby/library/pathname/absolute_spec.rb (+69/-0)
spec/jruby/library/pathname/root_spec.rb (+66/-0)
spec/mspec/bin/mspec (+1/-1)
spec/mspec/lib/mspec/commands/mkspec.rb (+3/-13)
spec/mspec/lib/mspec/commands/mspec.rb (+4/-7)
spec/mspec/lib/mspec/expectations/expectations.rb (+4/-0)
spec/mspec/lib/mspec/guards/platform.rb (+4/-0)
spec/mspec/lib/mspec/guards/superuser.rb (+10/-0)
spec/mspec/lib/mspec/guards/version.rb (+28/-0)
spec/mspec/lib/mspec/helpers/datetime.rb (+1/-0)
spec/mspec/lib/mspec/helpers/io.rb (+2/-2)
spec/mspec/lib/mspec/helpers/numeric.rb (+3/-1)
spec/mspec/lib/mspec/helpers/ruby_exe.rb (+37/-10)
spec/mspec/lib/mspec/matchers/base.rb (+24/-6)
spec/mspec/lib/mspec/matchers/complain.rb (+0/-2)
spec/mspec/lib/mspec/matchers/output.rb (+4/-4)
spec/mspec/lib/mspec/matchers/raise_error.rb (+4/-2)
spec/mspec/lib/mspec/runner/actions/leakchecker.rb (+2/-1)
spec/mspec/lib/mspec/runner/actions/timeout.rb (+71/-2)
spec/mspec/lib/mspec/runner/context.rb (+1/-0)
spec/mspec/lib/mspec/runner/exception.rb (+1/-1)
spec/mspec/lib/mspec/runner/formatters/base.rb (+21/-5)
spec/mspec/lib/mspec/runner/mspec.rb (+8/-3)
spec/mspec/lib/mspec/runner/shared.rb (+6/-2)
spec/mspec/lib/mspec/utils/name_map.rb (+6/-1)
spec/mspec/lib/mspec/utils/options.rb (+15/-2)
spec/mspec/lib/mspec/utils/script.rb (+14/-2)
spec/mspec/lib/mspec/utils/warnings.rb (+0/-43)
spec/mspec/spec/commands/mkspec_spec.rb (+1/-1)
spec/mspec/spec/commands/mspec_spec.rb (+0/-27)
spec/mspec/spec/helpers/numeric_spec.rb (+8/-2)
spec/mspec/spec/helpers/ruby_exe_spec.rb (+11/-11)
spec/mspec/spec/runner/context_spec.rb (+1/-1)
spec/mspec/spec/utils/script_spec.rb (+0/-5)
spec/mspec/tool/check_require_spec_helper.rb (+34/-0)
spec/mspec/tool/remove_old_guards.rb (+58/-5)
spec/mspec/tool/sync/sync-rubyspec.rb (+1/-1)
spec/mspec/tool/tag_from_output.rb (+22/-4)
spec/regression/GH-1460_pathname_ivar_spec.rb (+1/-1)
spec/regression/GH-1578_bigdecimal_to_i_with_no_args_spec.rb (+4/-4)
spec/regression/GH-1633_bigdecimal_operations_with_nil_spec.rb (+3/-3)
spec/regression/GH-1695_bigdecimal_and_rational_multiplication_rounds_the_rational_number_spec.rb (+3/-3)
spec/regression/GH-2524_bigdecimal_loss_of_precision_with_different_excution_order_spec.rb (+3/-3)
spec/regression/GH-2868_big_decimal_can_not_be_copied_spec.rb (+1/-1)
spec/regression/GH-7529_enumerator_inspect_has_ascii_encoding_spec.rb (+36/-0)
spec/regression/JRUBY-4463_bigdecimal_marshal_roundtrip_spec.rb (+2/-2)
spec/regression/JRUBY-5122_nonblocking_io_spec.rb (+3/-3)
spec/ruby/.mspec.constants (+4/-0)
spec/ruby/.rubocop.yml (+57/-2)
spec/ruby/.rubocop_todo.yml (+1/-11)
spec/ruby/CONTRIBUTING.md (+20/-16)
spec/ruby/README.md (+18/-10)
spec/ruby/command_line/backtrace_limit_spec.rb (+23/-25)
spec/ruby/command_line/dash_a_spec.rb (+2/-2)
spec/ruby/command_line/dash_l_spec.rb (+4/-4)
spec/ruby/command_line/dash_n_spec.rb (+4/-4)
spec/ruby/command_line/dash_p_spec.rb (+2/-2)
spec/ruby/command_line/dash_upper_f_spec.rb (+1/-1)
spec/ruby/command_line/dash_upper_u_spec.rb (+7/-0)
spec/ruby/command_line/dash_upper_w_spec.rb (+17/-25)
spec/ruby/command_line/dash_v_spec.rb (+2/-1)
spec/ruby/command_line/dash_w_spec.rb (+4/-0)
spec/ruby/command_line/feature_spec.rb (+3/-1)
spec/ruby/command_line/fixtures/backtrace.rb (+1/-1)
spec/ruby/command_line/fixtures/bin/embedded_ruby.txt (+1/-1)
spec/ruby/command_line/fixtures/freeze_flag_two_literals.rb (+1/-1)
spec/ruby/command_line/rubyopt_spec.rb (+21/-23)
spec/ruby/core/argf/readpartial_spec.rb (+1/-1)
spec/ruby/core/array/all_spec.rb (+13/-0)
spec/ruby/core/array/any_spec.rb (+12/-0)
spec/ruby/core/array/assoc_spec.rb (+1/-1)
spec/ruby/core/array/bsearch_index_spec.rb (+0/-4)
spec/ruby/core/array/clear_spec.rb (+0/-20)
spec/ruby/core/array/compact_spec.rb (+0/-30)
spec/ruby/core/array/concat_spec.rb (+0/-58)
spec/ruby/core/array/count_spec.rb (+11/-0)
spec/ruby/core/array/deconstruct_spec.rb (+4/-6)
spec/ruby/core/array/delete_at_spec.rb (+0/-22)
spec/ruby/core/array/delete_if_spec.rb (+25/-11)
spec/ruby/core/array/delete_spec.rb (+0/-22)
spec/ruby/core/array/drop_spec.rb (+2/-10)
spec/ruby/core/array/drop_while_spec.rb (+6/-10)
spec/ruby/core/array/each_index_spec.rb (+17/-1)
spec/ruby/core/array/each_spec.rb (+37/-3)
spec/ruby/core/array/element_set_spec.rb (+37/-39)
spec/ruby/core/array/fill_spec.rb (+69/-27)
spec/ruby/core/array/fixtures/classes.rb (+72/-0)
spec/ruby/core/array/flatten_spec.rb (+6/-28)
spec/ruby/core/array/initialize_spec.rb (+3/-1)
spec/ruby/core/array/intersect_spec.rb (+51/-2)
spec/ruby/core/array/intersection_spec.rb (+7/-9)
spec/ruby/core/array/keep_if_spec.rb (+1/-0)
spec/ruby/core/array/multiply_spec.rb (+4/-54)
spec/ruby/core/array/new_spec.rb (+3/-1)
spec/ruby/core/array/none_spec.rb (+13/-0)
spec/ruby/core/array/one_spec.rb (+13/-0)
spec/ruby/core/array/pack/a_spec.rb (+11/-0)
spec/ruby/core/array/pack/b_spec.rb (+6/-1)
spec/ruby/core/array/pack/c_spec.rb (+14/-2)
spec/ruby/core/array/pack/h_spec.rb (+5/-0)
spec/ruby/core/array/pack/m_spec.rb (+9/-1)
spec/ruby/core/array/pack/p_spec.rb (+0/-24)
spec/ruby/core/array/pack/shared/basic.rb (+40/-12)
spec/ruby/core/array/pack/shared/float.rb (+74/-8)
spec/ruby/core/array/pack/shared/integer.rb (+90/-18)
spec/ruby/core/array/pack/shared/numeric_basic.rb (+8/-2)
spec/ruby/core/array/pack/shared/taint.rb (+0/-33)
spec/ruby/core/array/pack/shared/unicode.rb (+14/-2)
spec/ruby/core/array/pack/u_spec.rb (+10/-0)
spec/ruby/core/array/pack/w_spec.rb (+14/-2)
spec/ruby/core/array/pack/x_spec.rb (+1/-0)
spec/ruby/core/array/pack/z_spec.rb (+10/-0)
spec/ruby/core/array/plus_spec.rb (+17/-20)
spec/ruby/core/array/pop_spec.rb (+0/-52)
spec/ruby/core/array/product_spec.rb (+5/-0)
spec/ruby/core/array/reject_spec.rb (+15/-0)
spec/ruby/core/array/reverse_each_spec.rb (+15/-1)
spec/ruby/core/array/rindex_spec.rb (+16/-1)
spec/ruby/core/array/sample_spec.rb (+20/-10)
spec/ruby/core/array/shared/clone.rb (+0/-24)
spec/ruby/core/array/shared/collect.rb (+32/-31)
spec/ruby/core/array/shared/index.rb (+4/-0)
spec/ruby/core/array/shared/inspect.rb (+0/-26)
spec/ruby/core/array/shared/intersection.rb (+2/-1)
spec/ruby/core/array/shared/iterable_and_tolerating_size_increasing.rb (+25/-0)
spec/ruby/core/array/shared/join.rb (+8/-77)
spec/ruby/core/array/shared/keep_if.rb (+35/-0)
spec/ruby/core/array/shared/select.rb (+3/-0)
spec/ruby/core/array/shared/slice.rb (+303/-215)
spec/ruby/core/array/shared/unshift.rb (+18/-0)
spec/ruby/core/array/shift_spec.rb (+0/-16)
spec/ruby/core/array/shuffle_spec.rb (+14/-0)
spec/ruby/core/array/slice_spec.rb (+24/-54)
spec/ruby/core/array/sort_by_spec.rb (+33/-0)
spec/ruby/core/array/sum_spec.rb (+20/-1)
spec/ruby/core/array/take_spec.rb (+2/-10)
spec/ruby/core/array/take_while_spec.rb (+7/-9)
spec/ruby/core/array/to_h_spec.rb (+6/-0)
spec/ruby/core/array/try_convert_spec.rb (+1/-1)
spec/ruby/core/array/uniq_spec.rb (+52/-70)
spec/ruby/core/array/values_at_spec.rb (+4/-5)
spec/ruby/core/array/zip_spec.rb (+6/-0)
spec/ruby/core/basicobject/fixtures/classes.rb (+225/-3)
spec/ruby/core/basicobject/instance_eval_spec.rb (+172/-20)
spec/ruby/core/basicobject/method_missing_spec.rb (+1/-0)
spec/ruby/core/binding/eval_spec.rb (+31/-68)
spec/ruby/core/binding/source_location_spec.rb (+5/-0)
spec/ruby/core/builtin_constants/builtin_constants_spec.rb (+2/-16)
spec/ruby/core/class/attached_object_spec.rb (+31/-0)
spec/ruby/core/class/dup_spec.rb (+3/-0)
spec/ruby/core/class/subclasses_spec.rb (+60/-0)
spec/ruby/core/comparable/clamp_spec.rb (+34/-44)
spec/ruby/core/complex/comparison_spec.rb (+17/-19)
spec/ruby/core/complex/inspect_spec.rb (+19/-0)
spec/ruby/core/complex/polar_spec.rb (+16/-0)
spec/ruby/core/complex/to_s_spec.rb (+10/-0)
spec/ruby/core/data/constants_spec.rb (+10/-12)
spec/ruby/core/data/define_spec.rb (+36/-0)
spec/ruby/core/data/fixtures/classes.rb (+5/-0)
spec/ruby/core/data/initialize_spec.rb (+58/-0)
spec/ruby/core/dir/children_spec.rb (+0/-8)
spec/ruby/core/dir/each_child_spec.rb (+0/-7)
spec/ruby/core/dir/entries_spec.rb (+0/-7)
spec/ruby/core/dir/exist_spec.rb (+8/-0)
spec/ruby/core/dir/fchdir_spec.rb (+68/-0)
spec/ruby/core/dir/fixtures/common.rb (+20/-0)
spec/ruby/core/dir/foreach_spec.rb (+6/-6)
spec/ruby/core/dir/glob_spec.rb (+160/-5)
spec/ruby/core/dir/home_spec.rb (+49/-1)
spec/ruby/core/dir/mkdir_spec.rb (+17/-1)
spec/ruby/core/dir/read_spec.rb (+33/-0)
spec/ruby/core/dir/shared/chroot.rb (+8/-5)
spec/ruby/core/dir/shared/exist.rb (+4/-4)
spec/ruby/core/dir/shared/glob.rb (+33/-20)
spec/ruby/core/encoding/compatible_spec.rb (+1/-1)
spec/ruby/core/encoding/converter/primitive_convert_spec.rb (+4/-0)
spec/ruby/core/encoding/converter/putback_spec.rb (+11/-2)
spec/ruby/core/encoding/default_external_spec.rb (+3/-5)
spec/ruby/core/encoding/invalid_byte_sequence_error/destination_encoding_name_spec.rb (+1/-0)
spec/ruby/core/encoding/invalid_byte_sequence_error/destination_encoding_spec.rb (+1/-0)
spec/ruby/core/encoding/invalid_byte_sequence_error/error_bytes_spec.rb (+1/-0)
spec/ruby/core/encoding/invalid_byte_sequence_error/readagain_bytes_spec.rb (+1/-0)
spec/ruby/core/encoding/invalid_byte_sequence_error/source_encoding_name_spec.rb (+1/-0)
spec/ruby/core/encoding/invalid_byte_sequence_error/source_encoding_spec.rb (+1/-0)
spec/ruby/core/encoding/list_spec.rb (+2/-4)
spec/ruby/core/encoding/name_spec.rb (+1/-0)
spec/ruby/core/encoding/replicate_spec.rb (+65/-49)
spec/ruby/core/encoding/to_s_spec.rb (+1/-0)
spec/ruby/core/encoding/undefined_conversion_error/destination_encoding_name_spec.rb (+1/-0)
spec/ruby/core/encoding/undefined_conversion_error/destination_encoding_spec.rb (+1/-0)
spec/ruby/core/encoding/undefined_conversion_error/error_char_spec.rb (+1/-0)
spec/ruby/core/encoding/undefined_conversion_error/source_encoding_name_spec.rb (+1/-0)
spec/ruby/core/encoding/undefined_conversion_error/source_encoding_spec.rb (+1/-0)
spec/ruby/core/enumerable/all_spec.rb (+6/-1)
spec/ruby/core/enumerable/any_spec.rb (+6/-1)
spec/ruby/core/enumerable/chunk_spec.rb (+5/-0)
spec/ruby/core/enumerable/compact_spec.rb (+11/-0)
spec/ruby/core/enumerable/each_cons_spec.rb (+8/-2)
spec/ruby/core/enumerable/each_slice_spec.rb (+8/-2)
spec/ruby/core/enumerable/filter_map_spec.rb (+16/-18)
spec/ruby/core/enumerable/grep_spec.rb (+18/-15)
spec/ruby/core/enumerable/grep_v_spec.rb (+18/-15)
spec/ruby/core/enumerable/group_by_spec.rb (+0/-10)
spec/ruby/core/enumerable/none_spec.rb (+6/-1)
spec/ruby/core/enumerable/one_spec.rb (+6/-2)
spec/ruby/core/enumerable/shared/entries.rb (+0/-10)
spec/ruby/core/enumerable/shared/inject.rb (+45/-5)
spec/ruby/core/enumerable/sum_spec.rb (+1/-1)
spec/ruby/core/enumerable/tally_spec.rb (+36/-25)
spec/ruby/core/enumerable/uniq_spec.rb (+16/-60)
spec/ruby/core/enumerable/zip_spec.rb (+5/-0)
spec/ruby/core/enumerator/arithmetic_sequence/begin_spec.rb (+7/-0)
spec/ruby/core/enumerator/arithmetic_sequence/end_spec.rb (+7/-0)
spec/ruby/core/enumerator/chain/initialize_spec.rb (+2/-2)
spec/ruby/core/enumerator/chain/inspect_spec.rb (+4/-0)
spec/ruby/core/enumerator/each_spec.rb (+9/-9)
spec/ruby/core/enumerator/generator/initialize_spec.rb (+2/-2)
spec/ruby/core/enumerator/initialize_spec.rb (+2/-10)
spec/ruby/core/enumerator/inspect_spec.rb (+5/-0)
spec/ruby/core/enumerator/lazy/compact_spec.rb (+16/-0)
spec/ruby/core/enumerator/lazy/eager_spec.rb (+18/-20)
spec/ruby/core/enumerator/lazy/filter_map_spec.rb (+6/-8)
spec/ruby/core/enumerator/lazy/initialize_spec.rb (+2/-2)
spec/ruby/core/enumerator/lazy/lazy_spec.rb (+4/-0)
spec/ruby/core/enumerator/lazy/with_index_spec.rb (+25/-19)
spec/ruby/core/enumerator/new_spec.rb (+7/-52)
spec/ruby/core/enumerator/produce_spec.rb (+23/-25)
spec/ruby/core/enumerator/product/each_spec.rb (+73/-0)
spec/ruby/core/enumerator/product/initialize_copy_spec.rb (+54/-0)
spec/ruby/core/enumerator/product/initialize_spec.rb (+33/-0)
spec/ruby/core/enumerator/product/inspect_spec.rb (+22/-0)
spec/ruby/core/enumerator/product/rewind_spec.rb (+64/-0)
spec/ruby/core/enumerator/product/size_spec.rb (+64/-0)
spec/ruby/core/enumerator/product_spec.rb (+93/-0)
spec/ruby/core/enumerator/rewind_spec.rb (+2/-2)
spec/ruby/core/enumerator/yielder/to_proc_spec.rb (+9/-11)
spec/ruby/core/env/clone_spec.rb (+23/-0)
spec/ruby/core/env/delete_spec.rb (+11/-5)
spec/ruby/core/env/dup_spec.rb (+11/-0)
spec/ruby/core/env/except_spec.rb (+21/-23)
spec/ruby/core/env/key_spec.rb (+30/-2)
spec/ruby/core/env/merge_spec.rb (+2/-4)
spec/ruby/core/env/shared/include.rb (+7/-0)
spec/ruby/core/env/shared/update.rb (+22/-16)
spec/ruby/core/env/shared/value.rb (+7/-0)
spec/ruby/core/env/slice_spec.rb (+10/-0)
spec/ruby/core/env/to_a_spec.rb (+4/-1)
spec/ruby/core/exception/case_compare_spec.rb (+0/-2)
spec/ruby/core/exception/detailed_message_spec.rb (+43/-0)
spec/ruby/core/exception/equal_value_spec.rb (+7/-7)
spec/ruby/core/exception/errno_spec.rb (+9/-0)
spec/ruby/core/exception/fixtures/common.rb (+4/-0)
spec/ruby/core/exception/fixtures/thread_fiber_ensure.rb (+22/-0)
spec/ruby/core/exception/fixtures/thread_fiber_ensure_non_root_fiber.rb (+25/-0)
spec/ruby/core/exception/frozen_error_spec.rb (+12/-16)
spec/ruby/core/exception/full_message_spec.rb (+78/-11)
spec/ruby/core/exception/interrupt_spec.rb (+9/-0)
spec/ruby/core/exception/no_method_error_spec.rb (+50/-29)
spec/ruby/core/exception/signal_exception_spec.rb (+3/-3)
spec/ruby/core/exception/system_exit_spec.rb (+42/-0)
spec/ruby/core/exception/top_level_spec.rb (+12/-0)
spec/ruby/core/false/case_compare_spec.rb (+14/-0)
spec/ruby/core/false/singleton_method_spec.rb (+15/-0)
spec/ruby/core/false/to_s_spec.rb (+5/-7)
spec/ruby/core/fiber/blocking_spec.rb (+77/-0)
spec/ruby/core/fiber/inspect_spec.rb (+36/-0)
spec/ruby/core/fiber/kill_spec.rb (+90/-0)
spec/ruby/core/fiber/raise_spec.rb (+78/-94)
spec/ruby/core/fiber/resume_spec.rb (+3/-12)
spec/ruby/core/fiber/shared/blocking.rb (+41/-0)
spec/ruby/core/fiber/storage_spec.rb (+158/-0)
spec/ruby/core/file/absolute_path_spec.rb (+37/-39)
spec/ruby/core/file/atime_spec.rb (+2/-2)
spec/ruby/core/file/ctime_spec.rb (+1/-1)
spec/ruby/core/file/dirname_spec.rb (+27/-12)
spec/ruby/core/file/exist_spec.rb (+8/-0)
spec/ruby/core/file/extname_spec.rb (+2/-2)
spec/ruby/core/file/flock_spec.rb (+2/-2)
spec/ruby/core/file/mtime_spec.rb (+10/-8)
spec/ruby/core/file/new_spec.rb (+62/-1)
spec/ruby/core/file/open_spec.rb (+18/-1)
spec/ruby/core/file/realpath_spec.rb (+4/-0)
spec/ruby/core/file/shared/fnmatch.rb (+58/-5)
spec/ruby/core/file/shared/path.rb (+8/-6)
spec/ruby/core/file/utime_spec.rb (+9/-3)
spec/ruby/core/float/coerce_spec.rb (+2/-2)
spec/ruby/core/float/comparison_spec.rb (+20/-15)
spec/ruby/core/float/divide_spec.rb (+4/-0)
spec/ruby/core/float/divmod_spec.rb (+2/-2)
spec/ruby/core/float/gt_spec.rb (+21/-0)
spec/ruby/core/float/gte_spec.rb (+21/-0)
spec/ruby/core/float/lt_spec.rb (+21/-0)
spec/ruby/core/float/lte_spec.rb (+21/-0)
spec/ruby/core/float/magnitude_spec.rb (+1/-0)
spec/ruby/core/float/minus_spec.rb (+1/-1)
spec/ruby/core/float/multiply_spec.rb (+1/-1)
spec/ruby/core/float/plus_spec.rb (+1/-1)
spec/ruby/core/float/round_spec.rb (+64/-0)
spec/ruby/core/float/shared/equal.rb (+21/-0)
spec/ruby/core/float/shared/to_i.rb (+4/-0)
spec/ruby/core/gc/auto_compact_spec.rb (+24/-0)
spec/ruby/core/gc/measure_total_time_spec.rb (+19/-0)
spec/ruby/core/gc/stat_spec.rb (+18/-0)
spec/ruby/core/gc/total_time_spec.rb (+15/-0)
spec/ruby/core/hash/compact_spec.rb (+24/-0)
spec/ruby/core/hash/constructor_spec.rb (+25/-20)
spec/ruby/core/hash/deconstruct_keys_spec.rb (+15/-17)
spec/ruby/core/hash/except_spec.rb (+24/-26)
spec/ruby/core/hash/fetch_spec.rb (+1/-1)
spec/ruby/core/hash/fetch_values_spec.rb (+1/-1)
spec/ruby/core/hash/hash_spec.rb (+9/-0)
spec/ruby/core/hash/new_spec.rb (+13/-0)
spec/ruby/core/hash/reject_spec.rb (+0/-7)
spec/ruby/core/hash/ruby2_keywords_hash_spec.rb (+71/-35)
spec/ruby/core/hash/shared/each.rb (+9/-28)
spec/ruby/core/hash/shared/eql.rb (+19/-65)
spec/ruby/core/hash/shared/to_s.rb (+4/-13)
spec/ruby/core/hash/shift_spec.rb (+32/-10)
spec/ruby/core/hash/to_a_spec.rb (+0/-10)
spec/ruby/core/hash/to_proc_spec.rb (+4/-12)
spec/ruby/core/hash/transform_keys_spec.rb (+15/-22)
spec/ruby/core/hash/try_convert_spec.rb (+1/-1)
spec/ruby/core/integer/bit_and_spec.rb (+8/-8)
spec/ruby/core/integer/bit_or_spec.rb (+27/-6)
spec/ruby/core/integer/bit_xor_spec.rb (+28/-7)
spec/ruby/core/integer/ceildiv_spec.rb (+22/-0)
spec/ruby/core/integer/chr_spec.rb (+33/-32)
spec/ruby/core/integer/complement_spec.rb (+3/-3)
spec/ruby/core/integer/constants_spec.rb (+26/-10)
spec/ruby/core/integer/div_spec.rb (+5/-5)
spec/ruby/core/integer/divide_spec.rb (+6/-6)
spec/ruby/core/integer/divmod_spec.rb (+6/-6)
spec/ruby/core/integer/element_reference_spec.rb (+60/-62)
spec/ruby/core/integer/fdiv_spec.rb (+51/-0)
spec/ruby/core/integer/left_shift_spec.rb (+52/-7)
spec/ruby/core/integer/minus_spec.rb (+3/-3)
spec/ruby/core/integer/multiply_spec.rb (+3/-3)
spec/ruby/core/integer/plus_spec.rb (+19/-4)
spec/ruby/core/integer/remainder_spec.rb (+1/-1)
spec/ruby/core/integer/right_shift_spec.rb (+52/-11)
spec/ruby/core/integer/shared/abs.rb (+2/-2)
spec/ruby/core/integer/shared/arithmetic_coerce.rb (+0/-20)
spec/ruby/core/integer/shared/exponent.rb (+7/-4)
spec/ruby/core/integer/shared/modulo.rb (+5/-5)
spec/ruby/core/integer/to_f_spec.rb (+3/-3)
spec/ruby/core/integer/to_s_spec.rb (+3/-3)
spec/ruby/core/integer/try_convert_spec.rb (+11/-1)
spec/ruby/core/integer/uminus_spec.rb (+4/-4)
spec/ruby/core/integer/zero_spec.rb (+2/-10)
spec/ruby/core/io/advise_spec.rb (+2/-12)
spec/ruby/core/io/binread_spec.rb (+10/-0)
spec/ruby/core/io/close_spec.rb (+6/-0)
spec/ruby/core/io/copy_stream_spec.rb (+27/-6)
spec/ruby/core/io/eof_spec.rb (+1/-1)
spec/ruby/core/io/fixtures/classes.rb (+26/-0)
spec/ruby/core/io/flush_spec.rb (+5/-5)
spec/ruby/core/io/foreach_spec.rb (+17/-2)
spec/ruby/core/io/getbyte_spec.rb (+16/-0)
spec/ruby/core/io/gets_spec.rb (+71/-38)
spec/ruby/core/io/initialize_spec.rb (+11/-0)
spec/ruby/core/io/lineno_spec.rb (+7/-2)
spec/ruby/core/io/new_spec.rb (+8/-0)
spec/ruby/core/io/nonblock_spec.rb (+48/-0)
spec/ruby/core/io/open_spec.rb (+15/-2)
spec/ruby/core/io/path_spec.rb (+14/-0)
spec/ruby/core/io/pipe_spec.rb (+11/-0)
spec/ruby/core/io/pread_spec.rb (+78/-1)
spec/ruby/core/io/print_spec.rb (+19/-6)
spec/ruby/core/io/pwrite_spec.rb (+29/-3)
spec/ruby/core/io/read_nonblock_spec.rb (+49/-0)
spec/ruby/core/io/read_spec.rb (+113/-15)
spec/ruby/core/io/readchar_spec.rb (+66/-0)
spec/ruby/core/io/readline_spec.rb (+33/-0)
spec/ruby/core/io/readlines_spec.rb (+49/-2)
spec/ruby/core/io/readpartial_spec.rb (+16/-1)
spec/ruby/core/io/rewind_spec.rb (+15/-0)
spec/ruby/core/io/select_spec.rb (+13/-2)
spec/ruby/core/io/set_encoding_by_bom_spec.rb (+229/-44)
spec/ruby/core/io/set_encoding_spec.rb (+48/-1)
spec/ruby/core/io/shared/binwrite.rb (+13/-0)
spec/ruby/core/io/shared/each.rb (+82/-4)
spec/ruby/core/io/shared/new.rb (+19/-31)
spec/ruby/core/io/shared/pos.rb (+7/-1)
spec/ruby/core/io/shared/readlines.rb (+94/-44)
spec/ruby/core/io/shared/write.rb (+60/-15)
spec/ruby/core/io/sysread_spec.rb (+30/-1)
spec/ruby/core/io/sysseek_spec.rb (+1/-1)
spec/ruby/core/io/syswrite_spec.rb (+11/-0)
spec/ruby/core/io/try_convert_spec.rb (+1/-1)
spec/ruby/core/io/ungetbyte_spec.rb (+4/-14)
spec/ruby/core/io/ungetc_spec.rb (+3/-13)
spec/ruby/core/io/write_nonblock_spec.rb (+11/-0)
spec/ruby/core/io/write_spec.rb (+142/-15)
spec/ruby/core/kernel/Complex_spec.rb (+92/-1)
spec/ruby/core/kernel/Integer_spec.rb (+16/-9)
spec/ruby/core/kernel/__dir___spec.rb (+3/-13)
spec/ruby/core/kernel/at_exit_spec.rb (+5/-56)
spec/ruby/core/kernel/caller_locations_spec.rb (+4/-6)
spec/ruby/core/kernel/caller_spec.rb (+4/-6)
spec/ruby/core/kernel/clone_spec.rb (+42/-49)
spec/ruby/core/kernel/define_singleton_method_spec.rb (+9/-1)
spec/ruby/core/kernel/eval_spec.rb (+30/-18)
spec/ruby/core/kernel/exec_spec.rb (+2/-2)
spec/ruby/core/kernel/exit_spec.rb (+5/-5)
spec/ruby/core/kernel/fixtures/Complex.rb (+5/-0)
spec/ruby/core/kernel/fixtures/classes.rb (+6/-1)
spec/ruby/core/kernel/fixtures/warn_core_method.rb (+1/-1)
spec/ruby/core/kernel/initialize_clone_spec.rb (+26/-0)
spec/ruby/core/kernel/initialize_copy_spec.rb (+8/-1)
spec/ruby/core/kernel/initialize_dup_spec.rb (+20/-0)
spec/ruby/core/kernel/inspect_spec.rb (+0/-10)
spec/ruby/core/kernel/instance_variable_get_spec.rb (+6/-0)
spec/ruby/core/kernel/instance_variable_set_spec.rb (+12/-0)
spec/ruby/core/kernel/instance_variables_spec.rb (+11/-0)
spec/ruby/core/kernel/lambda_spec.rb (+49/-29)
spec/ruby/core/kernel/match_spec.rb (+21/-13)
spec/ruby/core/kernel/method_spec.rb (+44/-1)
spec/ruby/core/kernel/open_spec.rb (+57/-20)
spec/ruby/core/kernel/p_spec.rb (+2/-4)
spec/ruby/core/kernel/print_spec.rb (+12/-0)
spec/ruby/core/kernel/printf_spec.rb (+7/-0)
spec/ruby/core/kernel/proc_spec.rb (+4/-22)
spec/ruby/core/kernel/rand_spec.rb (+2/-2)
spec/ruby/core/kernel/remove_instance_variable_spec.rb (+13/-0)
spec/ruby/core/kernel/require_relative_spec.rb (+5/-5)
spec/ruby/core/kernel/require_spec.rb (+20/-0)
spec/ruby/core/kernel/shared/dup_clone.rb (+0/-24)
spec/ruby/core/kernel/shared/load.rb (+64/-19)
spec/ruby/core/kernel/shared/require.rb (+61/-23)
spec/ruby/core/kernel/shared/sprintf.rb (+74/-11)
spec/ruby/core/kernel/shared/sprintf_encoding.rb (+32/-1)
spec/ruby/core/kernel/singleton_class_spec.rb (+49/-2)
spec/ruby/core/kernel/sleep_spec.rb (+23/-5)
spec/ruby/core/kernel/sprintf_spec.rb (+16/-0)
spec/ruby/core/kernel/srand_spec.rb (+12/-4)
spec/ruby/core/kernel/taint_spec.rb (+12/-47)
spec/ruby/core/kernel/tainted_spec.rb (+14/-16)
spec/ruby/core/kernel/test_spec.rb (+2/-2)
spec/ruby/core/kernel/to_s_spec.rb (+0/-10)
spec/ruby/core/kernel/trust_spec.rb (+13/-28)
spec/ruby/core/kernel/untaint_spec.rb (+13/-28)
spec/ruby/core/kernel/untrust_spec.rb (+12/-27)
spec/ruby/core/kernel/untrusted_spec.rb (+13/-31)
spec/ruby/core/kernel/warn_spec.rb (+74/-27)
spec/ruby/core/main/fixtures/using.rb (+1/-0)
spec/ruby/core/main/fixtures/using_in_main.rb (+5/-0)
spec/ruby/core/main/fixtures/using_in_method.rb (+5/-0)
spec/ruby/core/main/private_spec.rb (+15/-9)
spec/ruby/core/main/public_spec.rb (+16/-9)
spec/ruby/core/main/ruby2_keywords_spec.rb (+4/-6)
spec/ruby/core/main/using_spec.rb (+20/-0)
spec/ruby/core/marshal/dump_spec.rb (+247/-44)
spec/ruby/core/marshal/fixtures/classes.rb (+4/-0)
spec/ruby/core/marshal/fixtures/marshal_data.rb (+96/-0)
spec/ruby/core/marshal/shared/load.rb (+289/-94)
spec/ruby/core/matchdata/allocate_spec.rb (+3/-5)
spec/ruby/core/matchdata/byteoffset_spec.rb (+95/-0)
spec/ruby/core/matchdata/captures_spec.rb (+2/-3)
spec/ruby/core/matchdata/deconstruct_keys_spec.rb (+65/-0)
spec/ruby/core/matchdata/deconstruct_spec.rb (+8/-0)
spec/ruby/core/matchdata/element_reference_spec.rb (+32/-0)
spec/ruby/core/matchdata/fixtures/classes.rb (+3/-0)
spec/ruby/core/matchdata/named_captures_spec.rb (+12/-0)
spec/ruby/core/matchdata/post_match_spec.rb (+6/-18)
spec/ruby/core/matchdata/pre_match_spec.rb (+6/-18)
spec/ruby/core/matchdata/shared/captures.rb (+13/-0)
spec/ruby/core/matchdata/to_a_spec.rb (+6/-0)
spec/ruby/core/matchdata/to_s_spec.rb (+6/-0)
spec/ruby/core/matchdata/values_at_spec.rb (+63/-8)
spec/ruby/core/math/cos_spec.rb (+17/-9)
spec/ruby/core/math/ldexp_spec.rb (+6/-0)
spec/ruby/core/math/log2_spec.rb (+1/-1)
spec/ruby/core/math/sqrt_spec.rb (+4/-0)
spec/ruby/core/method/compose_spec.rb (+1/-2)
spec/ruby/core/method/fixtures/classes.rb (+11/-3)
spec/ruby/core/method/owner_spec.rb (+6/-0)
spec/ruby/core/method/parameters_spec.rb (+28/-3)
spec/ruby/core/method/private_spec.rb (+28/-0)
spec/ruby/core/method/protected_spec.rb (+28/-0)
spec/ruby/core/method/public_spec.rb (+28/-0)
spec/ruby/core/method/shared/to_s.rb (+24/-32)
spec/ruby/core/method/source_location_spec.rb (+8/-1)
spec/ruby/core/method/super_method_spec.rb (+4/-10)
spec/ruby/core/method/unbind_spec.rb (+10/-2)
spec/ruby/core/module/alias_method_spec.rb (+9/-11)
spec/ruby/core/module/append_features_spec.rb (+0/-14)
spec/ruby/core/module/attr_accessor_spec.rb (+3/-13)
spec/ruby/core/module/attr_reader_spec.rb (+3/-13)
spec/ruby/core/module/attr_spec.rb (+5/-17)
spec/ruby/core/module/attr_writer_spec.rb (+3/-13)
spec/ruby/core/module/autoload_spec.rb (+38/-12)
spec/ruby/core/module/class_variables_spec.rb (+8/-0)
spec/ruby/core/module/const_added_spec.rb (+160/-0)
spec/ruby/core/module/const_defined_spec.rb (+17/-4)
spec/ruby/core/module/const_get_spec.rb (+14/-0)
spec/ruby/core/module/const_set_spec.rb (+4/-14)
spec/ruby/core/module/const_source_location_spec.rb (+179/-162)
spec/ruby/core/module/define_method_spec.rb (+82/-7)
spec/ruby/core/module/deprecate_constant_spec.rb (+17/-6)
spec/ruby/core/module/extend_object_spec.rb (+0/-14)
spec/ruby/core/module/fixtures/classes.rb (+32/-1)
spec/ruby/core/module/fixtures/module.rb (+4/-0)
spec/ruby/core/module/include_spec.rb (+23/-2)
spec/ruby/core/module/included_modules_spec.rb (+1/-1)
spec/ruby/core/module/instance_method_spec.rb (+34/-8)
spec/ruby/core/module/method_added_spec.rb (+68/-5)
spec/ruby/core/module/module_function_spec.rb (+143/-33)
spec/ruby/core/module/name_spec.rb (+43/-35)
spec/ruby/core/module/prepend_features_spec.rb (+0/-14)
spec/ruby/core/module/prepend_spec.rb (+23/-28)
spec/ruby/core/module/private_class_method_spec.rb (+10/-0)
spec/ruby/core/module/private_spec.rb (+19/-5)
spec/ruby/core/module/protected_spec.rb (+19/-5)
spec/ruby/core/module/public_class_method_spec.rb (+14/-0)
spec/ruby/core/module/public_spec.rb (+19/-6)
spec/ruby/core/module/refine_spec.rb (+263/-313)
spec/ruby/core/module/refinements_spec.rb (+45/-0)
spec/ruby/core/module/ruby2_keywords_spec.rb (+257/-71)
spec/ruby/core/module/set_temporary_name_spec.rb (+68/-0)
spec/ruby/core/module/shared/class_eval.rb (+21/-6)
spec/ruby/core/module/shared/set_visibility.rb (+13/-15)
spec/ruby/core/module/undefined_instance_methods_spec.rb (+26/-0)
spec/ruby/core/module/used_refinements_spec.rb (+87/-0)
spec/ruby/core/mutex/lock_spec.rb (+0/-4)
spec/ruby/core/mutex/owned_spec.rb (+8/-10)
spec/ruby/core/nil/match_spec.rb (+1/-1)
spec/ruby/core/nil/singleton_method_spec.rb (+15/-0)
spec/ruby/core/nil/to_s_spec.rb (+5/-7)
spec/ruby/core/numeric/clone_spec.rb (+6/-1)
spec/ruby/core/numeric/fdiv_spec.rb (+0/-1)
spec/ruby/core/numeric/magnitude_spec.rb (+1/-0)
spec/ruby/core/numeric/quo_spec.rb (+10/-2)
spec/ruby/core/numeric/remainder_spec.rb (+3/-0)
spec/ruby/core/numeric/shared/step.rb (+1/-8)
spec/ruby/core/numeric/step_spec.rb (+4/-83)
spec/ruby/core/objectspace/define_finalizer_spec.rb (+60/-40)
spec/ruby/core/objectspace/weakkeymap/delete_spec.rb (+40/-0)
spec/ruby/core/objectspace/weakkeymap/element_reference_spec.rb (+26/-0)
spec/ruby/core/objectspace/weakkeymap/element_set_spec.rb (+71/-0)
spec/ruby/core/objectspace/weakkeymap/getkey_spec.rb (+14/-0)
spec/ruby/core/objectspace/weakkeymap/inspect_spec.rb (+17/-0)
spec/ruby/core/objectspace/weakkeymap/key_spec.rb (+33/-0)
spec/ruby/core/objectspace/weakmap/delete_spec.rb (+30/-0)
spec/ruby/core/objectspace/weakmap/element_set_spec.rb (+15/-38)
spec/ruby/core/objectspace/weakmap/shared/include.rb (+6/-10)
spec/ruby/core/proc/block_pass_spec.rb (+0/-22)
spec/ruby/core/proc/compose_spec.rb (+14/-26)
spec/ruby/core/proc/eql_spec.rb (+1/-7)
spec/ruby/core/proc/equal_value_spec.rb (+1/-7)
spec/ruby/core/proc/lambda_spec.rb (+5/-3)
spec/ruby/core/proc/new_spec.rb (+6/-66)
spec/ruby/core/proc/parameters_spec.rb (+51/-2)
spec/ruby/core/proc/ruby2_keywords_spec.rb (+40/-48)
spec/ruby/core/proc/shared/compose.rb (+13/-38)
spec/ruby/core/proc/shared/dup.rb (+8/-0)
spec/ruby/core/proc/shared/equal.rb (+0/-17)
spec/ruby/core/proc/shared/to_s.rb (+4/-6)
spec/ruby/core/proc/source_location_spec.rb (+9/-4)
spec/ruby/core/process/_fork_spec.rb (+24/-0)
spec/ruby/core/process/argv0_spec.rb (+25/-0)
spec/ruby/core/process/clock_gettime_spec.rb (+58/-43)
spec/ruby/core/process/constants_spec.rb (+8/-1)
spec/ruby/core/process/detach_spec.rb (+35/-0)
spec/ruby/core/process/egid_spec.rb (+40/-1)
spec/ruby/core/process/euid_spec.rb (+11/-1)
spec/ruby/core/process/exec_spec.rb (+22/-22)
spec/ruby/core/process/exit_spec.rb (+1/-1)
spec/ruby/core/process/fixtures/argv0.rb (+6/-0)
spec/ruby/core/process/spawn_spec.rb (+30/-2)
spec/ruby/core/process/status/equal_value_spec.rb (+1/-1)
spec/ruby/core/process/status/exited_spec.rb (+1/-1)
spec/ruby/core/process/status/exitstatus_spec.rb (+1/-1)
spec/ruby/core/process/status/signaled_spec.rb (+1/-1)
spec/ruby/core/process/status/success_spec.rb (+1/-1)
spec/ruby/core/process/status/termsig_spec.rb (+2/-2)
spec/ruby/core/process/status/to_i_spec.rb (+1/-1)
spec/ruby/core/process/status/wait_spec.rb (+78/-80)
spec/ruby/core/process/times_spec.rb (+8/-24)
spec/ruby/core/process/wait2_spec.rb (+11/-2)
spec/ruby/core/process/wait_spec.rb (+1/-1)
spec/ruby/core/process/warmup_spec.rb (+11/-0)
spec/ruby/core/queue/deq_spec.rb (+7/-0)
spec/ruby/core/queue/initialize_spec.rb (+35/-11)
spec/ruby/core/queue/pop_spec.rb (+7/-0)
spec/ruby/core/queue/shift_spec.rb (+7/-0)
spec/ruby/core/random/bytes_spec.rb (+1/-2)
spec/ruby/core/random/default_spec.rb (+13/-16)
spec/ruby/core/random/new_spec.rb (+1/-0)
spec/ruby/core/random/rand_spec.rb (+5/-0)
spec/ruby/core/random/urandom_spec.rb (+8/-6)
spec/ruby/core/range/bsearch_spec.rb (+97/-99)
spec/ruby/core/range/case_compare_spec.rb (+7/-3)
spec/ruby/core/range/clone_spec.rb (+26/-0)
spec/ruby/core/range/count_spec.rb (+7/-9)
spec/ruby/core/range/cover_spec.rb (+4/-0)
spec/ruby/core/range/dup_spec.rb (+9/-1)
spec/ruby/core/range/each_spec.rb (+2/-4)
spec/ruby/core/range/equal_value_spec.rb (+2/-4)
spec/ruby/core/range/first_spec.rb (+2/-4)
spec/ruby/core/range/frozen_spec.rb (+25/-0)
spec/ruby/core/range/include_spec.rb (+4/-0)
spec/ruby/core/range/initialize_spec.rb (+3/-12)
spec/ruby/core/range/inspect_spec.rb (+6/-22)
spec/ruby/core/range/last_spec.rb (+6/-0)
spec/ruby/core/range/max_spec.rb (+10/-14)
spec/ruby/core/range/min_spec.rb (+2/-4)
spec/ruby/core/range/minmax_spec.rb (+53/-93)
spec/ruby/core/range/new_spec.rb (+15/-15)
spec/ruby/core/range/shared/cover.rb (+27/-29)
spec/ruby/core/range/shared/cover_and_include.rb (+3/-6)
spec/ruby/core/range/size_spec.rb (+20/-5)
spec/ruby/core/range/step_spec.rb (+38/-36)
spec/ruby/core/range/to_a_spec.rb (+2/-4)
spec/ruby/core/range/to_s_spec.rb (+3/-19)
spec/ruby/core/rational/abs_spec.rb (+1/-0)
spec/ruby/core/rational/ceil_spec.rb (+1/-0)
spec/ruby/core/rational/coerce_spec.rb (+1/-0)
spec/ruby/core/rational/comparison_spec.rb (+1/-0)
spec/ruby/core/rational/denominator_spec.rb (+1/-0)
spec/ruby/core/rational/div_spec.rb (+1/-0)
spec/ruby/core/rational/divide_spec.rb (+1/-0)
spec/ruby/core/rational/divmod_spec.rb (+1/-0)
spec/ruby/core/rational/equal_value_spec.rb (+1/-0)
spec/ruby/core/rational/exponent_spec.rb (+1/-0)
spec/ruby/core/rational/fdiv_spec.rb (+1/-0)
spec/ruby/core/rational/floor_spec.rb (+1/-0)
spec/ruby/core/rational/hash_spec.rb (+1/-0)
spec/ruby/core/rational/inspect_spec.rb (+1/-0)
spec/ruby/core/rational/integer_spec.rb (+1/-0)
spec/ruby/core/rational/magnitude_spec.rb (+1/-0)
spec/ruby/core/rational/minus_spec.rb (+46/-2)
spec/ruby/core/rational/modulo_spec.rb (+1/-0)
spec/ruby/core/rational/multiply_spec.rb (+1/-0)
spec/ruby/core/rational/numerator_spec.rb (+1/-0)
spec/ruby/core/rational/plus_spec.rb (+1/-0)
spec/ruby/core/rational/quo_spec.rb (+1/-0)
spec/ruby/core/rational/remainder_spec.rb (+1/-0)
spec/ruby/core/rational/to_f_spec.rb (+1/-0)
spec/ruby/core/rational/to_i_spec.rb (+1/-0)
spec/ruby/core/rational/to_r_spec.rb (+1/-0)
spec/ruby/core/rational/to_s_spec.rb (+1/-0)
spec/ruby/core/rational/truncate_spec.rb (+1/-0)
spec/ruby/core/rational/zero_spec.rb (+1/-0)
spec/ruby/core/refinement/append_features_spec.rb (+21/-0)
spec/ruby/core/refinement/extend_object_spec.rb (+23/-0)
spec/ruby/core/refinement/fixtures/classes.rb (+10/-0)
spec/ruby/core/refinement/import_methods_spec.rb (+269/-0)
spec/ruby/core/refinement/include_spec.rb (+27/-0)
spec/ruby/core/refinement/prepend_features_spec.rb (+21/-0)
spec/ruby/core/refinement/prepend_spec.rb (+27/-0)
spec/ruby/core/refinement/refined_class_spec.rb (+17/-0)
spec/ruby/core/regexp/compile_spec.rb (+4/-0)
spec/ruby/core/regexp/initialize_spec.rb (+3/-11)
spec/ruby/core/regexp/linear_time_spec.rb (+25/-0)
spec/ruby/core/regexp/new_spec.rb (+3/-11)
spec/ruby/core/regexp/shared/new.rb (+152/-44)
spec/ruby/core/regexp/shared/quote.rb (+10/-0)
spec/ruby/core/regexp/source_spec.rb (+20/-2)
spec/ruby/core/regexp/timeout_spec.rb (+35/-0)
spec/ruby/core/regexp/try_convert_spec.rb (+6/-0)
spec/ruby/core/regexp/union_spec.rb (+37/-14)
spec/ruby/core/signal/signame_spec.rb (+12/-0)
spec/ruby/core/signal/trap_spec.rb (+32/-3)
spec/ruby/core/sizedqueue/append_spec.rb (+7/-0)
spec/ruby/core/sizedqueue/deq_spec.rb (+7/-0)
spec/ruby/core/sizedqueue/enq_spec.rb (+7/-0)
spec/ruby/core/sizedqueue/pop_spec.rb (+7/-0)
spec/ruby/core/sizedqueue/push_spec.rb (+7/-0)
spec/ruby/core/sizedqueue/shift_spec.rb (+7/-0)
spec/ruby/core/string/allocate_spec.rb (+1/-1)
spec/ruby/core/string/append_spec.rb (+6/-0)
spec/ruby/core/string/b_spec.rb (+0/-9)
spec/ruby/core/string/byteindex_spec.rb (+304/-0)
spec/ruby/core/string/byterindex_spec.rb (+359/-0)
spec/ruby/core/string/bytesize_spec.rb (+1/-1)
spec/ruby/core/string/byteslice_spec.rb (+6/-0)
spec/ruby/core/string/bytesplice_spec.rb (+133/-0)
spec/ruby/core/string/capitalize_spec.rb (+10/-17)
spec/ruby/core/string/casecmp_spec.rb (+10/-0)
spec/ruby/core/string/center_spec.rb (+6/-37)
spec/ruby/core/string/chars_spec.rb (+7/-1)
spec/ruby/core/string/chomp_spec.rb (+5/-72)
spec/ruby/core/string/chop_spec.rb (+4/-20)
spec/ruby/core/string/clone_spec.rb (+4/-0)
spec/ruby/core/string/comparison_spec.rb (+4/-0)
spec/ruby/core/string/concat_spec.rb (+1/-0)
spec/ruby/core/string/crypt_spec.rb (+0/-30)
spec/ruby/core/string/dedup_spec.rb (+8/-0)
spec/ruby/core/string/delete_prefix_spec.rb (+7/-15)
spec/ruby/core/string/delete_spec.rb (+4/-17)
spec/ruby/core/string/delete_suffix_spec.rb (+7/-15)
spec/ruby/core/string/downcase_spec.rb (+10/-18)
spec/ruby/core/string/dump_spec.rb (+10/-24)
spec/ruby/core/string/dup_spec.rb (+13/-0)
spec/ruby/core/string/each_char_spec.rb (+1/-0)
spec/ruby/core/string/each_grapheme_cluster_spec.rb (+7/-0)
spec/ruby/core/string/element_set_spec.rb (+8/-26)
spec/ruby/core/string/encode_spec.rb (+50/-4)
spec/ruby/core/string/encoding_spec.rb (+1/-0)
spec/ruby/core/string/fixtures/iso-8859-9-encoding.rb (+1/-1)
spec/ruby/core/string/fixtures/to_c.rb (+5/-0)
spec/ruby/core/string/force_encoding_spec.rb (+1/-1)
spec/ruby/core/string/grapheme_clusters_spec.rb (+1/-0)
spec/ruby/core/string/gsub_spec.rb (+38/-156)
spec/ruby/core/string/include_spec.rb (+14/-0)
spec/ruby/core/string/index_spec.rb (+26/-0)
spec/ruby/core/string/insert_spec.rb (+9/-12)
spec/ruby/core/string/inspect_spec.rb (+20/-12)
spec/ruby/core/string/lines_spec.rb (+0/-1)
spec/ruby/core/string/ljust_spec.rb (+6/-37)
spec/ruby/core/string/lstrip_spec.rb (+31/-19)
spec/ruby/core/string/modulo_spec.rb (+10/-52)
spec/ruby/core/string/ord_spec.rb (+5/-0)
spec/ruby/core/string/partition_spec.rb (+22/-0)
spec/ruby/core/string/plus_spec.rb (+3/-15)
spec/ruby/core/string/prepend_spec.rb (+0/-10)
spec/ruby/core/string/reverse_spec.rb (+23/-19)
spec/ruby/core/string/rindex_spec.rb (+21/-2)
spec/ruby/core/string/rjust_spec.rb (+6/-37)
spec/ruby/core/string/rpartition_spec.rb (+22/-0)
spec/ruby/core/string/rstrip_spec.rb (+44/-8)
spec/ruby/core/string/scan_spec.rb (+12/-40)
spec/ruby/core/string/scrub_spec.rb (+28/-23)
spec/ruby/core/string/setbyte_spec.rb (+6/-0)
spec/ruby/core/string/shared/byte_index_common.rb (+63/-0)
spec/ruby/core/string/shared/chars.rb (+0/-14)
spec/ruby/core/string/shared/concat.rb (+20/-24)
spec/ruby/core/string/shared/dedup.rb (+55/-0)
spec/ruby/core/string/shared/each_line.rb (+10/-22)
spec/ruby/core/string/shared/eql.rb (+5/-1)
spec/ruby/core/string/shared/length.rb (+21/-5)
spec/ruby/core/string/shared/partition.rb (+20/-23)
spec/ruby/core/string/shared/replace.rb (+0/-30)
spec/ruby/core/string/shared/slice.rb (+55/-214)
spec/ruby/core/string/shared/strip.rb (+6/-12)
spec/ruby/core/string/shared/succ.rb (+6/-20)
spec/ruby/core/string/shared/to_s.rb (+0/-7)
spec/ruby/core/string/shared/to_sym.rb (+10/-1)
spec/ruby/core/string/slice_spec.rb (+21/-157)
spec/ruby/core/string/split_spec.rb (+118/-149)
spec/ruby/core/string/squeeze_spec.rb (+7/-20)
spec/ruby/core/string/start_with_spec.rb (+19/-0)
spec/ruby/core/string/strip_spec.rb (+12/-18)
spec/ruby/core/string/sub_spec.rb (+37/-120)
spec/ruby/core/string/swapcase_spec.rb (+9/-17)
spec/ruby/core/string/to_c_spec.rb (+34/-80)
spec/ruby/core/string/tr_s_spec.rb (+11/-23)
spec/ruby/core/string/tr_spec.rb (+11/-23)
spec/ruby/core/string/try_convert_spec.rb (+1/-1)
spec/ruby/core/string/uminus_spec.rb (+2/-45)
spec/ruby/core/string/undump_spec.rb (+1/-11)
spec/ruby/core/string/unpack/b_spec.rb (+33/-5)
spec/ruby/core/string/unpack/c_spec.rb (+14/-2)
spec/ruby/core/string/unpack/h_spec.rb (+28/-4)
spec/ruby/core/string/unpack/m_spec.rb (+5/-0)
spec/ruby/core/string/unpack/p_spec.rb (+0/-12)
spec/ruby/core/string/unpack/shared/basic.rb (+0/-8)
spec/ruby/core/string/unpack/shared/float.rb (+58/-10)
spec/ruby/core/string/unpack/shared/integer.rb (+86/-14)
spec/ruby/core/string/unpack/shared/taint.rb (+0/-81)
spec/ruby/core/string/unpack/shared/unicode.rb (+14/-2)
spec/ruby/core/string/unpack/w_spec.rb (+14/-2)
spec/ruby/core/string/unpack/z_spec.rb (+5/-0)
spec/ruby/core/string/unpack1_spec.rb (+26/-0)
spec/ruby/core/string/unpack_spec.rb (+34/-0)
spec/ruby/core/string/upcase_spec.rb (+10/-18)
spec/ruby/core/string/uplus_spec.rb (+3/-0)
spec/ruby/core/string/upto_spec.rb (+6/-0)
spec/ruby/core/string/valid_encoding/utf_8_spec.rb (+214/-0)
spec/ruby/core/string/valid_encoding_spec.rb (+8/-10)
spec/ruby/core/struct/constants_spec.rb (+15/-0)
spec/ruby/core/struct/deconstruct_keys_spec.rb (+72/-74)
spec/ruby/core/struct/deconstruct_spec.rb (+5/-7)
spec/ruby/core/struct/fixtures/classes.rb (+6/-0)
spec/ruby/core/struct/initialize_spec.rb (+18/-0)
spec/ruby/core/struct/inspect_spec.rb (+0/-5)
spec/ruby/core/struct/keyword_init_spec.rb (+40/-0)
spec/ruby/core/struct/new_spec.rb (+33/-2)
spec/ruby/core/struct/shared/inspect.rb (+35/-0)
spec/ruby/core/struct/values_at_spec.rb (+49/-6)
spec/ruby/core/symbol/casecmp_spec.rb (+8/-0)
spec/ruby/core/symbol/end_with_spec.rb (+2/-4)
spec/ruby/core/symbol/inspect_spec.rb (+2/-0)
spec/ruby/core/symbol/name_spec.rb (+11/-13)
spec/ruby/core/symbol/shared/id2name.rb (+7/-0)
spec/ruby/core/symbol/shared/slice.rb (+0/-20)
spec/ruby/core/symbol/start_with_spec.rb (+2/-4)
spec/ruby/core/symbol/to_proc_spec.rb (+36/-26)
spec/ruby/core/thread/backtrace/limit_spec.rb (+15/-0)
spec/ruby/core/thread/backtrace/location/absolute_path_spec.rb (+9/-0)
spec/ruby/core/thread/backtrace/location/fixtures/subdir/absolute_path_main_chdir.rb (+11/-0)
spec/ruby/core/thread/backtrace/location/fixtures/subdir/sibling.rb (+1/-0)
spec/ruby/core/thread/backtrace/location/path_spec.rb (+1/-1)
spec/ruby/core/thread/backtrace_locations_spec.rb (+4/-6)
spec/ruby/core/thread/each_caller_location_spec.rb (+49/-0)
spec/ruby/core/thread/ignore_deadlock_spec.rb (+19/-0)
spec/ruby/core/thread/kill_spec.rb (+0/-4)
spec/ruby/core/thread/native_thread_id_spec.rb (+37/-0)
spec/ruby/core/thread/raise_spec.rb (+24/-0)
spec/ruby/core/thread/report_on_exception_spec.rb (+49/-0)
spec/ruby/core/thread/shared/exit.rb (+40/-1)
spec/ruby/core/thread/shared/to_s.rb (+1/-3)
spec/ruby/core/time/at_spec.rb (+21/-0)
spec/ruby/core/time/ceil_spec.rb (+31/-33)
spec/ruby/core/time/deconstruct_keys_spec.rb (+44/-0)
spec/ruby/core/time/floor_spec.rb (+25/-27)
spec/ruby/core/time/inspect_spec.rb (+21/-23)
spec/ruby/core/time/localtime_spec.rb (+14/-2)
spec/ruby/core/time/new_spec.rb (+326/-15)
spec/ruby/core/time/now_spec.rb (+51/-0)
spec/ruby/core/time/shared/gmtime.rb (+2/-2)
spec/ruby/core/time/shared/local.rb (+4/-7)
spec/ruby/core/time/shared/time_params.rb (+8/-3)
spec/ruby/core/time/strftime_spec.rb (+41/-0)
spec/ruby/core/time/utc_spec.rb (+49/-2)
spec/ruby/core/time/zone_spec.rb (+28/-3)
spec/ruby/core/tracepoint/allow_reentry_spec.rb (+32/-0)
spec/ruby/core/tracepoint/enable_spec.rb (+41/-22)
spec/ruby/core/tracepoint/inspect_spec.rb (+12/-9)
spec/ruby/core/tracepoint/path_spec.rb (+23/-8)
spec/ruby/core/true/singleton_method_spec.rb (+15/-0)
spec/ruby/core/true/to_s_spec.rb (+5/-7)
spec/ruby/core/unboundmethod/bind_call_spec.rb (+44/-38)
spec/ruby/core/unboundmethod/bind_spec.rb (+8/-0)
spec/ruby/core/unboundmethod/equal_value_spec.rb (+66/-10)
spec/ruby/core/unboundmethod/fixtures/classes.rb (+20/-0)
spec/ruby/core/unboundmethod/hash_spec.rb (+7/-0)
spec/ruby/core/unboundmethod/owner_spec.rb (+7/-0)
spec/ruby/core/unboundmethod/private_spec.rb (+28/-0)
spec/ruby/core/unboundmethod/protected_spec.rb (+28/-0)
spec/ruby/core/unboundmethod/public_spec.rb (+28/-0)
spec/ruby/core/unboundmethod/shared/to_s.rb (+13/-3)
spec/ruby/core/unboundmethod/source_location_spec.rb (+8/-1)
spec/ruby/core/unboundmethod/super_method_spec.rb (+7/-6)
spec/ruby/core/warning/element_reference_spec.rb (+19/-8)
spec/ruby/core/warning/element_set_spec.rb (+31/-21)
spec/ruby/core/warning/warn_spec.rb (+73/-29)
spec/ruby/fixtures/class.rb (+4/-0)
spec/ruby/fixtures/code/c/load_fixture.rb (+1/-0)
spec/ruby/fixtures/code/concurrent_require_fixture.rb (+4/-0)
spec/ruby/fixtures/code/d/load_fixture.rb.rb (+1/-0)
spec/ruby/fixtures/code/load_wrap_fixture.rb (+3/-0)
spec/ruby/fixtures/constants.rb (+12/-1)
spec/ruby/language/END_spec.rb (+22/-4)
spec/ruby/language/alias_spec.rb (+32/-1)
spec/ruby/language/block_spec.rb (+166/-178)
spec/ruby/language/case_spec.rb (+72/-45)
spec/ruby/language/class_spec.rb (+17/-14)
spec/ruby/language/class_variable_spec.rb (+30/-0)
spec/ruby/language/comment_spec.rb (+7/-9)
spec/ruby/language/constants_spec.rb (+57/-29)
spec/ruby/language/def_spec.rb (+8/-25)
spec/ruby/language/defined_spec.rb (+40/-0)
spec/ruby/language/delegation_spec.rb (+47/-52)
spec/ruby/language/file_spec.rb (+11/-11)
spec/ruby/language/fixtures/defined.rb (+3/-0)
spec/ruby/language/fixtures/freeze_magic_comment_two_literals.rb (+1/-1)
spec/ruby/language/fixtures/super.rb (+14/-0)
spec/ruby/language/fixtures/variables.rb (+72/-0)
spec/ruby/language/hash_spec.rb (+40/-35)
spec/ruby/language/heredoc_spec.rb (+4/-14)
spec/ruby/language/if_spec.rb (+43/-0)
spec/ruby/language/keyword_arguments_spec.rb (+395/-0)
spec/ruby/language/lambda_spec.rb (+31/-101)
spec/ruby/language/method_spec.rb (+222/-773)
spec/ruby/language/module_spec.rb (+16/-17)
spec/ruby/language/numbered_parameters_spec.rb (+73/-88)
spec/ruby/language/numbers_spec.rb (+1/-1)
spec/ruby/language/optional_assignments_spec.rb (+38/-0)
spec/ruby/language/pattern_matching_spec.rb (+1146/-1033)
spec/ruby/language/precedence_spec.rb (+38/-40)
spec/ruby/language/predefined_spec.rb (+277/-239)
spec/ruby/language/proc_spec.rb (+19/-16)
spec/ruby/language/range_spec.rb (+11/-11)
spec/ruby/language/regexp/character_classes_spec.rb (+7/-4)
spec/ruby/language/regexp/encoding_spec.rb (+17/-0)
spec/ruby/language/regexp/escapes_spec.rb (+78/-6)
spec/ruby/language/regexp/repetition_spec.rb (+2/-6)
spec/ruby/language/regexp_spec.rb (+3/-26)
spec/ruby/language/rescue_spec.rb (+16/-6)
spec/ruby/language/return_spec.rb (+31/-30)
spec/ruby/language/safe_spec.rb (+6/-104)
spec/ruby/language/send_spec.rb (+13/-41)
spec/ruby/language/singleton_class_spec.rb (+17/-0)
spec/ruby/language/source_encoding_spec.rb (+1/-1)
spec/ruby/language/string_spec.rb (+6/-40)
spec/ruby/language/super_spec.rb (+23/-0)
spec/ruby/language/symbol_spec.rb (+2/-2)
spec/ruby/language/undef_spec.rb (+8/-1)
spec/ruby/language/variables_spec.rb (+125/-10)
spec/ruby/language/yield_spec.rb (+13/-20)
spec/ruby/library/bigdecimal/add_spec.rb (+2/-2)
spec/ruby/library/bigdecimal/exponent_spec.rb (+0/-11)
spec/ruby/library/bigdecimal/remainder_spec.rb (+15/-13)
spec/ruby/library/bigdecimal/round_spec.rb (+10/-2)
spec/ruby/library/bigdecimal/shared/to_int.rb (+1/-1)
spec/ruby/library/bigdecimal/to_r_spec.rb (+12/-0)
spec/ruby/library/bigdecimal/to_s_spec.rb (+15/-12)
spec/ruby/library/cgi/cookie/name_spec.rb (+6/-6)
spec/ruby/library/cgi/cookie/parse_spec.rb (+5/-5)
spec/ruby/library/cgi/escapeURIComponent_spec.rb (+57/-0)
spec/ruby/library/cgi/initialize_spec.rb (+1/-1)
spec/ruby/library/coverage/result_spec.rb (+63/-14)
spec/ruby/library/coverage/running_spec.rb (+20/-0)
spec/ruby/library/coverage/start_spec.rb (+7/-1)
spec/ruby/library/coverage/supported_spec.rb (+32/-0)
spec/ruby/library/date/civil_spec.rb (+1/-6)
spec/ruby/library/date/deconstruct_keys_spec.rb (+44/-0)
spec/ruby/library/date/iso8601_spec.rb (+0/-9)
spec/ruby/library/date/new_spec.rb (+0/-1)
spec/ruby/library/date/parse_spec.rb (+6/-6)
spec/ruby/library/date/shared/valid_jd.rb (+4/-16)
spec/ruby/library/date/strftime_spec.rb (+4/-2)
spec/ruby/library/datetime/deconstruct_keys_spec.rb (+46/-0)
spec/ruby/library/datetime/rfc2822_spec.rb (+4/-0)
spec/ruby/library/datetime/strftime_spec.rb (+3/-2)
spec/ruby/library/datetime/to_time_spec.rb (+16/-2)
spec/ruby/library/delegate/delegate_class/respond_to_missing_spec.rb (+1/-0)
spec/ruby/library/delegate/delegator/taint_spec.rb (+0/-17)
spec/ruby/library/delegate/delegator/trust_spec.rb (+0/-16)
spec/ruby/library/delegate/delegator/untaint_spec.rb (+0/-18)
spec/ruby/library/delegate/delegator/untrust_spec.rb (+0/-17)
spec/ruby/library/erb/new_spec.rb (+16/-0)
spec/ruby/library/etc/confstr_spec.rb (+1/-1)
spec/ruby/library/etc/passwd_spec.rb (+1/-1)
spec/ruby/library/etc/sysconf_spec.rb (+1/-1)
spec/ruby/library/etc/sysconfdir_spec.rb (+1/-1)
spec/ruby/library/etc/systmpdir_spec.rb (+1/-1)
spec/ruby/library/expect/expect_spec.rb (+2/-1)
spec/ruby/library/fiber/current_spec.rb (+8/-13)
spec/ruby/library/fiber/resume_spec.rb (+9/-14)
spec/ruby/library/fiber/transfer_spec.rb (+7/-49)
spec/ruby/library/fiddle/handle/initialize_spec.rb (+10/-0)
spec/ruby/library/io-wait/fixtures/classes.rb (+12/-0)
spec/ruby/library/io-wait/wait_readable_spec.rb (+27/-0)
spec/ruby/library/io-wait/wait_spec.rb (+144/-0)
spec/ruby/library/io-wait/wait_writable_spec.rb (+20/-0)
spec/ruby/library/ipaddr/new_spec.rb (+8/-2)
spec/ruby/library/logger/device/close_spec.rb (+3/-12)
spec/ruby/library/logger/device/write_spec.rb (+3/-12)
spec/ruby/library/matrix/multiply_spec.rb (+2/-2)
spec/ruby/library/matrix/unitary_spec.rb (+2/-4)
spec/ruby/library/monitor/exit_spec.rb (+10/-0)
spec/ruby/library/net/ftp/shared/getbinaryfile.rb (+2/-2)
spec/ruby/library/net/ftp/shared/gettextfile.rb (+1/-1)
spec/ruby/library/net/ftp/shared/putbinaryfile.rb (+2/-2)
spec/ruby/library/net/ftp/shared/puttextfile.rb (+1/-1)
spec/ruby/library/net/ftp/storbinary_spec.rb (+1/-1)
spec/ruby/library/net/ftp/storlines_spec.rb (+1/-1)
spec/ruby/library/net/http/http/get_spec.rb (+7/-9)
spec/ruby/library/objectspace/dump_all_spec.rb (+112/-0)
spec/ruby/library/objectspace/dump_spec.rb (+70/-0)
spec/ruby/library/objectspace/fixtures/trace.rb (+5/-0)
spec/ruby/library/objectspace/trace_object_allocations_spec.rb (+18/-0)
spec/ruby/library/objectspace/trace_spec.rb (+15/-0)
spec/ruby/library/openssl/digest/append_spec.rb (+6/-0)
spec/ruby/library/openssl/digest/block_length_spec.rb (+44/-0)
spec/ruby/library/openssl/digest/digest_length_spec.rb (+44/-0)
spec/ruby/library/openssl/digest/digest_spec.rb (+6/-7)
spec/ruby/library/openssl/digest/initialize_spec.rb (+141/-0)
spec/ruby/library/openssl/digest/name_spec.rb (+16/-0)
spec/ruby/library/openssl/digest/reset_spec.rb (+36/-0)
spec/ruby/library/openssl/digest/shared/update.rb (+123/-0)
spec/ruby/library/openssl/digest/update_spec.rb (+6/-0)
spec/ruby/library/openssl/kdf/pbkdf2_hmac_spec.rb (+184/-0)
spec/ruby/library/openssl/kdf/scrypt_spec.rb (+207/-0)
spec/ruby/library/openssl/random/shared/random_bytes.rb (+1/-1)
spec/ruby/library/openssl/x509/name/verify_spec.rb (+78/-0)
spec/ruby/library/openstruct/method_missing_spec.rb (+3/-5)
spec/ruby/library/pathname/birthtime_spec.rb (+16/-0)
spec/ruby/library/pathname/glob_spec.rb (+40/-13)
spec/ruby/library/pathname/new_spec.rb (+0/-7)
spec/ruby/library/pathname/pathname_spec.rb (+4/-15)
spec/ruby/library/pathname/relative_path_from_spec.rb (+4/-0)
spec/ruby/library/pp/pp_spec.rb (+7/-0)
spec/ruby/library/rbconfig/unicode_emoji_version_spec.rb (+10/-15)
spec/ruby/library/rbconfig/unicode_version_spec.rb (+10/-15)
spec/ruby/library/readline/history/delete_at_spec.rb (+0/-9)
spec/ruby/library/readline/history/each_spec.rb (+0/-8)
spec/ruby/library/readline/history/element_reference_spec.rb (+0/-7)
spec/ruby/library/readline/history/pop_spec.rb (+0/-9)
spec/ruby/library/readline/history/shift_spec.rb (+0/-9)
spec/ruby/library/readline/readline_spec.rb (+0/-7)
spec/ruby/library/rubygems/gem/load_path_insert_index_spec.rb (+1/-1)
spec/ruby/library/set/comparison_spec.rb (+27/-29)
spec/ruby/library/set/divide_spec.rb (+30/-5)
spec/ruby/library/set/each_spec.rb (+1/-0)
spec/ruby/library/set/enumerable/to_set_spec.rb (+0/-8)
spec/ruby/library/set/initialize_clone_spec.rb (+10/-12)
spec/ruby/library/set/join_spec.rb (+20/-22)
spec/ruby/library/set/shared/inspect.rb (+15/-5)
spec/ruby/library/set/sortedset/sortedset_spec.rb (+7/-17)
spec/ruby/library/set/to_s_spec.rb (+1/-0)
spec/ruby/library/socket/addrinfo/initialize_spec.rb (+1/-1)
spec/ruby/library/socket/addrinfo/shared/to_sockaddr.rb (+1/-3)
spec/ruby/library/socket/basicsocket/recv_spec.rb (+19/-0)
spec/ruby/library/socket/basicsocket/send_spec.rb (+2/-2)
spec/ruby/library/socket/basicsocket/shutdown_spec.rb (+10/-10)
spec/ruby/library/socket/fixtures/classes.rb (+4/-2)
spec/ruby/library/socket/ipsocket/getaddress_spec.rb (+1/-1)
spec/ruby/library/socket/shared/pack_sockaddr.rb (+7/-0)
spec/ruby/library/socket/shared/partially_closable_sockets.rb (+1/-1)
spec/ruby/library/socket/socket/bind_spec.rb (+4/-0)
spec/ruby/library/socket/tcpserver/new_spec.rb (+6/-0)
spec/ruby/library/socket/tcpsocket/initialize_spec.rb (+21/-0)
spec/ruby/library/socket/tcpsocket/open_spec.rb (+1/-0)
spec/ruby/library/socket/tcpsocket/partially_closable_spec.rb (+1/-1)
spec/ruby/library/socket/tcpsocket/shared/new.rb (+18/-6)
spec/ruby/library/socket/udpsocket/new_spec.rb (+6/-0)
spec/ruby/library/socket/unixserver/accept_nonblock_spec.rb (+2/-5)
spec/ruby/library/socket/unixserver/accept_spec.rb (+1/-1)
spec/ruby/library/socket/unixserver/for_fd_spec.rb (+1/-1)
spec/ruby/library/socket/unixserver/new_spec.rb (+10/-2)
spec/ruby/library/socket/unixserver/open_spec.rb (+3/-3)
spec/ruby/library/socket/unixserver/shared/new.rb (+12/-14)
spec/ruby/library/socket/unixsocket/addr_spec.rb (+2/-3)
spec/ruby/library/socket/unixsocket/inspect_spec.rb (+2/-2)
spec/ruby/library/socket/unixsocket/local_address_spec.rb (+0/-2)
spec/ruby/library/socket/unixsocket/new_spec.rb (+10/-2)
spec/ruby/library/socket/unixsocket/open_spec.rb (+5/-5)
spec/ruby/library/socket/unixsocket/pair_spec.rb (+3/-4)
spec/ruby/library/socket/unixsocket/partially_closable_spec.rb (+2/-4)
spec/ruby/library/socket/unixsocket/path_spec.rb (+2/-4)
spec/ruby/library/socket/unixsocket/peeraddr_spec.rb (+2/-4)
spec/ruby/library/socket/unixsocket/recv_io_spec.rb (+2/-5)
spec/ruby/library/socket/unixsocket/recvfrom_spec.rb (+2/-5)
spec/ruby/library/socket/unixsocket/send_io_spec.rb (+2/-5)
spec/ruby/library/socket/unixsocket/shared/new.rb (+13/-15)
spec/ruby/library/stringio/append_spec.rb (+0/-14)
spec/ruby/library/stringio/each_line_spec.rb (+4/-0)
spec/ruby/library/stringio/each_spec.rb (+8/-0)
spec/ruby/library/stringio/gets_spec.rb (+4/-0)
spec/ruby/library/stringio/initialize_spec.rb (+89/-9)
spec/ruby/library/stringio/new_spec.rb (+10/-0)
spec/ruby/library/stringio/open_spec.rb (+10/-2)
spec/ruby/library/stringio/printf_spec.rb (+24/-3)
spec/ruby/library/stringio/putc_spec.rb (+15/-0)
spec/ruby/library/stringio/puts_spec.rb (+14/-0)
spec/ruby/library/stringio/read_nonblock_spec.rb (+11/-0)
spec/ruby/library/stringio/readline_spec.rb (+20/-0)
spec/ruby/library/stringio/readlines_spec.rb (+18/-0)
spec/ruby/library/stringio/reopen_spec.rb (+0/-47)
spec/ruby/library/stringio/set_encoding_spec.rb (+8/-0)
spec/ruby/library/stringio/shared/each.rb (+53/-5)
spec/ruby/library/stringio/shared/read.rb (+6/-0)
spec/ruby/library/stringio/shared/sysread.rb (+1/-1)
spec/ruby/library/stringio/shared/write.rb (+56/-12)
spec/ruby/library/stringio/truncate_spec.rb (+2/-10)
spec/ruby/library/stringio/ungetbyte_spec.rb (+1/-1)
spec/ruby/library/stringio/write_nonblock_spec.rb (+6/-0)
spec/ruby/library/stringscanner/check_spec.rb (+6/-8)
spec/ruby/library/stringscanner/check_until_spec.rb (+6/-0)
spec/ruby/library/stringscanner/exist_spec.rb (+6/-0)
spec/ruby/library/stringscanner/matched_size_spec.rb (+19/-2)
spec/ruby/library/stringscanner/scan_spec.rb (+17/-27)
spec/ruby/library/stringscanner/scan_until_spec.rb (+6/-0)
spec/ruby/library/stringscanner/search_full_spec.rb (+6/-0)
spec/ruby/library/stringscanner/shared/extract_range.rb (+0/-13)
spec/ruby/library/stringscanner/shared/extract_range_matched.rb (+0/-11)
spec/ruby/library/stringscanner/shared/peek.rb (+0/-10)
spec/ruby/library/stringscanner/size_spec.rb (+17/-0)
spec/ruby/library/stringscanner/skip_until_spec.rb (+6/-0)
spec/ruby/library/time/to_datetime_spec.rb (+17/-2)
spec/ruby/library/uri/generic/host_spec.rb (+6/-1)
spec/ruby/library/uri/generic/to_s_spec.rb (+6/-1)
spec/ruby/library/win32ole/win32ole/_getproperty_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole/_invoke_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole/codepage_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole/connect_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole/const_load_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole/constants_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole/create_guid_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole/invoke_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole/locale_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole/new_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole/ole_func_methods_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole/ole_get_methods_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole/ole_method_help_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole/ole_method_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole/ole_methods_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole/ole_obj_help_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole/ole_put_methods_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole/setproperty_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_event/new_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_event/on_event_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_method/dispid_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_method/event_interface_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_method/event_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_method/helpcontext_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_method/helpfile_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_method/helpstring_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_method/invkind_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_method/invoke_kind_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_method/name_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_method/new_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_method/offset_vtbl_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_method/params_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_method/return_type_detail_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_method/return_type_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_method/return_vtype_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_method/size_opt_params_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_method/size_params_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_method/to_s_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_method/visible_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_param/default_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_param/input_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_param/name_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_param/ole_type_detail_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_param/ole_type_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_param/optional_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_param/retval_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_param/to_s_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_type/guid_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_type/helpcontext_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_type/helpfile_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_type/helpstring_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_type/major_version_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_type/minor_version_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_type/name_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_type/new_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_type/ole_classes_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_type/ole_methods_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_type/ole_type_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_type/progid_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_type/progids_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_type/src_type_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_type/to_s_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_type/typekind_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_type/typelibs_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_type/variables_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_type/visible_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_variable/name_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_variable/ole_type_detail_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_variable/ole_type_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_variable/to_s_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_variable/value_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_variable/variable_kind_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_variable/varkind_spec.rb (+1/-0)
spec/ruby/library/win32ole/win32ole_variable/visible_spec.rb (+1/-0)
spec/ruby/library/yaml/fixtures/common.rb (+1/-1)
spec/ruby/library/yaml/to_yaml_spec.rb (+2/-10)
spec/ruby/library/zlib/crc_table_spec.rb (+74/-69)
spec/ruby/library/zlib/deflate/deflate_spec.rb (+5/-0)
spec/ruby/library/zlib/gzipreader/each_line_spec.rb (+1/-0)
spec/ruby/library/zlib/gzipreader/each_spec.rb (+1/-0)
spec/ruby/library/zlib/gzipreader/mtime_spec.rb (+11/-0)
spec/ruby/library/zlib/inflate/finish_spec.rb (+1/-0)
spec/ruby/library/zlib/inflate/inflate_spec.rb (+7/-0)
spec/ruby/optional/capi/binding_spec.rb (+15/-6)
spec/ruby/optional/capi/class_spec.rb (+55/-13)
spec/ruby/optional/capi/encoding_spec.rb (+91/-12)
spec/ruby/optional/capi/exception_spec.rb (+34/-0)
spec/ruby/optional/capi/ext/class_spec.c (+15/-30)
spec/ruby/optional/capi/ext/debug_spec.c (+1/-1)
spec/ruby/optional/capi/ext/encoding_spec.c (+36/-20)
spec/ruby/optional/capi/ext/exception_spec.c (+18/-1)
spec/ruby/optional/capi/ext/gc_spec.c (+34/-3)
spec/ruby/optional/capi/ext/globals_spec.c (+34/-0)
spec/ruby/optional/capi/ext/hash_spec.c (+9/-0)
spec/ruby/optional/capi/ext/integer_spec.c (+2/-3)
spec/ruby/optional/capi/ext/io_spec.c (+113/-3)
spec/ruby/optional/capi/ext/kernel_spec.c (+40/-11)
spec/ruby/optional/capi/ext/module_spec.c (+23/-33)
spec/ruby/optional/capi/ext/object_spec.c (+47/-18)
spec/ruby/optional/capi/ext/proc_spec.c (+74/-0)
spec/ruby/optional/capi/ext/range_spec.c (+1/-1)
spec/ruby/optional/capi/ext/regexp_spec.c (+7/-0)
spec/ruby/optional/capi/ext/rubyspec.h (+9/-30)
spec/ruby/optional/capi/ext/string_spec.c (+34/-9)
spec/ruby/optional/capi/ext/struct_spec.c (+4/-9)
spec/ruby/optional/capi/ext/symbol_spec.c (+11/-0)
spec/ruby/optional/capi/ext/thread_spec.c (+42/-1)
spec/ruby/optional/capi/ext/tracepoint_spec.c (+1/-1)
spec/ruby/optional/capi/ext/util_spec.c (+12/-9)
spec/ruby/optional/capi/fixtures/class.rb (+13/-0)
spec/ruby/optional/capi/fixtures/kernel.rb (+19/-0)
spec/ruby/optional/capi/fixtures/object.rb (+29/-0)
spec/ruby/optional/capi/gc_spec.rb (+24/-6)
spec/ruby/optional/capi/globals_spec.rb (+52/-2)
spec/ruby/optional/capi/hash_spec.rb (+16/-0)
spec/ruby/optional/capi/io_spec.rb (+112/-1)
spec/ruby/optional/capi/kernel_spec.rb (+151/-16)
spec/ruby/optional/capi/module_spec.rb (+19/-11)
spec/ruby/optional/capi/object_spec.rb (+71/-78)
spec/ruby/optional/capi/proc_spec.rb (+80/-28)
spec/ruby/optional/capi/rbasic_spec.rb (+0/-1)
spec/ruby/optional/capi/regexp_spec.rb (+16/-0)
spec/ruby/optional/capi/shared/rbasic.rb (+1/-35)
spec/ruby/optional/capi/spec_helper.rb (+6/-2)
spec/ruby/optional/capi/string_spec.rb (+81/-63)
spec/ruby/optional/capi/symbol_spec.rb (+8/-0)
spec/ruby/optional/capi/thread_spec.rb (+23/-15)
spec/ruby/optional/capi/time_spec.rb (+5/-0)
spec/ruby/optional/capi/util_spec.rb (+37/-68)
spec/ruby/security/cve_2018_16396_spec.rb (+0/-14)
spec/ruby/security/cve_2019_8323_spec.rb (+26/-28)
spec/ruby/security/cve_2019_8325_spec.rb (+35/-27)
spec/ruby/security/cve_2020_10663_spec.rb (+11/-14)
spec/ruby/shared/file/executable.rb (+35/-0)
spec/ruby/shared/file/executable_real.rb (+35/-0)
spec/ruby/shared/file/exist.rb (+0/-5)
spec/ruby/shared/file/readable.rb (+16/-0)
spec/ruby/shared/file/readable_real.rb (+16/-0)
spec/ruby/shared/file/writable.rb (+16/-0)
spec/ruby/shared/file/writable_real.rb (+16/-0)
spec/ruby/shared/kernel/at_exit.rb (+67/-0)
spec/ruby/shared/kernel/complex.rb (+133/-0)
spec/ruby/shared/kernel/fixtures/END.rb (+3/-0)
spec/ruby/shared/kernel/fixtures/at_exit.rb (+3/-0)
spec/ruby/shared/kernel/raise.rb (+32/-2)
spec/ruby/shared/process/exit.rb (+12/-0)
spec/ruby/shared/queue/deque.rb (+85/-0)
spec/ruby/shared/rational/Rational.rb (+33/-24)
spec/ruby/shared/rational/divmod.rb (+3/-3)
spec/ruby/shared/rational/exponent.rb (+4/-4)
spec/ruby/shared/rational/to_f.rb (+6/-0)
spec/ruby/shared/rational/truncate.rb (+26/-0)
spec/ruby/shared/sizedqueue/enque.rb (+86/-1)
spec/ruby/shared/sizedqueue/new.rb (+7/-2)
spec/ruby/shared/string/end_with.rb (+8/-1)
spec/ruby/shared/string/start_with.rb (+12/-0)
spec/ruby/shared/string/times.rb (+4/-26)
spec/ruby/shared/types/rb_num2dbl_fails.rb (+17/-0)
spec/ruby/spec_helper.rb (+9/-3)
spec/tags/ruby/command_line/dash_upper_u_tags.txt (+0/-2)
spec/tags/ruby/core/argf/gets_tags.txt (+1/-0)
spec/tags/ruby/core/argf/read_tags.txt (+1/-0)
spec/tags/ruby/core/array/collect_tags.txt (+2/-0)
spec/tags/ruby/core/array/filter_tags.txt (+1/-0)
spec/tags/ruby/core/array/initialize_tags.txt (+1/-0)
spec/tags/ruby/core/array/keep_if_tags.txt (+1/-0)
spec/tags/ruby/core/array/map_tags.txt (+2/-0)
spec/tags/ruby/core/array/pack/p_tags.txt (+0/-6)
spec/tags/ruby/core/array/reject_tags.txt (+1/-0)
spec/tags/ruby/core/array/select_tags.txt (+1/-0)
spec/tags/ruby/core/array/sort_by_tags.txt (+1/-0)
spec/tags/ruby/core/array/to_h_tags.txt (+1/-0)
spec/tags/ruby/core/array/zip_tags.txt (+1/-0)
spec/tags/ruby/core/basicobject/instance_eval_tags.txt (+3/-0)
spec/tags/ruby/core/dir/element_reference_tags.txt (+1/-4)
spec/tags/ruby/core/dir/glob_tags.txt (+5/-4)
spec/tags/ruby/core/enumerable/inject_tags.txt (+1/-0)
spec/tags/ruby/core/enumerable/reduce_tags.txt (+1/-0)
spec/tags/ruby/core/enumerator/generator/initialize_tags.txt (+1/-0)
spec/tags/ruby/core/enumerator/inspect_tags.txt (+1/-0)
spec/tags/ruby/core/enumerator/lazy/with_index_tags.txt (+1/-0)
spec/tags/ruby/core/env/delete_tags.txt (+1/-0)
spec/tags/ruby/core/env/has_key_tags.txt (+1/-0)
spec/tags/ruby/core/env/include_tags.txt (+1/-0)
spec/tags/ruby/core/env/key_tags.txt (+2/-0)
spec/tags/ruby/core/env/member_tags.txt (+1/-0)
spec/tags/ruby/core/exception/full_message_tags.txt (+1/-0)
spec/tags/ruby/core/exception/interrupt_tags.txt (+1/-0)
spec/tags/ruby/core/exception/no_method_error_tags.txt (+1/-0)
spec/tags/ruby/core/exception/top_level_tags.txt (+1/-0)
spec/tags/ruby/core/fiber/inspect_tags.txt (+6/-0)
spec/tags/ruby/core/fiber/raise_tags.txt (+3/-0)
spec/tags/ruby/core/file/new_tags.txt (+1/-0)
spec/tags/ruby/core/file/open_tags.txt (+1/-0)
spec/tags/ruby/core/file/printf_tags.txt (+3/-0)
spec/tags/ruby/core/file/utime_tags.txt (+1/-0)
spec/tags/ruby/core/gc/measure_total_time_tags.txt (+1/-0)
spec/tags/ruby/core/gc/stat_tags.txt (+0/-1)
spec/tags/ruby/core/gc/total_time_tags.txt (+2/-0)
spec/tags/ruby/core/integer/fdiv_tags.txt (+1/-0)
spec/tags/ruby/core/integer/left_shift_tags.txt (+1/-3)
spec/tags/ruby/core/integer/right_shift_tags.txt (+1/-0)
spec/tags/ruby/core/io/binwrite_tags.txt (+1/-0)
spec/tags/ruby/core/io/each_line_tags.txt (+1/-0)
spec/tags/ruby/core/io/each_tags.txt (+1/-0)
spec/tags/ruby/core/io/for_fd_tags.txt (+1/-0)
spec/tags/ruby/core/io/foreach_tags.txt (+3/-0)
spec/tags/ruby/core/io/gets_tags.txt (+2/-0)
spec/tags/ruby/core/io/initialize_tags.txt (+1/-0)
spec/tags/ruby/core/io/new_tags.txt (+1/-0)
spec/tags/ruby/core/io/nonblock_tags.txt (+2/-0)
spec/tags/ruby/core/io/open_tags.txt (+1/-0)
spec/tags/ruby/core/io/pipe_tags.txt (+1/-0)
spec/tags/ruby/core/io/pread_tags.txt (+2/-0)
spec/tags/ruby/core/io/pwrite_tags.txt (+2/-0)
spec/tags/ruby/core/io/read_tags.txt (+1/-0)
spec/tags/ruby/core/io/readline_tags.txt (+2/-0)
spec/tags/ruby/core/io/readlines_tags.txt (+5/-0)
spec/tags/ruby/core/io/set_encoding_by_bom_tags.txt (+1/-0)
spec/tags/ruby/core/io/set_encoding_tags.txt (+1/-0)
spec/tags/ruby/core/io/sysread_tags.txt (+2/-0)
spec/tags/ruby/core/io/write_tags.txt (+2/-0)
spec/tags/ruby/core/kernel/__dir___tags.txt (+1/-0)
spec/tags/ruby/core/kernel/at_exit_tags.txt (+1/-0)
spec/tags/ruby/core/kernel/lambda_tags.txt (+1/-0)
spec/tags/ruby/core/kernel/open_tags.txt (+2/-0)
spec/tags/ruby/core/kernel/printf_tags.txt (+6/-0)
spec/tags/ruby/core/kernel/remove_instance_variable_tags.txt (+2/-0)
spec/tags/ruby/core/kernel/require_tags.txt (+3/-0)
spec/tags/ruby/core/kernel/singleton_class_tags.txt (+2/-0)
spec/tags/ruby/core/kernel/sprintf_tags.txt (+8/-0)
spec/tags/ruby/core/main/using_tags.txt (+2/-0)
spec/tags/ruby/core/marshal/dump_tags.txt (+12/-0)
spec/tags/ruby/core/marshal/load_tags.txt (+12/-11)
spec/tags/ruby/core/marshal/restore_tags.txt (+12/-12)
spec/tags/ruby/core/matchdata/values_at_tags.txt (+1/-0)
spec/tags/ruby/core/module/autoload_tags.txt (+2/-0)
spec/tags/ruby/core/module/class_variables_tags.txt (+1/-0)
spec/tags/ruby/core/module/define_method_tags.txt (+5/-0)
spec/tags/ruby/core/module/instance_method_tags.txt (+1/-0)
spec/tags/ruby/core/module/method_added_tags.txt (+1/-0)
spec/tags/ruby/core/module/prepend_tags.txt (+1/-0)
spec/tags/ruby/core/module/refine_tags.txt (+5/-0)
spec/tags/ruby/core/module/ruby2_keywords_tags.txt (+2/-0)
spec/tags/ruby/core/objectspace/define_finalizer_tags.txt (+1/-0)
spec/tags/ruby/core/process/argv0_tags.txt (+5/-0)
spec/tags/ruby/core/process/clock_gettime_tags.txt (+5/-0)
spec/tags/ruby/core/process/detach_tags.txt (+1/-0)
spec/tags/ruby/core/process/status/wait_tags.txt (+1/-0)
spec/tags/ruby/core/process/times_tags.txt (+1/-0)
spec/tags/ruby/core/queue/initialize_tags.txt (+1/-0)
spec/tags/ruby/core/refinement/import_methods_tags.txt (+5/-0)
spec/tags/ruby/core/refinement/include_tags.txt (+1/-0)
spec/tags/ruby/core/refinement/prepend_tags.txt (+1/-0)
spec/tags/ruby/core/signal/trap_tags.txt (+3/-8)
spec/tags/ruby/core/string/index_tags.txt (+1/-0)
spec/tags/ruby/core/string/intern_tags.txt (+2/-0)
spec/tags/ruby/core/string/modulo_tags.txt (+4/-0)
spec/tags/ruby/core/string/slice_tags.txt (+0/-3)
spec/tags/ruby/core/string/start_with_tags.txt (+2/-0)
spec/tags/ruby/core/string/to_c_tags.txt (+2/-0)
spec/tags/ruby/core/string/to_sym_tags.txt (+2/-0)
spec/tags/ruby/core/string/tr_s_tags.txt (+1/-0)
spec/tags/ruby/core/string/tr_tags.txt (+1/-0)
spec/tags/ruby/core/string/uminus_tags.txt (+1/-0)
spec/tags/ruby/core/string/unpack/b_tags.txt (+1/-0)
spec/tags/ruby/core/string/unpack/m_tags.txt (+1/-0)
spec/tags/ruby/core/string/unpack/p_tags.txt (+0/-2)
spec/tags/ruby/core/struct/keyword_init_tags.txt (+1/-0)
spec/tags/ruby/core/symbol/end_with_tags.txt (+1/-0)
spec/tags/ruby/core/symbol/start_with_tags.txt (+1/-0)
spec/tags/ruby/core/symbol/to_proc_tags.txt (+1/-0)
spec/tags/ruby/core/thread/backtrace/location/absolute_path_tags.txt (+1/-1)
spec/tags/ruby/core/thread/native_thread_id_tags.txt (+1/-0)
spec/tags/ruby/core/thread/report_on_exception_tags.txt (+2/-0)
spec/tags/ruby/core/thread/terminate_tags.txt (+1/-0)
spec/tags/ruby/core/thread/to_s_tags.txt (+0/-11)
spec/tags/ruby/core/time/at_tags.txt (+1/-0)
spec/tags/ruby/core/time/gm_tags.txt (+2/-0)
spec/tags/ruby/core/time/local_tags.txt (+2/-0)
spec/tags/ruby/core/time/localtime_tags.txt (+1/-0)
spec/tags/ruby/core/time/mktime_tags.txt (+2/-0)
spec/tags/ruby/core/time/new_tags.txt (+5/-0)
spec/tags/ruby/core/time/now_tags.txt (+1/-0)
spec/tags/ruby/core/time/strftime_tags.txt (+4/-0)
spec/tags/ruby/core/time/utc_tags.txt (+5/-0)
spec/tags/ruby/core/time/zone_tags.txt (+1/-0)
spec/tags/ruby/core/tracepoint/allow_reentry_tags.txt (+2/-0)
spec/tags/ruby/core/unboundmethod/equal_value_tags.txt (+3/-0)
spec/tags/ruby/core/warning/element_set_tags.txt (+1/-0)
spec/tags/ruby/core/warning/warn_tags.txt (+2/-0)
spec/tags/ruby/language/END_tags.txt (+1/-1)
spec/tags/ruby/language/block_tags.txt (+2/-0)
spec/tags/ruby/language/class_variable_spec.txt (+1/-0)
spec/tags/ruby/language/class_variable_tags.txt (+1/-0)
spec/tags/ruby/language/def_tags.txt (+0/-2)
spec/tags/ruby/language/defined_tags.txt (+1/-0)
spec/tags/ruby/language/hash_tags.txt (+1/-2)
spec/tags/ruby/language/heredoc_tags.txt (+1/-0)
spec/tags/ruby/language/if_tags.txt (+1/-0)
spec/tags/ruby/language/keyword_arguments_tags.txt (+2/-0)
spec/tags/ruby/language/magic_comment_tags.txt (+0/-1)
spec/tags/ruby/language/method_tags.txt (+1/-0)
spec/tags/ruby/language/predefined_tags.txt (+4/-0)
spec/tags/ruby/language/range_tags.txt (+1/-0)
spec/tags/ruby/language/return_tags.txt (+1/-0)
spec/tags/ruby/language/singleton_class_tags.txt (+1/-0)
spec/tags/ruby/language/variables_tags.txt (+2/-0)
spec/tags/ruby/language/yield_tags.txt (+1/-0)
spec/tags/ruby/library/bigdecimal/BigDecimal_tags.txt (+0/-1)
spec/tags/ruby/library/datetime/to_time_tags.txt (+1/-0)
spec/tags/ruby/library/etc/getlogin_tags.txt (+1/-1)
spec/tags/ruby/library/fiber/current_tags.txt (+2/-0)
spec/tags/ruby/library/fiber/resume_tags.txt (+1/-0)
spec/tags/ruby/library/fiber/transfer_tags.txt (+2/-0)
spec/tags/ruby/library/fiddle/handle/initialize_tags.txt (+1/-0)
spec/tags/ruby/library/io-wait/wait_readable_tags.txt (+3/-0)
spec/tags/ruby/library/io-wait/wait_tags.txt (+11/-0)
spec/tags/ruby/library/logger/logger/new_tags.txt (+1/-1)
spec/tags/ruby/library/objectspace/dump_all_tags.txt (+7/-0)
spec/tags/ruby/library/objectspace/dump_tags.txt (+8/-0)
spec/tags/ruby/library/objectspace/trace_object_allocations_tags.txt (+1/-0)
spec/tags/ruby/library/objectspace/trace_tags.txt (+1/-0)
spec/tags/ruby/library/openssl/digest/append_tags.txt (+8/-0)
spec/tags/ruby/library/openssl/digest/initialize_tags.txt (+13/-0)
spec/tags/ruby/library/openssl/digest/name_tags.txt (+1/-0)
spec/tags/ruby/library/openssl/digest/update_tags.txt (+8/-0)
spec/tags/ruby/library/openssl/kdf/pbkdf2_hmac_tags.txt (+9/-0)
spec/tags/ruby/library/openssl/kdf/scrypt_tags.txt (+29/-0)
spec/tags/ruby/library/readline/readline_tags.txt (+0/-1)
spec/tags/ruby/library/set/divide_tags.txt (+1/-0)
spec/tags/ruby/library/set/sortedset/sortedset_tags.txt (+1/-0)
spec/tags/ruby/library/socket/addrinfo/initialize_tags.txt (+1/-0)
spec/tags/ruby/library/socket/socket/getservbyname_tags.txt (+1/-0)
spec/tags/ruby/library/socket/socket/pack_sockaddr_in_tags.txt (+1/-0)
spec/tags/ruby/library/socket/socket/sockaddr_in_tags.txt (+1/-0)
spec/tags/ruby/library/socket/tcpserver/initialize_tags.txt (+1/-0)
spec/tags/ruby/library/socket/udpsocket/send_tags.txt (+1/-0)
spec/tags/ruby/library/socket/unixserver/accept_nonblock_tags.txt (+2/-2)
spec/tags/ruby/library/stringio/each_line_tags.txt (+2/-0)
spec/tags/ruby/library/stringio/each_tags.txt (+1/-0)
spec/tags/ruby/library/stringio/initialize_tags.txt (+4/-0)
spec/tags/ruby/library/stringio/printf_tags.txt (+3/-0)
spec/tags/ruby/library/stringscanner/scan_tags.txt (+1/-0)
spec/tags/ruby/library/syslog/log_tags.txt (+0/-4)
spec/tags/ruby/library/time/to_datetime_tags.txt (+1/-0)
spec/tags/ruby/library/zlib/deflate/deflate_tags.txt (+1/-0)
spec/tags/ruby/library/zlib/inflate/inflate_tags.txt (+1/-0)
test/check_versions.sh (+4/-4)
test/jruby/compiler/test_jrubyc.rb (+30/-0)
test/jruby/test_array.rb (+6/-27)
test/jruby/test_command_line_switches.rb (+12/-21)
test/jruby/test_comparable.rb (+2/-2)
test/jruby/test_date.rb (+8/-8)
test/jruby/test_dir.rb (+0/-5)
test/jruby/test_dup_clone_freeze.rb (+41/-0)
test/jruby/test_file.rb (+9/-12)
test/jruby/test_higher_javasupport.rb (+21/-27)
test/jruby/test_kernel.rb (+24/-0)
test/jruby/test_load.rb (+1/-13)
test/jruby/test_marshal_gemspec.rb (+1/-1)
test/jruby/test_method.rb (+1/-16)
test/jruby/test_method_cache.rb (+4/-4)
test/jruby/test_pack.rb (+0/-10)
test/jruby/test_pathname.rb (+0/-38)
test/jruby/test_set.rb (+1/-66)
test/jruby/test_socket.rb (+7/-0)
test/jruby/test_tempfile_cleanup.rb (+3/-2)
test/jruby/test_thread.rb (+14/-27)
test/jruby/test_time.rb (+2/-4)
test/mri.core.index (+47/-19)
test/mri.extra.index (+9/-3)
test/mri.stdlib.index (+80/-214)
test/mri/-ext-/array/test_resize.rb (+6/-0)
test/mri/-ext-/array/test_to_ary_concat.rb (+20/-0)
test/mri/-ext-/bignum/test_big2str.rb (+5/-5)
test/mri/-ext-/bignum/test_div.rb (+4/-4)
test/mri/-ext-/bignum/test_mul.rb (+26/-26)
test/mri/-ext-/bignum/test_pack.rb (+224/-224)
test/mri/-ext-/bignum/test_str2big.rb (+6/-6)
test/mri/-ext-/bug_reporter/test_bug_reporter.rb (+4/-1)
test/mri/-ext-/debug/test_debug.rb (+1/-1)
test/mri/-ext-/debug/test_profile_frames.rb (+11/-5)
test/mri/-ext-/float/test_nextafter.rb (+1/-1)
test/mri/-ext-/funcall/test_passing_block.rb (+39/-2)
test/mri/-ext-/gvl/test_last_thread.rb (+1/-1)
test/mri/-ext-/gvl/test_ubf_async_safe.rb (+20/-0)
test/mri/-ext-/integer/test_integer.rb (+5/-5)
test/mri/-ext-/iseq_load/test_iseq_load.rb (+4/-2)
test/mri/-ext-/iter/test_yield_block.rb (+1/-1)
test/mri/-ext-/marshal/test_internal_ivar.rb (+6/-2)
test/mri/-ext-/num2int/test_num2int.rb (+2/-2)
test/mri/-ext-/popen_deadlock/test_popen_deadlock.rb (+1/-1)
test/mri/-ext-/postponed_job/test_postponed_job.rb (+9/-2)
test/mri/-ext-/rational/test_rat.rb (+41/-3)
test/mri/-ext-/string/test_capacity.rb (+45/-7)
test/mri/-ext-/string/test_cstr.rb (+4/-4)
test/mri/-ext-/string/test_ellipsize.rb (+1/-1)
test/mri/-ext-/string/test_enc_str_buf_cat.rb (+9/-0)
test/mri/-ext-/string/test_fstring.rb (+20/-29)
test/mri/-ext-/string/test_interned_str.rb (+12/-0)
test/mri/-ext-/string/test_modify_expand.rb (+1/-2)
test/mri/-ext-/string/test_normalize.rb (+4/-4)
test/mri/-ext-/string/test_rb_str_dup.rb (+4/-2)
test/mri/-ext-/struct/test_duplicate.rb (+2/-2)
test/mri/-ext-/symbol/noninterned_name.rb (+2/-0)
test/mri/-ext-/symbol/test_inadvertent_creation.rb (+10/-11)
test/mri/-ext-/test_enumerator_kw.rb (+11/-0)
test/mri/-ext-/test_notimplement.rb (+7/-0)
test/mri/-ext-/test_printf.rb (+2/-11)
test/mri/-ext-/test_random.rb (+27/-0)
test/mri/-ext-/test_scan_args.rb (+50/-22)
test/mri/-ext-/thread_fd/test_thread_fd_close.rb (+25/-0)
test/mri/-ext-/tracepoint/test_tracepoint.rb (+16/-8)
test/mri/-ext-/wait/test_wait.rb (+36/-0)
test/mri/-ext-/win32/test_console_attr.rb (+7/-7)
test/mri/benchmark/test_benchmark.rb (+12/-7)
test/mri/bigdecimal/helper.rb (+39/-0)
test/mri/bigdecimal/test_bigdecimal.rb (+483/-66)
test/mri/bigdecimal/test_bigdecimal_util.rb (+56/-6)
test/mri/bigdecimal/test_bigmath.rb (+1/-1)
test/mri/bigdecimal/test_ractor.rb (+23/-0)
test/mri/cgi/test_cgi_core.rb (+4/-0)
test/mri/cgi/test_cgi_multipart.rb (+1/-2)
test/mri/cgi/test_cgi_util.rb (+72/-35)
test/mri/coverage/test_coverage.rb (+212/-0)
test/mri/csv/helper.rb (+25/-1)
test/mri/csv/interface/test_read.rb (+102/-8)
test/mri/csv/interface/test_read_write.rb (+75/-2)
test/mri/csv/interface/test_write.rb (+38/-4)
test/mri/csv/parse/test_convert.rb (+1/-1)
test/mri/csv/parse/test_general.rb (+18/-4)
test/mri/csv/parse/test_header.rb (+2/-2)
test/mri/csv/parse/test_invalid.rb (+16/-0)
test/mri/csv/parse/test_rewind.rb (+2/-2)
test/mri/csv/parse/test_skip_lines.rb (+13/-0)
test/mri/csv/parse/test_strip.rb (+64/-0)
test/mri/csv/test_encodings.rb (+35/-11)
test/mri/csv/test_features.rb (+18/-4)
test/mri/csv/test_row.rb (+3/-0)
test/mri/csv/test_table.rb (+2/-2)
test/mri/csv/write/test_converters.rb (+4/-4)
test/mri/csv/write/test_force_quotes.rb (+78/-0)
test/mri/csv/write/test_general.rb (+18/-0)
test/mri/date/test_date.rb (+25/-0)
test/mri/date/test_date_arith.rb (+4/-2)
test/mri/date/test_date_conv.rb (+18/-0)
test/mri/date/test_date_marshal.rb (+7/-0)
test/mri/date/test_date_new.rb (+66/-12)
test/mri/date/test_date_parse.rb (+115/-9)
test/mri/date/test_date_ractor.rb (+27/-0)
test/mri/date/test_date_strftime.rb (+13/-5)
test/mri/date/test_date_strptime.rb (+10/-9)
test/mri/date/test_switch_hitter.rb (+10/-31)
test/mri/dbm/test_dbm.rb (+0/-1)
test/mri/did_you_mean/core_ext/test_name_error_extension.rb (+49/-0)
test/mri/did_you_mean/edit_distance/test_jaro_winkler.rb (+36/-0)
test/mri/did_you_mean/fixtures/book.rb (+4/-0)
test/mri/did_you_mean/fixtures/mini_dir.yml (+15/-0)
test/mri/did_you_mean/fixtures/rspec_dir.yml (+112/-0)
test/mri/did_you_mean/helper.rb (+33/-0)
test/mri/did_you_mean/spell_checking/test_class_name_check.rb (+81/-0)
test/mri/did_you_mean/spell_checking/test_key_name_check.rb (+54/-0)
test/mri/did_you_mean/spell_checking/test_method_name_check.rb (+147/-0)
test/mri/did_you_mean/spell_checking/test_pattern_key_name_check.rb (+20/-0)
test/mri/did_you_mean/spell_checking/test_require_path_check.rb (+32/-0)
test/mri/did_you_mean/spell_checking/test_uncorrectable_name_check.rb (+15/-0)
test/mri/did_you_mean/spell_checking/test_variable_name_check.rb (+140/-0)
test/mri/did_you_mean/test_spell_checker.rb (+78/-0)
test/mri/did_you_mean/test_tree_spell_checker.rb (+170/-0)
test/mri/did_you_mean/test_verbose_formatter.rb (+23/-0)
test/mri/did_you_mean/tree_spell/change_word.rb (+61/-0)
test/mri/did_you_mean/tree_spell/human_typo.rb (+69/-0)
test/mri/did_you_mean/tree_spell/test_change_word.rb (+38/-0)
test/mri/did_you_mean/tree_spell/test_human_typo.rb (+24/-0)
test/mri/digest/test_digest.rb (+4/-4)
test/mri/digest/test_digest_extend.rb (+1/-1)
test/mri/digest/test_ractor.rb (+101/-0)
test/mri/drb/drbtest.rb (+24/-12)
test/mri/drb/test_drb.rb (+49/-9)
test/mri/drb/test_drbobject.rb (+69/-0)
test/mri/drb/test_drbssl.rb (+2/-3)
test/mri/drb/ut_drb.rb (+21/-0)
test/mri/dtrace/helper.rb (+15/-8)
test/mri/dtrace/test_function_entry.rb (+1/-1)
test/mri/dtrace/test_require.rb (+6/-0)
test/mri/dtrace/test_singleton_function.rb (+1/-1)
test/mri/erb/test_erb.rb (+21/-7)
test/mri/erb/test_erb_command.rb (+7/-7)
test/mri/error_highlight/test_error_highlight.rb (+1197/-0)
test/mri/etc/test_etc.rb (+26/-2)
test/mri/excludes/DRbTests/TestDRbMserver.rb (+1/-0)
test/mri/excludes/FTPTest.rb (+5/-0)
test/mri/excludes/HTTPResponseTest.rb (+2/-0)
test/mri/excludes/IMAPTest.rb (+17/-1)
test/mri/excludes/Net/TestSSLContext.rb (+9/-0)
test/mri/excludes/Net/TestStarttls.rb (+10/-0)
test/mri/excludes/OpenSSL/TestASN1.rb (+14/-0)
test/mri/excludes/OpenSSL/TestBN.rb (+12/-0)
test/mri/excludes/OpenSSL/TestCipher.rb (+4/-0)
test/mri/excludes/OpenSSL/TestConfig.rb (+4/-0)
test/mri/excludes/OpenSSL/TestDigest.rb (+2/-0)
test/mri/excludes/OpenSSL/TestEC.rb (+13/-0)
test/mri/excludes/OpenSSL/TestEOF1.rb (+1/-0)
test/mri/excludes/OpenSSL/TestEOF1LowlevelSocket.rb (+2/-1)
test/mri/excludes/OpenSSL/TestEOF2.rb (+1/-0)
test/mri/excludes/OpenSSL/TestEOF2LowlevelSocket.rb (+2/-1)
test/mri/excludes/OpenSSL/TestHMAC.rb (+2/-0)
test/mri/excludes/OpenSSL/TestNSSPI.rb (+2/-1)
test/mri/excludes/OpenSSL/TestOCSP.rb (+4/-1)
test/mri/excludes/OpenSSL/TestPKCS12.rb (+5/-1)
test/mri/excludes/OpenSSL/TestPKCS7.rb (+2/-0)
test/mri/excludes/OpenSSL/TestPKey.rb (+7/-0)
test/mri/excludes/OpenSSL/TestPKeyDH.rb (+5/-0)
test/mri/excludes/OpenSSL/TestPKeyDSA.rb (+2/-1)
test/mri/excludes/OpenSSL/TestPKeyRSA.rb (+12/-0)
test/mri/excludes/OpenSSL/TestPair.rb (+3/-0)
test/mri/excludes/OpenSSL/TestPairLowlevelSocket.rb (+5/-0)
test/mri/excludes/OpenSSL/TestSSL.rb (+34/-8)
test/mri/excludes/OpenSSL/TestSSLSession.rb (+3/-0)
test/mri/excludes/OpenSSL/TestX509Attribute.rb (+4/-0)
test/mri/excludes/OpenSSL/TestX509CRL.rb (+4/-0)
test/mri/excludes/OpenSSL/TestX509Certificate.rb (+9/-1)
test/mri/excludes/OpenSSL/TestX509Extension.rb (+1/-0)
test/mri/excludes/OpenSSL/TestX509Name.rb (+5/-0)
test/mri/excludes/OpenSSL/TestX509Request.rb (+4/-0)
test/mri/excludes/OpenSSL/TestX509Store.rb (+5/-0)
test/mri/excludes/Rational_Test.rb (+1/-7)
test/mri/excludes/Rinda/TestRingFinger.rb (+4/-0)
test/mri/excludes/Rinda/TestRingServer.rb (+6/-0)
test/mri/excludes/Rinda/TupleSpaceProxyTest.rb (+5/-0)
test/mri/excludes/TestArgf.rb (+4/-11)
test/mri/excludes/TestArithmeticSequence.rb (+1/-0)
test/mri/excludes/TestArray.rb (+1/-4)
test/mri/excludes/TestArraySubclass.rb (+11/-0)
test/mri/excludes/TestAutoload.rb (+2/-0)
test/mri/excludes/TestBigDecimal.rb (+3/-12)
test/mri/excludes/TestClass.rb (+1/-1)
test/mri/excludes/TestCoverage.rb (+16/-15)
test/mri/excludes/TestDefined.rb (+0/-4)
test/mri/excludes/TestEnumerable.rb (+0/-1)
test/mri/excludes/TestEnumerator.rb (+1/-0)
test/mri/excludes/TestException.rb (+0/-1)
test/mri/excludes/TestExtLibs.rb (+5/-0)
test/mri/excludes/TestFiber.rb (+2/-0)
test/mri/excludes/TestFiberMutex.rb (+1/-0)
test/mri/excludes/TestGc.rb (+6/-11)
test/mri/excludes/TestHash.rb (+9/-11)
test/mri/excludes/TestHash/TestSubHash.rb (+14/-9)
test/mri/excludes/TestIO.rb (+2/-0)
test/mri/excludes/TestIO_Console.rb (+5/-0)
test/mri/excludes/TestIO_M17N.rb (+4/-0)
test/mri/excludes/TestIRB/ExtendCommand.rb (+1/-0)
test/mri/excludes/TestIRB/TestColor.rb (+4/-0)
test/mri/excludes/TestIRB/TestColorPrinter.rb (+1/-0)
test/mri/excludes/TestIRB/TestCompletion.rb (+1/-0)
test/mri/excludes/TestIRB/TestContext.rb (+7/-0)
test/mri/excludes/TestIRB/TestRaiseNoBacktraceException.rb (+2/-0)
test/mri/excludes/TestIRB/TestRubyLex.rb (+4/-0)
test/mri/excludes/TestKeywordArguments.rb (+2/-0)
test/mri/excludes/TestLambdaParameters.rb (+2/-0)
test/mri/excludes/TestLazyEnumerator.rb (+1/-0)
test/mri/excludes/TestM17NComb.rb (+1/-0)
test/mri/excludes/TestMarshal.rb (+0/-2)
test/mri/excludes/TestMethod.rb (+1/-7)
test/mri/excludes/TestModule.rb (+2/-5)
test/mri/excludes/TestMonitor.rb (+1/-0)
test/mri/excludes/TestObjSpace.rb (+43/-0)
test/mri/excludes/TestOpenURISSL.rb (+2/-0)
test/mri/excludes/TestParse.rb (+6/-0)
test/mri/excludes/TestProc.rb (+1/-3)
test/mri/excludes/TestProcess.rb (+0/-1)
test/mri/excludes/TestRDocGeneratorJsonIndex.rb (+1/-0)
test/mri/excludes/TestRDocMarkupToHtml.rb (+1/-0)
test/mri/excludes/TestRDocOptions.rb (+3/-0)
test/mri/excludes/TestRDocParserRuby.rb (+1/-0)
test/mri/excludes/TestReadline.rb (+24/-5)
test/mri/excludes/TestRegexp.rb (+0/-1)
test/mri/excludes/TestRelineAsReadline.rb (+5/-0)
test/mri/excludes/TestResolvDNS.rb (+1/-0)
test/mri/excludes/TestRipper/Lexer.rb (+3/-0)
test/mri/excludes/TestRipper/ParserEvents.rb (+1/-0)
test/mri/excludes/TestRipper/Ripper.rb (+2/-0)
test/mri/excludes/TestRipper/Ripper/TestInput.rb (+2/-0)
test/mri/excludes/TestRipper/ScannerEvents.rb (+3/-3)
test/mri/excludes/TestRipper/Sexp.rb (+2/-0)
test/mri/excludes/TestSetTraceFunc.rb (+15/-0)
test/mri/excludes/TestSocketAddrinfo.rb (+1/-0)
test/mri/excludes/TestSocket_UNIXSocket.rb (+1/-0)
test/mri/excludes/TestSprintfComb.rb (+56/-2)
test/mri/excludes/TestString.rb (+2/-0)
test/mri/excludes/TestString2.rb (+2/-0)
test/mri/excludes/TestStringIO.rb (+1/-0)
test/mri/excludes/TestSubHash.rb (+2/-0)
test/mri/excludes/TestSuper.rb (+0/-1)
test/mri/excludes/TestSymbol.rb (+2/-0)
test/mri/excludes/TestSyntax.rb (+19/-1)
test/mri/excludes/TestThread.rb (+1/-0)
test/mri/excludes/TestTime.rb (+7/-1)
test/mri/excludes/TestTracer.rb (+4/-0)
test/mri/excludes/URI/TestCommon.rb (+1/-0)
test/mri/excludes_wip/CGIUtilTest.rb (+1/-0)
test/mri/excludes_wip/PPTestModule/PPSingleLineTest.rb (+1/-0)
test/mri/excludes_wip/Rational_Test.rb (+1/-0)
test/mri/excludes_wip/TC_Set.rb (+1/-0)
test/mri/excludes_wip/TC_SortedSet.rb (+1/-0)
test/mri/excludes_wip/TestArray.rb (+1/-0)
test/mri/excludes_wip/TestArraySubclass.rb (+1/-0)
test/mri/excludes_wip/TestAssignment.rb (+1/-0)
test/mri/excludes_wip/TestAutoload.rb (+3/-0)
test/mri/excludes_wip/TestBacktrace.rb (+7/-0)
test/mri/excludes_wip/TestClass.rb (+4/-0)
test/mri/excludes_wip/TestComparable.rb (+1/-0)
test/mri/excludes_wip/TestDateConv.rb (+1/-0)
test/mri/excludes_wip/TestDateNew.rb (+5/-0)
test/mri/excludes_wip/TestDateParse.rb (+3/-0)
test/mri/excludes_wip/TestDateStrptime.rb (+2/-0)
test/mri/excludes_wip/TestDefined.rb (+8/-0)
test/mri/excludes_wip/TestDelegateClass.rb (+1/-0)
test/mri/excludes_wip/TestDir.rb (+2/-0)
test/mri/excludes_wip/TestEncoding.rb (+1/-0)
test/mri/excludes_wip/TestEncodingConverter.rb (+1/-0)
test/mri/excludes_wip/TestErbCommand.rb (+3/-0)
test/mri/excludes_wip/TestException.rb (+8/-0)
test/mri/excludes_wip/TestFiber.rb (+5/-0)
test/mri/excludes_wip/TestFileExhaustive.rb (+3/-0)
test/mri/excludes_wip/TestFrozenError.rb (+3/-0)
test/mri/excludes_wip/TestGc.rb (+2/-0)
test/mri/excludes_wip/TestIO.rb (+8/-0)
test/mri/excludes_wip/TestIO_Console.rb (+11/-0)
test/mri/excludes_wip/TestIO_M17N.rb (+2/-0)
test/mri/excludes_wip/TestKeywordArguments.rb (+4/-0)
test/mri/excludes_wip/TestKeywordArgumentsSymProcRefinements.rb (+1/-0)
test/mri/excludes_wip/TestLazyEnumerator.rb (+1/-0)
test/mri/excludes_wip/TestM17N.rb (+1/-0)
test/mri/excludes_wip/TestMarshal.rb (+8/-0)
test/mri/excludes_wip/TestMarshal/TestMarshalFreeze.rb (+4/-0)
test/mri/excludes_wip/TestMarshal/TestMarshalFreezeProc.rb (+4/-0)
test/mri/excludes_wip/TestMethod.rb (+11/-0)
test/mri/excludes_wip/TestModule.rb (+12/-0)
test/mri/excludes_wip/TestNameError.rb (+4/-0)
test/mri/excludes_wip/TestNetHTTPS.rb (+5/-0)
test/mri/excludes_wip/TestNetHTTP_v1_2.rb (+1/-0)
test/mri/excludes_wip/TestNumeric.rb (+1/-0)
test/mri/excludes_wip/TestObject.rb (+2/-0)
test/mri/excludes_wip/TestObjectSpace.rb (+3/-0)
test/mri/excludes_wip/TestPack.rb (+1/-0)
test/mri/excludes_wip/TestParse.rb (+22/-0)
test/mri/excludes_wip/TestPatternMatching.rb (+10/-0)
test/mri/excludes_wip/TestPipe/WithConversion.rb (+2/-0)
test/mri/excludes_wip/TestProc.rb (+4/-0)
test/mri/excludes_wip/TestProcess.rb (+4/-0)
test/mri/excludes_wip/TestRefinement.rb (+8/-0)
test/mri/excludes_wip/TestRegexp.rb (+3/-0)
test/mri/excludes_wip/TestRequire.rb (+3/-0)
test/mri/excludes_wip/TestRubyLiteral.rb (+1/-0)
test/mri/excludes_wip/TestRubyOptions.rb (+5/-0)
test/mri/excludes_wip/TestSecureRandom.rb (+1/-0)
test/mri/excludes_wip/TestSocketAddrinfo.rb (+1/-0)
test/mri/excludes_wip/TestSocket_TCPSocket.rb (+1/-0)
test/mri/excludes_wip/TestSocket_UDPSocket.rb (+3/-0)
test/mri/excludes_wip/TestSprintfComb.rb (+1/-0)
test/mri/excludes_wip/TestStack.rb (+3/-0)
test/mri/excludes_wip/TestString.rb (+2/-0)
test/mri/excludes_wip/TestString2.rb (+7/-0)
test/mri/excludes_wip/TestStringIO.rb (+11/-0)
test/mri/excludes_wip/TestStringScannerFixedAnchor.rb (+8/-0)
test/mri/excludes_wip/TestStruct/SubStruct.rb (+5/-0)
test/mri/excludes_wip/TestStruct/TopStruct.rb (+5/-0)
test/mri/excludes_wip/TestSuper.rb (+1/-0)
test/mri/excludes_wip/TestSymbol.rb (+1/-0)
test/mri/excludes_wip/TestSyslogLogger.rb (+15/-0)
test/mri/excludes_wip/TestTempfile.rb (+2/-0)
test/mri/excludes_wip/TestThread.rb (+1/-0)
test/mri/excludes_wip/TestThreadConditionVariable.rb (+3/-0)
test/mri/excludes_wip/TestTime.rb (+8/-0)
test/mri/excludes_wip/TestTmpdir.rb (+1/-0)
test/mri/excludes_wip/TestTranscode.rb (+2/-0)
test/mri/excludes_wip/TestVariable.rb (+5/-0)
test/mri/excludes_wip/TestWeakRef.rb (+1/-0)
test/mri/excludes_wip/TestZlib.rb (+3/-0)
test/mri/excludes_wip/TestZlibGzipFile.rb (+2/-0)
test/mri/excludes_wip/TestZlibInflate.rb (+7/-0)
test/mri/excludes_wip/YAMLStoreTest.rb (+1/-0)
test/mri/fiber/autoload.rb (+3/-0)
test/mri/fiber/http.rb (+54/-0)
test/mri/fiber/scheduler.rb (+467/-0)
test/mri/fiber/test_address_resolve.rb (+278/-0)
test/mri/fiber/test_backtrace.rb (+22/-0)
test/mri/fiber/test_enumerator.rb (+51/-0)
test/mri/fiber/test_io.rb (+175/-0)
test/mri/fiber/test_io_buffer.rb (+125/-0)
test/mri/fiber/test_mutex.rb (+220/-0)
test/mri/fiber/test_process.rb (+36/-0)
test/mri/fiber/test_ractor.rb (+23/-0)
test/mri/fiber/test_scheduler.rb (+185/-0)
test/mri/fiber/test_sleep.rb (+71/-0)
test/mri/fiber/test_thread.rb (+108/-0)
test/mri/fiber/test_timeout.rb (+51/-0)
test/mri/fiddle/helper.rb (+66/-11)
test/mri/fiddle/test_c_struct_builder.rb (+69/-0)
test/mri/fiddle/test_c_struct_entry.rb (+109/-21)
test/mri/fiddle/test_c_union_entity.rb (+8/-7)
test/mri/fiddle/test_closure.rb (+25/-0)
test/mri/fiddle/test_cparser.rb (+163/-6)
test/mri/fiddle/test_func.rb (+66/-22)
test/mri/fiddle/test_function.rb (+114/-4)
test/mri/fiddle/test_handle.rb (+34/-24)
test/mri/fiddle/test_import.rb (+348/-24)
test/mri/fiddle/test_memory_view.rb (+143/-0)
test/mri/fiddle/test_pinned.rb (+28/-0)
test/mri/fiddle/test_pointer.rb (+86/-31)
test/mri/fileutils/test_fileutils.rb (+131/-5)
test/mri/fixtures/fake_sorted_set_gem/sorted_set.rb (+9/-0)
test/mri/gdbm/test_gdbm.rb (+1/-1)
test/mri/io/console/test_io_console.rb (+9/-3)
test/mri/io/wait/test_io_wait.rb (+17/-5)
test/mri/io/wait/test_io_wait_uncommon.rb (+18/-18)
test/mri/io/wait/test_ractor.rb (+18/-0)
test/mri/irb/test_cmd.rb (+558/-0)
test/mri/irb/test_color.rb (+277/-0)
test/mri/irb/test_color_printer.rb (+68/-0)
test/mri/irb/test_completion.rb (+103/-3)
test/mri/irb/test_context.rb (+553/-3)
test/mri/irb/test_history.rb (+211/-0)
test/mri/irb/test_init.rb (+69/-0)
test/mri/irb/test_option.rb (+2/-1)
test/mri/irb/test_raise_no_backtrace_exception.rb (+41/-1)
test/mri/irb/test_ruby_lex.rb (+623/-0)
test/mri/irb/test_workspace.rb (+41/-7)
test/mri/irb/yamatanooroti/test_rendering.rb (+228/-0)
test/mri/lib/jit_support.rb (+28/-8)
test/mri/lib/with_different_ofs.rb (+4/-0)
test/mri/logger/helper.rb (+13/-0)
test/mri/matrix/test_matrix.rb (+42/-0)
test/mri/mkmf/base.rb (+4/-2)
test/mri/mkmf/test_egrep_cpp.rb (+15/-0)
test/mri/mkmf/test_flags.rb (+1/-1)
test/mri/mkmf/test_install.rb (+30/-0)
test/mri/mkmf/test_libs.rb (+8/-1)
test/mri/mkmf/test_mkmf.rb (+15/-0)
test/mri/monitor/test_monitor.rb (+81/-20)
test/mri/net/ftp/test_ftp.rb (+170/-5)
test/mri/net/http/test_http.rb (+210/-48)
test/mri/net/http/test_http_request.rb (+4/-3)
test/mri/net/http/test_httpheader.rb (+34/-1)
test/mri/net/http/test_httpresponse.rb (+252/-0)
test/mri/net/http/test_https.rb (+138/-45)
test/mri/net/http/test_https_proxy.rb (+1/-1)
test/mri/net/http/utils.rb (+24/-1)
test/mri/net/imap/test_imap.rb (+81/-17)
test/mri/net/imap/test_imap_response_parser.rb (+19/-32)
test/mri/net/protocol/test_protocol.rb (+6/-8)
test/mri/net/smtp/test_smtp.rb (+97/-7)
test/mri/net/smtp/test_ssl_socket.rb (+3/-1)
test/mri/net/smtp/test_sslcontext.rb (+129/-0)
test/mri/net/smtp/test_starttls.rb (+122/-0)
test/mri/objspace/test_objspace.rb (+157/-26)
test/mri/open-uri/test_open-uri.rb (+179/-173)
test/mri/open-uri/test_ssl.rb (+6/-6)
test/mri/openssl/fixtures/pkey/empty.der (+0/-0)
test/mri/openssl/fixtures/pkey/empty.pem (+0/-0)
test/mri/openssl/fixtures/pkey/fullchain.pem (+56/-0)
test/mri/openssl/fixtures/pkey/garbage.txt (+1/-0)
test/mri/openssl/test_asn1.rb (+39/-14)
test/mri/openssl/test_bn.rb (+103/-21)
test/mri/openssl/test_buffering.rb (+9/-2)
test/mri/openssl/test_cipher.rb (+69/-15)
test/mri/openssl/test_config.rb (+91/-103)
test/mri/openssl/test_digest.rb (+46/-18)
test/mri/openssl/test_engine.rb (+2/-2)
test/mri/openssl/test_fips.rb (+1/-1)
test/mri/openssl/test_hmac.rb (+25/-1)
test/mri/openssl/test_kdf.rb (+1/-1)
test/mri/openssl/test_ns_spki.rb (+3/-3)
test/mri/openssl/test_ocsp.rb (+19/-25)
test/mri/openssl/test_ossl.rb (+65/-0)
test/mri/openssl/test_pair.rb (+7/-24)
test/mri/openssl/test_pkcs12.rb (+150/-149)
test/mri/openssl/test_pkcs7.rb (+41/-1)
test/mri/openssl/test_pkey.rb (+172/-0)
test/mri/openssl/test_pkey_dh.rb (+85/-22)
test/mri/openssl/test_pkey_dsa.rb (+59/-27)
test/mri/openssl/test_pkey_ec.rb (+145/-50)
test/mri/openssl/test_pkey_rsa.rb (+303/-71)
test/mri/openssl/test_random.rb (+1/-1)
test/mri/openssl/test_ssl.rb (+418/-254)
test/mri/openssl/test_ssl_session.rb (+2/-9)
test/mri/openssl/test_ts.rb (+680/-0)
test/mri/openssl/test_x509attr.rb (+11/-1)
test/mri/openssl/test_x509cert.rb (+135/-4)
test/mri/openssl/test_x509crl.rb (+34/-11)
test/mri/openssl/test_x509ext.rb (+14/-1)
test/mri/openssl/test_x509name.rb (+23/-10)
test/mri/openssl/test_x509req.rb (+20/-13)
test/mri/openssl/test_x509store.rb (+273/-141)
test/mri/openssl/ut_eof.rb (+9/-5)
test/mri/openssl/utils.rb (+92/-49)
test/mri/optparse/test_acceptable.rb (+0/-1)
test/mri/optparse/test_autoconf.rb (+7/-0)
test/mri/optparse/test_did_you_mean.rb (+40/-0)
test/mri/optparse/test_optparse.rb (+30/-0)
test/mri/optparse/test_zsh_completion.rb (+1/-1)
test/mri/pathname/test_pathname.rb (+160/-85)
test/mri/pathname/test_ractor.rb (+22/-0)
test/mri/psych/helper.rb (+3/-3)
test/mri/psych/test_array.rb (+16/-0)
test/mri/psych/test_coder.rb (+21/-15)
test/mri/psych/test_date_time.rb (+20/-0)
test/mri/psych/test_encoding.rb (+9/-2)
test/mri/psych/test_exception.rb (+0/-18)
test/mri/psych/test_hash.rb (+52/-12)
test/mri/psych/test_merge_keys.rb (+1/-1)
test/mri/psych/test_numeric.rb (+12/-0)
test/mri/psych/test_object.rb (+11/-2)
test/mri/psych/test_parser.rb (+10/-2)
test/mri/psych/test_psych.rb (+62/-6)
test/mri/psych/test_ractor.rb (+50/-0)
test/mri/psych/test_safe_load.rb (+22/-53)
test/mri/psych/test_scalar_scanner.rb (+72/-2)
test/mri/psych/test_string.rb (+13/-0)
test/mri/psych/test_yaml.rb (+17/-17)
test/mri/racc/assets/cadenza.y (+170/-0)
test/mri/racc/assets/cast.y (+926/-0)
test/mri/racc/assets/chk.y (+126/-0)
test/mri/racc/assets/conf.y (+16/-0)
test/mri/racc/assets/csspool.y (+729/-0)
test/mri/racc/assets/digraph.y (+29/-0)
test/mri/racc/assets/echk.y (+118/-0)
test/mri/racc/assets/edtf.y (+583/-0)
test/mri/racc/assets/err.y (+60/-0)
test/mri/racc/assets/error_recovery.y (+35/-0)
test/mri/racc/assets/expect.y (+7/-0)
test/mri/racc/assets/firstline.y (+4/-0)
test/mri/racc/assets/huia.y (+318/-0)
test/mri/racc/assets/ichk.y (+102/-0)
test/mri/racc/assets/ifelse.y (+14/-0)
test/mri/racc/assets/intp.y (+546/-0)
test/mri/racc/assets/journey.y (+47/-0)
test/mri/racc/assets/liquor.y (+313/-0)
test/mri/racc/assets/machete.y (+423/-0)
test/mri/racc/assets/macruby.y (+2197/-0)
test/mri/racc/assets/mailp.y (+437/-0)
test/mri/racc/assets/mediacloth.y (+599/-0)
test/mri/racc/assets/mof.y (+649/-0)
test/mri/racc/assets/namae.y (+302/-0)
test/mri/racc/assets/nasl.y (+626/-0)
test/mri/racc/assets/newsyn.y (+25/-0)
test/mri/racc/assets/noend.y (+4/-0)
test/mri/racc/assets/nokogiri-css.y (+255/-0)
test/mri/racc/assets/nonass.y (+41/-0)
test/mri/racc/assets/normal.y (+27/-0)
test/mri/racc/assets/norule.y (+4/-0)
test/mri/racc/assets/nullbug1.y (+25/-0)
test/mri/racc/assets/nullbug2.y (+15/-0)
test/mri/racc/assets/opal.y (+1807/-0)
test/mri/racc/assets/opt.y (+123/-0)
test/mri/racc/assets/percent.y (+35/-0)
test/mri/racc/assets/php_serialization.y (+98/-0)
test/mri/racc/assets/recv.y (+97/-0)
test/mri/racc/assets/riml.y (+665/-0)
test/mri/racc/assets/rrconf.y (+14/-0)
test/mri/racc/assets/ruby18.y (+1943/-0)
test/mri/racc/assets/ruby19.y (+2174/-0)
test/mri/racc/assets/ruby20.y (+2350/-0)
test/mri/racc/assets/ruby21.y (+2359/-0)
test/mri/racc/assets/ruby22.y (+2381/-0)
test/mri/racc/assets/scan.y (+72/-0)
test/mri/racc/assets/syntax.y (+50/-0)
test/mri/racc/assets/tp_plus.y (+622/-0)
test/mri/racc/assets/twowaysql.y (+278/-0)
test/mri/racc/assets/unterm.y (+5/-0)
test/mri/racc/assets/useless.y (+12/-0)
test/mri/racc/assets/yyerr.y (+46/-0)
test/mri/racc/bench.y (+36/-0)
test/mri/racc/case.rb (+112/-0)
test/mri/racc/helper.rb (+115/-0)
test/mri/racc/infini.y (+8/-0)
test/mri/racc/regress/README.txt (+7/-0)
test/mri/racc/regress/cadenza (+796/-0)
test/mri/racc/regress/cast (+3945/-0)
test/mri/racc/regress/csspool (+2314/-0)
test/mri/racc/regress/edtf (+1794/-0)
test/mri/racc/regress/huia (+1681/-0)
test/mri/racc/regress/journey (+222/-0)
test/mri/racc/regress/liquor (+885/-0)
test/mri/racc/regress/machete (+833/-0)
test/mri/racc/regress/mediacloth (+1463/-0)
test/mri/racc/regress/mof (+1368/-0)
test/mri/racc/regress/namae (+634/-0)
test/mri/racc/regress/nasl (+2548/-0)
test/mri/racc/regress/nokogiri-css (+836/-0)
test/mri/racc/regress/opal (+10107/-0)
test/mri/racc/regress/php_serialization (+336/-0)
test/mri/racc/regress/riml (+4037/-0)
test/mri/racc/regress/ruby18 (+9945/-0)
test/mri/racc/regress/ruby22 (+11180/-0)
test/mri/racc/regress/tp_plus (+1933/-0)
test/mri/racc/regress/twowaysql (+556/-0)
test/mri/racc/scandata/brace (+7/-0)
test/mri/racc/scandata/gvar (+1/-0)
test/mri/racc/scandata/normal (+4/-0)
test/mri/racc/scandata/percent (+18/-0)
test/mri/racc/scandata/slash (+10/-0)
test/mri/racc/src.intp (+34/-0)
test/mri/racc/start.y (+20/-0)
test/mri/racc/test_chk_y.rb (+52/-0)
test/mri/racc/test_grammar_file_parser.rb (+15/-0)
test/mri/racc/test_racc_command.rb (+339/-0)
test/mri/racc/test_scan_y.rb (+52/-0)
test/mri/racc/testscanner.rb (+51/-0)
test/mri/rdoc/MarkdownTest_1.0.3/Markdown Documentation - Basics.text (+2/-2)
test/mri/rdoc/helper.rb (+5/-0)
test/mri/rdoc/support/formatter_test_case.rb (+764/-0)
test/mri/rdoc/support/test_case.rb (+215/-0)
test/mri/rdoc/support/text_formatter_test_case.rb (+115/-0)
test/mri/rdoc/test_rdoc_any_method.rb (+50/-2)
test/mri/rdoc/test_rdoc_attr.rb (+1/-1)
test/mri/rdoc/test_rdoc_class_module.rb (+28/-23)
test/mri/rdoc/test_rdoc_comment.rb (+3/-2)
test/mri/rdoc/test_rdoc_context.rb (+3/-3)
test/mri/rdoc/test_rdoc_context_section.rb (+2/-10)
test/mri/rdoc/test_rdoc_cross_reference.rb (+10/-1)
test/mri/rdoc/test_rdoc_encoding.rb (+4/-4)
test/mri/rdoc/test_rdoc_extend.rb (+4/-4)
test/mri/rdoc/test_rdoc_generator_darkfish.rb (+16/-10)
test/mri/rdoc/test_rdoc_generator_json_index.rb (+4/-4)
test/mri/rdoc/test_rdoc_generator_markup.rb (+1/-1)
test/mri/rdoc/test_rdoc_generator_pot.rb (+1/-1)
test/mri/rdoc/test_rdoc_generator_pot_po.rb (+1/-1)
test/mri/rdoc/test_rdoc_generator_pot_po_entry.rb (+1/-1)
test/mri/rdoc/test_rdoc_generator_ri.rb (+1/-1)
test/mri/rdoc/test_rdoc_i18n_locale.rb (+5/-5)
test/mri/rdoc/test_rdoc_i18n_text.rb (+1/-1)
test/mri/rdoc/test_rdoc_include.rb (+6/-5)
test/mri/rdoc/test_rdoc_markdown.rb (+59/-6)
test/mri/rdoc/test_rdoc_markdown_test.rb (+3/-3)
test/mri/rdoc/test_rdoc_markup.rb (+1/-1)
test/mri/rdoc/test_rdoc_markup_attribute_manager.rb (+27/-6)
test/mri/rdoc/test_rdoc_markup_attributes.rb (+1/-1)
test/mri/rdoc/test_rdoc_markup_document.rb (+2/-2)
test/mri/rdoc/test_rdoc_markup_formatter.rb (+1/-1)
test/mri/rdoc/test_rdoc_markup_hard_break.rb (+1/-1)
test/mri/rdoc/test_rdoc_markup_heading.rb (+1/-1)
test/mri/rdoc/test_rdoc_markup_include.rb (+1/-1)
test/mri/rdoc/test_rdoc_markup_indented_paragraph.rb (+1/-1)
test/mri/rdoc/test_rdoc_markup_paragraph.rb (+1/-1)
test/mri/rdoc/test_rdoc_markup_parser.rb (+3/-22)
test/mri/rdoc/test_rdoc_markup_pre_process.rb (+2/-2)
test/mri/rdoc/test_rdoc_markup_raw.rb (+1/-1)
test/mri/rdoc/test_rdoc_markup_to_ansi.rb (+1/-1)
test/mri/rdoc/test_rdoc_markup_to_bs.rb (+1/-1)
test/mri/rdoc/test_rdoc_markup_to_html.rb (+51/-1)
test/mri/rdoc/test_rdoc_markup_to_html_crossref.rb (+30/-4)
test/mri/rdoc/test_rdoc_markup_to_html_snippet.rb (+1/-1)
test/mri/rdoc/test_rdoc_markup_to_joined_paragraph.rb (+1/-1)
test/mri/rdoc/test_rdoc_markup_to_label.rb (+1/-1)
test/mri/rdoc/test_rdoc_markup_to_markdown.rb (+3/-3)
test/mri/rdoc/test_rdoc_markup_to_rdoc.rb (+1/-1)
test/mri/rdoc/test_rdoc_markup_to_table_of_contents.rb (+1/-1)
test/mri/rdoc/test_rdoc_markup_to_tt_only.rb (+1/-1)
test/mri/rdoc/test_rdoc_markup_verbatim.rb (+1/-1)
test/mri/rdoc/test_rdoc_normal_class.rb (+2/-2)
test/mri/rdoc/test_rdoc_options.rb (+140/-47)
test/mri/rdoc/test_rdoc_parser.rb (+3/-3)
test/mri/rdoc/test_rdoc_parser_c.rb (+76/-38)
test/mri/rdoc/test_rdoc_parser_changelog.rb (+170/-1)
test/mri/rdoc/test_rdoc_parser_markdown.rb (+1/-1)
test/mri/rdoc/test_rdoc_parser_rd.rb (+1/-1)
test/mri/rdoc/test_rdoc_parser_ruby.rb (+107/-31)
test/mri/rdoc/test_rdoc_parser_simple.rb (+1/-1)
test/mri/rdoc/test_rdoc_rd.rb (+1/-1)
test/mri/rdoc/test_rdoc_rd_block_parser.rb (+1/-1)
test/mri/rdoc/test_rdoc_rd_inline.rb (+1/-1)
test/mri/rdoc/test_rdoc_rd_inline_parser.rb (+1/-1)
test/mri/rdoc/test_rdoc_rdoc.rb (+37/-58)
test/mri/rdoc/test_rdoc_ri_driver.rb (+79/-56)
test/mri/rdoc/test_rdoc_ri_paths.rb (+8/-6)
test/mri/rdoc/test_rdoc_rubygems_hook.rb (+64/-27)
test/mri/rdoc/test_rdoc_servlet.rb (+29/-11)
test/mri/rdoc/test_rdoc_single_class.rb (+1/-1)
test/mri/rdoc/test_rdoc_stats.rb (+1/-1)
test/mri/rdoc/test_rdoc_store.rb (+19/-4)
test/mri/rdoc/test_rdoc_task.rb (+8/-8)
test/mri/rdoc/test_rdoc_text.rb (+21/-2)
test/mri/rdoc/test_rdoc_token_stream.rb (+1/-1)
test/mri/rdoc/test_rdoc_tom_doc.rb (+1/-1)
test/mri/rdoc/test_rdoc_top_level.rb (+5/-2)
test/mri/rdoc/xref_data.rb (+17/-0)
test/mri/rdoc/xref_test_case.rb (+14/-1)
test/mri/readline/helper.rb (+29/-0)
test/mri/readline/test_readline.rb (+443/-180)
test/mri/readline/test_readline_history.rb (+98/-99)
test/mri/reline/helper.rb (+125/-0)
test/mri/reline/test_config.rb (+389/-0)
test/mri/reline/test_history.rb (+308/-0)
test/mri/reline/test_key_actor_emacs.rb (+2332/-0)
test/mri/reline/test_key_actor_vi.rb (+1457/-0)
test/mri/reline/test_key_stroke.rb (+79/-0)
test/mri/reline/test_kill_ring.rb (+268/-0)
test/mri/reline/test_macro.rb (+41/-0)
test/mri/reline/test_reline.rb (+392/-0)
test/mri/reline/test_reline_key.rb (+53/-0)
test/mri/reline/test_string_processing.rb (+81/-0)
test/mri/reline/test_terminfo.rb (+32/-0)
test/mri/reline/test_unicode.rb (+25/-0)
test/mri/reline/test_within_pipe.rb (+78/-0)
test/mri/reline/windows/test_key_event_record.rb (+41/-0)
test/mri/reline/yamatanooroti/multiline_repl (+211/-0)
test/mri/reline/yamatanooroti/termination_checker.rb (+30/-0)
test/mri/reline/yamatanooroti/test_rendering.rb (+1265/-0)
test/mri/resolv/test_addr.rb (+26/-0)
test/mri/resolv/test_dns.rb (+85/-6)
test/mri/rinda/test_rinda.rb (+19/-7)
test/mri/ripper/assert_parse_files.rb (+32/-0)
test/mri/ripper/dummyparser.rb (+5/-1)
test/mri/ripper/test_files_ext.rb (+8/-0)
test/mri/ripper/test_files_lib.rb (+14/-0)
test/mri/ripper/test_files_sample.rb (+8/-0)
test/mri/ripper/test_files_test.rb (+8/-0)
test/mri/ripper/test_files_test_1.rb (+9/-0)
test/mri/ripper/test_files_test_2.rb (+9/-0)
test/mri/ripper/test_lexer.rb (+134/-1)
test/mri/ripper/test_parser_events.rb (+167/-16)
test/mri/ripper/test_ripper.rb (+19/-0)
test/mri/ripper/test_scanner_events.rb (+71/-17)
test/mri/ripper/test_sexp.rb (+394/-0)
test/mri/ruby/enc/test_case_mapping.rb (+10/-0)
test/mri/ruby/enc/test_cesu8.rb (+109/-0)
test/mri/ruby/enc/test_emoji_breaks.rb (+48/-16)
test/mri/ruby/enc/test_grapheme_breaks.rb (+5/-2)
test/mri/ruby/enc/test_regex_casefold.rb (+1/-1)
test/mri/ruby/marshaltestlib.rb (+1/-1)
test/mri/ruby/sentence.rb (+1/-1)
test/mri/ruby/test_alias.rb (+24/-4)
test/mri/ruby/test_argf.rb (+89/-34)
test/mri/ruby/test_arithmetic_sequence.rb (+36/-9)
test/mri/ruby/test_array.rb (+441/-152)
test/mri/ruby/test_assignment.rb (+72/-9)
test/mri/ruby/test_ast.rb (+267/-10)
test/mri/ruby/test_autoload.rb (+142/-13)
test/mri/ruby/test_backtrace.rb (+70/-0)
test/mri/ruby/test_basicinstructions.rb (+4/-1)
test/mri/ruby/test_bignum.rb (+58/-41)
test/mri/ruby/test_call.rb (+9/-0)
test/mri/ruby/test_case.rb (+12/-0)
test/mri/ruby/test_class.rb (+126/-19)
test/mri/ruby/test_comparable.rb (+31/-1)
test/mri/ruby/test_complex.rb (+32/-9)
test/mri/ruby/test_complexrational.rb (+4/-4)
test/mri/ruby/test_const.rb (+30/-9)
test/mri/ruby/test_default_gems.rb (+1/-0)
test/mri/ruby/test_defined.rb (+115/-0)
test/mri/ruby/test_dir.rb (+190/-56)
test/mri/ruby/test_dir_m17n.rb (+27/-48)
test/mri/ruby/test_econv.rb (+21/-2)
test/mri/ruby/test_encoding.rb (+41/-7)
test/mri/ruby/test_enum.rb (+184/-5)
test/mri/ruby/test_enumerator.rb (+122/-7)
test/mri/ruby/test_env.rb (+962/-30)
test/mri/ruby/test_eval.rb (+81/-3)
test/mri/ruby/test_exception.rb (+262/-260)
test/mri/ruby/test_fiber.rb (+141/-63)
test/mri/ruby/test_file.rb (+45/-52)
test/mri/ruby/test_file_exhaustive.rb (+104/-71)
test/mri/ruby/test_fixnum.rb (+0/-1)
test/mri/ruby/test_flip.rb (+4/-13)
test/mri/ruby/test_float.rb (+29/-2)
test/mri/ruby/test_frozen_error.rb (+57/-0)
test/mri/ruby/test_gc.rb (+83/-35)
test/mri/ruby/test_gc_compact.rb (+174/-0)
test/mri/ruby/test_hash.rb (+454/-67)
test/mri/ruby/test_inlinecache.rb (+110/-0)
test/mri/ruby/test_insns_leaf.rb (+46/-0)
test/mri/ruby/test_integer.rb (+90/-0)
test/mri/ruby/test_io.rb (+298/-124)
test/mri/ruby/test_io_buffer.rb (+520/-0)
test/mri/ruby/test_io_m17n.rb (+59/-18)
test/mri/ruby/test_iseq.rb (+231/-25)
test/mri/ruby/test_iterator.rb (+7/-13)
test/mri/ruby/test_jit.rb (+310/-84)
test/mri/ruby/test_jit_debug.rb (+17/-0)
test/mri/ruby/test_keyword.rb (+3650/-27)
test/mri/ruby/test_lambda.rb (+171/-0)
test/mri/ruby/test_lazy_enumerator.rb (+110/-2)
test/mri/ruby/test_literal.rb (+61/-7)
test/mri/ruby/test_m17n.rb (+26/-18)
test/mri/ruby/test_m17n_comb.rb (+36/-6)
test/mri/ruby/test_marshal.rb (+182/-78)
test/mri/ruby/test_math.rb (+37/-17)
test/mri/ruby/test_memory_view.rb (+341/-0)
test/mri/ruby/test_method.rb (+275/-26)
test/mri/ruby/test_method_cache.rb (+76/-0)
test/mri/ruby/test_module.rb (+863/-90)
test/mri/ruby/test_name_error.rb (+156/-0)
test/mri/ruby/test_nomethod_error.rb (+109/-0)
test/mri/ruby/test_numeric.rb (+91/-23)
test/mri/ruby/test_object.rb (+96/-49)
test/mri/ruby/test_objectspace.rb (+72/-1)
test/mri/ruby/test_optimization.rb (+131/-22)
test/mri/ruby/test_pack.rb (+32/-14)
test/mri/ruby/test_parse.rb (+408/-257)
test/mri/ruby/test_path.rb (+6/-2)
test/mri/ruby/test_pattern_matching.rb (+1697/-0)
test/mri/ruby/test_primitive.rb (+53/-25)
test/mri/ruby/test_proc.rb (+305/-65)
test/mri/ruby/test_process.rb (+232/-41)
test/mri/ruby/test_rand.rb (+95/-259)
test/mri/ruby/test_random_formatter.rb (+123/-0)
test/mri/ruby/test_range.rb (+111/-13)
test/mri/ruby/test_rational.rb (+33/-0)
test/mri/ruby/test_refinement.rb (+433/-16)
test/mri/ruby/test_regexp.rb (+170/-50)
test/mri/ruby/test_require.rb (+166/-104)
test/mri/ruby/test_require_lib.rb (+27/-0)
test/mri/ruby/test_rubyoptions.rb (+145/-80)
test/mri/ruby/test_rubyvm.rb (+55/-2)
test/mri/ruby/test_rubyvm_jit.rb (+91/-0)
test/mri/ruby/test_rubyvm_mjit.rb (+16/-0)
test/mri/ruby/test_settracefunc.rb (+541/-90)
test/mri/ruby/test_signal.rb (+1/-6)
test/mri/ruby/test_sprintf.rb (+0/-15)
test/mri/ruby/test_stack.rb (+82/-0)
test/mri/ruby/test_string.rb (+183/-152)
test/mri/ruby/test_struct.rb (+118/-3)
test/mri/ruby/test_super.rb (+137/-0)
test/mri/ruby/test_symbol.rb (+56/-14)
test/mri/ruby/test_syntax.rb (+596/-90)
test/mri/ruby/test_system.rb (+2/-2)
test/mri/ruby/test_thread.rb (+83/-46)
test/mri/ruby/test_thread_cv.rb (+35/-28)
test/mri/ruby/test_thread_queue.rb (+94/-53)
test/mri/ruby/test_time.rb (+158/-21)
test/mri/ruby/test_time_tz.rb (+152/-36)
test/mri/ruby/test_trace.rb (+0/-11)
test/mri/ruby/test_transcode.rb (+71/-1)
test/mri/ruby/test_undef.rb (+16/-0)
test/mri/ruby/test_variable.rb (+144/-5)
test/mri/ruby/test_vm_dump.rb (+1/-1)
test/mri/ruby/test_weakmap.rb (+36/-10)
test/mri/ruby/test_yjit.rb (+687/-0)
test/mri/rubygems/encrypted_private_key.pem (+26/-26)
test/mri/rubygems/helper.rb (+1458/-966)
test/mri/rubygems/installer_test_case.rb (+247/-0)
test/mri/rubygems/package/tar_test_case.rb (+139/-0)
test/mri/rubygems/private_ec_key.pem (+9/-0)
test/mri/rubygems/rubygems/commands/crash_command.rb (+0/-2)
test/mri/rubygems/rubygems_plugin.rb (+0/-2)
test/mri/rubygems/specifications/bar-0.0.2.gemspec (+0/-2)
test/mri/rubygems/specifications/rubyforge-0.0.1.gemspec (+12/-0)
test/mri/rubygems/test_bundled_ca.rb (+43/-49)
test/mri/rubygems/test_config.rb (+3/-5)
test/mri/rubygems/test_deprecate.rb (+89/-9)
test/mri/rubygems/test_exit.rb (+11/-0)
test/mri/rubygems/test_gem.rb (+674/-491)
test/mri/rubygems/test_gem_available_set.rb (+6/-7)
test/mri/rubygems/test_gem_bundler_version_finder.rb (+41/-42)
test/mri/rubygems/test_gem_command.rb (+158/-11)
test/mri/rubygems/test_gem_command_manager.rb (+73/-14)
test/mri/rubygems/test_gem_commands_build_command.rb (+393/-19)
test/mri/rubygems/test_gem_commands_cert_command.rb (+118/-47)
test/mri/rubygems/test_gem_commands_check_command.rb (+6/-8)
test/mri/rubygems/test_gem_commands_cleanup_command.rb (+60/-35)
test/mri/rubygems/test_gem_commands_contents_command.rb (+53/-22)
test/mri/rubygems/test_gem_commands_dependency_command.rb (+4/-6)
test/mri/rubygems/test_gem_commands_environment_command.rb (+23/-35)
test/mri/rubygems/test_gem_commands_fetch_command.rb (+46/-12)
test/mri/rubygems/test_gem_commands_generate_index_command.rb (+33/-3)
test/mri/rubygems/test_gem_commands_help_command.rb (+25/-10)
test/mri/rubygems/test_gem_commands_info_command.rb (+7/-8)
test/mri/rubygems/test_gem_commands_install_command.rb (+474/-82)
test/mri/rubygems/test_gem_commands_list_command.rb (+2/-4)
test/mri/rubygems/test_gem_commands_lock_command.rb (+2/-4)
test/mri/rubygems/test_gem_commands_mirror.rb (+2/-3)
test/mri/rubygems/test_gem_commands_open_command.rb (+13/-16)
test/mri/rubygems/test_gem_commands_outdated_command.rb (+19/-2)
test/mri/rubygems/test_gem_commands_owner_command.rb (+66/-13)
test/mri/rubygems/test_gem_commands_pristine_command.rb (+163/-31)
test/mri/rubygems/test_gem_commands_push_command.rb (+115/-32)
test/mri/rubygems/test_gem_commands_query_command.rb (+43/-18)
test/mri/rubygems/test_gem_commands_search_command.rb (+1/-3)
test/mri/rubygems/test_gem_commands_server_command.rb (+5/-45)
test/mri/rubygems/test_gem_commands_setup_command.rb (+282/-134)
test/mri/rubygems/test_gem_commands_signin_command.rb (+49/-17)
test/mri/rubygems/test_gem_commands_signout_command.rb (+1/-8)
test/mri/rubygems/test_gem_commands_sources_command.rb (+197/-13)
test/mri/rubygems/test_gem_commands_specification_command.rb (+53/-27)
test/mri/rubygems/test_gem_commands_stale_command.rb (+1/-3)
test/mri/rubygems/test_gem_commands_uninstall_command.rb (+191/-56)
test/mri/rubygems/test_gem_commands_unpack_command.rb (+3/-5)
test/mri/rubygems/test_gem_commands_update_command.rb (+236/-37)
test/mri/rubygems/test_gem_commands_which_command.rb (+7/-9)
test/mri/rubygems/test_gem_commands_yank_command.rb (+88/-7)
test/mri/rubygems/test_gem_config_file.rb (+35/-23)
test/mri/rubygems/test_gem_dependency.rb (+21/-15)
test/mri/rubygems/test_gem_dependency_installer.rb (+174/-257)
test/mri/rubygems/test_gem_dependency_list.rb (+32/-27)
test/mri/rubygems/test_gem_dependency_resolution_error.rb (+2/-4)
test/mri/rubygems/test_gem_doctor.rb (+57/-31)
test/mri/rubygems/test_gem_ext_builder.rb (+75/-65)
test/mri/rubygems/test_gem_ext_cmake_builder.rb (+20/-27)
test/mri/rubygems/test_gem_ext_configure_builder.rb (+11/-19)
test/mri/rubygems/test_gem_ext_ext_conf_builder.rb (+40/-43)
test/mri/rubygems/test_gem_ext_rake_builder.rb (+43/-24)
test/mri/rubygems/test_gem_gem_runner.rb (+48/-3)
test/mri/rubygems/test_gem_gemcutter_utilities.rb (+36/-27)
test/mri/rubygems/test_gem_impossible_dependencies_error.rb (+1/-3)
test/mri/rubygems/test_gem_indexer.rb (+49/-57)
test/mri/rubygems/test_gem_install_update_options.rb (+52/-28)
test/mri/rubygems/test_gem_installer.rb (+881/-476)
test/mri/rubygems/test_gem_local_remote_options.rb (+2/-4)
test/mri/rubygems/test_gem_name_tuple.rb (+1/-3)
test/mri/rubygems/test_gem_package.rb (+198/-103)
test/mri/rubygems/test_gem_package_old.rb (+57/-56)
test/mri/rubygems/test_gem_package_tar_header.rb (+65/-7)
test/mri/rubygems/test_gem_package_tar_reader.rb (+1/-3)
test/mri/rubygems/test_gem_package_tar_reader_entry.rb (+9/-10)
test/mri/rubygems/test_gem_package_tar_writer.rb (+38/-32)
test/mri/rubygems/test_gem_package_task.rb (+48/-15)
test/mri/rubygems/test_gem_path_support.rb (+21/-21)
test/mri/rubygems/test_gem_platform.rb (+76/-8)
test/mri/rubygems/test_gem_rdoc.rb (+11/-146)
test/mri/rubygems/test_gem_remote_fetcher.rb (+398/-227)
test/mri/rubygems/test_gem_request.rb (+80/-37)
test/mri/rubygems/test_gem_request_connection_pools.rb (+4/-4)
test/mri/rubygems/test_gem_request_set.rb (+119/-43)
test/mri/rubygems/test_gem_request_set_gem_dependency_api.rb (+101/-80)
test/mri/rubygems/test_gem_request_set_lockfile.rb (+8/-9)
test/mri/rubygems/test_gem_request_set_lockfile_parser.rb (+13/-14)
test/mri/rubygems/test_gem_request_set_lockfile_tokenizer.rb (+123/-123)
test/mri/rubygems/test_gem_requirement.rb (+98/-19)
test/mri/rubygems/test_gem_resolver.rb (+86/-44)
test/mri/rubygems/test_gem_resolver_activation_request.rb (+4/-35)
test/mri/rubygems/test_gem_resolver_api_set.rb (+61/-60)
test/mri/rubygems/test_gem_resolver_api_specification.rb (+4/-6)
test/mri/rubygems/test_gem_resolver_best_set.rb (+29/-8)
test/mri/rubygems/test_gem_resolver_composed_set.rb (+1/-3)
test/mri/rubygems/test_gem_resolver_conflict.rb (+2/-8)
test/mri/rubygems/test_gem_resolver_dependency_request.rb (+1/-3)
test/mri/rubygems/test_gem_resolver_git_set.rb (+2/-4)
test/mri/rubygems/test_gem_resolver_git_specification.rb (+4/-4)
test/mri/rubygems/test_gem_resolver_index_set.rb (+3/-5)
test/mri/rubygems/test_gem_resolver_index_specification.rb (+9/-6)
test/mri/rubygems/test_gem_resolver_installed_specification.rb (+1/-4)
test/mri/rubygems/test_gem_resolver_installer_set.rb (+33/-15)
test/mri/rubygems/test_gem_resolver_local_specification.rb (+2/-4)
test/mri/rubygems/test_gem_resolver_lock_set.rb (+4/-6)
test/mri/rubygems/test_gem_resolver_lock_specification.rb (+1/-3)
test/mri/rubygems/test_gem_resolver_requirement_list.rb (+1/-3)
test/mri/rubygems/test_gem_resolver_specification.rb (+2/-4)
test/mri/rubygems/test_gem_resolver_vendor_set.rb (+4/-6)
test/mri/rubygems/test_gem_resolver_vendor_specification.rb (+1/-3)
test/mri/rubygems/test_gem_security.rb (+66/-36)
test/mri/rubygems/test_gem_security_policy.rb (+35/-40)
test/mri/rubygems/test_gem_security_signer.rb (+18/-19)
test/mri/rubygems/test_gem_security_trust_dir.rb (+9/-11)
test/mri/rubygems/test_gem_server.rb (+15/-14)
test/mri/rubygems/test_gem_silent_ui.rb (+10/-11)
test/mri/rubygems/test_gem_source.rb (+35/-20)
test/mri/rubygems/test_gem_source_fetch_problem.rb (+12/-3)
test/mri/rubygems/test_gem_source_git.rb (+24/-30)
test/mri/rubygems/test_gem_source_installed.rb (+12/-14)
test/mri/rubygems/test_gem_source_list.rb (+2/-2)
test/mri/rubygems/test_gem_source_local.rb (+9/-10)
test/mri/rubygems/test_gem_source_lock.rb (+18/-20)
test/mri/rubygems/test_gem_source_specific_file.rb (+11/-12)
test/mri/rubygems/test_gem_source_subpath_problem.rb (+49/-0)
test/mri/rubygems/test_gem_source_vendor.rb (+8/-10)
test/mri/rubygems/test_gem_spec_fetcher.rb (+13/-6)
test/mri/rubygems/test_gem_specification.rb (+608/-676)
test/mri/rubygems/test_gem_stream_ui.rb (+7/-5)
test/mri/rubygems/test_gem_stub_specification.rb (+9/-10)
test/mri/rubygems/test_gem_text.rb (+8/-3)
test/mri/rubygems/test_gem_uninstaller.rb (+209/-40)
test/mri/rubygems/test_gem_unsatisfiable_dependency_error.rb (+1/-3)
test/mri/rubygems/test_gem_uri.rb (+39/-0)
test/mri/rubygems/test_gem_uri_formatter.rb (+1/-3)
test/mri/rubygems/test_gem_util.rb (+29/-17)
test/mri/rubygems/test_gem_validator.rb (+4/-7)
test/mri/rubygems/test_gem_version.rb (+28/-24)
test/mri/rubygems/test_gem_version_option.rb (+2/-4)
test/mri/rubygems/test_kernel.rb (+32/-26)
test/mri/rubygems/test_project_sanity.rb (+20/-0)
test/mri/rubygems/test_remote_fetch_error.rb (+2/-3)
test/mri/rubygems/test_require.rb (+380/-96)
test/mri/rubygems/test_rubygems.rb (+71/-0)
test/mri/rubygems/utilities.rb (+371/-0)
test/mri/runner.rb (+8/-32)
test/mri/socket/test_addrinfo.rb (+16/-4)
test/mri/socket/test_basicsocket.rb (+1/-3)
test/mri/socket/test_nonblock.rb (+2/-2)
test/mri/socket/test_socket.rb (+25/-3)
test/mri/socket/test_tcp.rb (+45/-0)
test/mri/socket/test_unix.rb (+15/-5)
test/mri/stringio/test_ractor.rb (+23/-0)
test/mri/stringio/test_stringio.rb (+114/-17)
test/mri/strscan/test_ractor.rb (+28/-0)
test/mri/strscan/test_stringscanner.rb (+177/-141)
test/mri/syslog/test_syslog_logger.rb (+15/-0)
test/mri/test_delegate.rb (+141/-0)
test/mri/test_extlibs.rb (+0/-2)
test/mri/test_forwardable.rb (+57/-2)
test/mri/test_getoptlong.rb (+163/-0)
test/mri/test_ipaddr.rb (+67/-4)
test/mri/test_mutex_m.rb (+32/-0)
test/mri/test_open3.rb (+23/-4)
test/mri/test_pp.rb (+31/-4)
test/mri/test_prime.rb (+21/-1)
test/mri/test_pstore.rb (+2/-2)
test/mri/test_securerandom.rb (+4/-112)
test/mri/test_set.rb (+42/-129)
test/mri/test_shellwords.rb (+5/-0)
test/mri/test_sorted_set.rb (+45/-0)
test/mri/test_syslog.rb (+2/-0)
test/mri/test_tempfile.rb (+29/-50)
test/mri/test_time.rb (+39/-0)
test/mri/test_timeout.rb (+19/-0)
test/mri/test_tmpdir.rb (+30/-28)
test/mri/test_tracer.rb (+178/-0)
test/mri/test_trick.rb (+191/-0)
test/mri/test_unicode_normalize.rb (+1/-1)
test/mri/uri/test_common.rb (+122/-0)
test/mri/uri/test_generic.rb (+46/-26)
test/mri/uri/test_http.rb (+24/-7)
test/mri/uri/test_ldap.rb (+3/-3)
test/mri/uri/test_parser.rb (+26/-0)
test/mri/uri/test_ws.rb (+71/-0)
test/mri/win32ole/test_win32ole.rb (+1/-50)
test/mri/win32ole/test_win32ole_event.rb (+14/-43)
test/mri/yaml/test_store.rb (+2/-2)
test/mri/zlib/test_zlib.rb (+236/-9)
test/pom.rb (+29/-7)
test/tool/asm_parse.rb (+53/-0)
test/tool/bisect.sh (+50/-0)
test/tool/build-transcode (+16/-0)
test/tool/bundler/rubocop_gems.rb (+11/-0)
test/tool/bundler/rubocop_gems.rb.lock (+59/-0)
test/tool/bundler/standard_gems.rb (+11/-0)
test/tool/bundler/standard_gems.rb.lock (+65/-0)
test/tool/bundler/test_gems.rb (+12/-0)
test/tool/bundler/test_gems.rb.lock (+43/-0)
test/tool/checksum.rb (+72/-0)
test/tool/colors (+3/-0)
test/tool/config.guess (+1/-0)
test/tool/config.sub (+1/-0)
test/tool/darwin-cc (+6/-0)
test/tool/downloader.rb (+397/-0)
test/tool/enc-emoji-citrus-gen.rb (+131/-0)
test/tool/enc-emoji4unicode.rb (+133/-0)
test/tool/enc-unicode.rb (+577/-0)
test/tool/eval.rb (+158/-0)
test/tool/expand-config.rb (+33/-0)
test/tool/extlibs.rb (+263/-0)
test/tool/fake.rb (+57/-0)
test/tool/fetch-bundled_gems.rb (+27/-0)
test/tool/file2lastrev.rb (+124/-0)
test/tool/format-release (+245/-0)
test/tool/gem-unpack.rb (+19/-0)
test/tool/gen-mailmap.rb (+47/-0)
test/tool/gen_dummy_probes.rb (+32/-0)
test/tool/gen_ruby_tapset.rb (+105/-0)
test/tool/generic_erb.rb (+61/-0)
test/tool/git-refresh (+46/-0)
test/tool/gperf.sed (+22/-0)
test/tool/id2token.rb (+26/-0)
test/tool/ifchange (+90/-0)
test/tool/insns2vm.rb (+15/-0)
test/tool/install-sh (+17/-0)
test/tool/leaked-globals (+40/-0)
test/tool/lib/-test-/file.rb (+1/-0)
test/tool/lib/-test-/integer.rb (+14/-0)
test/tool/lib/colorize.rb (+55/-0)
test/tool/lib/core_assertions.rb (+66/-78)
test/tool/lib/envutil.rb (+367/-0)
test/tool/lib/find_executable.rb (+22/-0)
test/tool/lib/gc_checker.rb (+36/-0)
test/tool/lib/iseq_loader_checker.rb (+81/-0)
test/tool/lib/jisx0208.rb (+86/-0)
test/tool/lib/leakchecker.rb (+314/-0)
test/tool/lib/memory_status.rb (+151/-0)
test/tool/lib/profile_test_all.rb (+91/-0)
test/tool/lib/test/unit.rb (+735/-162)
test/tool/lib/test/unit/assertions.rb (+650/-1251)
test/tool/lib/test/unit/parallel.rb (+212/-0)
test/tool/lib/test/unit/testcase.rb (+296/-0)
test/tool/lib/tracepointchecker.rb (+126/-0)
test/tool/lib/vcs.rb (+733/-0)
test/tool/lib/vpath.rb (+87/-0)
test/tool/lib/webrick.rb (+232/-0)
test/tool/lib/webrick/.document (+6/-0)
test/tool/lib/webrick/accesslog.rb (+157/-0)
test/tool/lib/webrick/cgi.rb (+313/-0)
test/tool/lib/webrick/compat.rb (+36/-0)
test/tool/lib/webrick/config.rb (+158/-0)
test/tool/lib/webrick/cookie.rb (+172/-0)
test/tool/lib/webrick/htmlutils.rb (+30/-0)
test/tool/lib/webrick/httpauth.rb (+96/-0)
test/tool/lib/webrick/httpauth/authenticator.rb (+117/-0)
test/tool/lib/webrick/httpauth/basicauth.rb (+116/-0)
test/tool/lib/webrick/httpauth/digestauth.rb (+395/-0)
test/tool/lib/webrick/httpauth/htdigest.rb (+132/-0)
test/tool/lib/webrick/httpauth/htgroup.rb (+97/-0)
test/tool/lib/webrick/httpauth/htpasswd.rb (+158/-0)
test/tool/lib/webrick/httpauth/userdb.rb (+53/-0)
test/tool/lib/webrick/httpproxy.rb (+354/-0)
test/tool/lib/webrick/httprequest.rb (+636/-0)
test/tool/lib/webrick/httpresponse.rb (+564/-0)
test/tool/lib/webrick/https.rb (+152/-0)
test/tool/lib/webrick/httpserver.rb (+294/-0)
test/tool/lib/webrick/httpservlet.rb (+23/-0)
test/tool/lib/webrick/httpservlet/abstract.rb (+152/-0)
test/tool/lib/webrick/httpservlet/cgi_runner.rb (+47/-0)
test/tool/lib/webrick/httpservlet/cgihandler.rb (+126/-0)
test/tool/lib/webrick/httpservlet/erbhandler.rb (+88/-0)
test/tool/lib/webrick/httpservlet/filehandler.rb (+552/-0)
test/tool/lib/webrick/httpservlet/prochandler.rb (+47/-0)
test/tool/lib/webrick/httpstatus.rb (+194/-0)
test/tool/lib/webrick/httputils.rb (+512/-0)
test/tool/lib/webrick/httpversion.rb (+76/-0)
test/tool/lib/webrick/log.rb (+156/-0)
test/tool/lib/webrick/server.rb (+381/-0)
test/tool/lib/webrick/ssl.rb (+215/-0)
test/tool/lib/webrick/utils.rb (+265/-0)
test/tool/lib/webrick/version.rb (+18/-0)
test/tool/lib/zombie_hunter.rb (+10/-0)
test/tool/m4/_colorize_result_prepare.m4 (+33/-0)
test/tool/m4/ac_msg_result.m4 (+5/-0)
test/tool/m4/colorize_result.m4 (+9/-0)
test/tool/m4/ruby_append_option.m4 (+5/-0)
test/tool/m4/ruby_append_options.m4 (+7/-0)
test/tool/m4/ruby_check_builtin_func.m4 (+10/-0)
test/tool/m4/ruby_check_builtin_setjmp.m4 (+27/-0)
test/tool/m4/ruby_check_printf_prefix.m4 (+29/-0)
test/tool/m4/ruby_check_setjmp.m4 (+17/-0)
test/tool/m4/ruby_check_signedness.m4 (+5/-0)
test/tool/m4/ruby_check_sizeof.m4 (+108/-0)
test/tool/m4/ruby_check_sysconf.m4 (+13/-0)
test/tool/m4/ruby_cppoutfile.m4 (+18/-0)
test/tool/m4/ruby_decl_attribute.m4 (+45/-0)
test/tool/m4/ruby_default_arch.m4 (+11/-0)
test/tool/m4/ruby_define_if.m4 (+12/-0)
test/tool/m4/ruby_defint.m4 (+40/-0)
test/tool/m4/ruby_dtrace_available.m4 (+20/-0)
test/tool/m4/ruby_dtrace_postprocess.m4 (+30/-0)
test/tool/m4/ruby_func_attribute.m4 (+7/-0)
test/tool/m4/ruby_mingw32.m4 (+24/-0)
test/tool/m4/ruby_prepend_option.m4 (+5/-0)
test/tool/m4/ruby_prog_gnu_ld.m4 (+10/-0)
test/tool/m4/ruby_replace_funcs.m4 (+13/-0)
test/tool/m4/ruby_replace_type.m4 (+58/-0)
test/tool/m4/ruby_rm_recursive.m4 (+18/-0)
test/tool/m4/ruby_setjmp_type.m4 (+52/-0)
test/tool/m4/ruby_stack_grow_direction.m4 (+30/-0)
test/tool/m4/ruby_try_cflags.m4 (+12/-0)
test/tool/m4/ruby_try_cxxflags.m4 (+17/-0)
test/tool/m4/ruby_try_ldflags.m4 (+15/-0)
test/tool/m4/ruby_type_attribute.m4 (+8/-0)
test/tool/m4/ruby_universal_arch.m4 (+90/-0)
test/tool/m4/ruby_werror_flag.m4 (+18/-0)
test/tool/make-snapshot (+656/-0)
test/tool/make_hgraph.rb (+95/-0)
test/tool/mdoc2man.rb (+505/-0)
test/tool/merger.rb (+371/-0)
test/tool/mjit_archflag.sh (+40/-0)
test/tool/mjit_tabs.rb (+65/-0)
test/tool/mk_builtin_loader.rb (+361/-0)
test/tool/mkconfig.rb (+380/-0)
test/tool/mkrunnable.rb (+139/-0)
test/tool/node_name.rb (+8/-0)
test/tool/parse.rb (+16/-0)
test/tool/prereq.status (+44/-0)
test/tool/probes_to_wiki.rb (+16/-0)
test/tool/pure_parser.rb (+24/-0)
test/tool/rbinstall.rb (+890/-2026)
test/tool/rbuninstall.rb (+73/-0)
test/tool/redmine-backporter.rb (+593/-0)
test/tool/release.sh (+19/-0)
test/tool/releng/gen-mail.rb (+50/-0)
test/tool/releng/gen-release-note.rb (+36/-0)
test/tool/releng/update-www-meta.rb (+213/-0)
test/tool/rmdirs (+14/-0)
test/tool/ruby_vm/controllers/application_controller.rb (+25/-0)
test/tool/ruby_vm/helpers/c_escape.rb (+128/-0)
test/tool/ruby_vm/helpers/dumper.rb (+113/-0)
test/tool/ruby_vm/helpers/scanner.rb (+53/-0)
test/tool/ruby_vm/loaders/insns_def.rb (+100/-0)
test/tool/ruby_vm/loaders/opt_insn_unif_def.rb (+34/-0)
test/tool/ruby_vm/loaders/opt_operand_def.rb (+56/-0)
test/tool/ruby_vm/loaders/vm_opts_h.rb (+37/-0)
test/tool/ruby_vm/models/attribute.rb (+59/-0)
test/tool/ruby_vm/models/bare_instructions.rb (+240/-0)
test/tool/ruby_vm/models/c_expr.rb (+41/-0)
test/tool/ruby_vm/models/instructions.rb (+22/-0)
test/tool/ruby_vm/models/instructions_unifications.rb (+43/-0)
test/tool/ruby_vm/models/operands_unifications.rb (+142/-0)
test/tool/ruby_vm/models/trace_instructions.rb (+71/-0)
test/tool/ruby_vm/models/typemap.rb (+62/-0)
test/tool/ruby_vm/scripts/converter.rb (+29/-0)
test/tool/ruby_vm/scripts/insns2vm.rb (+93/-0)
test/tool/ruby_vm/tests/.gitkeep (+0/-0)
test/tool/ruby_vm/views/_attributes.erb (+35/-0)
test/tool/ruby_vm/views/_c_expr.erb (+17/-0)
test/tool/ruby_vm/views/_comptime_insn_stack_increase.erb (+62/-0)
test/tool/ruby_vm/views/_copyright.erb (+31/-0)
test/tool/ruby_vm/views/_insn_entry.erb (+76/-0)
test/tool/ruby_vm/views/_insn_len_info.erb (+21/-0)
test/tool/ruby_vm/views/_insn_name_info.erb (+38/-0)
test/tool/ruby_vm/views/_insn_operand_info.erb (+46/-0)
test/tool/ruby_vm/views/_insn_sp_pc_dependency.erb (+27/-0)
test/tool/ruby_vm/views/_insn_type_chars.erb (+13/-0)
test/tool/ruby_vm/views/_leaf_helpers.erb (+55/-0)
test/tool/ruby_vm/views/_mjit_compile_getinlinecache.erb (+31/-0)
test/tool/ruby_vm/views/_mjit_compile_insn.erb (+92/-0)
test/tool/ruby_vm/views/_mjit_compile_insn_body.erb (+129/-0)
test/tool/ruby_vm/views/_mjit_compile_invokebuiltin.erb (+29/-0)
test/tool/ruby_vm/views/_mjit_compile_ivar.erb (+101/-0)
test/tool/ruby_vm/views/_mjit_compile_pc_and_sp.erb (+38/-0)
test/tool/ruby_vm/views/_mjit_compile_send.erb (+117/-0)
test/tool/ruby_vm/views/_notice.erb (+22/-0)
test/tool/ruby_vm/views/_sp_inc_helpers.erb (+37/-0)
test/tool/ruby_vm/views/_trace_instruction.erb (+16/-0)
test/tool/ruby_vm/views/insns.inc.erb (+26/-0)
test/tool/ruby_vm/views/insns_info.inc.erb (+22/-0)
test/tool/ruby_vm/views/mjit_compile.inc.erb (+110/-0)
test/tool/ruby_vm/views/opt_sc.inc.erb (+40/-0)
test/tool/ruby_vm/views/optinsn.inc.erb (+71/-0)
test/tool/ruby_vm/views/optunifs.inc.erb (+21/-0)
test/tool/ruby_vm/views/vm.inc.erb (+30/-0)
test/tool/ruby_vm/views/vmtc.inc.erb (+21/-0)
test/tool/run-gcov.rb (+54/-0)
test/tool/run-lcov.rb (+164/-0)
test/tool/runruby.rb (+176/-0)
test/tool/search-cgvars.rb (+55/-0)
test/tool/strip-rdoc.rb (+26/-0)
test/tool/sync_default_gems.rb (+538/-0)
test/tool/test-bundled-gems.rb (+55/-0)
test/tool/test-coverage.rb (+118/-0)
test/tool/test/minitest/metametameta.rb (+71/-0)
test/tool/test/minitest/test_minitest_benchmark.rb (+131/-0)
test/tool/test/minitest/test_minitest_mock.rb (+404/-0)
test/tool/test/minitest/test_minitest_unit.rb (+15/-3)
test/tool/test/runner.rb (+23/-0)
test/tool/test/test_jisx0208.rb (+40/-0)
test/tool/test/testunit/test4test_hideskip.rb (+10/-0)
test/tool/test/testunit/test4test_redefinition.rb (+14/-0)
test/tool/test/testunit/test4test_sorting.rb (+18/-0)
test/tool/test/testunit/test_assertion.rb (+29/-0)
test/tool/test/testunit/test_hideskip.rb (+21/-0)
test/tool/test/testunit/test_parallel.rb (+204/-0)
test/tool/test/testunit/test_redefinition.rb (+16/-0)
test/tool/test/testunit/test_sorting.rb (+18/-0)
test/tool/test/testunit/tests_for_parallel/ptest_first.rb (+8/-0)
test/tool/test/testunit/tests_for_parallel/ptest_forth.rb (+30/-0)
test/tool/test/testunit/tests_for_parallel/ptest_second.rb (+12/-0)
test/tool/test/testunit/tests_for_parallel/ptest_third.rb (+11/-0)
test/tool/test/testunit/tests_for_parallel/runner.rb (+14/-0)
test/tool/test/webrick/.htaccess (+1/-0)
test/tool/test/webrick/test_cgi.rb (+170/-0)
test/tool/test/webrick/test_config.rb (+17/-0)
test/tool/test/webrick/test_cookie.rb (+141/-0)
test/tool/test/webrick/test_do_not_reverse_lookup.rb (+71/-0)
test/tool/test/webrick/test_filehandler.rb (+402/-0)
test/tool/test/webrick/test_htgroup.rb (+19/-0)
test/tool/test/webrick/test_htmlutils.rb (+21/-0)
test/tool/test/webrick/test_httpauth.rb (+366/-0)
test/tool/test/webrick/test_httpproxy.rb (+466/-0)
test/tool/test/webrick/test_httprequest.rb (+488/-0)
test/tool/test/webrick/test_httpresponse.rb (+282/-0)
test/tool/test/webrick/test_https.rb (+112/-0)
test/tool/test/webrick/test_httpserver.rb (+543/-0)
test/tool/test/webrick/test_httpstatus.rb (+35/-0)
test/tool/test/webrick/test_httputils.rb (+101/-0)
test/tool/test/webrick/test_httpversion.rb (+41/-0)
test/tool/test/webrick/test_server.rb (+191/-0)
test/tool/test/webrick/test_ssl_server.rb (+67/-0)
test/tool/test/webrick/test_utils.rb (+110/-0)
test/tool/test/webrick/utils.rb (+82/-0)
test/tool/test/webrick/webrick.cgi (+38/-0)
test/tool/test/webrick/webrick.rhtml (+4/-0)
test/tool/test/webrick/webrick_long_filename.cgi (+36/-0)
test/tool/transcode-tblgen.rb (+1027/-867)
test/tool/transform_mjit_header.rb (+326/-0)
test/tool/travis_retry.sh (+13/-0)
test/tool/update-bundled_gems.rb (+14/-0)
test/tool/update-deps (+637/-0)
test/tool/vtlh.rb (+17/-0)
test/tool/ytab.sed (+80/-0)
tool/dsl_ripper.rb (+231/-0)
tool/generate_parser (+52/-13)
tool/maven-ci-script.sh (+2/-2)
tool/optimize_parser.rb (+35/-28)
tool/patch_parser.rb (+1/-1)
tool/preproc_ripper.rb (+112/-0)
tool/preprocess_parser.rb (+41/-0)
tool/release.sh (+56/-0)
tool/results_to_excludes.rb (+42/-0)
tool/sync_ruby_files.rb (+1/-46)
Conflict in debian/changelog
Conflict in debian/patches/series
Reviewer Review Type Date Requested Status
git-ubuntu import Pending
Review via email: mp+460986@code.launchpad.net

This proposal has been superseded by a proposal from 2024-02-22.

Description of the change

This is a sync merge proposal.

To post a comment you must log in.

Unmerged commits

306c15d... by Vladimir Petko

update maintainer

7933535... by Vladimir Petko

changelog

99ff39c... by Jerome Charaoui

9.4.5.0+ds-1 (patches unapplied)

Imported using git-ubuntu import.

3de720d... by Jerome Charaoui

9.4.5.0+ds-1~exp1 (patches unapplied)

Imported using git-ubuntu import.

75da7ff... by Jerome Charaoui

9.4.3.0+ds-1~exp2 (patches unapplied)

Imported using git-ubuntu import.

ae8b688... by Jerome Charaoui

9.4.3.0+ds-1~exp1 (patches unapplied)

Imported using git-ubuntu import.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 117f022..d1f1d28 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -10,72 +10,97 @@ permissions:
1010
11jobs:11jobs:
1212
13 mvn-test-m1:13 rake-test:
14 runs-on: [self-hosted, macos, aarch64]14 runs-on: ubuntu-latest
1515
16 strategy:16 strategy:
17 matrix:17 matrix:
18 package-flags: ['-Ptest']18 target: ['test:jruby:int', 'spec:ruby:fast', 'spec:ji', 'spec:ffi']
19 # dist, complete, and osgi do not pass on 17 yet19 java-version: ['8', '11', '17', '21']
20 java-version: ['11']
21 fail-fast: false20 fail-fast: false
2221
23 name: mvn ${{ matrix.package-flags }} (Java ${{ matrix.java-version }} Apple aarch64)22 name: rake ${{ matrix.target }} (Java ${{ matrix.java-version }})
2423
25 steps:24 steps:
26 - name: checkout25 - name: Bootstrap build
27 uses: actions/checkout@v226 uses: jruby/jruby-ci-build@v1
28 - name: cache dependencies
29 uses: actions/cache@v2
30 with:
31 path: ~/.m2
32 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.rb') }}
33 restore-keys: ${{ runner.os }}-m2
34 - name: set up java ${{ matrix.java-version }}27 - name: set up java ${{ matrix.java-version }}
35 uses: actions/setup-java@v228 uses: actions/setup-java@v3
36 with:29 with:
37 distribution: 'zulu'30 distribution: 'zulu'
38 java-version: ${{ matrix.java-version }}31 java-version: ${{ matrix.java-version }}
39 architecture: arm32 cache: 'maven'
40 - name: bootstrap33 - name: rake ${{ matrix.target }}
41 run: mvn -Pbootstrap clean package34 run: bin/jruby -S rake ${{ matrix.target }}
42 - name: mvn package ${{ matrix.package-flags }}35
43 run: tool/maven-ci-script.sh36 rake-test-8:
44 env:37 runs-on: ubuntu-latest
45 PHASE: 'package ${{ matrix.package-flags }}'
4638
47 spec-m1:
48 runs-on: [self-hosted, macos, aarch64]
49
50 strategy:39 strategy:
51 matrix:40 matrix:
52 target: ['spec:ffi']41 target: ['test:mri:core:jit', 'test:mri:extra', 'spec:ruby:fast:jit', 'test:mri:stdlib', 'spec:ruby:slow', 'spec:ruby:debug', 'test:jruby:aot', 'test:slow_suites', 'spec:compiler', 'spec:regression', 'spec:jruby', 'spec:jrubyc', 'spec:profiler']
53 java-version: ['11']
54 fail-fast: false42 fail-fast: false
5543
56 name: rake ${{ matrix.target }} (Java ${{ matrix.java-version }} Apple aarch64)44 name: rake ${{ matrix.target }} (Java 8)
5745
58 steps:46 steps:
59 - name: checkout47 - name: Bootstrap build
60 uses: actions/checkout@v248 uses: jruby/jruby-ci-build@v1
61 - name: cache dependencies49 - name: set up java 8
62 uses: actions/cache@v250 uses: actions/setup-java@v3
51 with:
52 distribution: 'zulu'
53 java-version: '8'
54 cache: 'maven'
55 - name: rake ${{ matrix.target }}
56 run: bin/jruby -S rake ${{ matrix.target }}
57
58 jruby-tests-dev:
59 runs-on: ubuntu-latest
60
61 strategy:
62 fail-fast: false
63
64 env:
65 JRUBY_OPTS: '--dev'
66
67 steps:
68 - name: Bootstrap build
69 uses: jruby/jruby-ci-build@v1
70 - name: set up java 8
71 uses: actions/setup-java@v3
63 with:72 with:
64 path: ~/.m273 distribution: 'temurin'
65 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.rb') }}74 java-version: 8
66 restore-keys: ${{ runner.os }}-m275 cache: 'maven'
76 - name: rake test:jruby
77 run: bin/jruby --dev -S rake test:jruby
78
79 rake-test-17-indy:
80 runs-on: ubuntu-latest
81
82 strategy:
83 matrix:
84 target: ['test:mri:core:jit', 'test:jruby:jit', 'spec:compiler', 'spec:ruby:fast:jit', 'spec:ji']
85 java-version: ['17', '21']
86 fail-fast: false
87
88 name: rake ${{ matrix.target }} (Java ${{ matrix.java-version }} +indy)
89
90 env:
91 JRUBY_OPTS: '-Xcompile.invokedynamic -X+C -Xjit.threshold=0'
92
93 steps:
94 - name: Bootstrap build
95 uses: jruby/jruby-ci-build@v1
67 - name: set up java ${{ matrix.java-version }}96 - name: set up java ${{ matrix.java-version }}
68 uses: actions/setup-java@v297 uses: actions/setup-java@v3
69 with:98 with:
70 distribution: 'zulu'99 distribution: 'zulu'
71 java-version: ${{ matrix.java-version }}100 java-version: ${{ matrix.java-version }}
72 architecture: arm101 cache: 'maven'
73 - name: bootstrap
74 run: mvn -Pbootstrap clean package
75 - name: bundle install
76 run: bin/jruby --dev -S bundle install
77 - name: rake ${{ matrix.target }}102 - name: rake ${{ matrix.target }}
78 run: bin/jruby --dev -S rake ${{ matrix.target }}103 run: bin/jruby -S rake ${{ matrix.target }}
79104
80 mvn-test:105 mvn-test:
81 runs-on: ubuntu-latest106 runs-on: ubuntu-latest
@@ -83,65 +108,72 @@ jobs:
83 strategy:108 strategy:
84 matrix:109 matrix:
85 package-flags: ['-Pmain', '-Pdist', '-Pcomplete', '-Posgi', '-Ptest', '-Pmain,test -Dinvoker.test=extended']110 package-flags: ['-Pmain', '-Pdist', '-Pcomplete', '-Posgi', '-Ptest', '-Pmain,test -Dinvoker.test=extended']
86 # dist, complete, and osgi do not pass on 17 yet111 java-version: [8, 11, 21]
87 java-version: ['8', '11']
88 fail-fast: false112 fail-fast: false
89113
90 name: mvn ${{ matrix.package-flags }} (Java ${{ matrix.java-version }})114 name: mvn ${{ matrix.package-flags }} (Java ${{ matrix.java-version }})
91115
92 steps:116 steps:
93 - name: checkout117 - name: Bootstrap build
94 uses: actions/checkout@v2118 uses: jruby/jruby-ci-build@v1
95 - name: cache dependencies
96 uses: actions/cache@v2
97 with:
98 path: ~/.m2
99 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.rb') }}
100 restore-keys: ${{ runner.os }}-m2
101 - name: set up java ${{ matrix.java-version }}119 - name: set up java ${{ matrix.java-version }}
102 uses: actions/setup-java@v2120 uses: actions/setup-java@v3
103 with:121 with:
104 distribution: 'zulu'122 distribution: 'zulu'
105 java-version: ${{ matrix.java-version }}123 java-version: ${{ matrix.java-version }}
106 - name: bootstrap124 cache: 'maven'
107 run: mvn -Pbootstrap clean package
108 - name: mvn package ${{ matrix.package-flags }}125 - name: mvn package ${{ matrix.package-flags }}
109 run: tool/maven-ci-script.sh126 run: tool/maven-ci-script.sh
110 env:127 env:
111 PHASE: 'package ${{ matrix.package-flags }}'128 PHASE: 'package ${{ matrix.package-flags }}'
112129
113 mvn-test-8:130 mvn-test-extended:
114 runs-on: ubuntu-latest131 runs-on: ubuntu-latest
115132
116 strategy:133 strategy:
117 matrix:134 matrix:
118 # jruby-jars phase only passes on 8
119 package-flags: ['-Pjruby-jars', '-Pjruby-jars,test -Dinvoker.test=extended', '-Pjruby_complete_jar_extended -Dinvoker.skip=true']135 package-flags: ['-Pjruby-jars', '-Pjruby-jars,test -Dinvoker.test=extended', '-Pjruby_complete_jar_extended -Dinvoker.skip=true']
136 java-version: [11, 17]
120 fail-fast: false137 fail-fast: false
121138
122 name: mvn ${{ matrix.package-flags }} (Java 8)139
140 name: mvn ${{ matrix.package-flags }} (Java ${{ matrix.java-version }})
123141
124 steps:142 steps:
125 - name: checkout143 - name: Bootstrap build
126 uses: actions/checkout@v2144 uses: jruby/jruby-ci-build@v1
127 - name: cache dependencies145 - name: set up java ${{ matrix.java-version }}
128 uses: actions/cache@v2146 uses: actions/setup-java@v3
129 with:
130 path: ~/.m2
131 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.rb') }}
132 restore-keys: ${{ runner.os }}-m2
133 - name: set up java 8
134 uses: actions/setup-java@v2
135 with:147 with:
136 distribution: 'zulu'148 distribution: temurin
137 java-version: '8'149 java-version: ${{ matrix.java-version }}
138 - name: bootstrap150 cache: 'maven'
139 run: mvn -Pbootstrap clean package
140 - name: mvn package ${{ matrix.package-flags }}151 - name: mvn package ${{ matrix.package-flags }}
141 run: tool/maven-ci-script.sh152 run: tool/maven-ci-script.sh
142 env:153 env:
143 PHASE: 'package ${{ matrix.package-flags }}'154 PHASE: 'package ${{ matrix.package-flags }}'
144155
156 regression-specs-jit:
157 runs-on: ubuntu-latest
158
159 strategy:
160 fail-fast: false
161
162 env:
163 JRUBY_OPTS: '-Xjit.threshold=0'
164
165 steps:
166 - name: Bootstrap build
167 uses: jruby/jruby-ci-build@v1
168 - name: set up java 8
169 uses: actions/setup-java@v3
170 with:
171 distribution: 'zulu'
172 java-version: 8
173 cache: 'maven'
174 - name: rake spec:regression
175 run: bin/jruby -S rake spec:regression
176
145 mvn-test-windows:177 mvn-test-windows:
146 runs-on: windows-latest178 runs-on: windows-latest
147179
@@ -155,27 +187,16 @@ jobs:
155 JDK_JAVA_OPTS: "-Djdk.io.File.enableADS=true"187 JDK_JAVA_OPTS: "-Djdk.io.File.enableADS=true"
156188
157 steps:189 steps:
158 - name: checkout190 - name: Bootstrap build
159 uses: actions/checkout@v2191 uses: jruby/jruby-ci-build@v1
160 - name: set up java 11192 - name: set up java 11
161 uses: actions/setup-java@v3193 uses: actions/setup-java@v3
162 with:194 with:
163 distribution: 'zulu'195 distribution: 'zulu'
164 java-version: 11196 java-version: 11
165 - name: cache dependencies197 cache: 'maven'
166 uses: actions/cache@v2
167 with:
168 path: ~/.m2
169 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
170 restore-keys: ${{ runner.os }}-m2
171 - name: bootstrap
172 run: mvn -Pbootstrap clean package
173 - name: install bundler
174 run: bin/jruby --dev -S gem install bundler
175 - name: bundle install
176 run: bin/jruby --dev -S bundle install
177 - name: rake test:jruby198 - name: rake test:jruby
178 run: bin/jruby --dev -S rake test:jruby TESTOPTS="--no-show-detail-immediately"199 run: bin/jruby -S rake test:jruby TESTOPTS="--no-show-detail-immediately"
179 env:200 env:
180 JRUBY_OPTS: ''201 JRUBY_OPTS: ''
181 - name: mvn -P test202 - name: mvn -P test
@@ -188,121 +209,18 @@ jobs:
188209
189 steps:210 steps:
190 - name: checkout211 - name: checkout
191 uses: actions/checkout@v2212 uses: actions/checkout@v3
192 - name: cache dependencies
193 uses: actions/cache@v2
194 with:
195 path: ~/.m2
196 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.rb') }}
197 restore-keys: ${{ runner.os }}-m2
198 - name: set up java 8213 - name: set up java 8
199 uses: actions/setup-java@v2214 uses: actions/setup-java@v3
200 with:215 with:
201 distribution: 'zulu'216 distribution: 'zulu'
202 java-version: '8'217 java-version: '8'
218 cache: 'maven'
203 - name: dependency convergence219 - name: dependency convergence
204 run: tool/maven-ci-script.sh220 run: tool/maven-ci-script.sh
205 env:221 env:
206 PHASE: 'install -Pmain -Dinvoker.test=GH-6081*'222 PHASE: 'install -Pmain -Dinvoker.test=GH-6081*'
207223
208 rake-test:
209 runs-on: ubuntu-latest
210
211 strategy:
212 matrix:
213 target: ['test:mri:core:jit', 'spec:ruby:fast', 'spec:ruby:fast:jit', 'spec:ji', 'spec:ffi']
214 java-version: ['8', '11', '17']
215 fail-fast: false
216
217 name: rake ${{ matrix.target }} (Java ${{ matrix.java-version }})
218
219 steps:
220 - name: checkout
221 uses: actions/checkout@v2
222 - name: cache dependencies
223 uses: actions/cache@v2
224 with:
225 path: ~/.m2
226 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.rb') }}
227 restore-keys: ${{ runner.os }}-m2
228 - name: set up java ${{ matrix.java-version }}
229 uses: actions/setup-java@v2
230 with:
231 distribution: 'zulu'
232 java-version: ${{ matrix.java-version }}
233 - name: bootstrap
234 run: mvn -Pbootstrap clean package
235 - name: bundle install
236 run: bin/jruby --dev -S bundle install
237 - name: rake ${{ matrix.target }}
238 run: bin/jruby --dev -S rake ${{ matrix.target }}
239
240 rake-test-indy:
241 runs-on: ubuntu-latest
242
243 strategy:
244 matrix:
245 target: ['test:jruby', 'spec:compiler']
246 java-version: ['8', '11', '17']
247 fail-fast: false
248
249 name: rake ${{ matrix.target }} (Java ${{ matrix.java-version }} +indy)
250
251 env:
252 JRUBY_OPTS: '-Xcompile.invokedynamic'
253
254 steps:
255 - name: checkout
256 uses: actions/checkout@v2
257 - name: cache dependencies
258 uses: actions/cache@v2
259 with:
260 path: ~/.m2
261 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.rb') }}
262 restore-keys: ${{ runner.os }}-m2
263 - name: set up java ${{ matrix.java-version }}
264 uses: actions/setup-java@v2
265 with:
266 distribution: 'zulu'
267 java-version: ${{ matrix.java-version }}
268 - name: bootstrap
269 run: mvn -Pbootstrap clean package
270 - name: bundle install
271 run: bin/jruby --dev -S bundle install
272 - name: rake ${{ matrix.target }}
273 run: bin/jruby --dev -S rake ${{ matrix.target }}
274
275 rake-test-8:
276 runs-on: ubuntu-latest
277
278 strategy:
279 matrix:
280 target: ['test:mri:core:int', 'test:mri:extra', 'test:jruby:int', 'test:mri:stdlib', 'spec:ruby:slow', 'spec:ruby:debug', 'test:jruby:aot', 'test:slow_suites', 'spec:compiler', 'spec:regression', 'spec:jruby', 'spec:jrubyc', 'spec:profiler']
281 fail-fast: false
282
283 name: rake ${{ matrix.target }} (Java 8)
284
285 steps:
286 - name: checkout
287 uses: actions/checkout@v2
288 - name: cache dependencies
289 uses: actions/cache@v2
290 with:
291 path: ~/.m2
292 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.rb') }}
293 restore-keys: ${{ runner.os }}-m2
294 - name: set up java 8
295 uses: actions/setup-java@v2
296 with:
297 distribution: 'zulu'
298 java-version: '8'
299 - name: bootstrap
300 run: mvn -Pbootstrap clean package
301 - name: bundle install
302 run: bin/jruby --dev -S bundle install
303 - name: rake ${{ matrix.target }}
304 run: bin/jruby --dev -S rake ${{ matrix.target }}
305
306 test-versions:224 test-versions:
307 runs-on: ubuntu-latest225 runs-on: ubuntu-latest
308226
@@ -312,18 +230,13 @@ jobs:
312 name: Verify build artifacts230 name: Verify build artifacts
313 steps:231 steps:
314 - name: checkout232 - name: checkout
315 uses: actions/checkout@v2233 uses: actions/checkout@v3
316 - name: cache dependencies
317 uses: actions/cache@v2
318 with:
319 path: ~/.m2
320 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.rb') }}
321 restore-keys: ${{ runner.os }}-m2
322 - name: set up java 8234 - name: set up java 8
323 uses: actions/setup-java@v2235 uses: actions/setup-java@v3
324 with:236 with:
325 distribution: 'zulu'237 distribution: 'zulu'
326 java-version: 8238 java-version: 8
239 cache: 'maven'
327 - name: maven-ci-script.sh240 - name: maven-ci-script.sh
328 run: tool/maven-ci-script.sh241 run: tool/maven-ci-script.sh
329 env:242 env:
@@ -337,33 +250,28 @@ jobs:
337250
338 services:251 services:
339 postgres:252 postgres:
340 image: postgres:11.5253 image: postgres:latest
341 ports: ["5432:5432"]254 ports: [ "5432:5432" ]
342 options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5255 options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
256 env:
257 POSTGRES_PASSWORD: postgres
343 mysql:258 mysql:
344 image: mysql:5.7259 image: mysql:latest
345 env:260 env:
346 MYSQL_ROOT_PASSWORD: root261 MYSQL_ROOT_PASSWORD: root
347 MYSQL_DATABASE: sequel_test262 MYSQL_DATABASE: sequel_test
348 ports: ["3306:3306"]263 ports: [ "3306:3306" ]
349 options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3264 options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
350265
351 steps:266 steps:
352 - name: checkout267 - name: Bootstrap build
353 uses: actions/checkout@v2268 uses: jruby/jruby-ci-build@v1
354 - name: cache dependencies269 - name: set up java
355 uses: actions/cache@v2270 uses: actions/setup-java@v3
356 with:
357 path: ~/.m2
358 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.rb') }}
359 restore-keys: ${{ runner.os }}-m2
360 - name: set up java 8
361 uses: actions/setup-java@v2
362 with:271 with:
363 distribution: 'zulu'272 distribution: 'temurin'
364 java-version: 8273 java-version: 11
365 - name: bootstrap274 cache: 'maven'
366 run: mvn -Pbootstrap clean package
367 - name: sequel275 - name: sequel
368 run: tool/sequel-github-actions.sh276 run: tool/sequel-github-actions.sh
369277
@@ -374,143 +282,118 @@ jobs:
374 fail-fast: false282 fail-fast: false
375283
376 steps:284 steps:
377 - name: checkout285 - name: Bootstrap build
378 uses: actions/checkout@v2286 uses: jruby/jruby-ci-build@v1
379 - name: cache dependencies
380 uses: actions/cache@v2
381 with:
382 path: ~/.m2
383 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.rb') }}
384 restore-keys: ${{ runner.os }}-m2
385 - name: set up java 8287 - name: set up java 8
386 uses: actions/setup-java@v2288 uses: actions/setup-java@v3
387 with:289 with:
388 distribution: 'zulu'290 distribution: 'temurin'
389 java-version: 8291 java-version: 8
390 - name: bootstrap292 cache: 'maven'
391 run: mvn -Pbootstrap clean package
392 - name: concurrent-ruby293 - name: concurrent-ruby
393 run: tool/concurrent-ruby-github-actions.sh294 run: tool/concurrent-ruby-github-actions.sh
394295
395 jruby-tests-dev:296# mvn-test-m1:
396 runs-on: ubuntu-latest297# runs-on: [self-hosted, macos, aarch64]
397298#
398 strategy:299# strategy:
399 fail-fast: false300# matrix:
301# package-flags: ['-Ptest']
302# # dist, complete, and osgi do not pass on 17 yet
303# java-version: ['11']
304# fail-fast: false
305#
306# name: mvn ${{ matrix.package-flags }} (Java ${{ matrix.java-version }} Apple aarch64)
307#
308# steps:
309# - name: checkout
310# uses: actions/checkout@v3
311# - name: set up java ${{ matrix.java-version }}
312# uses: actions/setup-java@v3
313# with:
314# distribution: 'zulu'
315# java-version: ${{ matrix.java-version }}
316# architecture: arm
317# - name: bootstrap
318# run: ./mvnw -Pbootstrap clean package
319# - name: mvn package ${{ matrix.package-flags }}
320# run: tool/maven-ci-script.sh
321# env:
322# PHASE: 'package ${{ matrix.package-flags }}'
323#
324# spec-m1:
325# runs-on: [self-hosted, macos, aarch64]
326#
327# strategy:
328# matrix:
329# target: ['spec:ffi']
330# java-version: ['11']
331# fail-fast: false
332#
333# name: rake ${{ matrix.target }} (Java ${{ matrix.java-version }} Apple aarch64)
334#
335# steps:
336# - name: Bootstrap build
337# uses: jruby/jruby-ci-build@v1
338# - name: set up java ${{ matrix.java-version }}
339# uses: actions/setup-java@v3
340# with:
341# distribution: 'zulu'
342# java-version: ${{ matrix.java-version }}
343# architecture: arm
344# cache: 'maven'
345# - name: rake ${{ matrix.target }}
346## run: "bin/jruby -S rake ${{ matrix.target }}"
347# run: "true"
400348
401 env:349 maven-test-openj9-8:
402 JRUBY_OPTS: '--dev'
403
404 steps:
405 - name: checkout
406 uses: actions/checkout@v2
407 - name: cache dependencies
408 uses: actions/cache@v2
409 with:
410 path: ~/.m2
411 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.rb') }}
412 restore-keys: ${{ runner.os }}-m2
413 - name: set up java 8
414 uses: actions/setup-java@v2
415 with:
416 distribution: 'zulu'
417 java-version: 8
418 - name: bootstrap
419 run: mvn -Pbootstrap clean package
420 - name: bundle install
421 run: bin/jruby --dev -S bundle install
422 - name: rake test:jruby
423 run: bin/jruby --dev -S rake test:jruby
424
425 ji-specs-indy:
426 runs-on: ubuntu-latest350 runs-on: ubuntu-latest
427351
428 strategy:352 name: mvn -Ptest (OpenJ9 Java 17)
429 fail-fast: false
430
431 env:
432 JRUBY_OPTS: '-Xcompile.invokedynamic'
433353
434 steps:354 steps:
435 - name: checkout355 - name: Bootstrap build
436 uses: actions/checkout@v2356 uses: jruby/jruby-ci-build@v1
437 - name: cache dependencies357 - name: set up java ${{ matrix.java-version }}
438 uses: actions/cache@v2358 uses: actions/setup-java@v3
439 with:
440 path: ~/.m2
441 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.rb') }}
442 restore-keys: ${{ runner.os }}-m2
443 - name: set up java 8
444 uses: actions/setup-java@v2
445 with:359 with:
446 distribution: 'zulu'360 distribution: 'adopt-openj9'
447 java-version: 8361 java-version: '17'
448 - name: bootstrap362 cache: 'maven'
449 run: mvn -Pbootstrap clean package363 - name: test profile
450 - name: bundle install364 run: "tool/maven-ci-script.sh"
451 run: bin/jruby --dev -S bundle install365 env:
452 - name: rake spec:ji366 PHASE: 'package -Ptest'
453 run: bin/jruby --dev -S rake spec:ji
454367
455 regression-specs-jit:368 rake-test-wip-8:
456 runs-on: ubuntu-latest369 runs-on: ubuntu-latest
457370
458 strategy:371 strategy:
372 matrix:
373 target: ['test:mri:core_wip', 'test:mri:stdlib_wip']
459 fail-fast: false374 fail-fast: false
460375
461 env:376 name: rake ${{ matrix.target }} (Java 8)
462 JRUBY_OPTS: '-Xjit.threshold=0'
463377
464 steps:378 steps:
465 - name: checkout379 - name: Bootstrap build
466 uses: actions/checkout@v2380 uses: jruby/jruby-ci-build@v1
467 - name: cache dependencies
468 uses: actions/cache@v2
469 with:
470 path: ~/.m2
471 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.rb') }}
472 restore-keys: ${{ runner.os }}-m2
473 - name: set up java 8381 - name: set up java 8
474 uses: actions/setup-java@v2382 uses: actions/setup-java@v3
475 with:383 with:
476 distribution: 'zulu'384 distribution: 'zulu'
477 java-version: 8
478 - name: bootstrap
479 run: mvn -Pbootstrap clean package
480 - name: bundle install
481 run: bin/jruby --dev -S bundle install
482 - name: rake spec:regression
483 run: bin/jruby --dev -S rake spec:regression
484
485 maven-test-openj9-8:
486 runs-on: ubuntu-latest
487
488 name: mvn -Ptest (OpenJ9 Java 8)
489
490 steps:
491 - name: checkout
492 uses: actions/checkout@v2
493 - name: cache dependencies
494 uses: actions/cache@v2
495 with:
496 path: ~/.m2
497 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.rb') }}
498 restore-keys: ${{ runner.os }}-m2
499 - name: set up java ${{ matrix.java-version }}
500 uses: actions/setup-java@v2
501 with:
502 distribution: 'adopt-openj9'
503 java-version: '8'385 java-version: '8'
504 - name: test profile386 cache: 'maven'
505 run: tool/maven-ci-script.sh387 - name: rake ${{ matrix.target }}
506 env:388 continue-on-error: true
507 PHASE: 'package -Ptest'389 run: "bin/jruby -S rake ${{ matrix.target }}"
390 - run: true
508391
509 publish-snapshot:392 publish-snapshot:
510 permissions:393 permissions:
511 contents: none394 contents: none
512 if: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/jruby-9.3' }}395 if: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/jruby-9.3' }}
513 needs: [mvn-test, mvn-test-8, mvn-test-windows, dependency-check, rake-test, rake-test-indy, rake-test-8, test-versions, sequel, concurrent-ruby, jruby-tests-dev, ji-specs-indy, regression-specs-jit, maven-test-openj9-8]396 needs: [mvn-test, mvn-test-extended, mvn-test-windows, dependency-check, rake-test, rake-test-17-indy, rake-test-8, test-versions, sequel, concurrent-ruby, jruby-tests-dev, regression-specs-jit]
514 uses: jruby/jruby/.github/workflows/snapshot-publish.yml@6cd0d4d96d9406635183d81cf91acc82cd78245f397 uses: jruby/jruby/.github/workflows/snapshot-publish.yml@6cd0d4d96d9406635183d81cf91acc82cd78245f
515 secrets:398 secrets:
516 SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}399 SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}
diff --git a/.github/workflows/nightly-snapshot-publish.yml b/.github/workflows/nightly-snapshot-publish.yml
517new file mode 100644400new file mode 100644
index 0000000..eee8db9
--- /dev/null
+++ b/.github/workflows/nightly-snapshot-publish.yml
@@ -0,0 +1,21 @@
1name: Nightly Master Snapshot
2
3on:
4 schedule:
5 - cron: '30 6 * * *'
6
7env:
8 JAVA_OPTS: '-XX:+TieredCompilation -XX:TieredStopAtLevel=1 -Xms60M -Xmx1G -XX:InitialCodeCacheSize=40M -XX:ReservedCodeCacheSize=120M'
9
10permissions:
11 contents: read
12
13jobs:
14 publish-snapshot:
15 permissions:
16 contents: none
17 if: ${{ github.ref == 'refs/heads/master' }}
18 uses: jruby/jruby/.github/workflows/snapshot-publish.yml@6cd0d4d96d9406635183d81cf91acc82cd78245f
19 secrets:
20 SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}
21 SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
diff --git a/.github/workflows/snapshot-publish.yml b/.github/workflows/snapshot-publish.yml
index 9278687..8c8049c 100644
--- a/.github/workflows/snapshot-publish.yml
+++ b/.github/workflows/snapshot-publish.yml
@@ -17,7 +17,7 @@ jobs:
1717
18 steps:18 steps:
19 - name: checkout19 - name: checkout
20 uses: actions/checkout@v220 uses: actions/checkout@v3
21 - name: set up Java21 - name: set up Java
22 uses: actions/setup-java@v222 uses: actions/setup-java@v2
23 with:23 with:
@@ -26,6 +26,11 @@ jobs:
26 server-id: sonatype-nexus-snapshots26 server-id: sonatype-nexus-snapshots
27 server-username: MAVEN_USERNAME27 server-username: MAVEN_USERNAME
28 server-password: MAVEN_PASSWORD28 server-password: MAVEN_PASSWORD
29 - name: Setup Maven Action
30 uses: s4u/setup-maven-action@v1.6.0
31 with:
32 java-version: '8'
33 maven-version: '3.8.7'
29 - name: Publish package34 - name: Publish package
30 run: ./mvnw -B clean deploy -Prelease35 run: ./mvnw -B clean deploy -Prelease
31 env:36 env:
diff --git a/.gitignore b/.gitignore
index c202f56..7b38a79 100644
--- a/.gitignore
+++ b/.gitignore
@@ -56,18 +56,31 @@ lib/ruby/gems
56# Ruby stdlib files installed from external sources56# Ruby stdlib files installed from external sources
57lib/ruby/stdlib/**/maven-metadata-local.xml57lib/ruby/stdlib/**/maven-metadata-local.xml
58lib/ruby/stdlib/*.jar58lib/ruby/stdlib/*.jar
59lib/ruby/stdlib/abbrev*
59lib/ruby/stdlib/ant*60lib/ruby/stdlib/ant*
61lib/ruby/stdlib/base64*
62lib/ruby/stdlib/benchmark*
63lib/ruby/stdlib/bigdecimal*
60lib/ruby/stdlib/bundler*64lib/ruby/stdlib/bundler*
61lib/ruby/stdlib/cmath.rb65lib/ruby/stdlib/cgi*
62lib/ruby/stdlib/csv*66lib/ruby/stdlib/csv*
67lib/ruby/stdlib/debug*
68lib/ruby/stdlib/delegate*
63lib/ruby/stdlib/did_you_mean*69lib/ruby/stdlib/did_you_mean*
64lib/ruby/stdlib/e2mmap*70lib/ruby/stdlib/digest*
71lib/ruby/stdlib/drb*
72lib/ruby/stdlib/English*
73lib/ruby/stdlib/erb*
74lib/ruby/stdlib/error_highlight*
65lib/ruby/stdlib/ffi*75lib/ruby/stdlib/ffi*
66lib/ruby/stdlib/fileutils.rb76lib/ruby/stdlib/fileutils*
77lib/ruby/stdlib/find*
67lib/ruby/stdlib/forwardable*78lib/ruby/stdlib/forwardable*
68lib/ruby/stdlib/gauntlet_rdoc.rb79lib/ruby/stdlib/gauntlet_rdoc.rb
80lib/ruby/stdlib/getoptlong*
69lib/ruby/stdlib/hoe*81lib/ruby/stdlib/hoe*
70lib/ruby/stdlib/io/console*82lib/ruby/stdlib/io/console*
83lib/ruby/stdlib/io/wait*
71lib/ruby/stdlib/ipaddr*84lib/ruby/stdlib/ipaddr*
72lib/ruby/stdlib/irb*85lib/ruby/stdlib/irb*
73lib/ruby/stdlib/jar*86lib/ruby/stdlib/jar*
@@ -75,34 +88,53 @@ lib/ruby/stdlib/jline
75lib/ruby/stdlib/jopenssl*88lib/ruby/stdlib/jopenssl*
76lib/ruby/stdlib/json*89lib/ruby/stdlib/json*
77lib/ruby/stdlib/krypt*90lib/ruby/stdlib/krypt*
91lib/ruby/stdlib/libfixposix*
78lib/ruby/stdlib/logger*92lib/ruby/stdlib/logger*
79lib/ruby/stdlib/matrix*93lib/ruby/stdlib/matrix*
80lib/ruby/stdlib/minitest*94lib/ruby/stdlib/minitest*
81lib/ruby/stdlib/mutex_m.rb95lib/ruby/stdlib/mutex_m.rb
82lib/ruby/stdlib/net-telnet.rb96lib/ruby/stdlib/net/protocol*
83lib/ruby/stdlib/net/telnet*97lib/ruby/stdlib/net/http*
98lib/ruby/stdlib/observer*
99lib/ruby/stdlib/open3*
100lib/ruby/stdlib/open-uri*
101lib/ruby/stdlib/optparse*
102lib/ruby/stdlib/optionparser*
84lib/ruby/stdlib/openssl*103lib/ruby/stdlib/openssl*
85lib/ruby/stdlib/org/104lib/ruby/stdlib/org/
86lib/ruby/stdlib/ostruct.rb105lib/ruby/stdlib/ostruct*
106lib/ruby/stdlib/pp*
107lib/ruby/stdlib/prettyprint*
87lib/ruby/stdlib/power_assert*108lib/ruby/stdlib/power_assert*
88lib/ruby/stdlib/prime*109lib/ruby/stdlib/prime*
110lib/ruby/stdlib/pstore*
89lib/ruby/stdlib/psych*111lib/ruby/stdlib/psych*
112lib/ruby/stdlib/random*
90lib/ruby/stdlib/racc*113lib/ruby/stdlib/racc*
91lib/ruby/stdlib/rake*114lib/ruby/stdlib/rake*
92lib/ruby/stdlib/rdoc*115lib/ruby/stdlib/rdoc*
93lib/ruby/stdlib/readline*116lib/ruby/stdlib/readline*
94lib/ruby/stdlib/rexml*117lib/ruby/stdlib/reline*
118lib/ruby/stdlib/resolv-replace*
119lib/ruby/stdlib/rinda*
95lib/ruby/stdlib/ripper.jar120lib/ruby/stdlib/ripper.jar
96lib/ruby/stdlib/rss*121lib/ruby/stdlib/ruby2_keywords*
97lib/ruby/stdlib/rubygems*122lib/ruby/stdlib/rubygems*
98lib/ruby/stdlib/rubygems/defaults/jruby_native.rb123lib/ruby/stdlib/rubygems/defaults/jruby_native.rb
99lib/ruby/stdlib/scanf.rb124lib/ruby/stdlib/securerandom*
100lib/ruby/stdlib/shell*125lib/ruby/stdlib/shellwords*
101lib/ruby/stdlib/sync.rb126lib/ruby/stdlib/singleton*
102lib/ruby/stdlib/test*127lib/ruby/stdlib/stringio*
103lib/ruby/stdlib/thwait*128lib/ruby/stdlib/strscan*
129lib/ruby/stdlib/subspawn*
130lib/ruby/stdlib/time.rb
131lib/ruby/stdlib/timeout*
104lib/ruby/stdlib/tracer*132lib/ruby/stdlib/tracer*
105lib/ruby/stdlib/webrick*133lib/ruby/stdlib/tsort*
134lib/ruby/stdlib/un*
135lib/ruby/stdlib/uri*
136lib/ruby/stdlib/yaml*
137lib/ruby/stdlib/weakref*
106138
107release.properties139release.properties
108share140share
diff --git a/.mvn/extensions.xml b/.mvn/extensions.xml
index 443f848..38ba828 100644
--- a/.mvn/extensions.xml
+++ b/.mvn/extensions.xml
@@ -3,6 +3,6 @@
3 <extension>3 <extension>
4 <groupId>io.takari.polyglot</groupId>4 <groupId>io.takari.polyglot</groupId>
5 <artifactId>polyglot-ruby</artifactId>5 <artifactId>polyglot-ruby</artifactId>
6 <version>0.4.7</version>6 <version>0.4.11</version>
7 </extension>7 </extension>
8</extensions>8</extensions>
diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar
index 5fd4d50..cb28b0e 100644
9Binary files a/.mvn/wrapper/maven-wrapper.jar and b/.mvn/wrapper/maven-wrapper.jar differ9Binary files a/.mvn/wrapper/maven-wrapper.jar and b/.mvn/wrapper/maven-wrapper.jar differ
diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties
index c6046c0..70f4f50 100644
--- a/.mvn/wrapper/maven-wrapper.properties
+++ b/.mvn/wrapper/maven-wrapper.properties
@@ -1 +1,18 @@
1distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.8.1/apache-maven-3.8.1-bin.zip1# Licensed to the Apache Software Foundation (ASF) under one
2# or more contributor license agreements. See the NOTICE file
3# distributed with this work for additional information
4# regarding copyright ownership. The ASF licenses this file
5# to you under the Apache License, Version 2.0 (the
6# "License"); you may not use this file except in compliance
7# with the License. You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing,
12# software distributed under the License is distributed on an
13# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14# KIND, either express or implied. See the License for the
15# specific language governing permissions and limitations
16# under the License.
17distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.8/apache-maven-3.8.8-bin.zip
18wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar
diff --git a/BUILDING.md b/BUILDING.md
index a87c0d3..ec41470 100644
--- a/BUILDING.md
+++ b/BUILDING.md
@@ -44,7 +44,7 @@ rvm use system
4444
45After building lib/jruby.jar, JRuby can be run with the `bin/jruby` executable. If the `jruby-launcher` gem installed successfully, this will be a native45After building lib/jruby.jar, JRuby can be run with the `bin/jruby` executable. If the `jruby-launcher` gem installed successfully, this will be a native
46executable for your platform; otherwise, it will be a copy of the46executable for your platform; otherwise, it will be a copy of the
47`bin/jruby.bash` bash script.47`bin/jruby.sh` shell script.
4848
49RubyGems is installed by default, and available in `bin/gem`. It will49RubyGems is installed by default, and available in `bin/gem`. It will
50attempt to locate the `jruby` executable using `/usr/bin/env`, so you50attempt to locate the `jruby` executable using `/usr/bin/env`, so you
diff --git a/Gemfile b/Gemfile
index b22e68c..eedf471 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,3 +1,3 @@
1source 'https://rubygems.org'1source 'https://rubygems.org'
22
3gem 'rspec', '3.10.0'3gem 'rspec', '3.12.0'
diff --git a/README.md b/README.md
index 882dab5..2e480b1 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
1# JRuby - an implementation of the Ruby language on the JVM1# JRuby - an implementation of the Ruby language on the JVM
22
3Master: ![Linux](https://github.com/jruby/jruby/actions/workflows/ci.yml/badge.svg), ![Windows](https://github.com/jruby/jruby/actions/workflows/ci-windows.yml/badge.svg)3Master: [![JRuby CI](https://github.com/jruby/jruby/actions/workflows/ci.yml/badge.svg)](https://github.com/jruby/jruby/actions/workflows/ci.yml), [![JRuby CI (Windows)](https://github.com/jruby/jruby/actions/workflows/ci-windows.yml/badge.svg)](https://github.com/jruby/jruby/actions/workflows/ci-windows.yml)
49.3 branch: ![Linux](https://github.com/jruby/jruby/actions/workflows/ci.yml/badge.svg?branch=jruby-9.3), ![Windows](https://github.com/jruby/jruby/actions/workflows/ci-windows.yml/badge.svg?branch=jruby-9.3)49.3 branch: [![JRuby CI](https://github.com/jruby/jruby/actions/workflows/ci.yml/badge.svg?branch=jruby-9.3)](https://github.com/jruby/jruby/actions/workflows/ci.yml), [![JRuby CI (Windows)](https://github.com/jruby/jruby/actions/workflows/ci-windows.yml/badge.svg?branch=jruby-9.3)](https://github.com/jruby/jruby/actions/workflows/ci-windows.yml)
55
6## About6## About
77
@@ -36,7 +36,7 @@ version is very old.
36An alternative is to use one of the [Ruby version managers](https://www.ruby-lang.org/en/documentation/installation/#managers).36An alternative is to use one of the [Ruby version managers](https://www.ruby-lang.org/en/documentation/installation/#managers).
3737
38For [`rbenv`](https://github.com/sstephenson/rbenv) you will need the38For [`rbenv`](https://github.com/sstephenson/rbenv) you will need the
39[`ruby-build`](https://githubcom/sstephenson/ruby-build) plugin. You may find that your system39[`ruby-build`](https://github.com/sstephenson/ruby-build) plugin. You may find that your system
40package manager can provide these. To see which versions of JRuby are available you should run:40package manager can provide these. To see which versions of JRuby are available you should run:
4141
42```42```
diff --git a/VERSION b/VERSION
index 8e16f67..5511636 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
19.3.9.019.4.5.0
diff --git a/bin/jirb_swing b/bin/jirb_swing
index e221c8c..3a96eb5 100755
--- a/bin/jirb_swing
+++ b/bin/jirb_swing
@@ -5,6 +5,7 @@
5# Damian Steer (pldms@mac.com)5# Damian Steer (pldms@mac.com)
66
7require 'jruby'7require 'jruby'
8require 'readline'
8require 'irb'9require 'irb'
9require 'irb/completion'10require 'irb/completion'
1011
diff --git a/bin/jruby.bash b/bin/jruby.bash
11deleted file mode 10075512deleted file mode 100755
index 1cbea4f..0000000
--- a/bin/jruby.bash
+++ /dev/null
@@ -1,527 +0,0 @@
1#!/usr/bin/env bash
2# -----------------------------------------------------------------------------
3# jruby.bash - Start Script for the JRuby interpreter
4# -----------------------------------------------------------------------------
5
6# ----- Set variable defaults --------------
7
8cygwin=false
9use_exec=true
10java_opts_from_files=""
11JRUBY_SHELL=/bin/sh
12
13if [ -z "$JRUBY_OPTS" ] ; then
14 JRUBY_OPTS=""
15fi
16
17if [ -z "$JAVA_STACK" ] ; then
18 JAVA_STACK=-Xss2048k
19fi
20
21declare -a java_args
22declare -a ruby_args
23
24JAVA_CLASS_JRUBY_MAIN=org.jruby.Main
25java_class="$JAVA_CLASS_JRUBY_MAIN"
26
27# Force OpenJDK-based JVMs to use /dev/urandom for random number generation
28# See https://github.com/jruby/jruby/issues/4685 among others.
29# OpenJDK tries really hard to prevent you from using urandom.
30# See https://bugs.openjdk.java.net/browse/JDK-6202721
31# Non-file URL causes fallback to slow threaded SeedGenerator.
32# See https://bz.apache.org/bugzilla/show_bug.cgi?id=56139
33if [ -r "/dev/urandom" ]; then
34 JAVA_SECURITY_EGD="file:/dev/urandom"
35fi
36
37# Gather environment information as we go
38environment_log=$'JRuby Environment\n================='
39add_log() {
40 environment_log+=$'\n'"$1"
41}
42
43# Logic to process "arguments files" on both Java 8 and Java 9+
44unset java_opts_from_files
45process_java_opts() {
46 java_opts_file="$1"
47 if [ -r "$java_opts_file" ]; then
48 add_log
49 add_log "Adding Java options from: $java_opts_file"
50
51 while read -r line; do
52 if [ "$line" ]; then
53 add_log " $line"
54 fi
55 done < "$java_opts_file"
56
57 # On Java 9+, add an @argument for the given file.
58 # On earlier versions the file contents will be read and expanded on the Java command line.
59 if [ "$use_modules" ]; then
60 java_opts_from_files="$java_opts_from_files @$java_opts_file"
61 else
62 java_opts_from_files="$java_opts_from_files $(cat "$java_opts_file")"
63 fi
64 fi
65}
66
67# Pure shell dirname/basename
68dir_name() {
69 local filename="$1" trail
70 case $filename in
71 */*[!/]*)
72 trail=${filename##*[!/]}
73 filename=${filename%%"$trail"}
74 result=${filename%/*}
75 ;;
76 *[!/]*)
77 trail=${filename##*[!/]}
78 result="."
79 ;;
80 *)
81 result="/"
82 ;;
83 esac
84}
85
86base_name() {
87 local filename="$1" trail
88 case $filename in
89 */*[!/]*)
90 trail=${filename##*[!/]}
91 filename=${filename%%"$trail"}
92 result=${filename##*/}
93 ;;
94 *[!/]*)
95 trail=${filename##*[!/]}
96 result=${filename%%"$trail"}
97 ;;
98 *)
99 result="/"
100 ;;
101 esac
102}
103
104# Resolve all symlinks in a chain
105resolve_symlinks() {
106 cur_path="$1"
107 while [ -h "$cur_path" ]; do
108 # 1) cd to directory of the symlink
109 # 2) cd to the directory of where the symlink points
110 # 3) get the physical pwd
111 # 4) append the basename
112 sym="$(readlink "$cur_path")"
113
114 dir_name "$cur_path"
115 dirname="$result"
116
117 sym_base="$(cd -P -- "$dirname" >/dev/null && pwd -P)"
118
119 dir_name "$sym"
120 dirname="$result"
121
122 base_name "$sym"
123 basename="$result"
124
125 cur_path="$(cd "$sym_base" && cd "$dirname" && pwd -P)/$basename"
126 done
127 result="$cur_path"
128}
129
130# ----- Determine JRUBY_HOME based on this executable's path ------------------
131
132# get the absolute path of the executable
133dir_name "$BASH_SOURCE"
134BASE_DIR="$(cd -P -- "$result" >/dev/null && pwd -P)"
135base_name "$BASH_SOURCE"
136resolve_symlinks "$BASE_DIR/$result"
137SELF_PATH="$result"
138
139JRUBY_HOME="${SELF_PATH%/*/*}"
140
141# ----- File paths for various options and files we'll process later ----------
142
143# Module options to open up packages we need to reflect
144jruby_module_opts_file="$JRUBY_HOME/bin/.jruby.module_opts"
145
146# Cascading .java_opts files for localized JVM flags
147installed_jruby_java_opts_file="$JRUBY_HOME/bin/.jruby.java_opts"
148home_jruby_java_opts_file="$HOME/.jruby.java_opts"
149pwd_jruby_java_opts_file="$PWD/.jruby.java_opts"
150
151# Options from .dev_mode.java_opts for "--dev" mode, to reduce JRuby startup time
152dev_mode_opts_file="$JRUBY_HOME/bin/.dev_mode.java_opts"
153
154# Default JVM Class Data Sharing Archive (jsa) file for JVMs that support it
155jruby_jsa_file="$JRUBY_HOME/lib/jruby.jsa"
156
157# ----- Initialize environment log -------------------------
158
159add_log
160add_log "JRuby executable:"
161add_log " $BASH_SOURCE"
162add_log "JRuby command line options:"
163add_log " $*"
164add_log "Current directory:"
165add_log " $(pwd)"
166
167add_log
168add_log "Environment:"
169add_log " JRUBY_HOME: $JRUBY_HOME"
170add_log " JRUBY_OPTS: $JRUBY_OPTS"
171add_log " JAVA_OPTS: $JAVA_OPTS"
172
173# ----- Discover JVM and prep environment to run it ---------------------------
174
175# Detect cygwin and mingw environments
176case "$(uname)" in
177 CYGWIN*) cygwin=true;;
178 MINGW*) jruby.exe "$@"; exit $?;;
179esac
180
181# Determine where the java command is and ensure we have a good JAVA_HOME
182if [ -z "$JAVACMD" ] ; then
183 if [ -z "$JAVA_HOME" ] ; then
184 java_home_command="/usr/libexec/java_home"
185 if [ -r "$java_home_command" ] && [ -x "$java_home_command" ] && [ ! -d "$java_home_command" ] ; then
186 # use java_home command when none is set (on MacOS)
187 JAVA_HOME="$("$java_home_command")"
188 JAVACMD="$JAVA_HOME"/bin/java
189 else
190 # Linux and others have a chain of symlinks
191 resolve_symlinks "$(command -v java)"
192 JAVACMD="$result"
193
194 # export separately from command execution
195 dir_name "$JAVACMD"
196 dir_name "$result"
197 JAVA_HOME="$result"
198 fi
199 else
200 if $cygwin; then
201 JAVACMD="$(cygpath -u "$JAVA_HOME")/bin/java"
202 else
203 JAVACMD="$JAVA_HOME/bin/java"
204 fi
205 fi
206else
207 resolve_symlinks "$(command -v "$JAVACMD")"
208 expanded_javacmd="$result"
209 if [ -z "$JAVA_HOME" ] && [ -x "$expanded_javacmd" ] ; then
210 dir_name "$expanded_javacmd"
211 dir_name "$result"
212 JAVA_HOME="$result"
213 fi
214fi
215
216# Detect modularized Java if modules file is present or a MODULES line appears in release
217if [ -f "$JAVA_HOME"/lib/modules ] || { [ -f "$JAVA_HOME"/release ] && grep -q ^MODULES "$JAVA_HOME"/release; } ; then
218 use_modules=1
219fi
220
221add_log " JAVACMD: $JAVACMD"
222add_log " JAVA_HOME: $JAVA_HOME"
223
224if [ "$use_modules" ]; then
225 add_log
226 add_log "Detected Java modules at $JAVA_HOME"
227fi
228
229# ----- Process .java_opts files ----------------------------------------------
230
231# We include options on the java command line in the following order:
232#
233# * JRuby installed bin/.jruby.java_opts (empty by default)
234# * user directory .jruby.java_opts
235# * current directory .jruby.java_opts
236# * dev mode options from bin/.dev_mode.java_opts, if --dev is specified
237# * module options from bin/.jruby.module_opts if modules are detected
238# * JAVA_OPTS environment variable
239# * command line flags
240
241# Add local and global .jruby.java_opts
242process_java_opts "$installed_jruby_java_opts_file"
243process_java_opts "$home_jruby_java_opts_file"
244process_java_opts "$pwd_jruby_java_opts_file"
245
246# Capture some Java options to be passed separately
247unset JAVA_OPTS_TEMP
248JAVA_OPTS_TEMP=""
249for opt in $JAVA_OPTS; do
250 case $opt in
251 -Xmx*)
252 JAVA_MEM="$opt";;
253 -Xss*)
254 JAVA_STACK="$opt";;
255 *)
256 JAVA_OPTS_TEMP="$JAVA_OPTS_TEMP $opt";;
257 esac
258done
259
260JAVA_OPTS="$JAVA_OPTS_TEMP"
261
262# ----- Set up the JRuby class/module path ------------------------------------
263
264CP_DELIMITER=":"
265
266# add main jruby jar to the classpath
267for j in "$JRUBY_HOME"/lib/jruby.jar "$JRUBY_HOME"/lib/jruby-complete.jar; do
268 if [ ! -e "$j" ]; then
269 continue
270 fi
271 if [ "$JRUBY_CP" ]; then
272 JRUBY_CP="$JRUBY_CP$CP_DELIMITER$j"
273 else
274 JRUBY_CP="$j"
275 fi
276 if [ "$JRUBY_ALREADY_ADDED" ]; then
277 echo "WARNING: more than one JRuby JAR found in lib directory" 1>&2
278 fi
279 JRUBY_ALREADY_ADDED=true
280done
281
282if $cygwin; then
283 JRUBY_CP="$(cygpath -p -w "$JRUBY_CP")"
284fi
285
286# ----- Add additional jars from lib to classpath -----------------------------
287
288if [ "$JRUBY_PARENT_CLASSPATH" ]; then
289 # Use same classpath propagated from parent jruby
290 CP="$JRUBY_PARENT_CLASSPATH"
291else
292 # add other jars in lib to CP for command-line execution
293 for j in "$JRUBY_HOME"/lib/*.jar; do
294 if [ "$j" = "$JRUBY_HOME"/lib/jruby.jar ]; then
295 continue
296 fi
297 if [ "$j" = "$JRUBY_HOME"/lib/jruby-complete.jar ]; then
298 continue
299 fi
300 if [ "$CP" ]; then
301 CP="$CP$CP_DELIMITER$j"
302 else
303 CP="$j"
304 fi
305 done
306
307 if [ "$CP" ] && $cygwin; then
308 CP="$(cygpath -p -w "$CP")"
309 fi
310fi
311
312if $cygwin; then
313 # switch delimiter only after building Unix style classpaths
314 CP_DELIMITER=";"
315fi
316
317# ----- Continue processing JRuby options into JVM options --------------------
318
319# Split out any -J argument for passing to the JVM.
320# Scanning for args is aborted by '--'.
321set -- $JRUBY_OPTS "$@"
322while [ $# -gt 0 ]
323do
324 case $1 in
325 # Stuff after '-J' in this argument goes to JVM
326 -J-Xmx*)
327 JAVA_MEM="${1#-J}" ;;
328 -J-Xss*)
329 JAVA_STACK="${1#-J}" ;;
330 -J)
331 "$JAVACMD" -help
332 echo "(Prepend -J in front of these options when using 'jruby' command)" 1>&2
333 exit ;;
334 -J-X)
335 "$JAVACMD" -X
336 echo "(Prepend -J in front of these options when using 'jruby' command)" 1>&2
337 exit ;;
338 -J-classpath)
339 CP="$CP$CP_DELIMITER$2"
340 CLASSPATH=""
341 shift ;;
342 -J-cp)
343 CP="$CP$CP_DELIMITER$2"
344 CLASSPATH=""
345 shift ;;
346 -J-ea*)
347 VERIFY_JRUBY="yes"
348 java_args+=("${1#-J}") ;;
349 -J-Djava.security.egd=*)
350 JAVA_SECURITY_EGD=${1#-J-Djava.security.egd=} ;;
351 # This must be the last check for -J
352 -J*)
353 java_args+=("${1#-J}") ;;
354 # Pass -X... and -X? search options through
355 -X*...|-X*\?)
356 ruby_args+=("$1") ;;
357 # Match -Xa.b.c=d to translate to -Da.b.c=d as a java option
358 -X*.*)
359 java_args+=("-Djruby.${1#-X}") ;;
360 # Match switches that take an argument
361 -C|-e|-I|-S)
362 ruby_args+=("$1" "$2")
363 shift ;;
364 # Run with JMX management enabled
365 --manage)
366 java_args+=("-Dcom.sun.management.jmxremote")
367 java_args+=("-Djruby.management.enabled=true") ;;
368 # Don't launch a GUI window, no matter what
369 --headless)
370 java_args+=("-Djava.awt.headless=true") ;;
371 # Run under JDB
372 --jdb)
373 if [ -z "$JAVA_HOME" ] ; then
374 JAVACMD='jdb'
375 else
376 if $cygwin; then
377 JAVACMD="$(cygpath -u "$JAVA_HOME")/bin/jdb"
378 else
379 JAVACMD="$JAVA_HOME/bin/jdb"
380 fi
381 fi
382 JDB_SOURCEPATH="${JRUBY_HOME}/core/src/main/java:${JRUBY_HOME}/lib/ruby/stdlib:."
383 java_args+=("-sourcepath" "$JDB_SOURCEPATH")
384 JRUBY_OPTS+=("-X+C") ;;
385 --client|--server|--noclient)
386 echo "Warning: the $1 flag is deprecated and has no effect most JVMs" 1>&2 ;;
387 --dev)
388 process_java_opts "$dev_mode_opts_file"
389 # For OpenJ9 use environment variable to enable quickstart and shareclasses
390 export OPENJ9_JAVA_OPTIONS="-Xquickstart -Xshareclasses" ;;
391 --sample)
392 java_args+=("-Xprof") ;;
393 --record)
394 java_args+=("-XX:+FlightRecorder" "-XX:StartFlightRecording=dumponexit=true") ;;
395 --no-bootclasspath)
396 NO_BOOTCLASSPATH=true ;;
397 --ng*)
398 echo "Error: Nailgun is no longer supported" 1>&2
399 exit 1 ;;
400 --environment)
401 print_environment_log=1 ;;
402 # warn but ignore
403 --1.8|--1.9|--2.0)
404 echo "warning: $1 ignored" 1>&2 ;;
405 # Abort processing on the double dash
406 --)
407 break ;;
408 # Other opts go to ruby
409 -*)
410 ruby_args+=("$1") ;;
411 # Abort processing on first non-opt arg
412 *)
413 break ;;
414 esac
415 shift
416done
417
418# Force JDK to use specified java.security.egd rand source
419if [ -n "$JAVA_SECURITY_EGD" ]; then
420 java_args+=("-Djava.security.egd=$JAVA_SECURITY_EGD")
421fi
422
423# Append the rest of the arguments
424ruby_args+=("$@")
425
426# Put the ruby_args back into the position arguments $1, $2 etc
427set -- "${ruby_args[@]}"
428
429JAVA_OPTS="$JAVA_OPTS $JAVA_MEM $JAVA_STACK"
430
431JFFI_OPTS="-Djffi.boot.library.path=$JRUBY_HOME/lib/jni"
432
433# ----- Tweak console environment for cygwin ------------------------------------------
434
435if $cygwin; then
436 use_exec=false
437 JRUBY_HOME="$(cygpath --mixed "$JRUBY_HOME")"
438 JRUBY_SHELL="$(cygpath --mixed "$JRUBY_SHELL")"
439
440 if [ "${1:0:1}" = "/" ] && [ -f "$1" ] || [ -d "$1" ]; then
441 win_arg="$(cygpath -w "$1")"
442 shift
443 win_args=("$win_arg" "$@")
444 set -- "${win_args[@]}"
445 fi
446
447 # fix JLine to use UnixTerminal
448 if stty -icanon min 1 -echo > /dev/null 2>&1; then
449 JAVA_OPTS="$JAVA_OPTS -Djline.terminal=jline.UnixTerminal"
450 fi
451
452fi
453
454# ----- Module and Class Data Sharing flags for Java 9+ -----------------------
455
456if [ "$use_modules" ]; then
457 # Use module path instead of classpath for the jruby libs
458 classpath_args=(--module-path "$JRUBY_CP" -classpath "$CP$CP_DELIMITER$CLASSPATH")
459
460 # Switch to non-boot path since we can't use bootclasspath on 9+
461 NO_BOOTCLASSPATH=1
462
463 # Add base opens we need for Ruby compatibility
464 process_java_opts "$jruby_module_opts_file"
465
466 # Allow overriding default JSA file location
467 if [ -z "$JRUBY_JSA" ]; then
468 JRUBY_JSA="$jruby_jsa_file"
469 fi
470
471 # If we have a jruby.jsa file, enable AppCDS
472 if [ -f "$JRUBY_JSA" ]; then
473 add_log
474 add_log "Detected Class Data Sharing archive:"
475 add_log " $JRUBY_JSA"
476
477 JAVA_OPTS="$JAVA_OPTS -XX:+UnlockDiagnosticVMOptions -XX:SharedArchiveFile=$JRUBY_JSA"
478 fi
479else
480 classpath_args=(-classpath "$JRUBY_CP$CP_DELIMITER$CP$CP_DELIMITER$CLASSPATH")
481fi
482
483# ----- Final prepration of the Java command line -----------------------------
484
485# Include all options from files at the beginning of the Java command line
486JAVA_OPTS="$java_opts_from_files $JAVA_OPTS"
487
488# Don't quote JAVA_OPTS; we want it to expand
489jvm_command=("$JAVACMD" $JAVA_OPTS "$JFFI_OPTS" "${java_args[@]}")
490
491if [ "$NO_BOOTCLASSPATH" ] || [ "$VERIFY_JRUBY" ]; then
492 jvm_command+=("${classpath_args[@]}")
493else
494 jvm_command+=(-Xbootclasspath/a:"$JRUBY_CP" \
495 -classpath "$CP$CP_DELIMITER$CLASSPATH" "-Djruby.home=$JRUBY_HOME")
496fi
497
498jvm_command+=("-Djruby.home=$JRUBY_HOME" \
499 "-Djruby.lib=$JRUBY_HOME/lib" "-Djruby.script=jruby" \
500 "-Djruby.shell=$JRUBY_SHELL" \
501 "$java_class" "$@")
502
503add_log
504add_log "Java command line:"
505add_log " ${jvm_command[*]}"
506
507if [ "$print_environment_log" ]; then
508 echo "$environment_log"
509 exit 0
510fi
511
512# ----- Run JRuby! ------------------------------------------------------------
513
514if $use_exec; then
515 exec "${jvm_command[@]}"
516else
517 "${jvm_command[@]}"
518
519 # Record the exit status immediately, or it will be overridden.
520 JRUBY_STATUS=$?
521
522 if $cygwin; then
523 stty icanon echo > /dev/null 2>&1
524 fi
525
526 exit $JRUBY_STATUS
527fi
diff --git a/bin/jruby.sh b/bin/jruby.sh
index b6409c0..7fdd80d 100755
--- a/bin/jruby.sh
+++ b/bin/jruby.sh
@@ -1,285 +1,733 @@
1#! /bin/sh1#!/bin/sh
2# shellcheck disable=1007
2# -----------------------------------------------------------------------------3# -----------------------------------------------------------------------------
3# jruby.sh - Start Script for the JRuby interpreter4# jruby.bash - Start Script for the JRuby interpreter
5# -----------------------------------------------------------------------------
6
7# ----- Guarantee local variables are available -------------------------------
8if command -v local >/dev/null; then
9 :
10elif command -v typeset >/dev/null; then
11 # ksh93 and older have typeset but not local, and expand aliases at parse
12 # time so require re-sourcing the script
13 alias local=typeset
14 if [ -z "$KSH_VERSION" ] || (eval : '"${.sh.version}"' >/dev/null 2>&1); then
15 # shellcheck source=/dev/null
16 . "$0"
17 exit
18 fi
19else
20 echo >&2 "Error: Your shell does not support local variables. Re-run this script with one that does (e.g. bash, ksh)"
21 exit 1
22fi
23
24# ----- Helper functions ------------------------------------------------------
25
26# esceval [ARGUMENT...]
4#27#
5# Environment Variable Prequisites28# Escape ARGUMENT for safe use with eval
29# Returns escaped arguments via $REPLY
30# Thanks to @mentalisttraceur for original implementation:
31# https://github.com/mentalisttraceur/esceval
32esceval()
33{
34 local escaped= unescaped= output=
35 REPLY=
36
37 [ $# -gt 0 ] || return 0
38 while true; do
39 escaped=\'
40 unescaped=$1
41 while true; do
42 case $unescaped in
43 (*\'*)
44 escaped="$escaped${unescaped%%\'*}'\''"
45 unescaped=${unescaped#*\'}
46 ;;
47 (*) break ;;
48 esac
49 done
50 escaped=$escaped$unescaped\'
51 shift
52 [ $# -gt 0 ] || break
53 output="$output $escaped"
54 done
55 REPLY="$output $escaped"
56}
57
58# assign LISTNAME ELEMENT [ELEMENT...]
6#59#
7# JRUBY_OPTS (Optional) Default JRuby command line args60# Assign ELEMENT to the list named by LISTNAME.
8# JRUBY_SHELL Where/What is system shell61assign() {
62 local listname="$1"
63 local REPLY=
64 shift
65
66 esceval "$@"
67 eval "$listname=\"\${REPLY}\""
68}
69
70# append LISTNAME ELEMENT [ELEMENT...]
9#71#
10# JAVA_HOME Must point at your Java Development Kit installation.72# Append ELEMENT to the list named by LISTNAME.
73append() {
74 local listname="$1"
75 local REPLY=
76 shift
77
78 esceval "$@"
79 eval "$listname=\"\${$listname} \${REPLY}\""
80}
81
82# prepend LISTNAME ELEMENT [ELEMENT...]
11#83#
12# -----------------------------------------------------------------------------84# Prepend ELEMENT to the list named by LISTNAME, preserving order.
85prepend() {
86 local listname="$1"
87 local REPLY=
88 shift
1389
14# ********************************** NOTE *************************************90 esceval "$@"
15# This script is provided as a convenience for users on systems that do not91 eval "$listname=\"\${REPLY} \${$listname}\""
16# have the "bash" shell available. It does not support all the flags the bash92}
17# and native executables do, but should be complete enough for most users.93
18# Improvements are welcome.94# extend LISTNAME1 LISTNAME2
19# *****************************************************************************95#
2096# Append the elements stored in the list named by LISTNAME2
21# ----- Verify and Set Required Environment Variables -------------------------97# to the list named by LISTNAME1.
2298extend() {
23## resolve links - $0 may be a link to home99 eval "$1=\"\${$1} \${$2}\""
24PRG=$0100}
25progname=`basename "$0"`101
26102# preextend LISTNAME1 LISTNAME2
27while [ -h "$PRG" ] ; do103#
28 ls=`ls -ld "$PRG"`104# Prepend the elements stored in the list named by LISTNAME2
29 link=`expr -- "$ls" : '.*-> \(.*\)$'`105# to the named by LISTNAME1, preserving order.
30 if expr -- "$link" : '.*/.*' > /dev/null; then106preextend() {
31 if expr -- "$link" : '/' > /dev/null; then107 eval "$1=\"\${$2} \${$1}\""
32 PRG="$link"108}
33 else109
34 PRG="`dirname ${PRG}`/${link}"110# echo [STRING...]
111#
112# Dumb echo, i.e. print arguments joined by spaces with no further processing
113echo() {
114 printf "%s\n" "$*"
115}
116
117# ----- Set variable defaults -------------------------------------------------
118
119readonly java_class=org.jruby.Main
120JRUBY_SHELL=/bin/sh
121
122# Detect cygwin and mingw environments
123cygwin=false
124case "$(uname)" in
125 CYGWIN*) cygwin=true ;;
126 MINGW*)
127 release_id=$(awk -F= '$1=="ID" { print $2; }' /etc/os-release 2> /dev/null)
128 case $release_id in
129 "msys2") ;;
130 *)
131 jruby.exe "$@"
132 exit $?
133 ;;
134 esac
135 ;;
136esac
137readonly cygwin
138
139use_exec=true
140java_opts_from_files=""
141
142NO_BOOTCLASSPATH=false
143VERIFY_JRUBY=false
144print_environment_log=false
145
146if [ -z "$JRUBY_OPTS" ]; then
147 JRUBY_OPTS=""
148fi
149
150if [ -z "$JAVA_STACK" ]; then
151 JAVA_STACK=-Xss2048k
152fi
153
154java_args=""
155ruby_args=""
156
157# Force OpenJDK-based JVMs to use /dev/urandom for random number generation
158# See https://github.com/jruby/jruby/issues/4685 among others.
159# OpenJDK tries really hard to prevent you from using urandom.
160# See https://bugs.openjdk.java.net/browse/JDK-6202721
161# Non-file URL causes fallback to slow threaded SeedGenerator.
162# See https://bz.apache.org/bugzilla/show_bug.cgi?id=56139
163if [ -r "/dev/urandom" ]; then
164 JAVA_SECURITY_EGD="file:/dev/urandom"
165fi
166
167# Gather environment information as we go
168readonly cr='
169'
170environment_log="JRuby Environment$cr================="
171add_log() {
172 environment_log="${environment_log}${cr}${*}"
173}
174
175# Logic to process "arguments files" on both Java 8 and Java 9+
176process_java_opts() {
177 local java_opts_file="$1" java_opts=
178 if [ -r "$java_opts_file" ]; then
179 add_log
180 add_log "Adding Java options from: $java_opts_file"
181
182 while read -r line; do
183 if [ "$line" ]; then
184 java_opts="${java_opts} ${line}"
185 add_log " $line"
186 fi
187 done < "$java_opts_file"
188
189 # On Java 9+, add an @argument for the given file.
190 # On earlier versions the file contents will be read and expanded on the Java command line.
191 if $use_modules; then
192 java_opts_from_files="$java_opts_from_files @$java_opts_file"
193 else
194 java_opts_from_files="$java_opts_from_files $java_opts"
195 fi
196 fi
197}
198
199# Pure shell dirname/basename
200dir_name() {
201 local filename="$1" trail=
202 case $filename in
203 */*[!/]*)
204 trail=${filename##*[!/]}
205 filename=${filename%%"$trail"}
206 REPLY=${filename%/*}
207 ;;
208 *[!/]*)
209 trail=${filename##*[!/]}
210 REPLY="."
211 ;;
212 *)
213 REPLY="/"
214 ;;
215 esac
216}
217
218base_name() {
219 local filename="$1" trail=
220 case $filename in
221 */*[!/]*)
222 trail=${filename##*[!/]}
223 filename=${filename%%"$trail"}
224 REPLY=${filename##*/}
225 ;;
226 *[!/]*)
227 trail=${filename##*[!/]}
228 REPLY=${filename%%"$trail"}
229 ;;
230 *)
231 REPLY="/"
232 ;;
233 esac
234}
235
236# Determine whether path is absolute and contains no relative segments or symlinks
237path_is_canonical() {
238 local path=
239 for path; do
240 case $path in
241 ([!/]*) return 1 ;;
242 (./*|../*) return 1 ;;
243 (*/.|*/..) return 1 ;;
244 (*/./*|*/../*) return 1 ;;
245 esac
246 while [ "$path" ]; do
247 [ -h "$path" ] && return 1
248 path="${path%/*}"
249 done
250 done
251 return 0
252}
253
254# Resolve directory to its canonical value
255resolve_dir() {
256 # Some shells (dash, ksh) resolve relative paths by default before cd'ing, i.e.
257 # cd /foo/bar/../baz = cd /foo/baz
258 # This is fine unless bar is a symlink, in which case the second form is
259 # invalid. Passing -P to cd fixes this behaviour.
260 REPLY="$(cd -P -- "$1" && pwd)"
261}
262
263# Resolve symlink until it's not a symlink
264resolve_file() {
265 local current="$1" target=
266
267 while [ -h "$current" ]; do
268 target="$(readlink "$current")" || return
269 case $target in
270 (/*) current="$target" ;;
271 # handle relative symlinks
272 (*) dir_name "$current"; current="$REPLY/$target" ;;
273 esac
274 done
275 REPLY="$current"
276}
277
278# Resolve path to its canonical value
279resolve() {
280 local target="$1" base=
281 REPLY=
282
283 # Verify target actually exists (and isn't too deep in symlinks)
284 if ! [ -e "$target" ]; then
285 echo >&2 "Error: No such file or directory: $target"
286 return 1
35 fi287 fi
36 else
37 PRG="`dirname $PRG`/$link"
38 fi
39done
40288
41JRUBY_HOME_1=`dirname "$PRG"` # the ./bin dir289 # Realpath is way faster than repeatedly calling readlink, so use it if possible
42if [ "$JRUBY_HOME_1" = '.' ] ; then290 if command -v realpath >/dev/null; then
43 cwd=`pwd`291 REPLY="$(realpath "$target")" && return
44 JRUBY_HOME=`dirname $cwd` # JRUBY-2699292 fi
293
294 # Take shortcut for directories
295 if [ -d "$target" ]; then
296 resolve_dir "$target" && return
297 fi
298
299 # Ensure $target is not a symlink
300 resolve_file "$target" || return
301 target="$REPLY"
302
303 # Resolve parent directory if it's not absolute
304 if ! path_is_canonical "$target"; then
305 dir_name "$target"
306 resolve_dir "$REPLY" || return
307 base="$REPLY"
308
309 base_name "$target"
310 target="$base/$REPLY"
311 fi
312 REPLY="$target"
313}
314
315# ----- Determine JRUBY_HOME based on this executable's path ------------------
316
317# get the absolute path of the executable
318if [ "$BASH" ]; then
319 # shellcheck disable=2128,3028
320 script_src="$BASH_SOURCE"
321else
322 script_src="$0"
323fi
324dir_name "$script_src"
325BASE_DIR="$(cd -P -- "$REPLY" >/dev/null && pwd -P)"
326base_name "$script_src"
327resolve "$BASE_DIR/$REPLY"
328SELF_PATH="$REPLY"
329
330JRUBY_HOME="${SELF_PATH%/*/*}"
331
332# ----- File paths for various options and files we'll process later ----------
333
334# Module options to open up packages we need to reflect
335readonly jruby_module_opts_file="$JRUBY_HOME/bin/.jruby.module_opts"
336
337# Cascading .java_opts files for localized JVM flags
338readonly installed_jruby_java_opts_file="$JRUBY_HOME/bin/.jruby.java_opts"
339readonly home_jruby_java_opts_file="$HOME/.jruby.java_opts"
340readonly pwd_jruby_java_opts_file="$PWD/.jruby.java_opts"
341
342# Options from .dev_mode.java_opts for "--dev" mode, to reduce JRuby startup time
343readonly dev_mode_opts_file="$JRUBY_HOME/bin/.dev_mode.java_opts"
344
345# Default JVM Class Data Sharing Archive (jsa) file for JVMs that support it
346readonly jruby_jsa_file="$JRUBY_HOME/lib/jruby.jsa"
347
348# ----- Initialize environment log --------------------------------------------
349
350add_log
351add_log "JRuby executable:"
352add_log " $script_src"
353add_log "JRuby command line options:"
354add_log " $*"
355add_log "Current directory:"
356add_log " $PWD"
357
358add_log
359add_log "Environment:"
360add_log " JRUBY_HOME: $JRUBY_HOME"
361add_log " JRUBY_OPTS: $JRUBY_OPTS"
362add_log " JAVA_OPTS: $JAVA_OPTS"
363
364# ----- Discover JVM and prep environment to run it ---------------------------
365
366# Determine where the java command is and ensure we have a good JAVA_HOME
367if [ -z "$JAVACMD" ]; then
368 if [ -z "$JAVA_HOME" ]; then
369 readonly java_home_command="/usr/libexec/java_home"
370 if [ -r "$java_home_command" ] \
371 && [ -x "$java_home_command" ] \
372 && [ ! -d "$java_home_command" ]
373 then
374 # use java_home command when none is set (on MacOS)
375 JAVA_HOME="$("$java_home_command")"
376 JAVACMD="$JAVA_HOME"/bin/java
377 else
378 # Linux and others have a chain of symlinks
379 resolve "$(command -v java)"
380 JAVACMD="$REPLY"
381
382 # export separately from command execution
383 dir_name "$JAVACMD"
384 dir_name "$REPLY"
385 JAVA_HOME="$REPLY"
386 fi
387 elif $cygwin; then
388 JAVACMD="$(cygpath -u "$JAVA_HOME")/bin/java"
389 else
390 JAVACMD="$JAVA_HOME/bin/java"
391 fi
45else392else
46 JRUBY_HOME=`dirname "$JRUBY_HOME_1"` # the . dir393 resolve "$(command -v "$JAVACMD")"
394 expanded_javacmd="$REPLY"
395 if [ -z "$JAVA_HOME" ] && [ -x "$expanded_javacmd" ]; then
396 dir_name "$expanded_javacmd"
397 dir_name "$REPLY"
398 JAVA_HOME="$REPLY"
399 fi
47fi400fi
48401
49if [ -z "$JRUBY_OPTS" ] ; then402# Detect modularized Java
50 JRUBY_OPTS=""403java_is_modular() {
404 # check that modules file is present
405 if [ -f "$JAVA_HOME"/lib/modules ]; then
406 return 0
407 fi
408
409 # check if a MODULES line appears in release
410 if [ -f "$JAVA_HOME"/release ] && grep -q ^MODULES "$JAVA_HOME"/release; then
411 return 0
412 fi
413
414 return 1
415}
416
417if java_is_modular; then
418 use_modules=true
419else
420 use_modules=false
51fi421fi
422readonly use_modules
52423
53if [ -z "$JAVACMD" ] ; then424add_log " JAVACMD: $JAVACMD"
54 if [ -z "$JAVA_HOME" ] ; then425add_log " JAVA_HOME: $JAVA_HOME"
55 JAVACMD='java'426
56 else427if $use_modules; then
57 JAVACMD="$JAVA_HOME/bin/java"428 add_log
58 fi429 add_log "Detected Java modules at $JAVA_HOME"
59fi430fi
60431
61# If you're seeing odd exceptions, you may have a bad JVM install.432# ----- Process .java_opts files ----------------------------------------------
62# Uncomment this and report the version to the JRuby team along with error.
63#$JAVACMD -version
64433
65JRUBY_SHELL=/bin/sh434# We include options on the java command line in the following order:
435#
436# * JRuby installed bin/.jruby.java_opts (empty by default)
437# * user directory .jruby.java_opts
438# * current directory .jruby.java_opts
439# * dev mode options from bin/.dev_mode.java_opts, if --dev is specified
440# * module options from bin/.jruby.module_opts if modules are detected
441# * JAVA_OPTS environment variable
442# * command line flags
443
444# Add local and global .jruby.java_opts
445process_java_opts "$installed_jruby_java_opts_file"
446process_java_opts "$home_jruby_java_opts_file"
447process_java_opts "$pwd_jruby_java_opts_file"
448
449# Capture some Java options to be passed separately
450JAVA_OPTS_TEMP=""
451for opt in $JAVA_OPTS; do
452 case $opt in
453 -Xmx*) JAVA_MEM="$opt" ;;
454 -Xss*) JAVA_STACK="$opt" ;;
455 *) JAVA_OPTS_TEMP="$JAVA_OPTS_TEMP $opt" ;;
456 esac
457done
458
459JAVA_OPTS="$JAVA_OPTS_TEMP"
66460
67# ----- Set Up The Boot Classpath -------------------------------------------461# ----- Set up the JRuby class/module path ------------------------------------
68462
69CP_DELIMITER=":"463CP_DELIMITER=":"
70464
71# add main jruby jar to the bootclasspath465# add main jruby jar to the classpath
466JRUBY_ALREADY_ADDED=false
72for j in "$JRUBY_HOME"/lib/jruby.jar "$JRUBY_HOME"/lib/jruby-complete.jar; do467for j in "$JRUBY_HOME"/lib/jruby.jar "$JRUBY_HOME"/lib/jruby-complete.jar; do
73 if [ ! -e "$j" ]; then468 if [ ! -e "$j" ]; then
74 continue469 continue
75 fi470 fi
76 if [ "$JRUBY_CP" ]; then471 if [ "$JRUBY_CP" ]; then
77 JRUBY_CP="$JRUBY_CP$CP_DELIMITER$j"472 JRUBY_CP="$JRUBY_CP$CP_DELIMITER$j"
78 else473 else
79 JRUBY_CP="$j"474 JRUBY_CP="$j"
80 fi475 fi
81 if [ $JRUBY_ALREADY_ADDED ]; then476 if $JRUBY_ALREADY_ADDED; then
82 echo "WARNING: more than one JRuby JAR found in lib directory"477 echo "WARNING: more than one JRuby JAR found in lib directory" 1>&2
83 fi478 fi
84 JRUBY_ALREADY_ADDED=true479 JRUBY_ALREADY_ADDED=true
85done480done
86481
87# ----- Set Up The System Classpath -------------------------------------------482if $cygwin; then
483 JRUBY_CP="$(cygpath -p -w "$JRUBY_CP")"
484fi
485
486# ----- Add additional jars from lib to classpath -----------------------------
88487
89if [ "$JRUBY_PARENT_CLASSPATH" != "" ]; then488if [ "$JRUBY_PARENT_CLASSPATH" ]; then
90 # Use same classpath propagated from parent jruby489 # Use same classpath propagated from parent jruby
91 CP=$JRUBY_PARENT_CLASSPATH490 CP="$JRUBY_PARENT_CLASSPATH"
92else491else
93 # add other jars in lib to CP for command-line execution492 # add other jars in lib to CP for command-line execution
94 for j in "$JRUBY_HOME"/lib/*.jar; do493 for j in "$JRUBY_HOME"/lib/*.jar; do
95 if [ "$j" == "$JRUBY_HOME"/lib/jruby.jar ]; then494 case "${j#"$JRUBY_HOME/lib/"}" in
96 continue495 jruby.jar|jruby-complete.jar) continue
97 fi496 esac
98 if [ "$j" == "$JRUBY_HOME"/lib/jruby-complete.jar ]; then
99 continue
100 fi
101 if [ "$CP" ]; then497 if [ "$CP" ]; then
102 CP="$CP$CP_DELIMITER$j"498 CP="$CP$CP_DELIMITER$j"
103 else499 else
104 CP="$j"500 CP="$j"
105 fi501 fi
106 done502 done
107503
504 if [ "$CP" ] && $cygwin; then
505 CP="$(cygpath -p -w "$CP")"
506 fi
108fi507fi
109508
110509if $cygwin; then
111# ----- Execute The Requested Command -----------------------------------------510 # switch delimiter only after building Unix style classpaths
112511 CP_DELIMITER=";"
113if [ -z "$JAVA_MEM" ] ; then
114 JAVA_MEM=-Xmx500m
115fi
116
117if [ -z "$JAVA_STACK" ] ; then
118 JAVA_STACK=-Xss2048k
119fi
120
121if [ -z "$JAVA_VM" ]; then
122 JAVA_VM=-client
123fi512fi
124JAVA_ENCODING=""
125513
126#declare -a java_args514readonly CP_DELIMITER
127#declare -a ruby_args
128515
129JAVA_CLASS_JRUBY_MAIN=org.jruby.Main516# ----- Continue processing JRuby options into JVM options --------------------
130java_class=$JAVA_CLASS_JRUBY_MAIN
131517
132# Split out any -J argument for passing to the JVM.518# Split out any -J argument for passing to the JVM.
133# Scanning for args is aborted by '--'.519# Scanning for args is aborted by '--'.
520# shellcheck disable=2086
521set -- $JRUBY_OPTS "$@"
522# increment pointer, permute arguments
134while [ $# -gt 0 ]523while [ $# -gt 0 ]
135do524do
136 case "$1" in525 case $1 in
137 # Stuff after '-J' in this argument goes to JVM526 # Stuff after '-J' in this argument goes to JVM
138 -J*)527 -J-Xmx*) JAVA_MEM="${1#-J}" ;;
139 val=${1:2}528 -J-Xss*) JAVA_STACK="${1#-J}" ;;
140 if [ "${val:0:4}" = "-Xmx" ]; then529 -J)
141 JAVA_MEM=$val530 "$JAVACMD" -help
142 elif [ "${val:0:4}" = "-Xss" ]; then531 echo "(Prepend -J in front of these options when using 'jruby' command)" 1>&2
143 JAVA_STACK=$val
144 elif [ "${val}" = "" ]; then
145 $JAVACMD -help
146 echo "(Prepend -J in front of these options when using 'jruby' command)"
147 exit532 exit
148 elif [ "${val}" = "-X" ]; then533 ;;
149 $JAVACMD -X534 -J-X)
150 echo "(Prepend -J in front of these options when using 'jruby' command)" 535 "$JAVACMD" -X
536 echo "(Prepend -J in front of these options when using 'jruby' command)" 1>&2
151 exit537 exit
152 elif [ "${val}" = "-classpath" ]; then538 ;;
539 -J-classpath|-J-cp)
153 CP="$CP$CP_DELIMITER$2"540 CP="$CP$CP_DELIMITER$2"
154 CLASSPATH=""541 CLASSPATH=""
155 shift542 shift
156 elif [ "${val}" = "-cp" ]; then543 ;;
157 CP="$CP$CP_DELIMITER$2"544 -J-ea*)
158 CLASSPATH=""545 VERIFY_JRUBY=true
546 append java_args "${1#-J}"
547 ;;
548 -J-Djava.security.egd=*) JAVA_SECURITY_EGD=${1#-J-Djava.security.egd=} ;;
549 # This must be the last check for -J
550 -J*) append java_args "${1#-J}" ;;
551 # Pass -X... and -X? search options through
552 -X*...|-X*\?) append ruby_args "$1" ;;
553 # Match -Xa.b.c=d to translate to -Da.b.c=d as a java option
554 -X*.*) append java_args -Djruby."${1#-X}" ;;
555 # Match switches that take an argument
556 -[CeIS])
557 append ruby_args "$1" "$2"
159 shift558 shift
160 else559 ;;
161 if [ "${val:0:3}" = "-ea" ]; then560 # Run with JMX management enabled
162 VERIFY_JRUBY="yes"561 --manage)
163 elif [ "${val:0:16}" = "-Dfile.encoding=" ]; then562 append java_args -Dcom.sun.management.jmxremote
164 JAVA_ENCODING=$val563 append java_args -Djruby.management.enabled=true
564 ;;
565 # Don't launch a GUI window, no matter what
566 --headless) append java_args -Djava.awt.headless=true ;;
567 # Run under JDB
568 --jdb)
569 if [ -z "$JAVA_HOME" ]; then
570 JAVACMD='jdb'
571 else
572 if $cygwin; then
573 JAVACMD="$(cygpath -u "$JAVA_HOME")/bin/jdb"
574 else
575 JAVACMD="$JAVA_HOME/bin/jdb"
576 fi
165 fi577 fi
166 java_args="${java_args} ${1:2}"578 JDB_SOURCEPATH="${JRUBY_HOME}/core/src/main/java:${JRUBY_HOME}/lib/ruby/stdlib:."
167 fi579 append java_args -sourcepath "$JDB_SOURCEPATH"
168 ;;580 append ruby_args -X+C
169 # Pass -X... and -X? search options through581 ;;
170 -X*\.\.\.|-X*\?)582 --client|--server|--noclient)
171 ruby_args="${ruby_args} $1" ;;583 echo "Warning: the $1 flag is deprecated and has no effect most JVMs" 1>&2
172 -X+T)584 ;;
173 echo "error: -X+T isn't supported in the shell launcher"585 --dev)
174 exit 1586 process_java_opts "$dev_mode_opts_file"
175 ;;587 # For OpenJ9 use environment variable to enable quickstart and shareclasses
176 -Xclassic)588 export OPENJ9_JAVA_OPTIONS="-Xquickstart -Xshareclasses"
177 ;;589 ;;
178 # Match -Xa.b.c=d to translate to -Da.b.c=d as a java option590 --sample) append java_args -Xprof ;;
179 -X*)591 --record)
180 val=${1:2}592 append java_args -XX:+FlightRecorder -XX:StartFlightRecording=dumponexit=true
181 if expr -- "$val" : '.*[.]' > /dev/null; then593 ;;
182 java_args="${java_args} -Djruby.${val}"594 --no-bootclasspath) NO_BOOTCLASSPATH=true ;;
183 else595 --ng*)
184 ruby_args="${ruby_args} -X${val}"596 echo "Error: Nailgun is no longer supported" 1>&2
185 fi597 exit 1
186 ;;598 ;;
187 # Match switches that take an argument599 --environment) print_environment_log=true ;;
188 -C|-e|-I|-S) ruby_args="${ruby_args} $1 $2"; shift ;;600 # warn but ignore
189 # Match same switches with argument stuck together601 --1.8|--1.9|--2.0) echo "warning: $1 ignored" 1>&2 ;;
190 -e*|-I*|-S*) ruby_args="${ruby_args} $1" ;;602 # Abort processing on the double dash
191 # Run with JMX management enabled603 --) break ;;
192 --manage)604 # Other opts go to ruby
193 java_args="${java_args} -Dcom.sun.management.jmxremote"605 -*) append ruby_args "$1" ;;
194 java_args="${java_args} -Djruby.management.enabled=true" ;;606 # Abort processing on first non-opt arg
195 # Don't launch a GUI window, no matter what607 *) break ;;
196 --headless)
197 java_args="${java_args} -Djava.awt.headless=true" ;;
198 # Run under JDB
199 --jdb)
200 if [ -z "$JAVA_HOME" ] ; then
201 JAVACMD='jdb'
202 else
203 JAVACMD="$JAVA_HOME/bin/jdb"
204 fi
205 JDB_SOURCEPATH="${JRUBY_HOME}/core/src/main/java:${JRUBY_HOME}/lib/ruby/stdlib:."
206 java_args="${java_args} -sourcepath ${JDB_SOURCEPATH}"
207 JRUBY_OPTS="${JRUBY_OPTS} -X+C" ;;
208 --client)
209 JAVA_VM=-client ;;
210 --server)
211 JAVA_VM=-server ;;
212 --noclient) # JRUBY-4296
213 unset JAVA_VM ;; # For IBM JVM, neither '-client' nor '-server' is applicable
214 --sample)
215 java_args="${java_args} -Xprof" ;;
216 --ng*)
217 echo "Error: Nailgun is no longer supported" 1>&2
218 exit 1 ;;
219 --no-bootclasspath)
220 NO_BOOTCLASSPATH=true ;;
221 # Abort processing on the double dash
222 --) break ;;
223 # Other opts go to ruby
224 -*) ruby_args="${ruby_args} $1" ;;
225 # Abort processing on first non-opt arg
226 *) break ;;
227 esac608 esac
228 shift609 shift
229done610done
230611
231# Force file.encoding to UTF-8 when on Mac, since Apple JDK defaults to MacRoman (JRUBY-3576)612# Force JDK to use specified java.security.egd rand source
232if [[ -z "$JAVA_ENCODING" ]]; then613if [ -n "$JAVA_SECURITY_EGD" ]; then
233 java_args="${java_args} -Dfile.encoding=UTF-8"614 append java_args "-Djava.security.egd=$JAVA_SECURITY_EGD"
234fi615fi
235616
236# Append the rest of the arguments617# The rest of the arguments are for ruby
237ruby_args="${ruby_args} $@"618append ruby_args "$@"
238619
239# Put the ruby_args back into the position arguments $1, $2 etc620JAVA_OPTS="$JAVA_OPTS $JAVA_MEM $JAVA_STACK"
240set -- "${ruby_args}"
241
242JAVA_OPTS="$JAVA_OPTS $JAVA_VM $JAVA_MEM $JAVA_STACK"
243621
244JFFI_OPTS="-Djffi.boot.library.path=$JRUBY_HOME/lib/jni"622JFFI_OPTS="-Djffi.boot.library.path=$JRUBY_HOME/lib/jni"
245623
624CLASSPATH="${CP}${CP_DELIMITER}${CLASSPATH}"
625
626# ----- Tweak console environment for cygwin ----------------------------------
627
628if $cygwin; then
629 use_exec=false
630 JRUBY_HOME="$(cygpath --mixed "$JRUBY_HOME")"
631 JRUBY_SHELL="$(cygpath --mixed "$JRUBY_SHELL")"
632
633 eval set -- "$ruby_args"
634
635 case $1 in
636 /*)
637 if [ -f "$1" ] || [ -d "$1" ]; then
638 # replace first element of ruby_args with cygwin form
639 win_arg="$(cygpath -w "$1")"
640 shift
641 set -- "$win_arg" "$@"
642 assign ruby_args "$@"
643 fi
644 ;;
645 esac
646
647 # fix JLine to use UnixTerminal
648 if stty -icanon min 1 -echo > /dev/null 2>&1; then
649 JAVA_OPTS="$JAVA_OPTS -Djline.terminal=jline.UnixTerminal"
650 fi
651
652fi
246653
247if [[ "$NO_BOOTCLASSPATH" != "" || ( "$VERIFY_JRUBY" != "" ) ]]; then654# ----- Module and Class Data Sharing flags for Java 9+ -----------------------
248 if [ "$PROFILE_ARGS" != "" ]; then
249 echo "Running with instrumented profiler"
250 fi
251655
252 if [ $java_class = $JAVA_CLASS_NGSERVER -a -n "${JRUBY_OPTS}" ]; then656if $use_modules; then
253 echo "warning: starting a nailgun server; discarding JRUBY_OPTS: ${JRUBY_OPTS}"657 # Switch to non-boot path since we can't use bootclasspath on 9+
254 JRUBY_OPTS=''658 NO_BOOTCLASSPATH=true
255 fi
256659
660 # Add base opens we need for Ruby compatibility
661 process_java_opts "$jruby_module_opts_file"
257662
258 "$JAVACMD" $PROFILE_ARGS $JAVA_OPTS "$JFFI_OPTS" ${java_args} -classpath "$JRUBY_CP$CP_DELIMITER$CP$CP_DELIMITER$CLASSPATH" \663 # Allow overriding default JSA file location
259 "-Djruby.home=$JRUBY_HOME" \664 if [ -z "$JRUBY_JSA" ]; then
260 "-Djruby.lib=$JRUBY_HOME/lib" -Djruby.script=jruby \665 JRUBY_JSA="$jruby_jsa_file"
261 "-Djruby.shell=$JRUBY_SHELL" \666 fi
262 $java_class $JRUBY_OPTS $@
263667
264 # Record the exit status immediately, or it will be overridden.668 # If we have a jruby.jsa file, enable AppCDS
265 JRUBY_STATUS=$?669 if [ -f "$JRUBY_JSA" ]; then
670 add_log
671 add_log "Detected Class Data Sharing archive:"
672 add_log " $JRUBY_JSA"
266673
267 if [ "$PROFILE_ARGS" != "" ]; then674 JAVA_OPTS="$JAVA_OPTS -XX:+UnlockDiagnosticVMOptions -XX:SharedArchiveFile=$JRUBY_JSA"
268 echo "Profiling results:"675 fi
269 cat profile.txt676fi
270 rm profile.txt
271 fi
272677
678# ----- Final prepration of the Java command line -----------------------------
273679
274 exit $JRUBY_STATUS680# Include all options from files at the beginning of the Java command line
681JAVA_OPTS="$java_opts_from_files $JAVA_OPTS"
682
683# Don't quote JAVA_OPTS; we want it to expand
684# shellcheck disable=2086
685prepend java_args "$JAVACMD" $JAVA_OPTS "$JFFI_OPTS"
686
687if $NO_BOOTCLASSPATH || $VERIFY_JRUBY; then
688 if $use_modules; then
689 # Use module path instead of classpath for the jruby libs
690 append java_args --module-path "$JRUBY_CP" -classpath "$CLASSPATH"
691 else
692 append java_args -classpath "$JRUBY_CP$CP_DELIMITER$CLASSPATH"
693 fi
275else694else
276 exec $JAVACMD $JAVA_OPTS $JFFI_OPTS ${java_args} -Xbootclasspath/a:$JRUBY_CP -classpath $CP$CP_DELIMITER$CLASSPATH \695 append java_args -Xbootclasspath/a:"$JRUBY_CP"
277 -Djruby.home=$JRUBY_HOME \696 append java_args -classpath "$CLASSPATH"
278 -Djruby.lib=$JRUBY_HOME/lib -Djruby.script=jruby \697 append java_args -Djruby.home="$JRUBY_HOME"
279 -Djruby.shell=$JRUBY_SHELL \
280 $java_class $JRUBY_OPTS $@
281fi698fi
699
700append java_args -Djruby.home="$JRUBY_HOME" \
701 -Djruby.lib="$JRUBY_HOME/lib" \
702 -Djruby.script=jruby \
703 -Djruby.shell="$JRUBY_SHELL" \
704 "$java_class"
705extend java_args ruby_args
706
707eval set -- "$java_args"
708
709add_log
710add_log "Java command line:"
711add_log " $*"
712
713if $print_environment_log; then
714 echo "$environment_log"
715 exit 0
282fi716fi
283717
284# Be careful adding code down here, you might override the exit718# ----- Run JRuby! ------------------------------------------------------------
285# status of the jruby invocation.719
720if $use_exec; then
721 exec "$@"
722else
723 "$@"
724
725 # Record the exit status immediately, or it will be overridden.
726 JRUBY_STATUS=$?
727
728 if $cygwin; then
729 stty icanon echo > /dev/null 2>&1
730 fi
731
732 exit $JRUBY_STATUS
733fi
diff --git a/core/pom.rb b/core/pom.rb
index b443fa6..a82417f 100644
--- a/core/pom.rb
+++ b/core/pom.rb
@@ -43,29 +43,29 @@ project 'JRuby Base' do
4343
44 # exclude jnr-ffi to avoid problems with shading and relocation of the asm packages44 # exclude jnr-ffi to avoid problems with shading and relocation of the asm packages
45 jar 'com.github.jnr:jnr-netdb:1.2.0', :exclusions => ['com.github.jnr:jnr-ffi']45 jar 'com.github.jnr:jnr-netdb:1.2.0', :exclusions => ['com.github.jnr:jnr-ffi']
46 jar 'com.github.jnr:jnr-enxio:0.32.13', :exclusions => ['com.github.jnr:jnr-ffi']46 jar 'com.github.jnr:jnr-enxio:0.32.16', :exclusions => ['com.github.jnr:jnr-ffi']
47 jar 'com.github.jnr:jnr-unixsocket:0.38.17', :exclusions => ['com.github.jnr:jnr-ffi']47 jar 'com.github.jnr:jnr-unixsocket:0.38.21', :exclusions => ['com.github.jnr:jnr-ffi']
48 jar 'com.github.jnr:jnr-posix:3.1.15', :exclusions => ['com.github.jnr:jnr-ffi']48 jar 'com.github.jnr:jnr-posix:3.1.18', :exclusions => ['com.github.jnr:jnr-ffi']
49 jar 'com.github.jnr:jnr-constants:0.10.3', :exclusions => ['com.github.jnr:jnr-ffi']49 jar 'com.github.jnr:jnr-constants:0.10.4', :exclusions => ['com.github.jnr:jnr-ffi']
50 jar 'com.github.jnr:jnr-ffi:2.2.11'50 jar 'com.github.jnr:jnr-ffi:2.2.15'
51 jar 'com.github.jnr:jffi:${jffi.version}'51 jar 'com.github.jnr:jffi:${jffi.version}'
52 jar 'com.github.jnr:jffi:${jffi.version}:native'52 jar 'com.github.jnr:jffi:${jffi.version}:native'
5353
54 jar 'org.jruby.joni:joni:2.1.43'54 jar 'org.jruby.joni:joni:2.2.1'
55 jar 'org.jruby.jcodings:jcodings:1.0.57'55 jar 'org.jruby.jcodings:jcodings:1.0.58'
56 jar 'org.jruby:dirgra:0.3'56 jar 'org.jruby:dirgra:0.3'
5757
58 jar 'com.headius:invokebinder:1.12'58 jar 'com.headius:invokebinder:1.13'
59 jar 'com.headius:options:1.6'59 jar 'com.headius:options:1.6'
6060
61 jar 'com.jcraft:jzlib:1.1.3'61 jar 'org.jruby:jzlib:1.1.5'
62 jar 'junit:junit', :scope => 'test'62 jar 'junit:junit', :scope => 'test'
63 jar 'org.awaitility:awaitility', :scope => 'test'63 jar 'org.awaitility:awaitility', :scope => 'test'
64 jar 'org.apache.ant:ant:${ant.version}', :scope => 'provided'64 jar 'org.apache.ant:ant:${ant.version}', :scope => 'provided'
65 jar 'org.osgi:org.osgi.core:5.0.0', :scope => 'provided'65 jar 'org.osgi:org.osgi.core:5.0.0', :scope => 'provided'
6666
67 # joda timezone must be before joda-time to be packed correctly67 # joda timezone must be before joda-time to be packed correctly
68 jar 'org.jruby:joda-timezones:${tzdata.version}', :scope => '${tzdata.scope}'68 # jar 'org.jruby:joda-timezones:${tzdata.version}', :scope => '${tzdata.scope}'
69 jar 'joda-time:joda-time:${joda.time.version}'69 jar 'joda-time:joda-time:${joda.time.version}'
7070
71 # SLF4J only used within SLF4JLogger (JRuby logger impl) class71 # SLF4J only used within SLF4JLogger (JRuby logger impl) class
@@ -74,7 +74,7 @@ project 'JRuby Base' do
7474
75 jar 'me.qmx.jitescript:jitescript:0.4.1', :exclusions => ['org.ow2.asm:asm-all']75 jar 'me.qmx.jitescript:jitescript:0.4.1', :exclusions => ['org.ow2.asm:asm-all']
7676
77 jar 'com.headius:backport9:1.12'77 jar 'com.headius:backport9:1.13'
7878
79 jar 'jakarta.annotation:jakarta.annotation-api:2.0.0', scope: 'provided'79 jar 'jakarta.annotation:jakarta.annotation-api:2.0.0', scope: 'provided'
8080
@@ -133,7 +133,6 @@ project 'JRuby Base' do
133 execute_goals( 'create',133 execute_goals( 'create',
134 :id => 'jruby-revision',134 :id => 'jruby-revision',
135 :phase => 'generate-sources',135 :phase => 'generate-sources',
136 'shortRevisionLength' => '10',
137 'buildNumberPropertyName' => 'jruby.revision' )136 'buildNumberPropertyName' => 'jruby.revision' )
138 end137 end
139138
@@ -168,12 +167,21 @@ project 'JRuby Base' do
168 end167 end
169 end168 end
170169
170 fork_compiler_args = [ '-XDignore.symbol.file=true',
171 '-J-Duser.language=en',
172 '-J-Dfile.encoding=UTF-8',
173 '-J-Xmx${jruby.compile.memory}' ]
174
175 default_compile_configuration = {
176 'fork' => 'true',
177 'annotationProcessors' => [ 'org.jruby.anno.AnnotationBinder' ],
178 'generatedSourcesDirectory' => 'target/generated-sources',
179 'compilerArgs' => fork_compiler_args
180 }
181
171 plugin( :compiler,182 plugin( :compiler,
172 'encoding' => 'utf-8',183 'encoding' => 'utf-8',
173 'debug' => 'true',
174 'verbose' => 'false',184 'verbose' => 'false',
175 'fork' => 'true',
176 'compilerArgs' => { 'arg' => '-J-Xmx1G' },
177 'showWarnings' => 'true',185 'showWarnings' => 'true',
178 'showDeprecation' => 'true',186 'showDeprecation' => 'true',
179 'source' => [ '${base.java.version}', '1.8' ],187 'source' => [ '${base.java.version}', '1.8' ],
@@ -191,24 +199,19 @@ project 'JRuby Base' do
191 'org/jruby/util/CodegenUtils.java',199 'org/jruby/util/CodegenUtils.java',
192 'org/jruby/util/SafePropertyAccessor.java' ] )200 'org/jruby/util/SafePropertyAccessor.java' ] )
193 execute_goals( 'compile',201 execute_goals( 'compile',
194 :id => 'default-compile',202 default_compile_configuration.merge(
195 :phase => 'compile',203 :id => 'default-compile',
196 'debug' => 'true',204 :phase => 'compile'
197 'annotationProcessors' => [ 'org.jruby.anno.AnnotationBinder' ],205 ))
198 'generatedSourcesDirectory' => 'target/generated-sources',206
199 'compilerArgs' => [ '-XDignore.symbol.file=true',
200 '-J-Duser.language=en',
201 '-J-Dfile.encoding=UTF-8',
202 '-J-Xmx${jruby.compile.memory}' ] )
203 execute_goals( 'compile',207 execute_goals( 'compile',
204 :id => 'populators',208 :id => 'populators',
205 :phase => 'process-classes',209 :phase => 'process-classes',
206 'debug' => 'true',210 'debug' => 'false',
207 'compilerArgs' => [ '-XDignore.symbol.file=true',211 'fork' => 'true',
208 '-J-Duser.language=en',212 'compilerArgs' => fork_compiler_args,
209 '-J-Dfile.encoding=UTF-8',
210 '-J-Xmx${jruby.compile.memory}' ],
211 'includes' => [ 'org/jruby/gen/**/*.java' ] )213 'includes' => [ 'org/jruby/gen/**/*.java' ] )
214
212 execute_goals( 'compile',215 execute_goals( 'compile',
213 :id => 'eclipse-hack',216 :id => 'eclipse-hack',
214 :phase => 'process-classes',217 :phase => 'process-classes',
@@ -237,7 +240,7 @@ project 'JRuby Base' do
237 },240 },
238 'argLine' => '-Xmx${jruby.test.memory} -Dfile.encoding=UTF-8 -Djava.awt.headless=true',241 'argLine' => '-Xmx${jruby.test.memory} -Dfile.encoding=UTF-8 -Djava.awt.headless=true',
239 'environmentVariables' => {242 'environmentVariables' => {
240 'JDK_JAVA_OPTIONS' => '--add-modules java.scripting'243 'JDK_JAVA_OPTIONS' => '--add-modules java.scripting --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED'
241 },244 },
242 includes: [245 includes: [
243 'org/jruby/test/**/*Test*.java',246 'org/jruby/test/**/*Test*.java',
@@ -283,7 +286,7 @@ project 'JRuby Base' do
283 ])286 ])
284 end287 end
285288
286 copy_goal = [:exec, :executable => '/bin/sh', :arguments => ['-c', 'cp ${jruby.basedir}/bin/jruby.bash ${jruby.basedir}/bin/jruby']]289 copy_goal = [:exec, :executable => '/bin/sh', :arguments => ['-c', 'cp ${jruby.basedir}/bin/jruby.sh ${jruby.basedir}/bin/jruby']]
287290
288 profile :clean do291 profile :clean do
289 activation do292 activation do
@@ -300,7 +303,41 @@ project 'JRuby Base' do
300 end303 end
301 end304 end
302305
303 profile 'jruby.bash' do306 profile 'error-prone' do
307 activation do
308 jdk('11') # even an older (2.10.0) version of error-prone would need an adjusted setup on Java 8
309 property(name: 'env.CI') # for keeping fast development cycle, by default only run on CI
310 end
311
312 plugin :compiler do
313 execute_goals( 'compile',
314 :id => 'default-compile',
315 :phase => 'none' ) # do not execute default-compile, we have a replacement bellow
316
317 execute_goals( 'compile',
318 default_compile_configuration.merge(
319 :id => 'default-compile_with_error_prone',
320 :phase => 'compile',
321 'fork' => 'true',
322 'compilerArgs' => default_compile_configuration['compilerArgs'] + [
323 '-XDcompilePolicy=simple', '-Xplugin:ErrorProne'
324 ],
325 'annotationProcessorPaths' => { 'path' => [ {
326 'groupId' => 'com.google.errorprone',
327 'artifactId' => 'error_prone_core',
328 'version' => '2.18.0'
329 },
330 {
331 'groupId' => 'org.jruby',
332 'artifactId' => 'jruby-base',
333 'version' => version
334 } ]
335 }
336 ) )
337 end
338 end
339
340 profile 'jruby.sh' do
304341
305 activation do342 activation do
306 file( :missing => '../bin/jruby' )343 file( :missing => '../bin/jruby' )
diff --git a/core/pom.xml b/core/pom.xml
index b1d33fc..b471010 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -12,7 +12,7 @@ DO NOT MODIFY - GENERATED CODE
12 <parent>12 <parent>
13 <groupId>org.jruby</groupId>13 <groupId>org.jruby</groupId>
14 <artifactId>jruby-parent</artifactId>14 <artifactId>jruby-parent</artifactId>
15 <version>9.3.9.0</version>15 <version>9.4.5.0</version>
16 </parent>16 </parent>
17 <artifactId>jruby-base</artifactId>17 <artifactId>jruby-base</artifactId>
18 <name>JRuby Base</name>18 <name>JRuby Base</name>
@@ -55,10 +55,9 @@ DO NOT MODIFY - GENERATED CODE
55 <test.results.dir>${build.dir}/test-results</test.results.dir>55 <test.results.dir>${build.dir}/test-results</test.results.dir>
56 <tzdata.scope>provided</tzdata.scope>56 <tzdata.scope>provided</tzdata.scope>
57 <tzdata.version>2019c</tzdata.version>57 <tzdata.version>2019c</tzdata.version>
58 <version.ruby>2.6.8</version.ruby>58 <version.ruby>3.1.4</version.ruby>
59 <version.ruby.major>2.6</version.ruby.major>59 <version.ruby.major>3.1</version.ruby.major>
60 <version.ruby.minor>0</version.ruby.minor>60 <version.ruby.minor>4</version.ruby.minor>
61 <version.ruby.revision>67951</version.ruby.revision>
62 </properties>61 </properties>
63 <dependencies>62 <dependencies>
64 <dependency>63 <dependency>
@@ -82,59 +81,59 @@ DO NOT MODIFY - GENERATED CODE
82 <version>1.2.0</version>81 <version>1.2.0</version>
83 <exclusions>82 <exclusions>
84 <exclusion>83 <exclusion>
85 <artifactId>jnr-ffi</artifactId>
86 <groupId>com.github.jnr</groupId>84 <groupId>com.github.jnr</groupId>
85 <artifactId>jnr-ffi</artifactId>
87 </exclusion>86 </exclusion>
88 </exclusions>87 </exclusions>
89 </dependency>88 </dependency>
90 <dependency>89 <dependency>
91 <groupId>com.github.jnr</groupId>90 <groupId>com.github.jnr</groupId>
92 <artifactId>jnr-enxio</artifactId>91 <artifactId>jnr-enxio</artifactId>
93 <version>0.32.13</version>92 <version>0.32.16</version>
94 <exclusions>93 <exclusions>
95 <exclusion>94 <exclusion>
96 <artifactId>jnr-ffi</artifactId>
97 <groupId>com.github.jnr</groupId>95 <groupId>com.github.jnr</groupId>
96 <artifactId>jnr-ffi</artifactId>
98 </exclusion>97 </exclusion>
99 </exclusions>98 </exclusions>
100 </dependency>99 </dependency>
101 <dependency>100 <dependency>
102 <groupId>com.github.jnr</groupId>101 <groupId>com.github.jnr</groupId>
103 <artifactId>jnr-unixsocket</artifactId>102 <artifactId>jnr-unixsocket</artifactId>
104 <version>0.38.17</version>103 <version>0.38.21</version>
105 <exclusions>104 <exclusions>
106 <exclusion>105 <exclusion>
107 <artifactId>jnr-ffi</artifactId>
108 <groupId>com.github.jnr</groupId>106 <groupId>com.github.jnr</groupId>
107 <artifactId>jnr-ffi</artifactId>
109 </exclusion>108 </exclusion>
110 </exclusions>109 </exclusions>
111 </dependency>110 </dependency>
112 <dependency>111 <dependency>
113 <groupId>com.github.jnr</groupId>112 <groupId>com.github.jnr</groupId>
114 <artifactId>jnr-posix</artifactId>113 <artifactId>jnr-posix</artifactId>
115 <version>3.1.15</version>114 <version>3.1.18</version>
116 <exclusions>115 <exclusions>
117 <exclusion>116 <exclusion>
118 <artifactId>jnr-ffi</artifactId>
119 <groupId>com.github.jnr</groupId>117 <groupId>com.github.jnr</groupId>
118 <artifactId>jnr-ffi</artifactId>
120 </exclusion>119 </exclusion>
121 </exclusions>120 </exclusions>
122 </dependency>121 </dependency>
123 <dependency>122 <dependency>
124 <groupId>com.github.jnr</groupId>123 <groupId>com.github.jnr</groupId>
125 <artifactId>jnr-constants</artifactId>124 <artifactId>jnr-constants</artifactId>
126 <version>0.10.3</version>125 <version>0.10.4</version>
127 <exclusions>126 <exclusions>
128 <exclusion>127 <exclusion>
129 <artifactId>jnr-ffi</artifactId>
130 <groupId>com.github.jnr</groupId>128 <groupId>com.github.jnr</groupId>
129 <artifactId>jnr-ffi</artifactId>
131 </exclusion>130 </exclusion>
132 </exclusions>131 </exclusions>
133 </dependency>132 </dependency>
134 <dependency>133 <dependency>
135 <groupId>com.github.jnr</groupId>134 <groupId>com.github.jnr</groupId>
136 <artifactId>jnr-ffi</artifactId>135 <artifactId>jnr-ffi</artifactId>
137 <version>2.2.11</version>136 <version>2.2.15</version>
138 </dependency>137 </dependency>
139 <dependency>138 <dependency>
140 <groupId>com.github.jnr</groupId>139 <groupId>com.github.jnr</groupId>
@@ -150,12 +149,12 @@ DO NOT MODIFY - GENERATED CODE
150 <dependency>149 <dependency>
151 <groupId>org.jruby.joni</groupId>150 <groupId>org.jruby.joni</groupId>
152 <artifactId>joni</artifactId>151 <artifactId>joni</artifactId>
153 <version>2.1.43</version>152 <version>2.2.1</version>
154 </dependency>153 </dependency>
155 <dependency>154 <dependency>
156 <groupId>org.jruby.jcodings</groupId>155 <groupId>org.jruby.jcodings</groupId>
157 <artifactId>jcodings</artifactId>156 <artifactId>jcodings</artifactId>
158 <version>1.0.57</version>157 <version>1.0.58</version>
159 </dependency>158 </dependency>
160 <dependency>159 <dependency>
161 <groupId>org.jruby</groupId>160 <groupId>org.jruby</groupId>
@@ -165,7 +164,7 @@ DO NOT MODIFY - GENERATED CODE
165 <dependency>164 <dependency>
166 <groupId>com.headius</groupId>165 <groupId>com.headius</groupId>
167 <artifactId>invokebinder</artifactId>166 <artifactId>invokebinder</artifactId>
168 <version>1.12</version>167 <version>1.13</version>
169 </dependency>168 </dependency>
170 <dependency>169 <dependency>
171 <groupId>com.headius</groupId>170 <groupId>com.headius</groupId>
@@ -173,9 +172,9 @@ DO NOT MODIFY - GENERATED CODE
173 <version>1.6</version>172 <version>1.6</version>
174 </dependency>173 </dependency>
175 <dependency>174 <dependency>
176 <groupId>com.jcraft</groupId>175 <groupId>org.jruby</groupId>
177 <artifactId>jzlib</artifactId>176 <artifactId>jzlib</artifactId>
178 <version>1.1.3</version>177 <version>1.1.5</version>
179 </dependency>178 </dependency>
180 <dependency>179 <dependency>
181 <groupId>junit</groupId>180 <groupId>junit</groupId>
@@ -200,12 +199,6 @@ DO NOT MODIFY - GENERATED CODE
200 <scope>provided</scope>199 <scope>provided</scope>
201 </dependency>200 </dependency>
202 <dependency>201 <dependency>
203 <groupId>org.jruby</groupId>
204 <artifactId>joda-timezones</artifactId>
205 <version>${tzdata.version}</version>
206 <scope>${tzdata.scope}</scope>
207 </dependency>
208 <dependency>
209 <groupId>joda-time</groupId>202 <groupId>joda-time</groupId>
210 <artifactId>joda-time</artifactId>203 <artifactId>joda-time</artifactId>
211 <version>${joda.time.version}</version>204 <version>${joda.time.version}</version>
@@ -229,15 +222,15 @@ DO NOT MODIFY - GENERATED CODE
229 <version>0.4.1</version>222 <version>0.4.1</version>
230 <exclusions>223 <exclusions>
231 <exclusion>224 <exclusion>
232 <artifactId>asm-all</artifactId>
233 <groupId>org.ow2.asm</groupId>225 <groupId>org.ow2.asm</groupId>
226 <artifactId>asm-all</artifactId>
234 </exclusion>227 </exclusion>
235 </exclusions>228 </exclusions>
236 </dependency>229 </dependency>
237 <dependency>230 <dependency>
238 <groupId>com.headius</groupId>231 <groupId>com.headius</groupId>
239 <artifactId>backport9</artifactId>232 <artifactId>backport9</artifactId>
240 <version>1.12</version>233 <version>1.13</version>
241 </dependency>234 </dependency>
242 <dependency>235 <dependency>
243 <groupId>jakarta.annotation</groupId>236 <groupId>jakarta.annotation</groupId>
@@ -355,7 +348,6 @@ DO NOT MODIFY - GENERATED CODE
355 <goal>create</goal>348 <goal>create</goal>
356 </goals>349 </goals>
357 <configuration>350 <configuration>
358 <shortRevisionLength>10</shortRevisionLength>
359 <buildNumberPropertyName>jruby.revision</buildNumberPropertyName>351 <buildNumberPropertyName>jruby.revision</buildNumberPropertyName>
360 </configuration>352 </configuration>
361 </execution>353 </execution>
@@ -451,7 +443,7 @@ DO NOT MODIFY - GENERATED CODE
451 <goal>compile</goal>443 <goal>compile</goal>
452 </goals>444 </goals>
453 <configuration>445 <configuration>
454 <debug>true</debug>446 <fork>true</fork>
455 <annotationProcessors>447 <annotationProcessors>
456 <annotationProcessor>org.jruby.anno.AnnotationBinder</annotationProcessor>448 <annotationProcessor>org.jruby.anno.AnnotationBinder</annotationProcessor>
457 </annotationProcessors>449 </annotationProcessors>
@@ -471,7 +463,8 @@ DO NOT MODIFY - GENERATED CODE
471 <goal>compile</goal>463 <goal>compile</goal>
472 </goals>464 </goals>
473 <configuration>465 <configuration>
474 <debug>true</debug>466 <debug>false</debug>
467 <fork>true</fork>
475 <compilerArgs>468 <compilerArgs>
476 <compilerArg>-XDignore.symbol.file=true</compilerArg>469 <compilerArg>-XDignore.symbol.file=true</compilerArg>
477 <compilerArg>-J-Duser.language=en</compilerArg>470 <compilerArg>-J-Duser.language=en</compilerArg>
@@ -499,12 +492,7 @@ DO NOT MODIFY - GENERATED CODE
499 </executions>492 </executions>
500 <configuration>493 <configuration>
501 <encoding>utf-8</encoding>494 <encoding>utf-8</encoding>
502 <debug>true</debug>
503 <verbose>false</verbose>495 <verbose>false</verbose>
504 <fork>true</fork>
505 <compilerArgs>
506 <arg>-J-Xmx1G</arg>
507 </compilerArgs>
508 <showWarnings>true</showWarnings>496 <showWarnings>true</showWarnings>
509 <showDeprecation>true</showDeprecation>497 <showDeprecation>true</showDeprecation>
510 <source>${base.java.version}</source>498 <source>${base.java.version}</source>
@@ -559,7 +547,7 @@ DO NOT MODIFY - GENERATED CODE
559 </systemProperties>547 </systemProperties>
560 <argLine>-Xmx${jruby.test.memory} -Dfile.encoding=UTF-8 -Djava.awt.headless=true</argLine>548 <argLine>-Xmx${jruby.test.memory} -Dfile.encoding=UTF-8 -Djava.awt.headless=true</argLine>
561 <environmentVariables>549 <environmentVariables>
562 <JDK_JAVA_OPTIONS>--add-modules java.scripting</JDK_JAVA_OPTIONS>550 <JDK_JAVA_OPTIONS>--add-modules java.scripting --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED</JDK_JAVA_OPTIONS>
563 </environmentVariables>551 </environmentVariables>
564 <includes>552 <includes>
565 <include>org/jruby/test/**/*Test*.java</include>553 <include>org/jruby/test/**/*Test*.java</include>
@@ -665,7 +653,7 @@ DO NOT MODIFY - GENERATED CODE
665 <executable>/bin/sh</executable>653 <executable>/bin/sh</executable>
666 <arguments>654 <arguments>
667 <argument>-c</argument>655 <argument>-c</argument>
668 <argument>cp ${jruby.basedir}/bin/jruby.bash ${jruby.basedir}/bin/jruby</argument>656 <argument>cp ${jruby.basedir}/bin/jruby.sh ${jruby.basedir}/bin/jruby</argument>
669 </arguments>657 </arguments>
670 </configuration>658 </configuration>
671 </execution>659 </execution>
@@ -675,7 +663,66 @@ DO NOT MODIFY - GENERATED CODE
675 </build>663 </build>
676 </profile>664 </profile>
677 <profile>665 <profile>
678 <id>jruby.bash</id>666 <id>error-prone</id>
667 <activation>
668 <jdk>11</jdk>
669 <property>
670 <name>env.CI</name>
671 </property>
672 </activation>
673 <build>
674 <plugins>
675 <plugin>
676 <artifactId>maven-compiler-plugin</artifactId>
677 <executions>
678 <execution>
679 <id>default-compile</id>
680 <phase>none</phase>
681 <goals>
682 <goal>compile</goal>
683 </goals>
684 </execution>
685 <execution>
686 <id>default-compile_with_error_prone</id>
687 <phase>compile</phase>
688 <goals>
689 <goal>compile</goal>
690 </goals>
691 <configuration>
692 <fork>true</fork>
693 <annotationProcessors>
694 <annotationProcessor>org.jruby.anno.AnnotationBinder</annotationProcessor>
695 </annotationProcessors>
696 <generatedSourcesDirectory>target/generated-sources</generatedSourcesDirectory>
697 <compilerArgs>
698 <compilerArg>-XDignore.symbol.file=true</compilerArg>
699 <compilerArg>-J-Duser.language=en</compilerArg>
700 <compilerArg>-J-Dfile.encoding=UTF-8</compilerArg>
701 <compilerArg>-J-Xmx${jruby.compile.memory}</compilerArg>
702 <compilerArg>-XDcompilePolicy=simple</compilerArg>
703 <compilerArg>-Xplugin:ErrorProne</compilerArg>
704 </compilerArgs>
705 <annotationProcessorPaths>
706 <path>
707 <groupId>com.google.errorprone</groupId>
708 <artifactId>error_prone_core</artifactId>
709 <version>2.18.0</version>
710 </path>
711 <path>
712 <groupId>org.jruby</groupId>
713 <artifactId>jruby-base</artifactId>
714 <version>9.4.5.0</version>
715 </path>
716 </annotationProcessorPaths>
717 </configuration>
718 </execution>
719 </executions>
720 </plugin>
721 </plugins>
722 </build>
723 </profile>
724 <profile>
725 <id>jruby.sh</id>
679 <activation>726 <activation>
680 <os>727 <os>
681 <family>unix</family>728 <family>unix</family>
@@ -696,7 +743,7 @@ DO NOT MODIFY - GENERATED CODE
696 <executable>/bin/sh</executable>743 <executable>/bin/sh</executable>
697 <arguments>744 <arguments>
698 <argument>-c</argument>745 <argument>-c</argument>
699 <argument>cp ${jruby.basedir}/bin/jruby.bash ${jruby.basedir}/bin/jruby</argument>746 <argument>cp ${jruby.basedir}/bin/jruby.sh ${jruby.basedir}/bin/jruby</argument>
700 </arguments>747 </arguments>
701 </configuration>748 </configuration>
702 </execution>749 </execution>
diff --git a/core/src/main/java/org/jruby/AbstractRubyMethod.java b/core/src/main/java/org/jruby/AbstractRubyMethod.java
index 49e1f69..b3ccb01 100644
--- a/core/src/main/java/org/jruby/AbstractRubyMethod.java
+++ b/core/src/main/java/org/jruby/AbstractRubyMethod.java
@@ -119,6 +119,21 @@ public abstract class AbstractRubyMethod extends RubyObject implements DataType
119 return context.nil;119 return context.nil;
120 }120 }
121121
122 @JRubyMethod(name = "public?")
123 public RubyBoolean public_p(ThreadContext context) {
124 return context.runtime.newBoolean(method.getVisibility().isPublic());
125 }
126
127 @JRubyMethod(name = "protected?")
128 public RubyBoolean protected_p(ThreadContext context) {
129 return context.runtime.newBoolean(method.getVisibility().isProtected());
130 }
131
132 @JRubyMethod(name = "private?")
133 public RubyBoolean private_p(ThreadContext context) {
134 return context.runtime.newBoolean(method.getVisibility().isPrivate());
135 }
136
122 public String getFilename() {137 public String getFilename() {
123 DynamicMethod realMethod = method.getRealMethod(); // Follow Aliases138 DynamicMethod realMethod = method.getRealMethod(); // Follow Aliases
124 if (realMethod instanceof PositionAware) {139 if (realMethod instanceof PositionAware) {
@@ -153,9 +168,9 @@ public abstract class AbstractRubyMethod extends RubyObject implements DataType
153 }168 }
154169
155 if (receiver == null) {170 if (receiver == null) {
156 return RubyUnboundMethod.newUnboundMethod(superClass, methodName, superClass, originName, entry);171 return RubyUnboundMethod.newUnboundMethod(entry.sourceModule, methodName, superClass, originName, entry);
157 } else {172 } else {
158 return RubyMethod.newMethod(superClass, methodName, superClass, originName, entry, receiver);173 return RubyMethod.newMethod(entry.sourceModule, methodName, superClass, originName, entry, receiver);
159 }174 }
160 }175 }
161176
diff --git a/core/src/main/java/org/jruby/BasicObjectStub.java b/core/src/main/java/org/jruby/BasicObjectStub.java
index 8d3ad83..d7d706a 100644
--- a/core/src/main/java/org/jruby/BasicObjectStub.java
+++ b/core/src/main/java/org/jruby/BasicObjectStub.java
@@ -158,7 +158,6 @@ public final class BasicObjectStub {
158 IRubyObject str = Helpers.invoke(getRuntime(self).getCurrentContext(), self, "to_s");158 IRubyObject str = Helpers.invoke(getRuntime(self).getCurrentContext(), self, "to_s");
159159
160 if (!(str instanceof RubyString)) return (RubyString) anyToString(self);160 if (!(str instanceof RubyString)) return (RubyString) anyToString(self);
161 if (isTaint(self)) str.setTaint(true);
162 return (RubyString) str;161 return (RubyString) str;
163 }162 }
164163
@@ -196,9 +195,7 @@ public final class BasicObjectStub {
196 final RubyClass metaClass = getMetaClass(self);195 final RubyClass metaClass = getMetaClass(self);
197 String cname = metaClass.getRealClass().getName();196 String cname = metaClass.getRealClass().getName();
198 /* 6:tags 16:addr 1:eos */197 /* 6:tags 16:addr 1:eos */
199 RubyString str = metaClass.runtime.newString("#<" + cname + ":0x" + Integer.toHexString(System.identityHashCode(self)) + '>');198 return metaClass.runtime.newString("#<" + cname + ":0x" + Integer.toHexString(System.identityHashCode(self)) + '>');
200 str.setTaint(isTaint(self));
201 return str;
202 }199 }
203200
204 public static IRubyObject checkStringType(IRubyObject self) {201 public static IRubyObject checkStringType(IRubyObject self) {
diff --git a/core/src/main/java/org/jruby/DelegatedModule.java b/core/src/main/java/org/jruby/DelegatedModule.java
205new file mode 100644202new file mode 100644
index 0000000..83deee3
--- /dev/null
+++ b/core/src/main/java/org/jruby/DelegatedModule.java
@@ -0,0 +1,5 @@
1package org.jruby;
2
3public interface DelegatedModule {
4 public RubyModule getDelegate();
5}
diff --git a/core/src/main/java/org/jruby/EvalType.java b/core/src/main/java/org/jruby/EvalType.java
index b2d8e72..bdc41cd 100644
--- a/core/src/main/java/org/jruby/EvalType.java
+++ b/core/src/main/java/org/jruby/EvalType.java
@@ -1,5 +1,8 @@
1package org.jruby;1package org.jruby;
22
3/**
4 * Code evaluation type
5 */
3public enum EvalType {6public enum EvalType {
4 NONE, BINDING_EVAL, INSTANCE_EVAL, MODULE_EVAL7 NONE, BINDING_EVAL, INSTANCE_EVAL, MODULE_EVAL
5};8}
diff --git a/core/src/main/java/org/jruby/FiberScheduler.java b/core/src/main/java/org/jruby/FiberScheduler.java
6new file mode 1006449new file mode 100644
index 0000000..0a4af4b
--- /dev/null
+++ b/core/src/main/java/org/jruby/FiberScheduler.java
@@ -0,0 +1,210 @@
1package org.jruby;
2
3import jnr.constants.platform.Errno;
4import org.jruby.runtime.Helpers;
5import org.jruby.runtime.ThreadContext;
6import org.jruby.runtime.builtin.IRubyObject;
7import org.jruby.util.io.OpenFile;
8
9import java.nio.ByteBuffer;
10
11public class FiberScheduler {
12 // MRI: rb_fiber_scheduler_kernel_sleep
13 public static IRubyObject kernelSleep(ThreadContext context, IRubyObject scheduler, IRubyObject timeout) {
14 return scheduler.callMethod(context, "kernel_sleep", timeout);
15 }
16
17 // MRI: rb_fiber_scheduler_kernel_sleepv
18 public static IRubyObject kernelSleep(ThreadContext context, IRubyObject scheduler, IRubyObject[] args) {
19 return scheduler.callMethod(context, "kernel_sleep", args);
20 }
21
22 // MRI: rb_fiber_scheduler_process_wait
23 public static IRubyObject processWait(ThreadContext context, IRubyObject scheduler, long pid, int flags) {
24 return Helpers.invokeChecked(context, scheduler, "process_wait", context.runtime.newFixnum(pid), context.runtime.newFixnum(flags));
25 }
26
27 // MRI: rb_fiber_scheduler_block
28 public static IRubyObject block(ThreadContext context, IRubyObject scheduler, IRubyObject blocker, IRubyObject timeout) {
29 return Helpers.invoke(context, scheduler, "block", blocker, timeout);
30 }
31
32 // MRI: rb_fiber_scheduler_unblock
33 public static IRubyObject unblock(ThreadContext context, IRubyObject scheduler, IRubyObject blocker, IRubyObject fiber) {
34 return Helpers.invoke(context, scheduler, "unblock", blocker, fiber);
35 }
36
37 // MRI: rb_fiber_scheduler_io_wait
38 public static IRubyObject ioWait(ThreadContext context, IRubyObject scheduler, IRubyObject io, IRubyObject events, IRubyObject timeout) {
39 return Helpers.invoke(context, scheduler, "io_wait", io, events, timeout);
40 }
41
42 // MRI: rb_fiber_scheduler_io_wait_readable
43 public static IRubyObject ioWaitReadable(ThreadContext context, IRubyObject scheduler, IRubyObject io) {
44 return ioWait(context, scheduler, io, context.runtime.newFixnum(OpenFile.READABLE), context.nil);
45 }
46
47 // MRI: rb_fiber_scheduler_io_wait_writable
48 public static IRubyObject ioWaitWritable(ThreadContext context, IRubyObject scheduler, IRubyObject io) {
49 return ioWait(context, scheduler, io, context.runtime.newFixnum(OpenFile.WRITABLE), context.nil);
50 }
51
52 // MRI: rb_fiber_scheduler_io_select
53 public static IRubyObject ioSelect(ThreadContext context, IRubyObject scheduler, IRubyObject readables, IRubyObject writables, IRubyObject exceptables, IRubyObject timeout) {
54 return ioSelectv(context, scheduler, readables, writables, exceptables, timeout);
55 }
56
57 // MRI: rb_fiber_scheduler_io_selectv
58 public static IRubyObject ioSelectv(ThreadContext context, IRubyObject scheduler, IRubyObject... args) {
59 return Helpers.invokeChecked(context, scheduler, "io_select", args);
60 }
61
62 // MRI: rb_fiber_scheduler_io_read
63 public static IRubyObject ioRead(ThreadContext context, IRubyObject scheduler, IRubyObject io, IRubyObject buffer, int length, int offset) {
64 Ruby runtime = context.runtime;
65 return Helpers.invokeChecked(context, scheduler, "io_read", io, buffer, runtime.newFixnum(length), runtime.newFixnum(offset));
66 }
67
68 public static IRubyObject ioRead(ThreadContext context, IRubyObject scheduler, IRubyObject io, IRubyObject buffer, RubyInteger length, RubyInteger offset) {
69 return Helpers.invokeChecked(context, scheduler, "io_read", io, buffer, length, offset);
70 }
71
72 // MRI: rb_fiber_scheduler_io_pread
73 public static IRubyObject ioPRead(ThreadContext context, IRubyObject scheduler, IRubyObject io, IRubyObject buffer, int from, int length, int offset) {
74 return Helpers.invokeChecked(context, scheduler, "io_pread", io, buffer, context.runtime.newFixnum(from), context.runtime.newFixnum(length), context.runtime.newFixnum(offset));
75 }
76
77 public static IRubyObject ioPRead(ThreadContext context, IRubyObject scheduler, IRubyObject io, IRubyObject buffer, RubyInteger from, RubyInteger length, RubyInteger offset) {
78 return Helpers.invokeChecked(context, scheduler, "io_pread", io, buffer, from, length, offset);
79 }
80
81 // MRI: rb_fiber_scheduler_io_write
82 public static IRubyObject ioWrite(ThreadContext context, IRubyObject scheduler, IRubyObject io, IRubyObject buffer, int length, int offset) {
83 Ruby runtime = context.runtime;
84 return Helpers.invokeChecked(context, scheduler, "io_write", io, buffer, runtime.newFixnum(length), runtime.newFixnum(offset));
85 }
86
87 public static IRubyObject ioWrite(ThreadContext context, IRubyObject scheduler, IRubyObject io, IRubyObject buffer, RubyInteger length, RubyInteger offset) {
88 return Helpers.invokeChecked(context, scheduler, "io_write", io, buffer, length, offset);
89 }
90
91 // MRI: rb_fiber_scheduler_io_pwrite
92 public static IRubyObject ioPWrite(ThreadContext context, IRubyObject scheduler, IRubyObject io, IRubyObject buffer, int from, int length, int offset) {
93 return Helpers.invokeChecked(context, scheduler, "io_pwrite", io, buffer, context.runtime.newFixnum(from), context.runtime.newFixnum(length), context.runtime.newFixnum(offset));
94 }
95
96 public static IRubyObject ioPWrite(ThreadContext context, IRubyObject scheduler, IRubyObject io, IRubyObject buffer, RubyInteger from, RubyInteger length, RubyInteger offset) {
97 return Helpers.invokeChecked(context, scheduler, "io_pwrite", io, buffer, from, length, offset);
98 }
99
100 // MRI: rb_fiber_scheduler_io_read_memory
101 public static IRubyObject ioReadMemory(ThreadContext context, IRubyObject scheduler, IRubyObject io, ByteBuffer base, int size, int length) {
102 RubyIOBuffer buffer = RubyIOBuffer.newBuffer(context.runtime, base, size, RubyIOBuffer.LOCKED);
103
104 IRubyObject result = ioRead(context, scheduler, io, buffer, length, 0);
105
106 buffer.unlock(context);
107 buffer.free(context);
108
109 return result;
110 }
111
112 // MRI: rb_fiber_scheduler_io_pread_memory
113 public static IRubyObject ioPReadMemory(ThreadContext context, IRubyObject scheduler, IRubyObject io, ByteBuffer base, int from, int size, int length) {
114 RubyIOBuffer buffer = RubyIOBuffer.newBuffer(context.runtime, base, size, RubyIOBuffer.LOCKED);
115
116 IRubyObject result = ioPRead(context, scheduler, io, buffer, from, length, 0);
117
118 buffer.unlock(context);
119 buffer.free(context);
120
121 return result;
122 }
123
124 // MRI: rb_fiber_scheduler_io_write_memory
125 public static IRubyObject ioWriteMemory(ThreadContext context, IRubyObject scheduler, IRubyObject io, ByteBuffer base, int size, int length) {
126 RubyIOBuffer buffer = RubyIOBuffer.newBuffer(context.runtime, base, size, RubyIOBuffer.LOCKED | RubyIOBuffer.READONLY);
127
128 IRubyObject result = ioWrite(context, scheduler, io, buffer, length, 0);
129
130 buffer.unlock(context);
131 buffer.free(context);
132
133 return result;
134 }
135
136 // MRI: p
137 public static IRubyObject ioPWriteMemory(ThreadContext context, IRubyObject scheduler, IRubyObject io, ByteBuffer base, int from, int size, int length) {
138 RubyIOBuffer buffer = RubyIOBuffer.newBuffer(context.runtime, base, size, RubyIOBuffer.LOCKED | RubyIOBuffer.READONLY);
139
140 IRubyObject result = ioPWrite(context, scheduler, io, buffer, from, length, 0);
141
142 buffer.unlock(context);
143 buffer.free(context);
144
145 return result;
146 }
147
148 // MRI: rb_fiber_scheduler_io_close
149 public static IRubyObject ioClose(ThreadContext context, IRubyObject scheduler, IRubyObject io) {
150 return Helpers.invokeChecked(context, scheduler, "io_close", io);
151 }
152
153 // MRI: rb_fiber_scheduler_address_resolve
154 public static IRubyObject addressResolve(ThreadContext context, IRubyObject scheduler, IRubyObject hostname) {
155 return Helpers.invokeChecked(context, scheduler, "address_resolve", hostname);
156 }
157
158 // MRI: verify_scheduler
159 static void verifyInterface(IRubyObject scheduler) {
160 if (!scheduler.respondsTo("block")) {
161 throw scheduler.getRuntime().newArgumentError("Scheduler must implement #block");
162 }
163
164 if (!scheduler.respondsTo("unblock")) {
165 throw scheduler.getRuntime().newArgumentError("Scheduler must implement #unblock");
166 }
167
168 if (!scheduler.respondsTo("kernel_sleep")) {
169 throw scheduler.getRuntime().newArgumentError("Scheduler must implement #kernel_sleep");
170 }
171
172 if (!scheduler.respondsTo("io_wait")) {
173 throw scheduler.getRuntime().newArgumentError("Scheduler must implement #io_wait");
174 }
175 }
176
177 // MRI: rb_fiber_scheduler_close
178 public static IRubyObject close(ThreadContext context, IRubyObject scheduler) {
179// VM_ASSERT(ruby_thread_has_gvl_p());
180
181 IRubyObject result;
182
183 result = Helpers.invokeChecked(context, scheduler, "scheduler_close");
184 if (result != null) return result;
185
186 result = Helpers.invokeChecked(context, scheduler, "close");
187 if (result != null) return result;
188
189 return context.nil;
190 }
191
192 // MRI: rb_fiber_scheduler_io_result_apply
193 public static int resultApply(ThreadContext context, IRubyObject result) {
194 int resultInt;
195 if (result instanceof RubyFixnum && (resultInt = RubyNumeric.num2int(result)) < 0) {
196 context.runtime.getPosix().errno(-resultInt);
197 return -1;
198 } else {
199 return RubyNumeric.num2int(result);
200 }
201 }
202
203 public static IRubyObject result(Ruby runtime, int result, Errno error) {
204 if (result == -1) {
205 return RubyFixnum.newFixnum(runtime, error.value());
206 } else {
207 return RubyFixnum.newFixnum(runtime, result);
208 }
209 }
210}
diff --git a/core/src/main/java/org/jruby/IncludedModule.java b/core/src/main/java/org/jruby/IncludedModule.java
index 0c1d075..f562b2d 100644
--- a/core/src/main/java/org/jruby/IncludedModule.java
+++ b/core/src/main/java/org/jruby/IncludedModule.java
@@ -4,7 +4,7 @@ import java.util.Map;
44
5import org.jruby.runtime.builtin.IRubyObject;5import org.jruby.runtime.builtin.IRubyObject;
66
7public class IncludedModule extends RubyClass {7public class IncludedModule extends RubyClass implements DelegatedModule {
8 public IncludedModule(Ruby runtime, RubyClass superClass, RubyModule origin) {8 public IncludedModule(Ruby runtime, RubyClass superClass, RubyModule origin) {
9 super(runtime, superClass, false);9 super(runtime, superClass, false);
10 this.origin = origin;10 this.origin = origin;
diff --git a/core/src/main/java/org/jruby/Main.java b/core/src/main/java/org/jruby/Main.java
index 3cdabba..d502136 100644
--- a/core/src/main/java/org/jruby/Main.java
+++ b/core/src/main/java/org/jruby/Main.java
@@ -41,7 +41,6 @@ package org.jruby;
41import org.jruby.exceptions.MainExitException;41import org.jruby.exceptions.MainExitException;
42import org.jruby.exceptions.JumpException;42import org.jruby.exceptions.JumpException;
43import org.jruby.exceptions.RaiseException;43import org.jruby.exceptions.RaiseException;
44import org.jruby.exceptions.SignalException;
45import org.jruby.exceptions.ThreadKill;44import org.jruby.exceptions.ThreadKill;
46import org.jruby.main.DripMain;45import org.jruby.main.DripMain;
47import org.jruby.platform.Platform;46import org.jruby.platform.Platform;
@@ -53,25 +52,16 @@ import org.jruby.util.cli.OutputStrings;
53import org.jruby.util.log.Logger;52import org.jruby.util.log.Logger;
54import org.jruby.util.log.LoggerFactory;53import org.jruby.util.log.LoggerFactory;
5554
56import java.io.File;55import java.io.*;
57import java.io.FileDescriptor;
58import java.io.FileInputStream;
59import java.io.FileNotFoundException;
60import java.io.IOException;
61import java.io.InputStream;
62import java.io.PrintStream;
63import java.lang.management.ManagementFactory;56import java.lang.management.ManagementFactory;
64import java.lang.management.RuntimeMXBean;57import java.lang.management.RuntimeMXBean;
65import java.lang.reflect.InvocationHandler;58import java.nio.charset.StandardCharsets;
66import java.lang.reflect.Method;
67import java.lang.reflect.Proxy;
68import java.util.ArrayList;59import java.util.ArrayList;
69import java.util.List;60import java.util.List;
70import java.util.Map;61import java.util.Map;
71import java.util.Set;62import java.util.Set;
72import java.util.HashSet;63import java.util.HashSet;
73import java.util.Properties;64import java.util.Properties;
74import java.util.concurrent.atomic.AtomicBoolean;
7565
76/**66/**
77 * Class used to launch the interpreter.67 * Class used to launch the interpreter.
@@ -471,11 +461,47 @@ public class Main {
471461
472 private void doPrintUsage(boolean force) {462 private void doPrintUsage(boolean force) {
473 if (config.getShouldPrintUsage() || force) {463 if (config.getShouldPrintUsage() || force) {
474 config.getOutput().print(OutputStrings.getBasicUsageHelp());464 String rubyPager = getRubyPagerEnv();
475 config.getOutput().print(OutputStrings.getFeaturesHelp());465
466 // Do not want to boot native subsystem here, so we do best guess based on System.console. It will be
467 // non-null only if both STDIN and STDOUT are tty.
468 boolean tty = System.console() != null;
469
470 if (rubyPager == null) {
471 config.getOutput().print(OutputStrings.getBasicUsageHelp(tty));
472 config.getOutput().print(OutputStrings.getFeaturesHelp(tty));
473 } else {
474 try {
475 ProcessBuilder builder = new ProcessBuilder(rubyPager);
476 builder.environment().put("LESS", "-R");
477
478 builder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
479 builder.redirectError(ProcessBuilder.Redirect.INHERIT);
480
481 Process process = builder.start();
482 OutputStream in = process.getOutputStream();
483
484 String fullHelp = OutputStrings.getBasicUsageHelp(tty) + OutputStrings.getFeaturesHelp(tty);
485 in.write(fullHelp.getBytes(StandardCharsets.UTF_8));
486
487 in.flush();
488 in.close();
489 process.waitFor();
490 } catch (InterruptedException | IOException e) {
491 e.printStackTrace();
492 }
493 }
476 }494 }
477 }495 }
478496
497 private String getRubyPagerEnv() {
498 String rubyPager = System.getenv("RUBY_PAGER");
499 if (rubyPager == null)
500 rubyPager = System.getenv("PAGER");
501
502 return rubyPager;
503 }
504
479 private void doShowCopyright() {505 private void doShowCopyright() {
480 if (config.isShowCopyright()) {506 if (config.isShowCopyright()) {
481 config.getOutput().println(OutputStrings.getCopyrightString());507 config.getOutput().println(OutputStrings.getCopyrightString());
diff --git a/core/src/main/java/org/jruby/ObjectFlags.java b/core/src/main/java/org/jruby/ObjectFlags.java
index 3d1d727..e3cf10b 100644
--- a/core/src/main/java/org/jruby/ObjectFlags.java
+++ b/core/src/main/java/org/jruby/ObjectFlags.java
@@ -1,7 +1,5 @@
1package org.jruby;1package org.jruby;
22
3import org.jruby.ext.stringio.StringIO;
4
5/**3/**
6 * Flags used by RubyBasicObject descendants.4 * Flags used by RubyBasicObject descendants.
7 */5 */
@@ -13,6 +11,9 @@ public interface ObjectFlags {
13 int FALSE_F = registry.newFlag(RubyBasicObject.class);11 int FALSE_F = registry.newFlag(RubyBasicObject.class);
14 int NIL_F = registry.newFlag(RubyBasicObject.class);12 int NIL_F = registry.newFlag(RubyBasicObject.class);
15 int FROZEN_F = registry.newFlag(RubyBasicObject.class);13 int FROZEN_F = registry.newFlag(RubyBasicObject.class);
14
15 // Deprecated and unused but don't move due to checks elsewhere for the following flags
16 @Deprecated
16 int TAINTED_F = registry.newFlag(RubyBasicObject.class);17 int TAINTED_F = registry.newFlag(RubyBasicObject.class);
1718
18 int CACHEPROXY_F = registry.newFlag(RubyModule.class);19 int CACHEPROXY_F = registry.newFlag(RubyModule.class);
@@ -25,12 +26,11 @@ public interface ObjectFlags {
25 int CR_7BIT_F = registry.newFlag(RubyString.class);26 int CR_7BIT_F = registry.newFlag(RubyString.class);
26 int CR_VALID_F = registry.newFlag(RubyString.class);27 int CR_VALID_F = registry.newFlag(RubyString.class);
2728
28 int STRIO_READABLE = registry.newFlag(StringIO.class);
29 int STRIO_WRITABLE = registry.newFlag(StringIO.class);
30
31 int MATCH_BUSY = registry.newFlag(RubyMatchData.class);29 int MATCH_BUSY = registry.newFlag(RubyMatchData.class);
3230
33 int COMPARE_BY_IDENTITY_F = registry.newFlag(RubyHash.class);31 int COMPARE_BY_IDENTITY_F = registry.newFlag(RubyHash.class);
34 int KEYWORD_REST_ARGUMENTS_F = registry.newFlag(RubyHash.class);32 int KEYWORD_REST_ARGUMENTS_F = registry.newFlag(RubyHash.class);
35 int PROCDEFAULT_HASH_F = registry.newFlag(RubyHash.class);33 int PROCDEFAULT_HASH_F = registry.newFlag(RubyHash.class);
34 int KEYWORD_ARGUMENTS_F = registry.newFlag(RubyHash.class);
35 int RUBY2_KEYWORD_F = registry.newFlag(RubyHash.class);
36}36}
diff --git a/core/src/main/java/org/jruby/PrependedModule.java b/core/src/main/java/org/jruby/PrependedModule.java
index aa69f6f..db1d388 100644
--- a/core/src/main/java/org/jruby/PrependedModule.java
+++ b/core/src/main/java/org/jruby/PrependedModule.java
@@ -48,7 +48,7 @@ import org.jruby.runtime.builtin.IRubyObject;
48 * @see org.jruby.IncludedModuleWrapper48 * @see org.jruby.IncludedModuleWrapper
49 * @see org.jruby.RubyModule49 * @see org.jruby.RubyModule
50 */50 */
51public class PrependedModule extends RubyClass {51public class PrependedModule extends RubyClass implements DelegatedModule {
52 private RubyModule origin;52 private RubyModule origin;
5353
54 public PrependedModule(Ruby runtime, RubyClass superClass, RubyModule prependedClass) {54 public PrependedModule(Ruby runtime, RubyClass superClass, RubyModule prependedClass) {
diff --git a/core/src/main/java/org/jruby/Ruby.java b/core/src/main/java/org/jruby/Ruby.java
index dcf2ac0..4736f50 100644
--- a/core/src/main/java/org/jruby/Ruby.java
+++ b/core/src/main/java/org/jruby/Ruby.java
@@ -49,7 +49,6 @@ import org.jruby.ast.CallNode;
49import org.jruby.ast.FCallNode;49import org.jruby.ast.FCallNode;
50import org.jruby.ast.GlobalAsgnNode;50import org.jruby.ast.GlobalAsgnNode;
51import org.jruby.ast.GlobalVarNode;51import org.jruby.ast.GlobalVarNode;
52import org.jruby.ast.StrNode;
53import org.jruby.ast.VCallNode;52import org.jruby.ast.VCallNode;
54import org.jruby.ast.WhileNode;53import org.jruby.ast.WhileNode;
55import org.jruby.compiler.Constantizable;54import org.jruby.compiler.Constantizable;
@@ -64,8 +63,8 @@ import org.jruby.ext.thread.SizedQueue;
64import org.jruby.ir.IRScope;63import org.jruby.ir.IRScope;
65import org.jruby.ir.IRScriptBody;64import org.jruby.ir.IRScriptBody;
66import org.jruby.ir.runtime.IRReturnJump;65import org.jruby.ir.runtime.IRReturnJump;
66import org.jruby.java.util.ClassUtils;
67import org.jruby.javasupport.Java;67import org.jruby.javasupport.Java;
68import org.jruby.javasupport.JavaClass;
69import org.jruby.javasupport.JavaPackage;68import org.jruby.javasupport.JavaPackage;
70import org.jruby.javasupport.JavaSupport;69import org.jruby.javasupport.JavaSupport;
71import org.jruby.javasupport.JavaSupportImpl;70import org.jruby.javasupport.JavaSupportImpl;
@@ -74,6 +73,7 @@ import org.jruby.management.InlineStats;
74import org.jruby.parser.StaticScope;73import org.jruby.parser.StaticScope;
75import org.jruby.runtime.JavaSites;74import org.jruby.runtime.JavaSites;
76import org.jruby.runtime.MethodIndex;75import org.jruby.runtime.MethodIndex;
76import org.jruby.runtime.TraceEventManager;
77import org.jruby.runtime.invokedynamic.InvokeDynamicSupport;77import org.jruby.runtime.invokedynamic.InvokeDynamicSupport;
78import org.jruby.util.CommonByteLists;78import org.jruby.util.CommonByteLists;
79import org.jruby.util.JavaNameMangler;79import org.jruby.util.JavaNameMangler;
@@ -187,9 +187,9 @@ import java.lang.invoke.MethodHandle;
187import java.lang.ref.WeakReference;187import java.lang.ref.WeakReference;
188import java.net.BindException;188import java.net.BindException;
189import java.nio.charset.Charset;189import java.nio.charset.Charset;
190import java.nio.charset.UnsupportedCharsetException;
190import java.security.SecureRandom;191import java.security.SecureRandom;
191import java.util.ArrayList;192import java.util.ArrayList;
192import java.util.Arrays;
193import java.util.Collections;193import java.util.Collections;
194import java.util.EnumMap;194import java.util.EnumMap;
195import java.util.EnumSet;195import java.util.EnumSet;
@@ -201,6 +201,7 @@ import java.util.LinkedList;
201import java.util.List;201import java.util.List;
202import java.util.Map;202import java.util.Map;
203import java.util.Random;203import java.util.Random;
204import java.util.Set;
204import java.util.WeakHashMap;205import java.util.WeakHashMap;
205import java.util.concurrent.Callable;206import java.util.concurrent.Callable;
206import java.util.concurrent.ConcurrentHashMap;207import java.util.concurrent.ConcurrentHashMap;
@@ -213,11 +214,12 @@ import java.util.concurrent.atomic.AtomicLong;
213import java.util.function.Consumer;214import java.util.function.Consumer;
214import java.util.function.ToIntFunction;215import java.util.function.ToIntFunction;
215import java.util.regex.Pattern;216import java.util.regex.Pattern;
216import java.util.stream.Collectors;
217217
218import static java.lang.invoke.MethodHandles.explicitCastArguments;218import static java.lang.invoke.MethodHandles.explicitCastArguments;
219import static java.lang.invoke.MethodHandles.insertArguments;219import static java.lang.invoke.MethodHandles.insertArguments;
220import static java.lang.invoke.MethodType.methodType;220import static java.lang.invoke.MethodType.methodType;
221import static org.jruby.RubyBoolean.FALSE_BYTES;
222import static org.jruby.RubyBoolean.TRUE_BYTES;
221import static org.jruby.internal.runtime.GlobalVariable.Scope.GLOBAL;223import static org.jruby.internal.runtime.GlobalVariable.Scope.GLOBAL;
222import static org.jruby.util.RubyStringBuilder.str;224import static org.jruby.util.RubyStringBuilder.str;
223import static org.jruby.util.RubyStringBuilder.ids;225import static org.jruby.util.RubyStringBuilder.ids;
@@ -322,22 +324,26 @@ public final class Ruby implements Constantizable {
322 objectClass = RubyClass.createBootstrapClass(this, "Object", basicObjectClass, RubyObject.OBJECT_ALLOCATOR);324 objectClass = RubyClass.createBootstrapClass(this, "Object", basicObjectClass, RubyObject.OBJECT_ALLOCATOR);
323 moduleClass = RubyClass.createBootstrapClass(this, "Module", objectClass, RubyModule.MODULE_ALLOCATOR);325 moduleClass = RubyClass.createBootstrapClass(this, "Module", objectClass, RubyModule.MODULE_ALLOCATOR);
324 classClass = RubyClass.createBootstrapClass(this, "Class", moduleClass, RubyClass.CLASS_ALLOCATOR);326 classClass = RubyClass.createBootstrapClass(this, "Class", moduleClass, RubyClass.CLASS_ALLOCATOR);
327 refinementClass = RubyClass.createBootstrapClass(this, "Refinement", moduleClass, RubyModule.MODULE_ALLOCATOR);
325328
326 basicObjectClass.setMetaClass(classClass);329 basicObjectClass.setMetaClass(classClass);
327 objectClass.setMetaClass(basicObjectClass);330 objectClass.setMetaClass(basicObjectClass);
328 moduleClass.setMetaClass(classClass);331 moduleClass.setMetaClass(classClass);
329 classClass.setMetaClass(classClass);332 classClass.setMetaClass(classClass);
333 refinementClass.setMetaClass(classClass);
330334
331 RubyClass metaClass;335 RubyClass metaClass;
332 metaClass = basicObjectClass.makeMetaClass(classClass);336 metaClass = basicObjectClass.makeMetaClass(classClass);
333 metaClass = objectClass.makeMetaClass(metaClass);337 metaClass = objectClass.makeMetaClass(metaClass);
334 metaClass = moduleClass.makeMetaClass(metaClass);338 metaClass = moduleClass.makeMetaClass(metaClass);
335 classClass.makeMetaClass(metaClass);339 classClass.makeMetaClass(metaClass);
340 refinementClass.makeMetaClass(metaClass);
336341
337 RubyBasicObject.createBasicObjectClass(this, basicObjectClass);342 RubyBasicObject.createBasicObjectClass(this, basicObjectClass);
338 RubyObject.createObjectClass(this, objectClass);343 RubyObject.createObjectClass(this, objectClass);
339 RubyModule.createModuleClass(this, moduleClass);344 RubyModule.createModuleClass(this, moduleClass);
340 RubyClass.createClassClass(this, classClass);345 RubyClass.createClassClass(this, classClass);
346 RubyModule.createRefinementClass(this, refinementClass);
341347
342 // set constants now that they're initialized348 // set constants now that they're initialized
343 basicObjectClass.setConstant("BasicObject", basicObjectClass);349 basicObjectClass.setConstant("BasicObject", basicObjectClass);
@@ -345,6 +351,7 @@ public final class Ruby implements Constantizable {
345 objectClass.setConstant("Object", objectClass);351 objectClass.setConstant("Object", objectClass);
346 objectClass.setConstant("Class", classClass);352 objectClass.setConstant("Class", classClass);
347 objectClass.setConstant("Module", moduleClass);353 objectClass.setConstant("Module", moduleClass);
354 objectClass.setConstant("Refinement", refinementClass);
348355
349 // Initialize Kernel and include into Object356 // Initialize Kernel and include into Object
350 RubyModule kernel = kernelModule = RubyKernel.createKernelModule(this);357 RubyModule kernel = kernelModule = RubyKernel.createKernelModule(this);
@@ -381,12 +388,17 @@ public final class Ruby implements Constantizable {
381 context.prepareTopLevel(objectClass, topSelf);388 context.prepareTopLevel(objectClass, topSelf);
382389
383 // Initialize all the core classes390 // Initialize all the core classes
384 dataClass = initDataClass();
385
386 comparableModule = RubyComparable.createComparable(this);391 comparableModule = RubyComparable.createComparable(this);
387 enumerableModule = RubyEnumerable.createEnumerableModule(this);392 enumerableModule = RubyEnumerable.createEnumerableModule(this);
388 stringClass = RubyString.createStringClass(this);393 stringClass = RubyString.createStringClass(this);
389394
395 falseString = newString(FALSE_BYTES);
396 falseString.setFrozen(true);
397 nilString = RubyString.newEmptyString(this);
398 nilString.setFrozen(true);
399 trueString = newString(TRUE_BYTES);
400 trueString.setFrozen(true);
401
390 encodingService = new EncodingService(this);402 encodingService = new EncodingService(this);
391403
392 symbolClass = RubySymbol.createSymbolClass(this);404 symbolClass = RubySymbol.createSymbolClass(this);
@@ -429,9 +441,13 @@ public final class Ruby implements Constantizable {
429 } else {441 } else {
430 bignumClass = null;442 bignumClass = null;
431 randomClass = null;443 randomClass = null;
432 defaultRand = null;
433 }444 }
434 ioClass = RubyIO.createIOClass(this);445 ioClass = RubyIO.createIOClass(this);
446 if (Options.FIBER_SCHEDULER.load()) {
447 ioBufferClass = RubyIOBuffer.createIOBufferClass(this);
448 } else {
449 ioBufferClass = null;
450 }
435451
436 structClass = profile.allowClass("Struct") ? RubyStruct.createStructClass(this) : null;452 structClass = profile.allowClass("Struct") ? RubyStruct.createStructClass(this) : null;
437 bindingClass = profile.allowClass("Binding") ? RubyBinding.createBindingClass(this) : null;453 bindingClass = profile.allowClass("Binding") ? RubyBinding.createBindingClass(this) : null;
@@ -462,18 +478,21 @@ public final class Ruby implements Constantizable {
462 yielderClass = RubyYielder.createYielderClass(this);478 yielderClass = RubyYielder.createYielderClass(this);
463 chainClass = RubyChain.createChainClass(this, enumeratorClass);479 chainClass = RubyChain.createChainClass(this, enumeratorClass);
464 aseqClass = RubyArithmeticSequence.createArithmeticSequenceClass(this, enumeratorClass);480 aseqClass = RubyArithmeticSequence.createArithmeticSequenceClass(this, enumeratorClass);
481 producerClass = RubyProducer.createProducerClass(this, enumeratorClass);
465 } else {482 } else {
466 enumeratorClass = null;483 enumeratorClass = null;
467 generatorClass = null;484 generatorClass = null;
468 yielderClass = null;485 yielderClass = null;
469 chainClass = null;486 chainClass = null;
470 aseqClass = null;487 aseqClass = null;
488 producerClass = null;
471 }489 }
472490
473 continuationClass = initContinuation();491 continuationClass = initContinuation();
474492
475 TracePoint.createTracePointClass(this);493 TracePoint.createTracePointClass(this);
476494
495 warningCategories = config.getWarningCategories();
477 warningModule = RubyWarnings.createWarningModule(this);496 warningModule = RubyWarnings.createWarningModule(this);
478497
479 // Initialize exceptions498 // Initialize exceptions
@@ -537,6 +556,13 @@ public final class Ruby implements Constantizable {
537556
538 // Done booting JRuby runtime557 // Done booting JRuby runtime
539 runtimeIsBooted = true;558 runtimeIsBooted = true;
559 if ("true".equals(System.getenv("USE_SUBSPAWN"))) {
560 if (Platform.IS_WINDOWS) {
561 LOG.warn("env USE_SUBSPAWN=true is unsupported on Windows at this time");
562 } else {
563 getLoadService().require("subspawn/replace-builtin");
564 }
565 }
540 }566 }
541567
542 private void initProfiling() {568 private void initProfiling() {
@@ -569,6 +595,8 @@ public final class Ruby implements Constantizable {
569 loadService.provide("rational.rb");595 loadService.provide("rational.rb");
570 loadService.provide("complex.rb");596 loadService.provide("complex.rb");
571 loadService.provide("thread.rb");597 loadService.provide("thread.rb");
598 loadService.provide("fiber.rb");
599 loadService.provide("ruby2_keywords.rb");
572600
573 // Load preludes601 // Load preludes
574 initRubyPreludes();602 initRubyPreludes();
@@ -649,15 +677,6 @@ public final class Ruby implements Constantizable {
649 }677 }
650 }678 }
651679
652 private RubyClass initDataClass() {
653 RubyClass dataClass = null;
654 if (profile.allowClass("Data")) {
655 dataClass = defineClass("Data", objectClass, ObjectAllocator.NOT_ALLOCATABLE_ALLOCATOR);
656 getObject().deprecateConstant(this, "Data");
657 }
658 return dataClass;
659 }
660
661 private Random initRandom() {680 private Random initRandom() {
662 Random myRandom;681 Random myRandom;
663 try {682 try {
@@ -791,7 +810,7 @@ public final class Ruby implements Constantizable {
791810
792 /**811 /**
793 * Convenience method for java integrators who may need to switch the notion812 * Convenience method for java integrators who may need to switch the notion
794 * of "global" runtime. Use <tt>JRuby.runtime.use_as_global_runtime</tt>813 * of "global" runtime. Use <code>JRuby.runtime.use_as_global_runtime</code>
795 * from Ruby code to activate the current runtime as the global one.814 * from Ruby code to activate the current runtime as the global one.
796 */815 */
797 public void useAsGlobalRuntime() {816 public void useAsGlobalRuntime() {
@@ -836,7 +855,7 @@ public final class Ruby implements Constantizable {
836 * and runtime preparation typical to normal script runs.855 * and runtime preparation typical to normal script runs.
837 *856 *
838 * @param script The scriptlet to run857 * @param script The scriptlet to run
839 * @returns The result of the eval858 * @return The result of the eval
840 */859 */
841 public IRubyObject evalScriptlet(String script) {860 public IRubyObject evalScriptlet(String script) {
842 ThreadContext context = getCurrentContext();861 ThreadContext context = getCurrentContext();
@@ -858,7 +877,7 @@ public final class Ruby implements Constantizable {
858 * @param script The scriptlet to run877 * @param script The scriptlet to run
859 * @param scope The scope to execute against (ManyVarsDynamicScope is878 * @param scope The scope to execute against (ManyVarsDynamicScope is
860 * recommended, so it can grow as needed)879 * recommended, so it can grow as needed)
861 * @returns The result of the eval880 * @return The result of the eval
862 */881 */
863 public IRubyObject evalScriptlet(String script, DynamicScope scope) {882 public IRubyObject evalScriptlet(String script, DynamicScope scope) {
864 ThreadContext context = getCurrentContext();883 ThreadContext context = getCurrentContext();
@@ -867,7 +886,7 @@ public final class Ruby implements Constantizable {
867 context.preEvalScriptlet(scope);886 context.preEvalScriptlet(scope);
868887
869 try {888 try {
870 return interpreter.execute(this, rootNode, context.getFrameSelf());889 return interpreter.execute(this, rootNode, getTopSelf());
871 } finally {890 } finally {
872 context.postEvalScriptlet();891 context.postEvalScriptlet();
873 }892 }
@@ -923,6 +942,9 @@ public final class Ruby implements Constantizable {
923 getGlobalVariables().define("$PROGRAM_NAME", d, GLOBAL);942 getGlobalVariables().define("$PROGRAM_NAME", d, GLOBAL);
924 getGlobalVariables().define("$0", d, GLOBAL);943 getGlobalVariables().define("$0", d, GLOBAL);
925944
945 // set main script and canonical path for require_relative use
946 loadService.setMainScript(filename, getCurrentDirectory());
947
926 for (Map.Entry<String, String> entry : config.getOptionGlobals().entrySet()) {948 for (Map.Entry<String, String> entry : config.getOptionGlobals().entrySet()) {
927 final IRubyObject varvalue;949 final IRubyObject varvalue;
928 if (entry.getValue() != null) {950 if (entry.getValue() != null) {
@@ -1021,7 +1043,7 @@ public final class Ruby implements Constantizable {
1021 *1043 *
1022 * @param inputStream The input stream from which to read the script1044 * @param inputStream The input stream from which to read the script
1023 * @param filename The filename to use for parsing1045 * @param filename The filename to use for parsing
1024 * @returns The root node of the parsed script1046 * @return The root node of the parsed script
1025 */1047 */
1026 public Node parseFromMain(InputStream inputStream, String filename) {1048 public Node parseFromMain(InputStream inputStream, String filename) {
1027 if (config.isInlineScript()) {1049 if (config.isInlineScript()) {
@@ -1085,6 +1107,8 @@ public final class Ruby implements Constantizable {
1085 if (Options.JIT_LOGGING.load()) {1107 if (Options.JIT_LOGGING.load()) {
1086 LOG.info("successfully compiled: {}", scriptNode.getFile());1108 LOG.info("successfully compiled: {}", scriptNode.getFile());
1087 }1109 }
1110 } catch (RaiseException e) {
1111 throw e;
1088 } catch (Throwable e) {1112 } catch (Throwable e) {
1089 if (Options.JIT_LOGGING.load()) {1113 if (Options.JIT_LOGGING.load()) {
1090 if (Options.JIT_LOGGING_VERBOSE.load()) {1114 if (Options.JIT_LOGGING_VERBOSE.load()) {
@@ -1123,10 +1147,11 @@ public final class Ruby implements Constantizable {
1123 private RootNode addGetsLoop(RootNode oldRoot, boolean printing, boolean processLineEndings, boolean split) {1147 private RootNode addGetsLoop(RootNode oldRoot, boolean printing, boolean processLineEndings, boolean split) {
1124 int line = oldRoot.getLine();1148 int line = oldRoot.getLine();
1125 BlockNode newBody = new BlockNode(line);1149 BlockNode newBody = new BlockNode(line);
1126 RubySymbol dollarSlash = newSymbol(CommonByteLists.DOLLAR_SLASH);
1127 newBody.add(new GlobalAsgnNode(line, dollarSlash, new StrNode(line, ((RubyString) globalVariables.get("$/")).getByteList())));
11281150
1129 if (processLineEndings) newBody.add(new GlobalAsgnNode(line, newSymbol(CommonByteLists.DOLLAR_BACKSLASH), new GlobalVarNode(line, dollarSlash)));1151 if (processLineEndings) {
1152 RubySymbol dollarSlash = newSymbol(CommonByteLists.DOLLAR_SLASH);
1153 newBody.add(new GlobalAsgnNode(line, newSymbol(CommonByteLists.DOLLAR_BACKSLASH), new GlobalVarNode(line, dollarSlash)));
1154 }
11301155
1131 GlobalVarNode dollarUnderscore = new GlobalVarNode(line, newSymbol("$_"));1156 GlobalVarNode dollarUnderscore = new GlobalVarNode(line, newSymbol("$_"));
11321157
@@ -1142,7 +1167,7 @@ public final class Ruby implements Constantizable {
1142 whileBody.add(oldRoot.getBodyNode());1167 whileBody.add(oldRoot.getBodyNode());
1143 }1168 }
11441169
1145 if (printing) whileBody.add(new FCallNode(line, newSymbol("puts"), new ArrayNode(line, dollarUnderscore), null));1170 if (printing) whileBody.add(new FCallNode(line, newSymbol("print"), new ArrayNode(line, dollarUnderscore), null));
11461171
1147 return new RootNode(line, oldRoot.getScope(), newBody, oldRoot.getFile());1172 return new RootNode(line, oldRoot.getScope(), newBody, oldRoot.getFile());
1148 }1173 }
@@ -1206,6 +1231,8 @@ public final class Ruby implements Constantizable {
1206 if (scriptAndCode != null && Options.JIT_LOGGING.load()) {1231 if (scriptAndCode != null && Options.JIT_LOGGING.load()) {
1207 LOG.info("done compiling target script: {}", scriptNode.getFile());1232 LOG.info("done compiling target script: {}", scriptNode.getFile());
1208 }1233 }
1234 } catch (RaiseException e) {
1235 throw e;
1209 } catch (Exception e) {1236 } catch (Exception e) {
1210 if (Options.JIT_LOGGING.load()) {1237 if (Options.JIT_LOGGING.load()) {
1211 if (Options.JIT_LOGGING_VERBOSE.load()) {1238 if (Options.JIT_LOGGING_VERBOSE.load()) {
@@ -1505,7 +1532,7 @@ public final class Ruby implements Constantizable {
1505 * rb_define_module in MRI.1532 * rb_define_module in MRI.
1506 *1533 *
1507 * @param name The name of the new module1534 * @param name The name of the new module
1508 * @returns The new module1535 * @return The new module
1509 */1536 */
1510 @Extension1537 @Extension
1511 public RubyModule defineModule(String name) {1538 public RubyModule defineModule(String name) {
@@ -1519,7 +1546,7 @@ public final class Ruby implements Constantizable {
1519 * @param name The name of the new module1546 * @param name The name of the new module
1520 * @param parent The class or module namespace under which to define the1547 * @param parent The class or module namespace under which to define the
1521 * module1548 * module
1522 * @returns The new module1549 * @return The new module
1523 */1550 */
1524 @Extension1551 @Extension
1525 public RubyModule defineModuleUnder(String name, RubyModule parent) {1552 public RubyModule defineModuleUnder(String name, RubyModule parent) {
@@ -1544,7 +1571,7 @@ public final class Ruby implements Constantizable {
1544 * new module is created.1571 * new module is created.
1545 *1572 *
1546 * @param id The name of the module1573 * @param id The name of the module
1547 * @returns The existing or new module1574 * @return The existing or new module
1548 */1575 */
1549 public RubyModule getOrCreateModule(String id) {1576 public RubyModule getOrCreateModule(String id) {
1550 IRubyObject module = objectClass.getConstantAt(id);1577 IRubyObject module = objectClass.getConstantAt(id);
@@ -1599,6 +1626,7 @@ public final class Ruby implements Constantizable {
1599 loadService.loadFromClassLoader(getClassLoader(), "jruby/bundler/startup.rb", false);1626 loadService.loadFromClassLoader(getClassLoader(), "jruby/bundler/startup.rb", false);
1600 }1627 }
16011628
1629 @SuppressWarnings("ReturnValueIgnored")
1602 private boolean doesReflectionWork() {1630 private boolean doesReflectionWork() {
1603 try {1631 try {
1604 ClassLoader.class.getDeclaredMethod("getResourceAsStream", String.class);1632 ClassLoader.class.getDeclaredMethod("getResourceAsStream", String.class);
@@ -1661,6 +1689,7 @@ public final class Ruby implements Constantizable {
1661 ifAllowed("Fatal", (ruby) -> fatal = RubyFatal.define(ruby, exceptionClass));1689 ifAllowed("Fatal", (ruby) -> fatal = RubyFatal.define(ruby, exceptionClass));
1662 ifAllowed("Interrupt", (ruby) -> interrupt = RubyInterrupt.define(ruby, signalException));1690 ifAllowed("Interrupt", (ruby) -> interrupt = RubyInterrupt.define(ruby, signalException));
1663 ifAllowed("TypeError", (ruby) -> typeError = RubyTypeError.define(ruby, standardError));1691 ifAllowed("TypeError", (ruby) -> typeError = RubyTypeError.define(ruby, standardError));
1692 ifAllowed("NoMatchingPatternError", (ruby) -> noMatchingPatternError = RubyNoMatchingPatternError.define(ruby, standardError));
1664 ifAllowed("ArgumentError", (ruby) -> argumentError = RubyArgumentError.define(ruby, standardError));1693 ifAllowed("ArgumentError", (ruby) -> argumentError = RubyArgumentError.define(ruby, standardError));
1665 ifAllowed("UncaughtThrowError", (ruby) -> uncaughtThrowError = RubyUncaughtThrowError.define(ruby, argumentError));1694 ifAllowed("UncaughtThrowError", (ruby) -> uncaughtThrowError = RubyUncaughtThrowError.define(ruby, argumentError));
1666 ifAllowed("IndexError", (ruby) -> indexError = RubyIndexError.define(ruby, standardError));1695 ifAllowed("IndexError", (ruby) -> indexError = RubyIndexError.define(ruby, standardError));
@@ -1691,6 +1720,17 @@ public final class Ruby implements Constantizable {
1691 ifAllowed("KeyError", (ruby) -> keyError = RubyKeyError.define(ruby, indexError));1720 ifAllowed("KeyError", (ruby) -> keyError = RubyKeyError.define(ruby, indexError));
1692 ifAllowed("DomainError", (ruby) -> mathDomainError = RubyDomainError.define(ruby, argumentError, mathModule));1721 ifAllowed("DomainError", (ruby) -> mathDomainError = RubyDomainError.define(ruby, argumentError, mathModule));
16931722
1723 RubyClass runtimeError = this.runtimeError;
1724 ObjectAllocator runtimeErrorAllocator = runtimeError.getAllocator();
1725
1726 if (Options.FIBER_SCHEDULER.load()) {
1727 bufferLockedError = ioBufferClass.defineClassUnder("LockedError", runtimeError, runtimeErrorAllocator);
1728 bufferAllocationError = ioBufferClass.defineClassUnder("AllocationError", runtimeError, runtimeErrorAllocator);
1729 bufferAccessError = ioBufferClass.defineClassUnder("AccessError", runtimeError, runtimeErrorAllocator);
1730 bufferInvalidatedError = ioBufferClass.defineClassUnder("InvalidatedError", runtimeError, runtimeErrorAllocator);
1731 bufferMaskError = ioBufferClass.defineClassUnder("MaskError", runtimeError, runtimeErrorAllocator);
1732 }
1733
1694 initErrno();1734 initErrno();
16951735
1696 initNativeException();1736 initNativeException();
@@ -1853,6 +1893,10 @@ public final class Ruby implements Constantizable {
1853 return moduleClass;1893 return moduleClass;
1854 }1894 }
18551895
1896 public RubyClass getRefinement() {
1897 return refinementClass;
1898 }
1899
1856 public RubyClass getClassClass() {1900 public RubyClass getClassClass() {
1857 return classClass;1901 return classClass;
1858 }1902 }
@@ -1992,6 +2036,10 @@ public final class Ruby implements Constantizable {
1992 return aseqClass;2036 return aseqClass;
1993 }2037 }
19942038
2039 public RubyClass getProducer() {
2040 return producerClass;
2041 }
2042
1995 public RubyClass getFiber() {2043 public RubyClass getFiber() {
1996 return fiberClass;2044 return fiberClass;
1997 }2045 }
@@ -2031,6 +2079,15 @@ public final class Ruby implements Constantizable {
2031 return trueObject;2079 return trueObject;
2032 }2080 }
20332081
2082 public RubyString getTrueString() {
2083 return trueString;
2084 }
2085
2086 public RubyString getNilString() {
2087 return nilString;
2088 }
2089
2090
2034 /** Returns the "false" instance from the instance pool.2091 /** Returns the "false" instance from the instance pool.
2035 * @return The "false" instance.2092 * @return The "false" instance.
2036 */2093 */
@@ -2038,6 +2095,10 @@ public final class Ruby implements Constantizable {
2038 return falseObject;2095 return falseObject;
2039 }2096 }
20402097
2098 public RubyString getFalseString() {
2099 return falseString;
2100 }
2101
2041 /** Returns the "nil" singleton instance.2102 /** Returns the "nil" singleton instance.
2042 * @return "nil"2103 * @return "nil"
2043 */2104 */
@@ -2101,6 +2162,15 @@ public final class Ruby implements Constantizable {
2101 return bignumClass;2162 return bignumClass;
2102 }2163 }
21032164
2165
2166 public RubyClass getDateError() {
2167 return this.dateErrorClass;
2168 }
2169
2170 public void setDateError(RubyClass dateError) {
2171 this.dateErrorClass = dateError;
2172 }
2173
2104 public RubyClass getDir() {2174 public RubyClass getDir() {
2105 return dirClass;2175 return dirClass;
2106 }2176 }
@@ -2121,6 +2191,10 @@ public final class Ruby implements Constantizable {
2121 return ioClass;2191 return ioClass;
2122 }2192 }
21232193
2194 public RubyClass getIOBuffer() {
2195 return ioBufferClass;
2196 }
2197
2124 public RubyClass getThread() {2198 public RubyClass getThread() {
2125 return threadClass;2199 return threadClass;
2126 }2200 }
@@ -2316,6 +2390,10 @@ public final class Ruby implements Constantizable {
2316 return typeError;2390 return typeError;
2317 }2391 }
23182392
2393 public RubyClass getNoMatchingPatternError() {
2394 return noMatchingPatternError;
2395 }
2396
2319 public RubyClass getArgumentError() {2397 public RubyClass getArgumentError() {
2320 return argumentError;2398 return argumentError;
2321 }2399 }
@@ -2428,17 +2506,52 @@ public final class Ruby implements Constantizable {
2428 return invalidByteSequenceError;2506 return invalidByteSequenceError;
2429 }2507 }
24302508
2509 public RubyClass getBufferLockedError() {
2510 return bufferLockedError;
2511 }
2512
2513 public RubyClass getBufferAllocationError() {
2514 return bufferAllocationError;
2515 }
2516
2517 public RubyClass getBufferAccessError() {
2518 return bufferAccessError;
2519 }
2520
2521 public RubyClass getBufferInvalidatedError() {
2522 return bufferInvalidatedError;
2523 }
2524
2525 public RubyClass getBufferMaskError() {
2526 return bufferMaskError;
2527 }
2528
2529 @Deprecated
2431 RubyRandom.RandomType defaultRand;2530 RubyRandom.RandomType defaultRand;
24322531
2532 /** The default Ruby Random object for this runtime */
2533 private RubyRandom defaultRandom;
2534
2535 public RubyRandom getDefaultRandom() {
2536 return defaultRandom;
2537 }
2538
2539 public void setDefaultRandom(RubyRandom random) {
2540 this.defaultRandom = random;
2541 this.defaultRand = random.getRandomType();
2542 }
2543
2433 /**2544 /**
2434 * @deprecated internal API, to be hidden2545 * @deprecated internal API, to be hidden
2435 */2546 */
2436 public RubyRandom.RandomType getDefaultRand() {2547 public RubyRandom.RandomType getDefaultRand() {
2437 return defaultRand;2548 return getDefaultRandom().getRandomType();
2438 }2549 }
24392550
2551 /**
2552 * @deprecated the modified field is now unused and deprecated and the set is ignored
2553 */
2440 public void setDefaultRand(RubyRandom.RandomType defaultRand) {2554 public void setDefaultRand(RubyRandom.RandomType defaultRand) {
2441 this.defaultRand = defaultRand;
2442 }2555 }
24432556
2444 private RubyHash charsetMap;2557 private RubyHash charsetMap;
@@ -2448,46 +2561,97 @@ public final class Ruby implements Constantizable {
2448 return charsetMap;2561 return charsetMap;
2449 }2562 }
24502563
2451 /** Getter for property isVerbose.2564 /**
2452 * @return Value of property isVerbose.2565 * @return $VERBOSE value
2453 */2566 */
2454 public IRubyObject getVerbose() {2567 public IRubyObject getVerbose() {
2455 return verboseValue;2568 return verboseValue;
2456 }2569 }
24572570
2571 /**
2572 * @return $VERBOSE value as a Java primitive
2573 */
2458 public boolean isVerbose() {2574 public boolean isVerbose() {
2459 return verbose;2575 return verbose;
2460 }2576 }
24612577
2578 /**
2579 * If the user explicitly disabled warnings using: {@link #setWarningsEnabled(boolean)} return false.
2580 *
2581 * Otherwise fallback to a $VERBOSE value check (which is the default behavior).
2582 *
2583 * @return whether warnings are enabled
2584 */
2462 public boolean warningsEnabled() {2585 public boolean warningsEnabled() {
2463 return warningsEnabled;2586 return warningsEnabled && verboseWarnings;
2464 }2587 }
24652588
2466 /** Setter for property isVerbose.2589 /**
2467 * @param verbose New value of property isVerbose.2590 * Setter that enables/disabled warnings (without changing verbose mode).
2591 * @param warningsEnabled
2592 * @see #setVerbose(IRubyObject)
2593 */
2594 public void setWarningsEnabled(final boolean warningsEnabled) {
2595 this.warningsEnabled = warningsEnabled;
2596 }
2597
2598 /**
2599 * Sets the runtime verbosity ($VERBOSE global which usually gets set to nil/false or true).
2600 * <p>Note: warnings get enabled whenever the verbose level is set to a value that is not nil.</p>
2601 * @param verbose the verbose ruby value
2468 */2602 */
2469 public void setVerbose(IRubyObject verbose) {2603 public void setVerbose(final IRubyObject verbose) {
2470 this.verbose = verbose.isTrue();2604 this.verbose = verbose.isTrue();
2471 this.verboseValue = verbose;2605 this.verboseValue = verbose;
2472 warningsEnabled = !verbose.isNil();2606 verboseWarnings = !verbose.isNil();
2473 }2607 }
24742608
2475 /** Getter for property isDebug.2609 /**
2476 * @return Value of property isDebug.2610 * Sets the $VERBOSE level
2611 * @param verbose null, true and false are all valid
2612 * @see #setVerbose(IRubyObject)
2613 */
2614 public void setVerbose(final Boolean verbose) {
2615 setVerbose(verbose == null ? nilObject : (verbose ? trueObject : falseObject));
2616 }
2617
2618 /**
2619 * @return $DEBUG value
2477 */2620 */
2478 public IRubyObject getDebug() {2621 public IRubyObject getDebug() {
2479 return debug ? trueObject : falseObject;2622 return debug ? trueObject : falseObject;
2480 }2623 }
24812624
2625 /**
2626 * @return $DEBUG value as a boolean
2627 */
2482 public boolean isDebug() {2628 public boolean isDebug() {
2483 return debug;2629 return debug;
2484 }2630 }
24852631
2486 /** Setter for property isDebug.2632 /**
2487 * @param debug New value of property isDebug.2633 * Setter for property isDebug.
2634 * @param debug the $DEBUG value
2488 */2635 */
2489 public void setDebug(IRubyObject debug) {2636 public void setDebug(IRubyObject debug) {
2490 this.debug = debug.isTrue();2637 setDebug(debug.isTrue());
2638 }
2639
2640 /**
2641 * Sets the $DEBUG flag
2642 * @param debug
2643 */
2644 public void setDebug(final boolean debug) {
2645 this.debug = debug;
2646 }
2647
2648 /**
2649 * Get the current enabled warning categories.
2650 *
2651 * @return a set of the currently-enabled warning categories
2652 */
2653 public Set<RubyWarnings.Category> getWarningCategories() {
2654 return warningCategories;
2491 }2655 }
24922656
2493 public JavaSupport getJavaSupport() {2657 public JavaSupport getJavaSupport() {
@@ -2627,9 +2791,7 @@ public final class Ruby implements Constantizable {
2627 private byte[] encodeToBytes(String string) {2791 private byte[] encodeToBytes(String string) {
2628 Charset charset = getDefaultCharset();2792 Charset charset = getDefaultCharset();
26292793
2630 byte[] bytes = charset == null ? string.getBytes() : string.getBytes(charset);2794 return charset == null ? string.getBytes() : string.getBytes(charset);
2631
2632 return bytes;
2633 }2795 }
26342796
2635 @Deprecated2797 @Deprecated
@@ -2703,11 +2865,11 @@ public final class Ruby implements Constantizable {
2703 * Get the default java.nio.charset.Charset for the current default internal encoding.2865 * Get the default java.nio.charset.Charset for the current default internal encoding.
2704 */2866 */
2705 public Charset getDefaultCharset() {2867 public Charset getDefaultCharset() {
2706 Encoding enc = getDefaultEncoding();2868 try {
27072869 return EncodingUtils.charsetForEncoding(getDefaultEncoding());
2708 Charset charset = EncodingUtils.charsetForEncoding(enc);2870 } catch (UnsupportedCharsetException e) {
27092871 return null;
2710 return charset;2872 }
2711 }2873 }
27122874
2713 /**2875 /**
@@ -2771,7 +2933,6 @@ public final class Ruby implements Constantizable {
2771 throw newRaiseException(getTypeError(), str(this, "can't retrieve anonymous class ", ids(this, path)));2933 throw newRaiseException(getTypeError(), str(this, "can't retrieve anonymous class ", ids(this, path)));
2772 }2934 }
27732935
2774 ThreadContext context = getCurrentContext();
2775 RubyModule c = getObject();2936 RubyModule c = getObject();
2776 int pbeg = 0, p = 0;2937 int pbeg = 0, p = 0;
2777 for (int l = path.length(); p < l; ) {2938 for (int l = path.length(); p < l; ) {
@@ -2787,8 +2948,7 @@ public final class Ruby implements Constantizable {
2787 }2948 }
27882949
2789 // FIXME: JI depends on const_missing getting called from Marshal.load (ruby objests do not). We should marshal JI objects differently so we do not differentiate here.2950 // FIXME: JI depends on const_missing getting called from Marshal.load (ruby objests do not). We should marshal JI objects differently so we do not differentiate here.
2790 boolean isJava = c instanceof JavaPackage || JavaClass.isProxyType(context, c);2951 IRubyObject cc = flexibleSearch || isJavaPackageOrJavaClassProxyType(c) ? c.getConstant(str) : c.getConstantAt(str);
2791 IRubyObject cc = flexibleSearch || isJava ? c.getConstant(str) : c.getConstantAt(str);
27922952
2793 if (!flexibleSearch && cc == null) return null;2953 if (!flexibleSearch && cc == null) return null;
27942954
@@ -2801,6 +2961,10 @@ public final class Ruby implements Constantizable {
2801 return c;2961 return c;
2802 }2962 }
28032963
2964 private static boolean isJavaPackageOrJavaClassProxyType(final RubyModule type) {
2965 return type instanceof JavaPackage || ClassUtils.isJavaClassProxyType(type);
2966 }
2967
2804 /** Prints an error with backtrace to the error stream.2968 /** Prints an error with backtrace to the error stream.
2805 *2969 *
2806 * MRI: eval.c - error_print()2970 * MRI: eval.c - error_print()
@@ -2906,8 +3070,13 @@ public final class Ruby implements Constantizable {
2906 }3070 }
29073071
2908 public StaticScope setupWrappedToplevel(IRubyObject self, StaticScope top) {3072 public StaticScope setupWrappedToplevel(IRubyObject self, StaticScope top) {
3073 RubyModule wrapper = loadService.getWrapperSelf();
3074
3075 if (wrapper == null || wrapper.isNil()) {
3076 wrapper = RubyModule.newModule(this);
3077 }
3078
2909 // toss an anonymous module into the search path3079 // toss an anonymous module into the search path
2910 RubyModule wrapper = RubyModule.newModule(this);
2911 ((RubyBasicObject) self).extend(new IRubyObject[] {wrapper});3080 ((RubyBasicObject) self).extend(new IRubyObject[] {wrapper});
2912 StaticScope newTop = staticScopeFactory.newLocalScope(null);3081 StaticScope newTop = staticScopeFactory.newLocalScope(null);
2913 top.setPreviousCRefScope(newTop);3082 top.setPreviousCRefScope(newTop);
@@ -2952,12 +3121,12 @@ public final class Ruby implements Constantizable {
2952 }3121 }
29533122
2954 public void addBoundMethod(String className, String methodName, String rubyName) {3123 public void addBoundMethod(String className, String methodName, String rubyName) {
2955 Map<String, String> javaToRuby = boundMethods.computeIfAbsent(className, s -> new HashMap<>());3124 Map<String, String> javaToRuby = boundMethods.computeIfAbsent(className, s -> new ConcurrentHashMap<>(2, 0.9f, 2));
2956 javaToRuby.putIfAbsent(methodName, rubyName);3125 javaToRuby.putIfAbsent(methodName, rubyName);
2957 }3126 }
29583127
2959 public void addBoundMethods(String className, String... tuples) {3128 public void addBoundMethods(String className, String... tuples) {
2960 Map<String, String> javaToRuby = boundMethods.computeIfAbsent(className, s -> new HashMap<>());3129 Map<String, String> javaToRuby = boundMethods.computeIfAbsent(className, s -> new ConcurrentHashMap<>(2, 0.9f, 2));
2961 for (int i = 0; i < tuples.length; i += 2) {3130 for (int i = 0; i < tuples.length; i += 2) {
2962 javaToRuby.putIfAbsent(tuples[i], tuples[i+1]);3131 javaToRuby.putIfAbsent(tuples[i], tuples[i+1]);
2963 }3132 }
@@ -2972,10 +3141,9 @@ public final class Ruby implements Constantizable {
29723141
2973 for (int i = 0; i < tuplesIndex; i++) {3142 for (int i = 0; i < tuplesIndex; i++) {
2974 String className = classNamesAndTuples[i];3143 String className = classNamesAndTuples[i];
2975 if (boundMethods.containsKey(className)) {3144 Map<String, String> javaToRubyForClass = boundMethods.computeIfAbsent(className, s -> new ConcurrentHashMap<>((int)(javaToRuby.size() / 0.9f) + 1, 0.9f, 2));
2976 boundMethods.get(className).putAll(javaToRuby);3145 for (Map.Entry<String, String> entry : javaToRuby.entrySet()) {
2977 } else {3146 javaToRubyForClass.putIfAbsent(entry.getKey(), entry.getValue());
2978 boundMethods.put(className, new HashMap<>(javaToRuby));
2979 }3147 }
2980 }3148 }
2981 }3149 }
@@ -3000,180 +3168,10 @@ public final class Ruby implements Constantizable {
3000 return boundMethods;3168 return boundMethods;
3001 }3169 }
30023170
3003 private static final EnumSet<RubyEvent> interest =3171 private final TraceEventManager traceEvents = new TraceEventManager(this);
3004 EnumSet.of(
3005 RubyEvent.C_CALL,
3006 RubyEvent.C_RETURN,
3007 RubyEvent.CALL,
3008 RubyEvent.CLASS,
3009 RubyEvent.END,
3010 RubyEvent.LINE,
3011 RubyEvent.RAISE,
3012 RubyEvent.RETURN
3013 );
3014
3015 public static class CallTraceFuncHook extends EventHook {
3016 private RubyProc traceFunc;
3017 private final ThreadContext thread; // if non-null only call traceFunc if it is from this thread.
3018
3019 public CallTraceFuncHook(ThreadContext context) {
3020 this.thread = context;
3021 }
3022
3023 public void setTraceFunc(RubyProc traceFunc) {
3024 this.traceFunc = traceFunc;
3025 }
3026
3027 public void eventHandler(ThreadContext context, String eventName, String file, int line, String name, IRubyObject type) {
3028 if (context.isWithinTrace()) return;
3029 if (thread != null && thread != context) return;
3030
3031 if (file == null) file = "(ruby)";
3032 if (type == null) type = context.nil;
3033
3034 Ruby runtime = context.runtime;
3035 RubyBinding binding = RubyBinding.newBinding(runtime, context.currentBinding());
3036
3037 // FIXME: Ultimately we should be getting proper string for this event type
3038 switch(eventName) {
3039 case "c_return":
3040 eventName = "c-return";
3041 break;
3042 case "c_call":
3043 eventName = "c-call";
3044 break;
3045 };
3046
3047 context.preTrace();
3048 try {
3049 traceFunc.call(context, new IRubyObject[]{
3050 runtime.newString(eventName), // event name
3051 runtime.newString(file), // filename
3052 runtime.newFixnum(line), // line numbers should be 1-based
3053 name != null ? runtime.newSymbol(name) : runtime.getNil(),
3054 binding,
3055 type
3056 });
3057 } finally {
3058 context.postTrace();
3059 }
3060 }
3061
3062 @Override
3063 public boolean equals(Object other) {
3064 if (!(other instanceof CallTraceFuncHook)) return false;
3065
3066 return super.equals(other) && thread == ((CallTraceFuncHook) other).thread;
3067 }
3068
3069 @Override
3070 public boolean isInterestedInEvent(RubyEvent event) {
3071 return interest.contains(event);
3072 }
3073
3074 public ThreadContext getThread() {
3075 return thread;
3076 }
3077
3078 @Override
3079 public EnumSet<RubyEvent> eventSet() {
3080 return interest;
3081 }
3082 };
3083
3084 private final CallTraceFuncHook callTraceFuncHook = new CallTraceFuncHook(null);
3085
3086 public synchronized void addEventHook(EventHook hook) {
3087 if (!RubyInstanceConfig.FULL_TRACE_ENABLED && hook.needsDebug()) {
3088 // without full tracing, many events will not fire
3089 getWarnings().warn("tracing (e.g. set_trace_func) will not capture all events without --debug flag");
3090 }
3091
3092 EventHook[] hooks = eventHooks;
3093 EventHook[] newHooks = Arrays.copyOf(hooks, hooks.length + 1);
3094 newHooks[hooks.length] = hook;
3095 eventHooks = newHooks;
3096 hasEventHooks = true;
3097 }
3098
3099 public synchronized void removeEventHook(EventHook hook) {
3100 EventHook[] hooks = eventHooks;
3101
3102 if (hooks.length == 0) return;
3103
3104 int pivot = -1;
3105 for (int i = 0; i < hooks.length; i++) {
3106 if (hooks[i].equals(hook)) {
3107 pivot = i;
3108 break;
3109 }
3110 }
3111
3112 if (pivot == -1) return; // No such hook found.
3113
3114 EventHook[] newHooks = new EventHook[hooks.length - 1];
3115 // copy before and after pivot into the new array but don't bother
3116 // to arraycopy if pivot is first/last element of the old list.
3117 if (pivot != 0) System.arraycopy(hooks, 0, newHooks, 0, pivot);
3118 if (pivot != hooks.length-1) System.arraycopy(hooks, pivot + 1, newHooks, pivot, hooks.length - (pivot + 1));
3119
3120 eventHooks = newHooks;
3121 hasEventHooks = newHooks.length > 0;
3122 }
3123
3124 public void setTraceFunction(RubyProc traceFunction) {
3125 setTraceFunction(callTraceFuncHook, traceFunction);
3126 }
3127
3128 public void setTraceFunction(CallTraceFuncHook hook, RubyProc traceFunction) {
3129 removeEventHook(hook);
3130
3131 if (traceFunction == null) return;
3132
3133 hook.setTraceFunc(traceFunction);
3134 addEventHook(hook);
3135 }
3136
3137 /**
3138 * Remove all event hooks which are associated with a particular thread.
3139 * @param context the context of the ruby thread we are interested in.
3140 */
3141 public void removeAllCallEventHooksFor(ThreadContext context) {
3142 if (eventHooks.length == 0) return;
3143
3144 List<EventHook> hooks = new ArrayList<>(Arrays.asList(eventHooks));
3145
3146 hooks = hooks.stream().filter(hook ->
3147 !(hook instanceof CallTraceFuncHook) || !((CallTraceFuncHook) hook).getThread().equals(context)
3148 ).collect(Collectors.toList());
3149
3150 EventHook[] newHooks = new EventHook[hooks.size()];
3151 eventHooks = hooks.toArray(newHooks);
3152 hasEventHooks = hooks.size() > 0;
3153 }
3154
3155 public void callEventHooks(ThreadContext context, RubyEvent event, String file, int line, String name, IRubyObject type) {
3156 if (context.isEventHooksEnabled()) {
3157 EventHook hooks[] = eventHooks;
3158
3159 for (EventHook eventHook: hooks) {
3160 if (eventHook.isInterestedInEvent(event)) {
3161 IRubyObject klass = context.nil;
3162 if (type instanceof RubyModule) {
3163 if (((RubyModule) type).isIncluded()) {
3164 klass = ((RubyModule) type).getOrigin();
3165 } else if (((RubyModule) type).isSingleton()) {
3166 klass = ((MetaClass) type).getAttached();
3167 }
3168 }
3169 eventHook.event(context, event, file, line, name, klass);
3170 }
3171 }
3172 }
3173 }
31743172
3175 public boolean hasEventHooks() {3173 public TraceEventManager getTraceEvents() {
3176 return hasEventHooks;3174 return traceEvents;
3177 }3175 }
31783176
3179 public GlobalVariables getGlobalVariables() {3177 public GlobalVariables getGlobalVariables() {
@@ -3313,11 +3311,12 @@ public final class Ruby implements Constantizable {
3313 }3311 }
3314 }3312 }
33153313
3316 private void systemTeardown(ThreadContext context) {3314 @SuppressWarnings("ReturnValueIgnored")
3315 private void systemTeardown(final ThreadContext context) {
3317 // Run post-user exit hooks, such as for shutting down internal JRuby services3316 // Run post-user exit hooks, such as for shutting down internal JRuby services
3318 while (!postExitBlocks.isEmpty()) {3317 while (!postExitBlocks.isEmpty()) {
3319 ExitFunction fun = postExitBlocks.remove(0);3318 ExitFunction fun = postExitBlocks.remove(0);
3320 fun.applyAsInt(context);3319 fun.applyAsInt(context); // return value ignored
3321 }3320 }
33223321
3323 synchronized (internalFinalizersMutex) {3322 synchronized (internalFinalizersMutex) {
@@ -3644,11 +3643,11 @@ public final class Ruby implements Constantizable {
36443643
3645 public RaiseException newArgumentError(String name, int got, int min, int max) {3644 public RaiseException newArgumentError(String name, int got, int min, int max) {
3646 if (min == max) {3645 if (min == max) {
3647 return newRaiseException(getArgumentError(), str(this, "wrong number of arguments calling `", ids(this, name), ("` (given " + got + ", expected " + min + ")")));3646 return newRaiseException(getArgumentError(), str(this, "`", ids(this, name), "': wrong number of arguments (given " + got + ", expected " + min + ")"));
3648 } else if (max == UNLIMITED_ARGUMENTS) {3647 } else if (max == UNLIMITED_ARGUMENTS) {
3649 return newRaiseException(getArgumentError(), str(this, "wrong number of arguments calling `", ids(this, name), ("` (given " + got + ", expected " + min + "+)")));3648 return newRaiseException(getArgumentError(), str(this, "`", ids(this, name), "': wrong number of arguments (given " + got + ", expected " + min + "+)"));
3650 } else {3649 } else {
3651 return newRaiseException(getArgumentError(), str(this, "wrong number of arguments calling `", ids(this, name), ("` (given " + got + ", expected " + min + ".." + max + ")")));3650 return newRaiseException(getArgumentError(), str(this, "`", ids(this, name), "': wrong number of arguments (given " + got + ", expected " + min + ".." + max + ")"));
3652 }3651 }
3653 }3652 }
36543653
@@ -3817,6 +3816,10 @@ public final class Ruby implements Constantizable {
3817 return newRaiseException(getErrno().getClass("EDOM"), "Domain error - " + message);3816 return newRaiseException(getErrno().getClass("EDOM"), "Domain error - " + message);
3818 }3817 }
38193818
3819 public RaiseException newErrnoEDOMError() {
3820 return newRaiseException(getErrno().getClass("EDOM"), "Numerical argument out of domain");
3821 }
3822
3820 public RaiseException newErrnoECHILDError() {3823 public RaiseException newErrnoECHILDError() {
3821 return newRaiseException(getErrno().getClass("ECHILD"), "No child processes");3824 return newRaiseException(getErrno().getClass("ECHILD"), "No child processes");
3822 }3825 }
@@ -3873,6 +3876,10 @@ public final class Ruby implements Constantizable {
3873 return newRaiseException(getErrno().getClass("EAFNOSUPPORT"), message);3876 return newRaiseException(getErrno().getClass("EAFNOSUPPORT"), message);
3874 }3877 }
38753878
3879 public RaiseException newErrnoETIMEDOUTError() {
3880 return newRaiseException(getErrno().getClass("ETIMEDOUT"), "Broken pipe");
3881 }
3882
3876 public RaiseException newErrnoFromLastPOSIXErrno() {3883 public RaiseException newErrnoFromLastPOSIXErrno() {
3877 RubyClass errnoClass = getErrno(getPosix().errno());3884 RubyClass errnoClass = getErrno(getPosix().errno());
3878 if (errnoClass == null) errnoClass = systemCallError;3885 if (errnoClass == null) errnoClass = systemCallError;
@@ -4175,16 +4182,14 @@ public final class Ruby implements Constantizable {
4175 return loadError;4182 return loadError;
4176 }4183 }
41774184
4178 public RaiseException newFrozenError(String objectType) {4185 public RaiseException newFrozenError(String objectType, IRubyObject receiver) {
4179 return newFrozenError(objectType, false);4186 return RubyFrozenError.newFrozenError(getCurrentContext(), newString("can't modify frozen " + objectType), receiver)
4187 .toThrowable();
4180 }4188 }
41814189
4182 public RaiseException newFrozenError(RubyModule type) {4190 public RaiseException newFrozenError(IRubyObject receiver) {
4183 return newRaiseException(getFrozenError(), str(this, "can't modify frozen ", types(this, type)));4191 return RubyFrozenError.newFrozenError(getCurrentContext(), newString("can't modify frozen " + receiver.getType()), receiver)
4184 }4192 .toThrowable();
4185
4186 public RaiseException newFrozenError(String objectType, boolean runtimeError) {
4187 return newRaiseException(getFrozenError(), str(this, "can't modify frozen ", ids(this, objectType)));
4188 }4193 }
41894194
4190 public RaiseException newSystemStackError(String message) {4195 public RaiseException newSystemStackError(String message) {
@@ -4282,6 +4287,26 @@ public final class Ruby implements Constantizable {
4282 return newRaiseException(getInvalidByteSequenceError(), message);4287 return newRaiseException(getInvalidByteSequenceError(), message);
4283 }4288 }
42844289
4290 public RaiseException newBufferLockedError(String message) {
4291 return newRaiseException(getBufferLockedError(), message);
4292 }
4293
4294 public RaiseException newBufferAllocationError(String message) {
4295 return newRaiseException(getBufferAllocationError(), message);
4296 }
4297
4298 public RaiseException newBufferAccessError(String message) {
4299 return newRaiseException(getBufferAccessError(), message);
4300 }
4301
4302 public RaiseException newBufferInvalidatedError(String message) {
4303 return newRaiseException(getBufferInvalidatedError(), message);
4304 }
4305
4306 public RaiseException newBufferMaskError(String message) {
4307 return newRaiseException(getBufferMaskError(), message);
4308 }
4309
4285 /**4310 /**
4286 * Construct a new RaiseException wrapping a new Ruby exception object appropriate to the given exception class.4311 * Construct a new RaiseException wrapping a new Ruby exception object appropriate to the given exception class.
4287 *4312 *
@@ -4976,6 +5001,17 @@ public final class Ruby implements Constantizable {
4976 return this.nullToNil = nullToNil;5001 return this.nullToNil = nullToNil;
4977 }5002 }
49785003
5004 public MethodHandle getNullToUndefinedHandle() {
5005 MethodHandle filter = this.nullToUndefined;
5006
5007 if (filter != null) return filter;
5008
5009 filter = InvokeDynamicSupport.findStatic(Helpers.class, "nullToUndefined", methodType(IRubyObject.class, IRubyObject.class));
5010 filter = explicitCastArguments(filter, methodType(IRubyObject.class, Object.class));
5011
5012 return this.nullToUndefined = filter;
5013 }
5014
4979 // Parser stats methods5015 // Parser stats methods
4980 private void addLoadParseToStats() {5016 private void addLoadParseToStats() {
4981 if (parserStats != null) parserStats.addLoadParse();5017 if (parserStats != null) parserStats.addLoadParse();
@@ -4989,13 +5025,9 @@ public final class Ruby implements Constantizable {
4989 return filenoUtil;5025 return filenoUtil;
4990 }5026 }
49915027
4992 public RubyClass getData() {
4993 return dataClass;
4994 }
4995
4996 /**5028 /**
4997 * @return Class -> extension initializer map5029 * @return Class$ -&gt; extension initializer map
4998 * @note Internal API, subject to change!5030 * <p>Note: Internal API, subject to change!</p>
4999 */5031 */
5000 public Map<Class, Consumer<RubyModule>> getJavaExtensionDefinitions() { return javaExtensionDefinitions; }5032 public Map<Class, Consumer<RubyModule>> getJavaExtensionDefinitions() { return javaExtensionDefinitions; }
50015033
@@ -5288,6 +5320,11 @@ public final class Ruby implements Constantizable {
5288 void setException(RubyClass exceptionClass) {5320 void setException(RubyClass exceptionClass) {
5289 }5321 }
52905322
5323 @Deprecated
5324 public RubyClass getData() {
5325 return null;
5326 }
5327
5291 private final ConcurrentHashMap<String, Invalidator> constantNameInvalidators =5328 private final ConcurrentHashMap<String, Invalidator> constantNameInvalidators =
5292 new ConcurrentHashMap<String, Invalidator>(5329 new ConcurrentHashMap<String, Invalidator>(
5293 16 /* default initial capacity */,5330 16 /* default initial capacity */,
@@ -5304,10 +5341,6 @@ public final class Ruby implements Constantizable {
53045341
5305 private final RubySymbol.SymbolTable symbolTable = new RubySymbol.SymbolTable(this);5342 private final RubySymbol.SymbolTable symbolTable = new RubySymbol.SymbolTable(this);
53065343
5307 private static final EventHook[] EMPTY_HOOKS = new EventHook[0];
5308 private volatile EventHook[] eventHooks = EMPTY_HOOKS;
5309 private boolean hasEventHooks;
5310
5311 private boolean abortOnException = false; // Thread.abort_on_exception5344 private boolean abortOnException = false; // Thread.abort_on_exception
5312 private boolean reportOnException = true; // Thread.report_on_exception5345 private boolean reportOnException = true; // Thread.report_on_exception
5313 private boolean doNotReverseLookupEnabled = false;5346 private boolean doNotReverseLookupEnabled = false;
@@ -5323,15 +5356,23 @@ public final class Ruby implements Constantizable {
5323 private final IRubyObject[] singleNilArray;5356 private final IRubyObject[] singleNilArray;
5324 private final RubyBoolean trueObject;5357 private final RubyBoolean trueObject;
5325 private final RubyBoolean falseObject;5358 private final RubyBoolean falseObject;
5359 private final RubyString trueString;
5360 private final RubyString falseString;
5361 private final RubyString nilString;
5326 final RubyFixnum[] fixnumCache = new RubyFixnum[2 * RubyFixnum.CACHE_OFFSET];5362 final RubyFixnum[] fixnumCache = new RubyFixnum[2 * RubyFixnum.CACHE_OFFSET];
5327 final Object[] fixnumConstants = new Object[fixnumCache.length];5363 final Object[] fixnumConstants = new Object[fixnumCache.length];
53285364
5329 @Deprecated5365 @Deprecated
5330 private IRubyObject rootFiber;5366 private IRubyObject rootFiber;
53315367
5332 private boolean verbose, warningsEnabled, debug;5368 private boolean warningsEnabled = true; // global flag to be able to disable warnings regardless of $VERBOSE
5369 private boolean verboseWarnings; // whether warnings are enabled based on $VERBOSE
5370 private boolean verbose, debug;
5333 private IRubyObject verboseValue;5371 private IRubyObject verboseValue;
53345372
5373 // Set of categories we care about (set defined when creating warnings).
5374 private final Set<RubyWarnings.Category> warningCategories;
5375
5335 private RubyThreadGroup defaultThreadGroup;5376 private RubyThreadGroup defaultThreadGroup;
53365377
5337 /**5378 /**
@@ -5343,6 +5384,7 @@ public final class Ruby implements Constantizable {
5343 private final RubyClass basicObjectClass;5384 private final RubyClass basicObjectClass;
5344 private final RubyClass objectClass;5385 private final RubyClass objectClass;
5345 private final RubyClass moduleClass;5386 private final RubyClass moduleClass;
5387 private final RubyClass refinementClass;
5346 private final RubyClass classClass;5388 private final RubyClass classClass;
5347 private final RubyClass nilClass;5389 private final RubyClass nilClass;
5348 private final RubyClass trueClass;5390 private final RubyClass trueClass;
@@ -5359,6 +5401,7 @@ public final class Ruby implements Constantizable {
5359 private final RubyClass generatorClass;5401 private final RubyClass generatorClass;
5360 private final RubyClass chainClass;5402 private final RubyClass chainClass;
5361 private final RubyClass aseqClass;5403 private final RubyClass aseqClass;
5404 private final RubyClass producerClass;
5362 private final RubyClass arrayClass;5405 private final RubyClass arrayClass;
5363 private final RubyClass hashClass;5406 private final RubyClass hashClass;
5364 private final RubyClass rangeClass;5407 private final RubyClass rangeClass;
@@ -5375,9 +5418,11 @@ public final class Ruby implements Constantizable {
5375 private final RubyClass timeClass;5418 private final RubyClass timeClass;
5376 private final RubyClass bignumClass;5419 private final RubyClass bignumClass;
5377 private final RubyClass dirClass;5420 private final RubyClass dirClass;
5421 private RubyClass dateErrorClass;
5378 private final RubyClass fileClass;5422 private final RubyClass fileClass;
5379 private final RubyClass fileStatClass;5423 private final RubyClass fileStatClass;
5380 private final RubyClass ioClass;5424 private final RubyClass ioClass;
5425 private final RubyClass ioBufferClass;
5381 private final RubyClass threadClass;5426 private final RubyClass threadClass;
5382 private final RubyClass threadGroupClass;5427 private final RubyClass threadGroupClass;
5383 private final RubyClass continuationClass;5428 private final RubyClass continuationClass;
@@ -5385,7 +5430,6 @@ public final class Ruby implements Constantizable {
5385 private final RubyClass exceptionClass;5430 private final RubyClass exceptionClass;
5386 private final RubyClass dummyClass;5431 private final RubyClass dummyClass;
5387 private final RubyClass randomClass;5432 private final RubyClass randomClass;
5388 private final RubyClass dataClass;
5389 private final RubyClass mutexClass;5433 private final RubyClass mutexClass;
5390 private final RubyClass conditionVariableClass;5434 private final RubyClass conditionVariableClass;
5391 private final RubyClass queueClass;5435 private final RubyClass queueClass;
@@ -5412,6 +5456,7 @@ public final class Ruby implements Constantizable {
5412 private RubyClass fatal;5456 private RubyClass fatal;
5413 private RubyClass interrupt;5457 private RubyClass interrupt;
5414 private RubyClass typeError;5458 private RubyClass typeError;
5459 private RubyClass noMatchingPatternError;
5415 private RubyClass argumentError;5460 private RubyClass argumentError;
5416 private RubyClass uncaughtThrowError;5461 private RubyClass uncaughtThrowError;
5417 private RubyClass indexError;5462 private RubyClass indexError;
@@ -5439,6 +5484,11 @@ public final class Ruby implements Constantizable {
5439 private RubyClass keyError;5484 private RubyClass keyError;
5440 private RubyClass locationClass;5485 private RubyClass locationClass;
5441 private RubyClass interruptedRegexpError;5486 private RubyClass interruptedRegexpError;
5487 private RubyClass bufferLockedError;
5488 private RubyClass bufferAllocationError;
5489 private RubyClass bufferAccessError;
5490 private RubyClass bufferInvalidatedError;
5491 private RubyClass bufferMaskError;
54425492
5443 /**5493 /**
5444 * All the core modules we keep direct references to, for quick access and5494 * All the core modules we keep direct references to, for quick access and
@@ -5597,7 +5647,7 @@ public final class Ruby implements Constantizable {
5597 private final AtomicInteger moduleGeneration = new AtomicInteger(1);5647 private final AtomicInteger moduleGeneration = new AtomicInteger(1);
55985648
5599 // A list of Java class+method names to include in backtraces5649 // A list of Java class+method names to include in backtraces
5600 private final Map<String, Map<String, String>> boundMethods = new HashMap();5650 private final Map<String, Map<String, String>> boundMethods = new ConcurrentHashMap<>();
56015651
5602 // A soft pool of selectors for blocking IO operations5652 // A soft pool of selectors for blocking IO operations
5603 private final SelectorPool selectorPool = new SelectorPool();5653 private final SelectorPool selectorPool = new SelectorPool();
@@ -5695,7 +5745,7 @@ public final class Ruby implements Constantizable {
5695 }5745 }
56965746
5697 public boolean matches(Object o) {5747 public boolean matches(Object o) {
5698 return (o instanceof RubyProc) && ((RubyProc) o).getBlock() == proc.getBlock();5748 return (o instanceof RubyProc) && ((RubyProc) o).getBlock().getBody() == proc.getBlock().getBody();
5699 }5749 }
57005750
5701 @Override5751 @Override
@@ -5774,6 +5824,7 @@ public final class Ruby implements Constantizable {
5774 * The nullToNil filter for this runtime.5824 * The nullToNil filter for this runtime.
5775 */5825 */
5776 private MethodHandle nullToNil;5826 private MethodHandle nullToNil;
5827 private MethodHandle nullToUndefined;
57775828
5778 public final ClassValue<TypePopulator> POPULATORS = new ClassValue<TypePopulator>() {5829 public final ClassValue<TypePopulator> POPULATORS = new ClassValue<TypePopulator>() {
5779 @Override5830 @Override
@@ -5814,4 +5865,54 @@ public final class Ruby implements Constantizable {
5814 return newErrnoEADDRFromBindException(be, null);5865 return newErrnoEADDRFromBindException(be, null);
5815 }5866 }
58165867
5868 @Deprecated
5869 public RaiseException newFrozenError(String objectType) {
5870 return newFrozenError(objectType, null);
5871 }
5872
5873 @Deprecated
5874 public RaiseException newFrozenError(RubyModule type) {
5875 return newRaiseException(getFrozenError(), str(this, "can't modify frozen ", types(this, type)));
5876 }
5877
5878 @Deprecated
5879 public RaiseException newFrozenError(String objectType, boolean runtimeError) {
5880 return newRaiseException(getFrozenError(), str(this, "can't modify frozen ", ids(this, objectType)));
5881 }
5882
5883 @Deprecated
5884 public synchronized void addEventHook(EventHook hook) {
5885 traceEvents.addEventHook(hook);
5886 }
5887
5888 @Deprecated
5889 public synchronized void removeEventHook(EventHook hook) {
5890 traceEvents.removeEventHook(hook);
5891 }
5892
5893 @Deprecated
5894 public void setTraceFunction(RubyProc traceFunction) {
5895 traceEvents.setTraceFunction(traceFunction);
5896 }
5897
5898 @Deprecated
5899 public void setTraceFunction(TraceEventManager.CallTraceFuncHook hook, RubyProc traceFunction) {
5900 traceEvents.setTraceFunction(hook, traceFunction);
5901 }
5902
5903 @Deprecated
5904 public void removeAllCallEventHooksFor(ThreadContext context) {
5905 traceEvents.removeAllCallEventHooksFor(context);
5906 }
5907
5908 @Deprecated
5909 public void callEventHooks(ThreadContext context, RubyEvent event, String file, int line, String name, IRubyObject type) {
5910 traceEvents.callEventHooks(context, event, file, line, name, type);
5911 }
5912
5913 @Deprecated
5914 public boolean hasEventHooks() {
5915 return traceEvents.hasEventHooks();
5916 }
5917
5817}5918}
diff --git a/core/src/main/java/org/jruby/RubyArgsFile.java b/core/src/main/java/org/jruby/RubyArgsFile.java
index 261089a..5d3d670 100644
--- a/core/src/main/java/org/jruby/RubyArgsFile.java
+++ b/core/src/main/java/org/jruby/RubyArgsFile.java
@@ -39,14 +39,16 @@ import java.io.IOException;
39import jnr.posix.FileStat;39import jnr.posix.FileStat;
40import jnr.posix.util.Platform;40import jnr.posix.util.Platform;
4141
42import static org.jruby.RubyArgsFile.Next.NextFile;
43import static org.jruby.RubyArgsFile.Next.Stream;
42import static org.jruby.RubyEnumerator.enumeratorize;44import static org.jruby.RubyEnumerator.enumeratorize;
43import static org.jruby.anno.FrameField.LASTLINE;45import static org.jruby.anno.FrameField.LASTLINE;
44import static org.jruby.runtime.Visibility.PRIVATE;46import static org.jruby.runtime.Visibility.PRIVATE;
4547
46import org.jruby.anno.FrameField;
47import org.jruby.anno.JRubyMethod;48import org.jruby.anno.JRubyMethod;
48import org.jruby.exceptions.RaiseException;49import org.jruby.exceptions.RaiseException;
49import org.jruby.internal.runtime.GlobalVariable;50import org.jruby.internal.runtime.GlobalVariable;
51import org.jruby.runtime.Arity;
50import org.jruby.runtime.Block;52import org.jruby.runtime.Block;
51import org.jruby.runtime.CallSite;53import org.jruby.runtime.CallSite;
52import org.jruby.runtime.IAccessor;54import org.jruby.runtime.IAccessor;
@@ -54,7 +56,9 @@ import org.jruby.runtime.JavaSites;
54import org.jruby.runtime.ThreadContext;56import org.jruby.runtime.ThreadContext;
55import org.jruby.runtime.builtin.IRubyObject;57import org.jruby.runtime.builtin.IRubyObject;
56import org.jruby.util.ByteList;58import org.jruby.util.ByteList;
59import org.jruby.util.StringSupport;
57import org.jruby.util.TypeConverter;60import org.jruby.util.TypeConverter;
61import org.jruby.util.io.Getline;
5862
59public class RubyArgsFile extends RubyObject {63public class RubyArgsFile extends RubyObject {
6064
@@ -115,18 +119,25 @@ public class RubyArgsFile extends RubyObject {
115 return this;119 return this;
116 }120 }
117121
122 public enum Next {
123 Stream, // We are only getting from $stdin
124 SameFile, // We are continuing to interact with the same file
125 NextFile // Time to advance to the next file.
126 };
127
118 public static final class ArgsFileData {128 public static final class ArgsFileData {
119129
120 private final Ruby runtime;130 private final Ruby runtime;
121 private RubyArray argv;131 private RubyArray argv;
122 public IRubyObject currentFile;132 public IRubyObject currentFile;
123 private boolean inited = false;133 private boolean inited = false;
124 public int next_p = 0;134 public Next next_p = NextFile;
125 public boolean binmode = false;135 public boolean binmode = false;
136 private IRubyObject inPlace; // false, nil, String
126137
127 public ArgsFileData(Ruby runtime, RubyArray argv) {138 public ArgsFileData(Ruby runtime, RubyArray argv) {
128 this.runtime = runtime;139 this.runtime = runtime;
129 this.argv = argv;140 setArgs(argv);
130 this.currentFile = runtime.getNil();141 this.currentFile = runtime.getNil();
131 }142 }
132143
@@ -135,29 +146,32 @@ public class RubyArgsFile extends RubyObject {
135 runtime.setCurrentLine(linenumber);146 runtime.setCurrentLine(linenumber);
136 }147 }
137148
149 // ARGF.class.new
138 void setArgs(RubyArray argv) {150 void setArgs(RubyArray argv) {
139 inited = false;151 inited = false;
140 this.argv = argv;152 this.argv = argv;
153 this.inPlace = runtime.getFalse();
141 }154 }
142155
143 public boolean next_argv(ThreadContext context) {156 public boolean next_argv(ThreadContext context) {
144 if (!inited) {157 if (!inited) {
145 next_p = argv.getLength() > 0 ? 1 : -1;158 next_p = argv.getLength() > 0 ? NextFile : Stream;
146 inited = true;159 inited = true;
147 runtime.setCurrentLine(0);160 runtime.setCurrentLine(0);
148 } else {161 } else {
149 if (argv.isNil()) {162 if (argv.isNil()) {
150 next_p = -1;163 next_p = Stream;
151 } else if (next_p == -1 && argv.getLength() > 0) {164 } else if (next_p == Stream && argv.getLength() > 0) {
152 next_p = 1;165 next_p = NextFile;
153 }166 }
154 }167 }
155168
156 IRubyObject $FILENAME = runtime.getGlobalVariables().get("$FILENAME");169 IRubyObject $FILENAME = runtime.getGlobalVariables().get("$FILENAME");
157170
158 if (next_p == 1) {171 if (next_p == NextFile) {
159 if (argv.getLength() > 0) {172 if (argv.getLength() > 0) {
160 final RubyString filename = argv.shift(context).convertToString();173 RubyString filename = TypeConverter.convertToType(argv.shift(context), context.runtime.getString(), "to_path").convertToString();
174 StringSupport.checkStringSafety(runtime, filename);
161 if ( ! filename.op_equal(context, $FILENAME).isTrue() ) {175 if ( ! filename.op_equal(context, $FILENAME).isTrue() ) {
162 runtime.defineReadonlyVariable("$FILENAME", filename, GlobalVariable.Scope.GLOBAL);176 runtime.defineReadonlyVariable("$FILENAME", filename, GlobalVariable.Scope.GLOBAL);
163 }177 }
@@ -166,7 +180,9 @@ public class RubyArgsFile extends RubyObject {
166 currentFile = runtime.getGlobalVariables().get("$stdin");180 currentFile = runtime.getGlobalVariables().get("$stdin");
167 } else {181 } else {
168 currentFile = RubyFile.open(context, runtime.getFile(), new IRubyObject[]{ filename }, Block.NULL_BLOCK);182 currentFile = RubyFile.open(context, runtime.getFile(), new IRubyObject[]{ filename }, Block.NULL_BLOCK);
169 String extension = runtime.getInstanceConfig().getInPlaceBackupExtension();183 String extension = null;
184 if (inPlace.isTrue()) extension = inPlace.asJavaString();
185 if (extension == null) extension = runtime.getInstanceConfig().getInPlaceBackupExtension();
170 if (extension != null) {186 if (extension != null) {
171 if (Platform.IS_WINDOWS) {187 if (Platform.IS_WINDOWS) {
172 inplaceEditWindows(context, filename.asJavaString(), extension);188 inplaceEditWindows(context, filename.asJavaString(), extension);
@@ -176,17 +192,18 @@ public class RubyArgsFile extends RubyObject {
176 }192 }
177 if (binmode) ((RubyIO) currentFile).binmode();193 if (binmode) ((RubyIO) currentFile).binmode();
178 }194 }
179 next_p = 0;195 next_p = Next.SameFile;
180 } else {196 } else {
181 next_p = 1;197 next_p = NextFile;
182 return false;198 return false;
183 }199 }
184 } else if (next_p == -1) {200 } else if (next_p == Stream) {
185 currentFile = runtime.getGlobalVariables().get("$stdin");201 currentFile = runtime.getGlobalVariables().get("$stdin");
186 if (!filenameEqlDash((RubyString) $FILENAME)) {202 if (!filenameEqlDash((RubyString) $FILENAME)) {
187 runtime.defineReadonlyVariable("$FILENAME", runtime.newString("-"), GlobalVariable.Scope.GLOBAL);203 runtime.defineReadonlyVariable("$FILENAME", runtime.newString("-"), GlobalVariable.Scope.GLOBAL);
188 }204 }
189 }205 }
206
190 return true;207 return true;
191 }208 }
192209
@@ -262,6 +279,47 @@ public class RubyArgsFile extends RubyObject {
262 recv.getRuntime().setCurrentLine(newLineNumber);279 recv.getRuntime().setCurrentLine(newLineNumber);
263 }280 }
264281
282 @JRubyMethod
283 public static IRubyObject inplace_mode(ThreadContext context, IRubyObject recv) {
284 ArgsFileData data = ArgsFileData.getArgsFileData(context.runtime);
285
286 if (data.inPlace == null) return context.nil;
287 if (data.inPlace.isNil()) return context.nil;
288
289 return data.inPlace.dup();
290 }
291
292 @JRubyMethod(name = "inplace_mode=")
293 public static IRubyObject inplace_mode_set(ThreadContext context, IRubyObject recv, IRubyObject test) {
294 return setInplaceMode(context, recv, test);
295 }
296
297 private static IRubyObject setInplaceMode(ThreadContext context, IRubyObject recv, IRubyObject test) {
298 ArgsFileData data = ArgsFileData.getArgsFileData(context.runtime);
299
300 if (test.isNil()) {
301 data.inPlace = context.nil;
302 } else if (!test.isTrue()) {
303 data.inPlace = context.fals;
304 } else {
305 test = TypeConverter.convertToType(test, context.runtime.getString(), "to_str", false);
306 if (test.isNil() || ((RubyString) test).length() == 0) {
307 data.inPlace = context.nil;
308 } else {
309 StringSupport.checkStringSafety(context.runtime, test);
310 test.setFrozen(true);
311 data.inPlace = test;
312 }
313 }
314
315 return recv;
316 }
317
318 @JRubyMethod(name = "inplace_mode=")
319 public IRubyObject inplace_mode_set(ThreadContext context, IRubyObject test) {
320 return setInplaceMode(context, this, test);
321 }
322
265 @JRubyMethod(name = "argv")323 @JRubyMethod(name = "argv")
266 public static IRubyObject argv(ThreadContext context, IRubyObject recv) {324 public static IRubyObject argv(ThreadContext context, IRubyObject recv) {
267 return ArgsFileData.getArgsFileData(context.runtime).argv;325 return ArgsFileData.getArgsFileData(context.runtime).argv;
@@ -304,37 +362,60 @@ public class RubyArgsFile extends RubyObject {
304362
305 // MRI: argf_getline363 // MRI: argf_getline
306 private static IRubyObject argf_getline(ThreadContext context, IRubyObject recv, IRubyObject[] args) {364 private static IRubyObject argf_getline(ThreadContext context, IRubyObject recv, IRubyObject[] args) {
307 ArgsFileData data = ArgsFileData.getArgsFileData(context.runtime);365 Ruby runtime = context.runtime;
366
367 IRubyObject line;
368
369 ArgsFileData data = ArgsFileData.getArgsFileData(runtime);
308370
309 while (true) {371 while (true) {
310 if (!data.next_argv(context)) return context.nil;372 if (!data.next_argv(context)) return context.nil;
311373
312 IRubyObject line = data.currentFile.callMethod(context, "gets", args);374 RubyIO currentFile = (RubyIO) data.currentFile;
375
376 if (isGenericInput(runtime, data)) {
377 line = data.currentFile.callMethod(context, "gets", args);
378 } else {
379 if (args.length == 0 && runtime.getRecordSeparatorVar().get() == runtime.getGlobalVariables().getDefaultSeparator()) {
380 line = (currentFile).gets(context);
381 } else {
382 line = Getline.getlineCall(context, GETLINE, currentFile, currentFile.getReadEncoding(), args);
383 }
313384
314 if (line.isNil() && data.next_p != -1) {385 if (line.isNil() && data.next_p != Stream) {
315 argf_close(context, data.currentFile);386 argf_close(context, data.currentFile);
316 data.next_p = 1;387 data.next_p = NextFile;
317 continue;388 continue;
389 }
318 }390 }
319391
320 return line;392 return line;
321 }393 }
322 }394 }
323395
396 private static boolean isGenericInput(Ruby runtime, ArgsFileData data) {
397 return data.currentFile == runtime.getGlobalVariables().get("$stdin") && !(data.currentFile instanceof RubyFile);
398 }
399
400 private static final Getline.Callback<RubyIO, IRubyObject> GETLINE =
401 (context, self, rs, limit, chomp, block) -> self.getlineImpl(context, rs, limit, chomp);
402
324 // ARGF methods403 // ARGF methods
325404
326 /** Read a line.405 /** Read a line.
327 *406 *
328 */407 */
329 @JRubyMethod(name = "gets", optional = 1, writes = LASTLINE)408 @JRubyMethod(name = "gets", optional = 1, checkArity = false, writes = LASTLINE)
330 public static IRubyObject gets(ThreadContext context, IRubyObject recv, IRubyObject[] args) {409 public static IRubyObject gets(ThreadContext context, IRubyObject recv, IRubyObject[] args) {
410 Arity.checkArgumentCount(context, args, 0, 1);
411
331 return context.setLastLine(argf_getline(context, recv, args));412 return context.setLastLine(argf_getline(context, recv, args));
332 }413 }
333414
334 /** Read a line.415 /** Read a line.
335 *416 *
336 */417 */
337 @JRubyMethod(name = "readline", optional = 1, writes = LASTLINE)418 @JRubyMethod(name = "readline", optional = 1, checkArity = false, writes = LASTLINE)
338 public static IRubyObject readline(ThreadContext context, IRubyObject recv, IRubyObject[] args) {419 public static IRubyObject readline(ThreadContext context, IRubyObject recv, IRubyObject[] args) {
339 IRubyObject line = gets(context, recv, args);420 IRubyObject line = gets(context, recv, args);
340421
@@ -343,8 +424,10 @@ public class RubyArgsFile extends RubyObject {
343 return line;424 return line;
344 }425 }
345426
346 @JRubyMethod(optional = 1)427 @JRubyMethod(optional = 1, checkArity = false)
347 public static IRubyObject readlines(ThreadContext context, IRubyObject recv, IRubyObject[] args) {428 public static IRubyObject readlines(ThreadContext context, IRubyObject recv, IRubyObject[] args) {
429 Arity.checkArgumentCount(context, args, 0, 1);
430
348 Ruby runtime = context.runtime;431 Ruby runtime = context.runtime;
349 ArgsFileData data = ArgsFileData.getArgsFileData(runtime);432 ArgsFileData data = ArgsFileData.getArgsFileData(runtime);
350433
@@ -360,8 +443,10 @@ public class RubyArgsFile extends RubyObject {
360 return ary;443 return ary;
361 }444 }
362445
363 @JRubyMethod(optional = 1)446 @JRubyMethod(optional = 1, checkArity = false)
364 public static IRubyObject to_a(ThreadContext context, IRubyObject recv, IRubyObject[] args) {447 public static IRubyObject to_a(ThreadContext context, IRubyObject recv, IRubyObject[] args) {
448 Arity.checkArgumentCount(context, args, 0, 1);
449
365 Ruby runtime = context.runtime;450 Ruby runtime = context.runtime;
366 ArgsFileData data = ArgsFileData.getArgsFileData(runtime);451 ArgsFileData data = ArgsFileData.getArgsFileData(runtime);
367452
@@ -393,8 +478,9 @@ public class RubyArgsFile extends RubyObject {
393 return block.isGiven() ? each_byte(context, recv, block) : enumeratorize(context.runtime, recv, "each_byte");478 return block.isGiven() ? each_byte(context, recv, block) : enumeratorize(context.runtime, recv, "each_byte");
394 }479 }
395480
396 @JRubyMethod(optional = 1)481 @JRubyMethod(optional = 1, checkArity = false)
397 public static IRubyObject bytes(final ThreadContext context, IRubyObject recv, IRubyObject[] args, final Block block) {482 public static IRubyObject bytes(final ThreadContext context, IRubyObject recv, IRubyObject[] args, final Block block) {
483 Arity.checkArgumentCount(context, args, 0, 1);
398 return block.isGiven() ? each_byte(context, recv, block) : enumeratorize(context.runtime, recv, "bytes");484 return block.isGiven() ? each_byte(context, recv, block) : enumeratorize(context.runtime, recv, "bytes");
399 }485 }
400486
@@ -422,7 +508,6 @@ public class RubyArgsFile extends RubyObject {
422 int n = runtime.getKCode().getEncoding().length(c);508 int n = runtime.getKCode().getEncoding().length(c);
423 IRubyObject file = data.currentFile;509 IRubyObject file = data.currentFile;
424 RubyString str = runtime.newString();510 RubyString str = runtime.newString();
425 str.setTaint(true);
426 str.cat(c);511 str.cat(c);
427512
428 while(--n > 0) {513 while(--n > 0) {
@@ -446,12 +531,13 @@ public class RubyArgsFile extends RubyObject {
446531
447 @JRubyMethod532 @JRubyMethod
448 public static IRubyObject each_codepoint(ThreadContext context, IRubyObject recv, Block block) {533 public static IRubyObject each_codepoint(ThreadContext context, IRubyObject recv, Block block) {
449 if (!block.isGiven()) return RubyEnumerator.enumeratorize(context.runtime, recv, "each_line");534 if (!block.isGiven()) return RubyEnumerator.enumeratorize(context.runtime, recv, "each_codepoint");
450 ArgsFileData data = ArgsFileData.getArgsFileData(context.runtime);535 ArgsFileData data = ArgsFileData.getArgsFileData(context.runtime);
451536
452 CallSite each_codepoint = sites(context).each_codepoint;537 CallSite each_codepoint = sites(context).each_codepoint;
453 while (data.next_argv(context)) {538 while (data.next_argv(context)) {
454 each_codepoint.call(context, recv, data.currentFile, block);539 each_codepoint.call(context, recv, data.currentFile, block);
540 data.next_p = NextFile;
455 }541 }
456542
457 return context.nil;543 return context.nil;
@@ -469,10 +555,12 @@ public class RubyArgsFile extends RubyObject {
469 /** Invoke a block for each line.555 /** Invoke a block for each line.
470 *556 *
471 */557 */
472 @JRubyMethod(name = "each_line", optional = 1)558 @JRubyMethod(name = "each_line", optional = 1, checkArity = false)
473 public static IRubyObject each_line(ThreadContext context, IRubyObject recv, IRubyObject[] args, Block block) {559 public static IRubyObject each_line(ThreadContext context, IRubyObject recv, IRubyObject[] args, Block block) {
474 if (!block.isGiven()) return enumeratorize(context.runtime, recv, "each_line", args);560 if (!block.isGiven()) return enumeratorize(context.runtime, recv, "each_line", args);
475561
562 Arity.checkArgumentCount(context, args, 0, 1);
563
476 ArgsFileData data = ArgsFileData.getArgsFileData(context.runtime);564 ArgsFileData data = ArgsFileData.getArgsFileData(context.runtime);
477565
478 if (!data.next_argv(context)) return context.nil;566 if (!data.next_argv(context)) return context.nil;
@@ -481,7 +569,7 @@ public class RubyArgsFile extends RubyObject {
481 if (!data.next_argv(context)) return recv;569 if (!data.next_argv(context)) return recv;
482570
483 data.currentFile.callMethod(context, "each", NULL_ARRAY, block);571 data.currentFile.callMethod(context, "each", NULL_ARRAY, block);
484 data.next_p = 1;572 data.next_p = NextFile;
485 }573 }
486574
487 IRubyObject str;575 IRubyObject str;
@@ -493,7 +581,7 @@ public class RubyArgsFile extends RubyObject {
493 }581 }
494582
495 @Deprecated // TODO "warning: ARGF#lines is deprecated; use #each_line instead"583 @Deprecated // TODO "warning: ARGF#lines is deprecated; use #each_line instead"
496 @JRubyMethod(optional = 1)584 @JRubyMethod(optional = 1, checkArity = false)
497 public static IRubyObject lines(ThreadContext context, IRubyObject recv, IRubyObject[] args, Block block) {585 public static IRubyObject lines(ThreadContext context, IRubyObject recv, IRubyObject[] args, Block block) {
498 if (!block.isGiven()) return RubyEnumerator.enumeratorize(context.runtime, recv, "each_line");586 if (!block.isGiven()) return RubyEnumerator.enumeratorize(context.runtime, recv, "each_line");
499 return each_line(context, recv, args, block);587 return each_line(context, recv, args, block);
@@ -504,7 +592,7 @@ public class RubyArgsFile extends RubyObject {
504 return each_line(context, recv, args, block);592 return each_line(context, recv, args, block);
505 }593 }
506594
507 @JRubyMethod(name = "each", optional = 1)595 @JRubyMethod(name = "each", optional = 1, checkArity = false)
508 public static IRubyObject each(final ThreadContext context, IRubyObject recv, IRubyObject[] args, final Block block) {596 public static IRubyObject each(final ThreadContext context, IRubyObject recv, IRubyObject[] args, final Block block) {
509 return block.isGiven() ? each_line(context, recv, args, block) : enumeratorize(context.runtime, recv, "each", args);597 return block.isGiven() ? each_line(context, recv, args, block) : enumeratorize(context.runtime, recv, "each", args);
510 }598 }
@@ -528,9 +616,9 @@ public class RubyArgsFile extends RubyObject {
528 Ruby runtime = recv.getRuntime();616 Ruby runtime = recv.getRuntime();
529 ArgsFileData data = ArgsFileData.getArgsFileData(runtime);617 ArgsFileData data = ArgsFileData.getArgsFileData(runtime);
530618
531 if (data.inited && data.next_p == 0) {619 if (data.inited && data.next_p == Next.SameFile) {
532 argf_close(runtime.getCurrentContext(), data.currentFile);620 argf_close(runtime.getCurrentContext(), data.currentFile);
533 data.next_p = 1;621 data.next_p = NextFile;
534 }622 }
535623
536 return recv;624 return recv;
@@ -554,7 +642,7 @@ public class RubyArgsFile extends RubyObject {
554642
555 argf_close(context, data.currentFile);643 argf_close(context, data.currentFile);
556644
557 if (data.next_p != -1) data.next_p = 1;645 if (data.next_p != Stream) data.next_p = NextFile;
558646
559 context.runtime.setCurrentLine(0);647 context.runtime.setCurrentLine(0);
560648
@@ -649,8 +737,10 @@ public class RubyArgsFile extends RubyObject {
649 return getCurrentDataFile(context, "no stream to set position").pos_set(context, offset);737 return getCurrentDataFile(context, "no stream to set position").pos_set(context, offset);
650 }738 }
651739
652 @JRubyMethod(name = "seek", required = 1, optional = 1)740 @JRubyMethod(name = "seek", required = 1, optional = 1, checkArity = false)
653 public static IRubyObject seek(ThreadContext context, IRubyObject recv, IRubyObject[] args) {741 public static IRubyObject seek(ThreadContext context, IRubyObject recv, IRubyObject[] args) {
742 Arity.checkArgumentCount(context, args, 1, 2);
743
654 return getCurrentDataFile(context, "no stream to seek").seek(context, args);744 return getCurrentDataFile(context, "no stream to seek").seek(context, args);
655 }745 }
656746
@@ -680,17 +770,21 @@ public class RubyArgsFile extends RubyObject {
680 if (bt != context.nil) return bt;770 if (bt != context.nil) return bt;
681771
682 argf_close(context, data.currentFile);772 argf_close(context, data.currentFile);
683 data.next_p = 1;773 data.next_p = NextFile;
684 }774 }
685 }775 }
686776
687 @JRubyMethod(required = 1, optional = 2)777 @JRubyMethod(required = 1, optional = 2, checkArity = false)
688 public static IRubyObject read_nonblock(ThreadContext context, IRubyObject recv, IRubyObject[] args) {778 public static IRubyObject read_nonblock(ThreadContext context, IRubyObject recv, IRubyObject[] args) {
779 Arity.checkArgumentCount(context, args, 1, 3);
780
689 return getPartial(context, recv, args, true);781 return getPartial(context, recv, args, true);
690 }782 }
691783
692 @JRubyMethod(required = 1, optional = 1)784 @JRubyMethod(required = 1, optional = 1, checkArity = false)
693 public static IRubyObject readpartial(ThreadContext context, IRubyObject recv, IRubyObject[] args) {785 public static IRubyObject readpartial(ThreadContext context, IRubyObject recv, IRubyObject[] args) {
786 Arity.checkArgumentCount(context, args, 1, 2);
787
694 return getPartial(context, recv, args, false);788 return getPartial(context, recv, args, false);
695 }789 }
696790
@@ -722,10 +816,10 @@ public class RubyArgsFile extends RubyObject {
722816
723 IRubyObject res = ((RubyIO) data.currentFile).getPartial(context, args, nonBlocking, noException);817 IRubyObject res = ((RubyIO) data.currentFile).getPartial(context, args, nonBlocking, noException);
724 if (res == context.nil) {818 if (res == context.nil) {
725 if (data.next_p == -1) return RubyIO.nonblockEOF(runtime, noException);819 if (data.next_p == Stream) return RubyIO.nonblockEOF(runtime, noException);
726820
727 argf_close(context, data.currentFile);821 argf_close(context, data.currentFile);
728 data.next_p = 1;822 data.next_p = NextFile;
729823
730 if (data.argv.isEmpty()) return RubyIO.nonblockEOF(runtime, noException);824 if (data.argv.isEmpty()) return RubyIO.nonblockEOF(runtime, noException);
731825
@@ -762,20 +856,22 @@ public class RubyArgsFile extends RubyObject {
762 if (bt != context.nil) return bt;856 if (bt != context.nil) return bt;
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches