Skip to content

Commit

Permalink
Work around javac parser issue
Browse files Browse the repository at this point in the history
As detailed here: https://markmail.org/thread/v3kqlmtwfsokfaod
javac from JDK 10 onwards seems to have a bug in the parser.
We can work around by using a class that exists instead of waiting for the annotation processor to produce it.

Bug is reported as https://bugs.openjdk.java.net/browse/JDK-8200163

Signed-off-by: Stefan Marr <[email protected]>
  • Loading branch information
smarr committed Mar 23, 2018
1 parent 3b49d3e commit c1c03b9
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 7 deletions.
10 changes: 5 additions & 5 deletions src/som/primitives/ActivitySpawn.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
import som.interpreter.nodes.nary.BinaryComplexOperation.BinarySystemOperation;
import som.interpreter.nodes.nary.TernaryExpressionNode.TernarySystemOperation;
import som.primitives.ObjectPrims.IsValue;
import som.primitives.arrays.ToArgumentsArrayFactory;
import som.primitives.arrays.ToArgumentsArrayNode;
import som.primitives.arrays.ToArgumentsArrayNodeFactory;
import som.primitives.processes.ChannelPrimitives;
import som.primitives.processes.ChannelPrimitives.Process;
import som.primitives.processes.ChannelPrimitives.TracingProcess;
Expand Down Expand Up @@ -165,11 +165,11 @@ protected boolean isTaggedWithIgnoringEagerness(final Class<?> tag) {
@NodeChild(value = "argArr", type = ToArgumentsArrayNode.class,
executeWith = {"secondArg", "firstArg"})
@Primitive(primitive = "threading:threadSpawn:with:",
extraChild = ToArgumentsArrayNodeFactory.class)
extraChild = ToArgumentsArrayFactory.class)
@Primitive(primitive = "threading:taskSpawn:with:",
extraChild = ToArgumentsArrayNodeFactory.class)
@Primitive(primitive = "proc:spawn:with:", extraChild = ToArgumentsArrayNodeFactory.class)
@Primitive(selector = "spawn:with:", extraChild = ToArgumentsArrayNodeFactory.class)
extraChild = ToArgumentsArrayFactory.class)
@Primitive(primitive = "proc:spawn:with:", extraChild = ToArgumentsArrayFactory.class)
@Primitive(selector = "spawn:with:", extraChild = ToArgumentsArrayFactory.class)
public abstract static class SpawnWithPrim extends TernarySystemOperation {
@CompilationFinal private ForkJoinPool forkJoinPool;
@CompilationFinal private ForkJoinPool processesPool;
Expand Down
4 changes: 2 additions & 2 deletions src/som/primitives/MethodPrims.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
import som.interpreter.nodes.dispatch.InvokeOnCache;
import som.interpreter.nodes.nary.ExprWithTagsNode;
import som.interpreter.nodes.nary.UnaryExpressionNode;
import som.primitives.arrays.ToArgumentsArrayFactory;
import som.primitives.arrays.ToArgumentsArrayNode;
import som.primitives.arrays.ToArgumentsArrayNodeFactory;
import som.vmobjects.SAbstractObject;
import som.vmobjects.SArray;
import som.vmobjects.SInvokable;
Expand All @@ -38,7 +38,7 @@ public final SAbstractObject doSMethod(final SInvokable receiver) {
@NodeChild(value = "argArr", type = ToArgumentsArrayNode.class,
executeWith = {"somArr", "target"})})
@Primitive(selector = "invokeOn:with:", noWrapper = true,
extraChild = ToArgumentsArrayNodeFactory.class)
extraChild = ToArgumentsArrayFactory.class)
public abstract static class InvokeOnPrim extends ExprWithTagsNode
implements PreevaluatedExpression {
@Child private InvokeOnCache callNode = InvokeOnCache.create();
Expand Down
40 changes: 40 additions & 0 deletions src/som/primitives/arrays/ToArgumentsArrayFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package som.primitives.arrays;

import java.util.List;

import com.oracle.truffle.api.dsl.NodeFactory;
import com.oracle.truffle.api.nodes.Node;


/**
* This class is a work around for a JDK 10 javac issue, as discussed here:
* https://markmail.org/thread/v3kqlmtwfsokfaod.
*
* TODO: remove this class, and use normal factory directly
*/
public final class ToArgumentsArrayFactory implements NodeFactory<ToArgumentsArrayNode> {

public static NodeFactory<ToArgumentsArrayNode> getInstance() {
return ToArgumentsArrayNodeFactory.getInstance();
}

@Override
public ToArgumentsArrayNode createNode(final Object... arguments) {
throw new UnsupportedOperationException("Should never be called");
}

@Override
public Class<ToArgumentsArrayNode> getNodeClass() {
throw new UnsupportedOperationException("Should never be called");
}

@Override
public List<List<Class<?>>> getNodeSignatures() {
throw new UnsupportedOperationException("Should never be called");
}

@Override
public List<Class<? extends Node>> getExecutionSignature() {
throw new UnsupportedOperationException("Should never be called");
}
}

0 comments on commit c1c03b9

Please sign in to comment.