diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/CRC64.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/CRC64.java index f3ec23c0732522a77087eff99dc6febaf52083ad..c4a29770e6ed51657735ce8b9077e9e4990673ba 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/CRC64.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/CRC64.java @@ -22,6 +22,7 @@ */ package com.oracle.truffle.r.nodes.builtin.base; +import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import static com.oracle.truffle.r.runtime.builtins.RBehavior.PURE; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.INTERNAL; @@ -48,9 +49,7 @@ public abstract class CRC64 extends RBuiltinNode { protected RAbstractStringVector crc64(RAbstractStringVector x) { final String string = x.getDataAt(0); byte[] bytes = string.getBytes(); - org.tukaani.xz.check.CRC64 crc = new org.tukaani.xz.check.CRC64(); - crc.update(bytes); - bytes = crc.finish(); + bytes = crc64(bytes); long l = 0; for (int i = 0; i < bytes.length; i++) { l += ((long) bytes[i] & 0xffL) << (8 * i); @@ -58,4 +57,11 @@ public abstract class CRC64 extends RBuiltinNode { return RDataFactory.createStringVector(Long.toHexString(l)); } + @TruffleBoundary + private byte[] crc64(byte[] bytes) { + org.tukaani.xz.check.CRC64 crc = new org.tukaani.xz.check.CRC64(); + crc.update(bytes); + return crc.finish(); + } + }