Skip to content
Permalink

Comparing changes

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

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jruby/jruby
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 7a5f633c4870
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 3525906e8928
Choose a head ref
  • 6 commits
  • 6 files changed
  • 1 contributor

Commits on Jul 24, 2016

  1. Copy the full SHA
    b12f070 View commit details
  2. [Truffle] GetOpenFile

    chrisseaton committed Jul 24, 2016
    Copy the full SHA
    5189f42 View commit details
  3. Copy the full SHA
    3d19518 View commit details
  4. Copy the full SHA
    ec06122 View commit details
  5. [Truffle] rb_eArgError

    chrisseaton committed Jul 24, 2016
    Copy the full SHA
    8a10460 View commit details
  6. Copy the full SHA
    3525906 View commit details
98 changes: 61 additions & 37 deletions lib/ruby/truffle/cext/ruby.h
Original file line number Diff line number Diff line change
@@ -138,6 +138,8 @@ struct rb_data_type_struct {
VALUE flags;
};

#define RUBY_TYPED_FREE_IMMEDIATELY 1

int rb_type(VALUE value);
#define TYPE(value) rb_type((VALUE) (value))
bool RB_TYPE_P(VALUE value, int type);
@@ -151,41 +153,43 @@ bool SYMBOL_P(VALUE value);

// Constants

VALUE get_Qfalse(void);
VALUE get_Qtrue(void);
VALUE get_Qnil(void);

#define Qfalse get_Qfalse()
#define Qtrue get_Qtrue()
#define Qnil get_Qnil()

VALUE get_rb_cObject(void);
VALUE get_rb_cArray(void);
VALUE get_rb_cHash(void);
VALUE get_rb_mKernel(void);
VALUE get_rb_cProc(void);
VALUE get_rb_cTime(void);
VALUE get_rb_mEnumerable(void);

#define rb_cObject get_rb_cObject()
#define rb_cArray get_rb_cArray()
#define rb_cHash get_rb_cHash()
#define rb_mKernel get_rb_mKernel()
#define rb_cProc get_rb_cProc()
#define rb_cTime get_rb_cTime()
#define rb_mEnumerable get_rb_mEnumerable()

VALUE get_rb_eException(void);
VALUE get_rb_eRuntimeError(void);
VALUE get_rb_eStandardError(void);
VALUE get_rb_eNoMemError(void);
VALUE get_rb_eTypeError(void);

#define rb_eException get_rb_eException()
#define rb_eRuntimeError get_rb_eRuntimeError()
#define rb_eStandardError get_rb_eStandardError()
#define rb_eNoMemError get_rb_eNoMemError()
#define rb_eTypeError get_rb_eTypeError()
VALUE rb_jt_Qfalse(void);
VALUE rb_jt_Qtrue(void);
VALUE rb_jt_Qnil(void);

#define Qfalse rb_jt_Qfalse()
#define Qtrue rb_jt_Qtrue()
#define Qnil rb_jt_Qnil()

VALUE rb_jt_get_cObject(void);
VALUE rb_jt_get_cArray(void);
VALUE rb_jt_get_cHash(void);
VALUE rb_jt_get_mKernel(void);
VALUE rb_jt_get_cProc(void);
VALUE rb_jt_get_cTime(void);
VALUE rb_jt_get_mEnumerable(void);

#define rb_cObject rb_jt_get_cObject()
#define rb_cArray rb_jt_get_cArray()
#define rb_cHash rb_jt_get_cHash()
#define rb_mKernel rb_jt_get_mKernel()
#define rb_cProc rb_jt_get_cProc()
#define rb_cTime rb_jt_get_cTime()
#define rb_mEnumerable rb_jt_get_mEnumerable()

VALUE rb_jt_get_eException(void);
VALUE rb_jt_get_eRuntimeError(void);
VALUE rb_jt_get_eStandardError(void);
VALUE rb_jt_get_eNoMemError(void);
VALUE rb_jt_get_eTypeError(void);
VALUE rb_jt_get_eArgError(void);

#define rb_eException rb_jt_get_eException()
#define rb_eRuntimeError rb_jt_get_eRuntimeError()
#define rb_eStandardError rb_jt_get_eStandardError()
#define rb_eNoMemError rb_jt_get_eNoMemError()
#define rb_eTypeError rb_jt_get_eTypeError()
#define rb_eArgError rb_jt_get_eArgError()

// Conversions

@@ -225,6 +229,21 @@ int RTEST(VALUE value);

VALUE rb_Integer(VALUE value);

#define INTEGER_PACK_MSWORD_FIRST 0x01
#define INTEGER_PACK_LSWORD_FIRST 0x02
#define INTEGER_PACK_MSBYTE_FIRST 0x10
#define INTEGER_PACK_LSBYTE_FIRST 0x20
#define INTEGER_PACK_NATIVE_BYTE_ORDER 0x40
#define INTEGER_PACK_2COMP 0x80
#define INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION 0x400
#define INTEGER_PACK_FORCE_BIGNUM 0x100
#define INTEGER_PACK_NEGATIVE 0x200
#define INTEGER_PACK_LITTLE_ENDIAN (INTEGER_PACK_LSWORD_FIRST | INTEGER_PACK_LSBYTE_FIRST)
#define INTEGER_PACK_BIG_ENDIAN (INTEGER_PACK_MSWORD_FIRST | INTEGER_PACK_MSBYTE_FIRST)

int rb_integer_pack(VALUE value, void *words, size_t numwords, size_t wordsize, size_t nails, int flags);
VALUE rb_integer_unpack(const void *words, size_t numwords, size_t wordsize, size_t nails, int flags);

// Float

VALUE rb_float_new(double value);
@@ -364,8 +383,8 @@ int rb_const_defined(VALUE module, ID name);
int rb_const_defined_at(VALUE module, ID name);

VALUE rb_const_get(VALUE module, ID name);
VALUE rb_const_get_at(VALUE module, ID name);
VALUE rb_const_get_from(VALUE module, ID name);
VALUE rb_const_at(VALUE module, ID name);
VALUE rb_const_from(VALUE module, ID name);

VALUE rb_const_set(VALUE module, ID name, VALUE value);
VALUE rb_define_const(VALUE module, const char *name, VALUE value);
@@ -475,6 +494,7 @@ int rb_nativethread_lock_unlock(rb_nativethread_lock_t *lock);
// IO

typedef struct rb_io_t {
int fd;
} rb_io_t;

#define rb_update_max_fd(fd) {}
@@ -484,6 +504,10 @@ void rb_io_check_readable(rb_io_t *io);

int rb_cloexec_dup(int oldfd);

int rb_jt_io_handle(VALUE file);

#define GetOpenFile(file, pointer) ((pointer)->fd = rb_jt_io_handle(file))

#if defined(__cplusplus)
}
#endif
48 changes: 33 additions & 15 deletions truffle/src/main/c/cext/ruby.c
Original file line number Diff line number Diff line change
@@ -46,66 +46,70 @@ bool SYMBOL_P(VALUE value) {

// Constants

VALUE get_Qfalse(void) {
VALUE rb_jt_get_Qfalse(void) {
return (VALUE) truffle_read(RUBY_CEXT, "Qfalse");
}

VALUE get_Qtrue(void) {
VALUE rb_jt_get_Qtrue(void) {
return (VALUE) truffle_read(RUBY_CEXT, "Qtrue");
}

VALUE get_Qnil(void) {
VALUE rb_jt_get_Qnil(void) {
return (VALUE) truffle_read(RUBY_CEXT, "Qnil");
}

VALUE get_rb_cObject(void) {
VALUE rb_jt_get_cObject(void) {
return (VALUE) truffle_read(RUBY_CEXT, "rb_cObject");
}

VALUE get_rb_cArray(void) {
VALUE rb_jt_get_cArray(void) {
return (VALUE) truffle_read(RUBY_CEXT, "rb_cArray");
}

VALUE get_rb_cHash(void) {
VALUE rb_jt_get_cHash(void) {
return (VALUE) truffle_read(RUBY_CEXT, "rb_cHash");
}

VALUE get_rb_cProc(void) {
VALUE rb_jt_get_cProc(void) {
return (VALUE) truffle_read(RUBY_CEXT, "rb_cProc");
}

VALUE get_rb_cTime(void) {
VALUE rb_jt_get_cTime(void) {
return (VALUE) truffle_read(RUBY_CEXT, "rb_cTime");
}

VALUE get_rb_mKernel(void) {
VALUE rb_jt_get_mKernel(void) {
return (VALUE) truffle_read(RUBY_CEXT, "rb_mKernel");
}

VALUE get_rb_mEnumerable(void) {
VALUE rb_jt_get_mEnumerable(void) {
return (VALUE) truffle_read(RUBY_CEXT, "rb_mEnumerable");
}

VALUE get_rb_eException(void) {
VALUE rb_jt_get_eException(void) {
return (VALUE) truffle_read(RUBY_CEXT, "rb_eException");
}

VALUE get_rb_eRuntimeError(void) {
VALUE rb_jt_get_eRuntimeError(void) {
return (VALUE) truffle_read(RUBY_CEXT, "rb_eRuntimeError");
}

VALUE get_rb_eStandardError(void) {
VALUE rb_jt_get_eStandardError(void) {
return (VALUE) truffle_read(RUBY_CEXT, "rb_eStandardError");
}

VALUE get_rb_eNoMemError(void) {
VALUE rb_jt_get_eNoMemError(void) {
return (VALUE) truffle_read(RUBY_CEXT, "rb_eNoMemError");
}

VALUE get_rb_eTypeError(void) {
VALUE rb_jt_get_eTypeError(void) {
return (VALUE) truffle_read(RUBY_CEXT, "rb_eTypeError");
}

VALUE rb_jt_get_eArgError(void) {
return (VALUE) truffle_read(RUBY_CEXT, "rb_eArgError");
}

// Conversions

VALUE CHR2FIX(char ch) {
@@ -196,6 +200,16 @@ VALUE rb_Integer(VALUE value) {
return (VALUE) truffle_invoke(RUBY_CEXT, "rb_Integer", value);
}

int rb_integer_pack(VALUE value, void *words, size_t numwords, size_t wordsize, size_t nails, int flags) {
fprintf(stderr, "rb_integer_pack not implemented\n");
abort();
}

VALUE rb_integer_unpack(const void *words, size_t numwords, size_t wordsize, size_t nails, int flags) {
fprintf(stderr, "rb_integer_unpack not implemented\n");
abort();
}

// Float

VALUE rb_float_new(double value) {
@@ -811,3 +825,7 @@ int rb_cloexec_dup(int oldfd) {
fprintf(stderr, "rb_cloexec_dup not implemented\n");
abort();
}

int rb_jt_io_handle(VALUE io) {
return truffle_invoke(RUBY_CEXT, "rb_jt_io_handle", io);
}
Original file line number Diff line number Diff line change
@@ -31,6 +31,8 @@ DynamicObject createIO(DynamicObjectFactory factory,
int descriptor,
int mode);

boolean isIO(DynamicObject object);

DynamicObject getIBuffer(DynamicObject object);

int getLineNo(DynamicObject object);
Original file line number Diff line number Diff line change
@@ -24,6 +24,7 @@
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.object.DynamicObject;
import com.oracle.truffle.api.profiles.ConditionProfile;
import org.jruby.truffle.Layouts;
import org.jruby.truffle.builtins.CoreClass;
import org.jruby.truffle.builtins.CoreMethod;
import org.jruby.truffle.builtins.CoreMethodArrayArgumentsNode;
@@ -276,4 +277,14 @@ public Object constGetFrom(VirtualFrame frame, DynamicObject module, String name

}

@CoreMethod(names = "rb_jt_io_handle", isModuleFunction = true)
public abstract static class IOHandleNode extends CoreMethodArrayArgumentsNode {

@Specialization(guards = "isRubyIO(io)")
public int ioHandle(DynamicObject io) {
return Layouts.IO.getDescriptor(io);
}

}

}
Original file line number Diff line number Diff line change
@@ -241,6 +241,10 @@ public static boolean isTracePoint(DynamicObject object) {
return Layouts.TRACE_POINT.isTracePoint(object);
}

public static boolean isRubyIO(DynamicObject object) {
return Layouts.IO.isIO(object);
}

public static boolean isNullPointer(DynamicObject pointer) {
return Layouts.POINTER.getPointer(pointer) == PointerPrimitiveNodes.NULL_POINTER;
}
4 changes: 4 additions & 0 deletions truffle/src/main/ruby/core/truffle/cext.rb
Original file line number Diff line number Diff line change
@@ -178,6 +178,10 @@ def rb_eTypeError
TypeError
end

def rb_eArgError
ArgError
end

def rb_fix2int(value)
if value.nil?
raise TypeError