use of com.oracle.truffle.api.dsl.Specialization in project sulong by graalvm.
the class LLVMToDoubleNode method doTruffleObject.
@Specialization
protected double doTruffleObject(LLVMTruffleObject from) {
TruffleObject base = from.getObject();
if (ForeignAccess.sendIsNull(isNull, base)) {
return from.getOffset();
} else if (ForeignAccess.sendIsBoxed(isBoxed, base)) {
try {
double unboxed = (double) toDouble.executeWithTarget(ForeignAccess.sendUnbox(unbox, base));
return unboxed + from.getOffset();
} catch (UnsupportedMessageException e) {
CompilerDirectives.transferToInterpreter();
throw new IllegalStateException(e);
}
}
CompilerDirectives.transferToInterpreter();
throw new IllegalStateException("Not convertable");
}
use of com.oracle.truffle.api.dsl.Specialization in project sulong by graalvm.
the class LLVMToFloatNode method doTruffleObject.
@Specialization
protected float doTruffleObject(LLVMTruffleObject from) {
TruffleObject base = from.getObject();
if (ForeignAccess.sendIsNull(isNull, base)) {
return from.getOffset();
} else if (ForeignAccess.sendIsBoxed(isBoxed, base)) {
try {
float ptr = (float) toFloat.executeWithTarget(ForeignAccess.sendUnbox(unbox, base));
return ptr + from.getOffset();
} catch (UnsupportedMessageException e) {
CompilerDirectives.transferToInterpreter();
throw new IllegalStateException(e);
}
}
CompilerDirectives.transferToInterpreter();
throw new IllegalStateException("Not convertable");
}
use of com.oracle.truffle.api.dsl.Specialization in project sulong by graalvm.
the class LLVMToI1Node method doTruffleObject.
@Specialization
protected boolean doTruffleObject(LLVMTruffleObject from) {
TruffleObject base = from.getObject();
if (ForeignAccess.sendIsNull(isNull, base)) {
return (from.getOffset() & 1) != 0;
} else if (ForeignAccess.sendIsBoxed(isBoxed, base)) {
try {
boolean ptr = (boolean) toBool.executeWithTarget(ForeignAccess.sendUnbox(unbox, base));
return ptr ^ ((from.getOffset() & 1) != 0);
} catch (UnsupportedMessageException e) {
CompilerDirectives.transferToInterpreter();
throw new IllegalStateException(e);
}
}
CompilerDirectives.transferToInterpreter();
throw new IllegalStateException("Not convertable");
}
Aggregations