diff --git a/src/qir/QIRLanguage.java b/src/qir/QIRLanguage.java index 9f66510449ed2dbb7ec0e390274fc1ba90b73b86..dc1f24dd7754261750ac884ae7236dcf33591b0c 100644 --- a/src/qir/QIRLanguage.java +++ b/src/qir/QIRLanguage.java @@ -4,7 +4,6 @@ import com.oracle.truffle.api.TruffleLanguage; import qir.ast.QIRNode; import qir.runtime.QIRContext; -import qir.util.QIRException; /** * QIR (Query Intermediate Language) is a language that aims to be able to encode any query from any @@ -19,16 +18,6 @@ public final class QIRLanguage extends TruffleLanguage<QIRContext> { return new QIRContext(env); } - @Override - protected Object findExportedSymbol(final QIRContext context, final String globalName, final boolean onlyExplicit) { - throw new QIRException("Unimplemented"); - } - - @Override - protected Object getLanguageGlobal(final QIRContext context) { - return context; - } - @Override protected boolean isObjectOfLanguage(final Object object) { return object instanceof QIRNode; diff --git a/src/qir/ast/QIRNode.java b/src/qir/ast/QIRNode.java index b1742136c7ba47eec0fa16857b972e7b04808db9..edf1bbd8cb874adc2c4d106e3aa6134956ae28aa 100644 --- a/src/qir/ast/QIRNode.java +++ b/src/qir/ast/QIRNode.java @@ -1,8 +1,11 @@ package qir.ast; +import com.oracle.truffle.api.dsl.ReportPolymorphism; import com.oracle.truffle.api.dsl.TypeSystemReference; import com.oracle.truffle.api.frame.VirtualFrame; -import com.oracle.truffle.api.instrumentation.Instrumentable; +import com.oracle.truffle.api.instrumentation.GenerateWrapper; +import com.oracle.truffle.api.instrumentation.InstrumentableNode; +import com.oracle.truffle.api.instrumentation.ProbeNode; import com.oracle.truffle.api.nodes.Node; import com.oracle.truffle.api.nodes.UnexpectedResultException; import com.oracle.truffle.api.source.SourceSection; @@ -21,8 +24,9 @@ import qir.util.QIRException; * A generic QIR node. Every QIR node must inherit from {@link QIRNode}. */ @TypeSystemReference(QIRTypes.class) -@Instrumentable(factory = QIRNodeWrapper.class) -public abstract class QIRNode extends Node { +@GenerateWrapper +@ReportPolymorphism +public abstract class QIRNode extends Node implements InstrumentableNode { /** * The location in the source code of the expression represented by this node. */ @@ -42,6 +46,16 @@ public abstract class QIRNode extends Node { return super.hashCode(); } + @Override + public WrapperNode createWrapper(ProbeNode probe) { + return new QIRNodeWrapper(sourceSection, this, probe); + } + + @Override + public final boolean isInstrumentable() { + return sourceSection != null; + } + public abstract QIRNode executeGeneric(VirtualFrame frame); public final QIRNumber executeNumber(VirtualFrame frame) throws UnexpectedResultException {