From fcd825b965e9aa1b7593ac3058fb6f01683aad15 Mon Sep 17 00:00:00 2001
From: Tomas Stupka <tomas.stupka@oracle.com>
Date: Tue, 20 Dec 2016 18:39:56 +0100
Subject: [PATCH] placed the org.tukaani.xz.check.CRC64 call behind a
 TruffleBoundary

---
 .../oracle/truffle/r/nodes/builtin/base/CRC64.java   | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

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 f3ec23c073..c4a29770e6 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();
+    }
+
 }
-- 
GitLab