src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.match.processor/src/org/graalvm/compiler/core/match/processor/MatchProcessor.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
hotspot Cdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.match.processor/src/org/graalvm/compiler/core/match/processor/MatchProcessor.java
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.match.processor/src/org/graalvm/compiler/core/match/processor/MatchProcessor.java
Print this page
*** 25,40 ****
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
- import java.util.HashMap;
import java.util.HashSet;
- import java.util.LinkedHashMap;
- import java.util.LinkedHashSet;
import java.util.List;
- import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.annotation.processing.AbstractProcessor;
--- 25,36 ----
*** 72,81 ****
--- 68,80 ----
import org.graalvm.compiler.core.match.MatchableNodes;
import org.graalvm.compiler.debug.GraalError;
import org.graalvm.compiler.graph.Position;
import org.graalvm.compiler.nodes.ValueNode;
import org.graalvm.compiler.serviceprovider.ServiceProvider;
+ import org.graalvm.util.Equivalence;
+ import org.graalvm.util.EconomicMap;
+ import org.graalvm.util.EconomicSet;
/**
* Processes classes annotated with {@link MatchRule}. A {@link MatchStatementSet} service is
* generated for each top level class containing at least one such field. These service objects can
* be retrieved as follows:
*** 204,220 ****
if (peek("=").equals("=")) {
next();
name = next();
}
originatingElements.addAll(type.originatingElements);
- requiredPackages.add(type.nodePackage);
} else if (Character.isLowerCase(peek("name").charAt(0))) {
name = next();
type = valueType;
} else {
throw new RuleParseError("Unexpected token \"%s\" when looking for name or node type", peek(null));
}
if (name != null) {
if (!capturedNames.contains(name)) {
capturedNames.add(name);
capturedTypes.add(type);
} else {
--- 203,219 ----
if (peek("=").equals("=")) {
next();
name = next();
}
originatingElements.addAll(type.originatingElements);
} else if (Character.isLowerCase(peek("name").charAt(0))) {
name = next();
type = valueType;
} else {
throw new RuleParseError("Unexpected token \"%s\" when looking for name or node type", peek(null));
}
+ requiredPackages.add(type.nodePackage);
if (name != null) {
if (!capturedNames.contains(name)) {
capturedNames.add(name);
capturedTypes.add(type);
} else {
*** 232,242 ****
}
/**
* Recursively accumulate any required Position declarations.
*/
! void generatePositionDeclarations(Set<String> declarations) {
matchDescriptor.generatePositionDeclarations(declarations);
}
/**
*
--- 231,241 ----
}
/**
* Recursively accumulate any required Position declarations.
*/
! void generatePositionDeclarations(EconomicSet<String> declarations) {
matchDescriptor.generatePositionDeclarations(declarations);
}
/**
*
*** 364,374 ****
}
/**
* The types which are know for purpose of parsing MatchRule expressions.
*/
! Map<String, TypeDescriptor> knownTypes = new HashMap<>();
private TypeDescriptor valueType;
private TypeMirror matchRulesTypeMirror;
--- 363,373 ----
}
/**
* The types which are know for purpose of parsing MatchRule expressions.
*/
! EconomicMap<String, TypeDescriptor> knownTypes = EconomicMap.create(Equivalence.DEFAULT);
private TypeDescriptor valueType;
private TypeMirror matchRulesTypeMirror;
*** 405,415 ****
} else {
this.inputs = new MatchDescriptor[0];
}
}
! public void generatePositionDeclarations(Set<String> declarations) {
if (inputs.length == 0) {
return;
}
declarations.add(generatePositionDeclaration());
for (MatchDescriptor desc : inputs) {
--- 404,414 ----
} else {
this.inputs = new MatchDescriptor[0];
}
}
! public void generatePositionDeclarations(EconomicSet<String> declarations) {
if (inputs.length == 0) {
return;
}
declarations.add(generatePositionDeclaration());
for (MatchDescriptor desc : inputs) {
*** 530,540 ****
out.println("public class " + matchStatementClassName + " implements " + MatchStatementSet.class.getSimpleName() + " {");
out.println();
// Generate declarations for the wrapper class to invoke the code generation methods.
! for (MethodInvokerItem invoker : info.invokers.values()) {
StringBuilder args = new StringBuilder();
StringBuilder types = new StringBuilder();
int count = invoker.fields.size();
int index = 0;
for (VariableElement arg : invoker.fields) {
--- 529,539 ----
out.println("public class " + matchStatementClassName + " implements " + MatchStatementSet.class.getSimpleName() + " {");
out.println();
// Generate declarations for the wrapper class to invoke the code generation methods.
! for (MethodInvokerItem invoker : info.invokers.getValues()) {
StringBuilder args = new StringBuilder();
StringBuilder types = new StringBuilder();
int count = invoker.fields.size();
int index = 0;
for (VariableElement arg : invoker.fields) {
*** 661,678 ****
static class MatchRuleDescriptor {
final TypeElement topDeclaringType;
final List<MatchRuleItem> matchRules = new ArrayList<>();
! private final Set<Element> originatingElements = new HashSet<>();
! public Set<String> positionDeclarations = new LinkedHashSet<>();
/**
* The mapping between elements with MatchRules and the wrapper class used invoke the code
* generation after the match.
*/
! Map<String, MethodInvokerItem> invokers = new LinkedHashMap<>();
/**
* The set of packages which must be imported to refer the classes mention in matchRules.
*/
Set<String> requiredPackages = new HashSet<>();
--- 660,677 ----
static class MatchRuleDescriptor {
final TypeElement topDeclaringType;
final List<MatchRuleItem> matchRules = new ArrayList<>();
! private final EconomicSet<Element> originatingElements = EconomicSet.create(Equivalence.DEFAULT);
! public EconomicSet<String> positionDeclarations = EconomicSet.create(Equivalence.DEFAULT);
/**
* The mapping between elements with MatchRules and the wrapper class used invoke the code
* generation after the match.
*/
! EconomicMap<String, MethodInvokerItem> invokers = EconomicMap.create(Equivalence.DEFAULT);
/**
* The set of packages which must be imported to refer the classes mention in matchRules.
*/
Set<String> requiredPackages = new HashSet<>();
*** 726,736 ****
// Define a TypeDescriptor for the generic node but don't enter it into the nodeTypes
// table since it shouldn't be mentioned in match rules.
TypeMirror valueTypeMirror = processingEnv.getElementUtils().getTypeElement(ValueNode.class.getName()).asType();
valueType = new TypeDescriptor(valueTypeMirror, "Value", ValueNode.class.getSimpleName(), ValueNode.class.getPackage().getName(), new String[0], false, false);
! Map<TypeElement, MatchRuleDescriptor> map = new LinkedHashMap<>();
for (Element element : roundEnv.getElementsAnnotatedWith(MatchRule.class)) {
currentElement = element;
processMatchRule(map, element, findAnnotationMirror(element, matchRuleTypeMirror));
}
--- 725,735 ----
// Define a TypeDescriptor for the generic node but don't enter it into the nodeTypes
// table since it shouldn't be mentioned in match rules.
TypeMirror valueTypeMirror = processingEnv.getElementUtils().getTypeElement(ValueNode.class.getName()).asType();
valueType = new TypeDescriptor(valueTypeMirror, "Value", ValueNode.class.getSimpleName(), ValueNode.class.getPackage().getName(), new String[0], false, false);
! EconomicMap<TypeElement, MatchRuleDescriptor> map = EconomicMap.create(Equivalence.DEFAULT);
for (Element element : roundEnv.getElementsAnnotatedWith(MatchRule.class)) {
currentElement = element;
processMatchRule(map, element, findAnnotationMirror(element, matchRuleTypeMirror));
}
*** 738,748 ****
currentElement = element;
processMatchRule(map, element, findAnnotationMirror(element, matchRulesTypeMirror));
}
currentElement = null;
! for (MatchRuleDescriptor info : map.values()) {
createFiles(info);
}
} catch (Throwable t) {
reportExceptionThrow(currentElement, t);
--- 737,747 ----
currentElement = element;
processMatchRule(map, element, findAnnotationMirror(element, matchRulesTypeMirror));
}
currentElement = null;
! for (MatchRuleDescriptor info : map.getValues()) {
createFiles(info);
}
} catch (Throwable t) {
reportExceptionThrow(currentElement, t);
*** 832,842 ****
}
declareType(nodeClassMirror, shortName, nodeClass, nodePackage, matchable.inputs(), matchable.commutative(), matchable.shareable(), element);
}
! private void processMatchRule(Map<TypeElement, MatchRuleDescriptor> map, Element element, AnnotationMirror mirror) {
if (!processedMatchRule.contains(element)) {
try {
processedMatchRule.add(element);
// The annotation element type should ensure this is true.
--- 831,841 ----
}
declareType(nodeClassMirror, shortName, nodeClass, nodePackage, matchable.inputs(), matchable.commutative(), matchable.shareable(), element);
}
! private void processMatchRule(EconomicMap<TypeElement, MatchRuleDescriptor> map, Element element, AnnotationMirror mirror) {
if (!processedMatchRule.contains(element)) {
try {
processedMatchRule.add(element);
// The annotation element type should ensure this is true.
*** 959,969 ****
}
Element enclosing = method.getEnclosingElement();
String declaringClass = "";
String separator = "";
! Set<Element> originatingElementsList = info.originatingElements;
originatingElementsList.add(method);
while (enclosing != null) {
if (enclosing.getKind() == ElementKind.CLASS || enclosing.getKind() == ElementKind.INTERFACE) {
if (enclosing.getModifiers().contains(Modifier.PRIVATE)) {
errorMessage(method, "MatchRule cannot be declared in a private %s %s", enclosing.getKind().name().toLowerCase(), enclosing);
--- 958,968 ----
}
Element enclosing = method.getEnclosingElement();
String declaringClass = "";
String separator = "";
! EconomicSet<Element> originatingElementsList = info.originatingElements;
originatingElementsList.add(method);
while (enclosing != null) {
if (enclosing.getKind() == ElementKind.CLASS || enclosing.getKind() == ElementKind.INTERFACE) {
if (enclosing.getModifiers().contains(Modifier.PRIVATE)) {
errorMessage(method, "MatchRule cannot be declared in a private %s %s", enclosing.getKind().name().toLowerCase(), enclosing);
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.match.processor/src/org/graalvm/compiler/core/match/processor/MatchProcessor.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File