Skip to content

Commit

Permalink
Showing 51 changed files with 580 additions and 310 deletions.
207 changes: 70 additions & 137 deletions truffle/src/main/java/org/jruby/truffle/RubyContext.java

Large diffs are not rendered by default.

10 changes: 5 additions & 5 deletions truffle/src/main/java/org/jruby/truffle/core/CoreLibrary.java
Original file line number Diff line number Diff line change
@@ -641,11 +641,11 @@ private void initializeGlobalVariables() {
globals.define("$\"", globals.get("$LOADED_FEATURES", nilObject), 0);
globals.define("$,", nilObject, 0);
globals.define("$*", argv, 0);
globals.define("$0", StringOperations.createString(context, StringOperations.encodeRope(context.getRuntime().getInstanceConfig().displayedFileName(), UTF8Encoding.INSTANCE)), 0);
globals.define("$0", StringOperations.createString(context, StringOperations.encodeRope(context.getJRubyRuntime().getInstanceConfig().displayedFileName(), UTF8Encoding.INSTANCE)), 0);

globals.define("$DEBUG", context.getRuntime().isDebug(), 0);
globals.define("$DEBUG", context.getJRubyRuntime().isDebug(), 0);

Object value = context.getRuntime().warningsEnabled() ? context.getRuntime().isVerbose() : nilObject;
Object value = context.getJRubyRuntime().warningsEnabled() ? context.getJRubyRuntime().isVerbose() : nilObject;
globals.define("$VERBOSE", value, 0);

final DynamicObject defaultRecordSeparator = StringOperations.createString(context, StringOperations.encodeRope(CLI_RECORD_SEPARATOR, UTF8Encoding.INSTANCE));
@@ -797,7 +797,7 @@ private void initializeRubiniusFFI() {
}

public void initializeEncodingConstants() {
getContext().getRuntime().getEncodingService().defineEncodings(new EncodingService.EncodingDefinitionVisitor() {
getContext().getJRubyRuntime().getEncodingService().defineEncodings(new EncodingService.EncodingDefinitionVisitor() {
@Override
public void defineEncoding(EncodingDB.Entry encodingEntry, byte[] name, int p, int end) {
DynamicObject re = EncodingNodes.newEncoding(encodingClass, null, name, p, end, encodingEntry.isDummy());
@@ -810,7 +810,7 @@ public void defineConstant(int encodingListIndex, String constName) {
}
});

getContext().getRuntime().getEncodingService().defineAliases(new EncodingService.EncodingAliasVisitor() {
getContext().getJRubyRuntime().getEncodingService().defineAliases(new EncodingService.EncodingAliasVisitor() {
@Override
public void defineAlias(int encodingListIndex, String constName) {
DynamicObject re = EncodingNodes.getEncoding(encodingListIndex);
Original file line number Diff line number Diff line change
@@ -45,7 +45,7 @@ public Object execute(VirtualFrame frame) {

@TruffleBoundary
private Collection<String> getRequiredLibraries() {
return getContext().getRuntime().getInstanceConfig().getRequiredLibraries();
return getContext().getJRubyRuntime().getInstanceConfig().getRequiredLibraries();
}

}
Original file line number Diff line number Diff line change
@@ -81,7 +81,7 @@ protected Object clock_gettime_monotonic_raw(int clock_id, DynamicObject unit) {

@TruffleBoundary
private Object clock_gettime_clock_id(int clock_id, DynamicObject unit) {
final ClockGetTime libCClockGetTime = getContext().getLibCClockGetTime();
final ClockGetTime libCClockGetTime = getContext().getNativePlatform().getClockGetTime();
TimeSpec timeSpec = new TimeSpec(jnr.ffi.Runtime.getRuntime(libCClockGetTime));
int r = libCClockGetTime.clock_gettime(clock_id, timeSpec);
if (r != 0) {
@@ -142,9 +142,9 @@ public int kill(DynamicObject signalName, int pid) {

@TruffleBoundary
private int raise(String signalName) {
Signal signal = getContext().getSignalManager().createSignal(signalName);
Signal signal = getContext().getNativePlatform().getSignalManager().createSignal(signalName);
try {
getContext().getSignalManager().raise(signal);
getContext().getNativePlatform().getSignalManager().raise(signal);
} catch (IllegalArgumentException e) {
throw new RaiseException(getContext().getCoreLibrary().argumentError(e.getMessage(), this));
}
Original file line number Diff line number Diff line change
@@ -51,7 +51,7 @@ public InitializeNode(RubyContext context, SourceSection sourceSection) {
public DynamicObject initialize(DynamicObject self, Object source, Object destination, Object unusedOptions) {
// Adapted from RubyConverter - see attribution there

Ruby runtime = getContext().getRuntime();
Ruby runtime = getContext().getJRubyRuntime();
Encoding[] encs = {null, null};
byte[][] encNames = {null, null};
int[] ecflags = {0};
Original file line number Diff line number Diff line change
@@ -315,7 +315,7 @@ public SetDefaultExternalNode(RubyContext context, SourceSection sourceSection)
public DynamicObject defaultExternalEncoding(DynamicObject encoding) {
CompilerDirectives.transferToInterpreter();

getContext().getRuntime().setDefaultExternalEncoding(EncodingOperations.getEncoding(encoding));
getContext().getJRubyRuntime().setDefaultExternalEncoding(EncodingOperations.getEncoding(encoding));

return encoding;
}
@@ -325,7 +325,7 @@ public DynamicObject defaultExternal(DynamicObject encodingString) {
CompilerDirectives.transferToInterpreter();

final DynamicObject rubyEncoding = getEncoding(encodingString.toString());
getContext().getRuntime().setDefaultExternalEncoding(EncodingOperations.getEncoding(rubyEncoding));
getContext().getJRubyRuntime().setDefaultExternalEncoding(EncodingOperations.getEncoding(rubyEncoding));

return rubyEncoding;
}
@@ -361,7 +361,7 @@ public SetDefaultInternalNode(RubyContext context, SourceSection sourceSection)
public DynamicObject defaultInternal(DynamicObject encoding) {
CompilerDirectives.transferToInterpreter();

getContext().getRuntime().setDefaultInternalEncoding(EncodingOperations.getEncoding(encoding));
getContext().getJRubyRuntime().setDefaultInternalEncoding(EncodingOperations.getEncoding(encoding));

return encoding;
}
@@ -370,7 +370,7 @@ public DynamicObject defaultInternal(DynamicObject encoding) {
public DynamicObject defaultInternal(Object encoding) {
CompilerDirectives.transferToInterpreter();

getContext().getRuntime().setDefaultInternalEncoding(null);
getContext().getJRubyRuntime().setDefaultInternalEncoding(null);

return nil();
}
@@ -385,7 +385,7 @@ public DynamicObject defaultInternal(VirtualFrame frame, Object encoding) {
}

final DynamicObject encodingName = toStrNode.executeToStr(frame, encoding);
getContext().getRuntime().setDefaultInternalEncoding(EncodingOperations.getEncoding(getEncoding(encodingName.toString())));
getContext().getJRubyRuntime().setDefaultInternalEncoding(EncodingOperations.getEncoding(getEncoding(encodingName.toString())));

return encodingName;
}
@@ -420,7 +420,7 @@ public LocaleCharacterMapNode(RubyContext context, SourceSection sourceSection)
@Specialization
public DynamicObject localeCharacterMap() {
CompilerDirectives.transferToInterpreter();
final ByteList name = new ByteList(getContext().getRuntime().getEncodingService().getLocaleEncoding().getName());
final ByteList name = new ByteList(getContext().getJRubyRuntime().getEncodingService().getLocaleEncoding().getName());
return createString(name);
}
}
@@ -485,11 +485,11 @@ public Object encodingMap(VirtualFrame frame) {
lookupTableWriteNode.call(frame, ret, "[]=", null, key, value);
}

final Encoding defaultInternalEncoding = getContext().getRuntime().getDefaultInternalEncoding();
final Encoding defaultInternalEncoding = getContext().getJRubyRuntime().getDefaultInternalEncoding();
final Object internalTuple = getContext().makeTuple(frame, newTupleNode, create7BitString("internal", UTF8Encoding.INSTANCE), indexLookup(encodings, defaultInternalEncoding));
lookupTableWriteNode.call(frame, ret, "[]=", null, getSymbol("INTERNAL"), internalTuple);

final Encoding defaultExternalEncoding = getContext().getRuntime().getDefaultExternalEncoding();
final Encoding defaultExternalEncoding = getContext().getJRubyRuntime().getDefaultExternalEncoding();
final Object externalTuple = getContext().makeTuple(frame, newTupleNode, create7BitString("external", UTF8Encoding.INSTANCE), indexLookup(encodings, defaultExternalEncoding));
lookupTableWriteNode.call(frame, ret, "[]=", null, getSymbol("EXTERNAL"), externalTuple);

@@ -506,7 +506,7 @@ public Object encodingMap(VirtualFrame frame) {

@TruffleBoundary
private Encoding getLocaleEncoding() {
return getContext().getRuntime().getEncodingService().getLocaleEncoding();
return getContext().getJRubyRuntime().getEncodingService().getLocaleEncoding();
}

@TruffleBoundary
Original file line number Diff line number Diff line change
@@ -85,6 +85,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ThreadLocalRandom;

@CoreClass(name = "Kernel")
public abstract class KernelNodes {
@@ -787,9 +788,9 @@ public DynamicObject gets(VirtualFrame frame) {
CompilerDirectives.transferToInterpreter();

// TODO(CS): having some trouble interacting with JRuby stdin - so using this hack
final InputStream in = getContext().getRuntime().getInstanceConfig().getInput();
final InputStream in = getContext().getJRubyRuntime().getInstanceConfig().getInput();

Encoding encoding = getContext().getRuntime().getDefaultExternalEncoding();
Encoding encoding = getContext().getJRubyRuntime().getDefaultExternalEncoding();

final BufferedReader reader = new BufferedReader(new InputStreamReader(in, encoding.getCharset()));

@@ -1470,27 +1471,27 @@ public RandNode(RubyContext context, SourceSection sourceSection) {

@Specialization
public double rand(NotProvided max) {
return getContext().getRandom().nextDouble();
return ThreadLocalRandom.current().nextDouble();
}

@Specialization(guards = "max == 0")
public double randZero(int max) {
return getContext().getRandom().nextDouble();
return ThreadLocalRandom.current().nextDouble();
}

@Specialization(guards = "max != 0")
public int randNonZero(int max) {
return getContext().getRandom().nextInt(max);
return ThreadLocalRandom.current().nextInt(max);
}

@Specialization(guards = "max == 0")
public double randZero(long max) {
return getContext().getRandom().nextDouble();
return ThreadLocalRandom.current().nextDouble();
}

@Specialization(guards = "max != 0")
public long randNonZero(long max) {
return getContext().getRandom().nextLong(max);
return ThreadLocalRandom.current().nextLong(max);
}

}
Original file line number Diff line number Diff line change
@@ -18,10 +18,12 @@
import org.jruby.truffle.core.thread.ThreadManager;
import org.jruby.truffle.core.thread.ThreadNodes;
import org.jruby.truffle.language.control.RaiseException;
import org.jruby.truffle.language.objects.ObjectIDOperations;

import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference;
import java.util.*;
import java.util.concurrent.atomic.AtomicLong;

/**
* Supports the Ruby {@code ObjectSpace} module. Object IDs are lazily allocated {@code long}
@@ -63,6 +65,8 @@ public void clearFinalizers() {
private int tracingAssumptionActivations = 0;
private boolean tracingPaused = false;

private final AtomicLong nextObjectID = new AtomicLong(ObjectIDOperations.FIRST_OBJECT_ID);

public ObjectSpaceManager(RubyContext context) {
this.context = context;
}
@@ -183,4 +187,15 @@ public boolean isTracing() {
return isTracing;
}

public long getNextObjectID() {
final long id = nextObjectID.getAndAdd(2);

if (id < 0) {
CompilerDirectives.transferToInterpreter();
throw new RuntimeException("Object IDs exhausted");
}

return id;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/*
* Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. This
* code is released under a tri EPL/GPL/LGPL license. You can use it,
* redistribute it and/or modify it under the terms of the:
*
* Eclipse Public License version 1.0
* GNU General Public License version 2
* GNU Lesser General Public License version 2.1
*/
package org.jruby.truffle.core.queue;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;

public interface ArrayBlockingQueueLocksConditions<T> extends BlockingQueue<T> {

ReentrantLock getLock();

Condition getNotEmptyCondition();

Condition getNotFullCondition();

}
Loading

0 comments on commit de2f9a7

Please sign in to comment.