Skip to content

Commit

Permalink
Showing 7 changed files with 297 additions and 143 deletions.
8 changes: 0 additions & 8 deletions truffle/src/main/java/org/jruby/truffle/core/CoreLibrary.java
Original file line number Diff line number Diff line change
@@ -1000,14 +1000,6 @@ public static boolean fitsIntoInteger(long value) {
return value >= Integer.MIN_VALUE && value <= Integer.MAX_VALUE;
}

@TruffleBoundary
public DynamicObject systemExit(int exitStatus, Node currentNode) {
final DynamicObject message = StringOperations.createString(context, StringOperations.encodeRope("exit", UTF8Encoding.INSTANCE));
final DynamicObject systemExit = ExceptionOperations.createRubyException(systemExitClass, message, context.getCallStack().getBacktrace(currentNode));
systemExit.define("@status", exitStatus, 0);
return systemExit;
}

public RubyContext getContext() {
return context;
}

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -19,11 +19,11 @@ public class RopeBuffer extends LeafRope {

protected RopeBuffer(byte[] bytes, Encoding encoding, CodeRange codeRange, boolean singleByteOptimizable, int characterLength) {
super(bytes, encoding, codeRange, singleByteOptimizable, characterLength);
this.byteList = new ByteList(bytes, encoding, true);
this.byteList = new ByteList(bytes, encoding, false);
}

public RopeBuffer(Rope original) {
this(original.getBytes(),
this(original.getBytesCopy(),
original.getEncoding(),
original.getCodeRange(),
original.isSingleByteOptimizable(),
Original file line number Diff line number Diff line change
@@ -17,6 +17,7 @@ public class CoreStrings {
public final CoreString BACKTRACE_OMITTED_LIMIT;
public final CoreString BACKTRACE_OMITTED_UNUSED;
public final CoreString CALL;
public final CoreString CANT_COMPRESS_NEGATIVE;
public final CoreString CLASS;
public final CoreString CLASS_VARIABLE;
public final CoreString EXPRESSION;
@@ -27,16 +28,24 @@ public class CoreStrings {
public final CoreString LOCAL_VARIABLE;
public final CoreString METHOD;
public final CoreString NIL;
public final CoreString ONE_HASH_REQUIRED;
public final CoreString OUT_OF_RANGE;
public final CoreString PROC_WITHOUT_BLOCK;
public final CoreString UNKNOWN;
public final CoreString SELF;
public final CoreString TIME_INTERVAL_MUST_BE_POS;
public final CoreString TOO_FEW_ARGUMENTS;
public final CoreString TRUE;
public final CoreString WRONG_ARGS_ZERO_PLUS_ONE;
public final CoreString X_OUTSIDE_OF_STRING;
public final CoreString YIELD;

public CoreStrings(RubyContext context) {
ASSIGNMENT = new CoreString(context, "assignment");
BACKTRACE_OMITTED_LIMIT = new CoreString(context, "(omitted due to -Xtruffle.backtraces.limit)");
BACKTRACE_OMITTED_UNUSED = new CoreString(context, "(omitted as the rescue expression was pure; use -Xtruffle.backtraces.omit_for_unused=false to disable)");
CALL = new CoreString(context, "call");
CANT_COMPRESS_NEGATIVE = new CoreString(context, "can't compress negative numbers");
CLASS = new CoreString(context, "class");
CLASS_VARIABLE = new CoreString(context, "class variable");
EXPRESSION = new CoreString(context, "expression");
@@ -47,9 +56,16 @@ public CoreStrings(RubyContext context) {
LOCAL_VARIABLE = new CoreString(context, "local-variable");
METHOD = new CoreString(context, "method");
NIL = new CoreString(context, "nil");
ONE_HASH_REQUIRED = new CoreString(context, "one hash required");
OUT_OF_RANGE = new CoreString(context, "out of range");
PROC_WITHOUT_BLOCK = new CoreString(context, "tried to create Proc object without a block");
UNKNOWN = new CoreString(context, "(unknown)");
SELF = new CoreString(context, "self");
TIME_INTERVAL_MUST_BE_POS = new CoreString(context, "time interval must be positive");
TOO_FEW_ARGUMENTS = new CoreString(context, "too few arguments");
TRUE = new CoreString(context, "true");
WRONG_ARGS_ZERO_PLUS_ONE = new CoreString(context, "wrong number of arguments (0 for 1+)");
X_OUTSIDE_OF_STRING = new CoreString(context, "X outside of string");
YIELD = new CoreString(context, "yield");
}

Original file line number Diff line number Diff line change
@@ -1755,7 +1755,7 @@ public SetByteNode(RubyContext context, SourceSection sourceSection) {
ToIntNodeGen.create(getContext(), getSourceSection(), value));
}

@Specialization
@Specialization(guards = "!isRopeBuffer(string)")
public int setByte(DynamicObject string, int index, int value) {
final int normalizedIndex = StringNodesHelper.checkIndexForRef(string, index, this);

@@ -1770,6 +1770,23 @@ public int setByte(DynamicObject string, int index, int value) {

return value;
}

@Specialization(guards = "isRopeBuffer(string)")
public int setByteRopeBuffer(DynamicObject string, int index, int value) {
final int normalizedIndex = StringNodesHelper.checkIndexForRef(string, index, this);

final RopeBuffer rope = (RopeBuffer) rope(string);

rope.getByteList().set(normalizedIndex, value);

return value;
}

protected boolean isRopeBuffer(DynamicObject string) {
assert RubyGuards.isRubyString(string);

return rope(string) instanceof RopeBuffer;
}
}

@CoreMethod(names = {"size", "length"})
Original file line number Diff line number Diff line change
@@ -170,7 +170,7 @@ public static void shutdown(RubyContext context, DynamicObject thread, Node curr
Layouts.THREAD.getFiberManager(thread).shutdown();

if (thread == context.getThreadManager().getRootThread()) {
throw new RaiseException(context.getCoreLibrary().systemExit(0, currentNode));
throw new RaiseException(context.getCoreExceptions().systemExit(0, currentNode));
} else {
throw new ThreadExitException();
}
Original file line number Diff line number Diff line change
@@ -122,13 +122,12 @@ public Backtrace getBacktrace(Node currentNode,
return getBacktrace(currentNode, omit, filterNullSourceSection, exception, null);
}

@TruffleBoundary
public Backtrace getBacktrace(Node currentNode,
final int omit,
final boolean filterNullSourceSection,
DynamicObject exception,
Throwable javaThrowable) {
CompilerAsserts.neverPartOfCompilation();

if (exception != null
&& context.getOptions().BACKTRACES_OMIT_UNUSED
&& DisablingBacktracesNode.areBacktracesDisabled()

0 comments on commit d1165f2

Please sign in to comment.