From 942b10d3b79cb88dfcda0735785f26f5ab67acff Mon Sep 17 00:00:00 2001 From: Alex Zerntev Date: Wed, 23 Aug 2023 12:25:03 +0300 Subject: [PATCH] RD-9460 implement function package in truffle for invoke after (#117) - Added Function.InvokeAfter entry --- .../builtin/TruffleFunctionPackage.scala | 4 +- .../tests/builtin/TruffleBuiltInTest.scala | 5 +-- .../FunctionInvokeAfterNode.java | 37 +++++++++++++++++++ 3 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 raw-runtime-rql2-truffle/src/main/java/raw/runtime/truffle/ast/expressions/builtin/function_package/FunctionInvokeAfterNode.java diff --git a/raw-compiler-rql2-truffle/src/main/scala/raw/compiler/rql2/truffle/builtin/TruffleFunctionPackage.scala b/raw-compiler-rql2-truffle/src/main/scala/raw/compiler/rql2/truffle/builtin/TruffleFunctionPackage.scala index 115ee1e96..6340891b2 100644 --- a/raw-compiler-rql2-truffle/src/main/scala/raw/compiler/rql2/truffle/builtin/TruffleFunctionPackage.scala +++ b/raw-compiler-rql2-truffle/src/main/scala/raw/compiler/rql2/truffle/builtin/TruffleFunctionPackage.scala @@ -16,7 +16,9 @@ import raw.compiler.base.source.Type import raw.compiler.rql2.builtin.FunctionInvokeAfterEntry import raw.compiler.rql2.truffle.{TruffleArg, TruffleEntryExtension} import raw.runtime.truffle.ExpressionNode +import raw.runtime.truffle.ast.expressions.builtin.function_package.FunctionInvokeAfterNodeGen class TruffleFunctionInvokeAfterEntry extends FunctionInvokeAfterEntry with TruffleEntryExtension { - override def toTruffle(t: Type, args: Seq[TruffleArg]): ExpressionNode = super.toTruffle(t, args) + override def toTruffle(t: Type, args: Seq[TruffleArg]): ExpressionNode = + FunctionInvokeAfterNodeGen.create(args.head.e, args(1).e) } diff --git a/raw-compiler-rql2-truffle/src/test/scala/raw/compiler/rql2/tests/builtin/TruffleBuiltInTest.scala b/raw-compiler-rql2-truffle/src/test/scala/raw/compiler/rql2/tests/builtin/TruffleBuiltInTest.scala index cac451fdb..20551d79b 100644 --- a/raw-compiler-rql2-truffle/src/test/scala/raw/compiler/rql2/tests/builtin/TruffleBuiltInTest.scala +++ b/raw-compiler-rql2-truffle/src/test/scala/raw/compiler/rql2/tests/builtin/TruffleBuiltInTest.scala @@ -25,10 +25,7 @@ import raw.testing.tags.TruffleTests @TruffleTests class EnvironmentPackageTruffleTest extends TruffleCompilerTestContext with EnvironmentPackageTest @TruffleTests class ErrorPackageTruffleTest extends TruffleCompilerTestContext with ErrorPackageTest @TruffleTests class FloatPackageTruffleTest extends TruffleCompilerTestContext with FloatPackageTest - -// InvokeAfter -// class FunctionPackageTruffleTest extends TruffleCompilerTestContext with FunctionPackageTest - +@TruffleTests class FunctionPackageTruffleTest extends TruffleCompilerTestContext with FunctionPackageTest @TruffleTests class HttpPackageTruffleTest extends TruffleCompilerTestContext with HttpPackageTest @TruffleTests class IntervalPackageTruffleTest extends TruffleCompilerTestContext with IntervalPackageTest @TruffleTests class IntPackageTruffleTest extends TruffleCompilerTestContext with IntPackageTest diff --git a/raw-runtime-rql2-truffle/src/main/java/raw/runtime/truffle/ast/expressions/builtin/function_package/FunctionInvokeAfterNode.java b/raw-runtime-rql2-truffle/src/main/java/raw/runtime/truffle/ast/expressions/builtin/function_package/FunctionInvokeAfterNode.java new file mode 100644 index 000000000..c50a3be48 --- /dev/null +++ b/raw-runtime-rql2-truffle/src/main/java/raw/runtime/truffle/ast/expressions/builtin/function_package/FunctionInvokeAfterNode.java @@ -0,0 +1,37 @@ +/* + * Copyright 2023 RAW Labs S.A. + * + * Use of this software is governed by the Business Source License + * included in the file licenses/BSL.txt. + * + * As of the Change Date specified in that file, in accordance with + * the Business Source License, use of this software will be governed + * by the Apache License, Version 2.0, included in the file + * licenses/APL.txt. + */ + +package raw.runtime.truffle.ast.expressions.builtin.function_package; + +import com.oracle.truffle.api.dsl.NodeChild; +import com.oracle.truffle.api.dsl.Specialization; +import com.oracle.truffle.api.nodes.NodeInfo; +import raw.runtime.truffle.ExpressionNode; +import raw.runtime.truffle.runtime.exceptions.RawTruffleInternalErrorException; +import raw.runtime.truffle.runtime.function.Closure; + +@NodeInfo(shortName = "Function.InvokeAfter") +@NodeChild(value = "function") +@NodeChild(value = "sleepTime") +public abstract class FunctionInvokeAfterNode extends ExpressionNode { + + @Specialization + protected Object invokeAfter(Closure function, long sleepTime) { + try { + Thread.sleep(sleepTime); + return function.call(); + } catch (InterruptedException e) { + throw new RawTruffleInternalErrorException(e); + } + } + +}