comparison graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/ExecutableTypeMethodParser.java @ 16820:0370880ac9ce

Truffle-DSL: better caching for type checks.
author Christian Humer <christian.humer@gmail.com>
date Wed, 13 Aug 2014 18:06:26 +0200
parents 23415229349b
children 2db61eddcb97
comparison
equal deleted inserted replaced
16819:8d374faacb7e 16820:0370880ac9ce
45 MethodSpec spec = createDefaultMethodSpec(method, mirror, false, null); 45 MethodSpec spec = createDefaultMethodSpec(method, mirror, false, null);
46 List<ParameterSpec> requiredSpecs = new ArrayList<>(spec.getRequired()); 46 List<ParameterSpec> requiredSpecs = new ArrayList<>(spec.getRequired());
47 spec.getRequired().clear(); 47 spec.getRequired().clear();
48 48
49 List<TypeMirror> allowedTypes = getNode().getTypeSystem().getPrimitiveTypeMirrors(); 49 List<TypeMirror> allowedTypes = getNode().getTypeSystem().getPrimitiveTypeMirrors();
50 Set<String> allowedIdentifiers = getNode().getTypeSystem().getTypeIdentifiers();
50 for (ParameterSpec originalSpec : requiredSpecs) { 51 for (ParameterSpec originalSpec : requiredSpecs) {
51 spec.addRequired(new ParameterSpec(originalSpec, allowedTypes)); 52 spec.addRequired(new ParameterSpec(originalSpec, allowedTypes, allowedIdentifiers));
52 } 53 }
53 spec.setIgnoreAdditionalSpecifications(true); 54 spec.setIgnoreAdditionalSpecifications(true);
54 spec.setIgnoreAdditionalParameters(true); 55 spec.setIgnoreAdditionalParameters(true);
55 spec.setVariableRequiredParameters(true); 56 spec.setVariableRequiredParameters(true);
56 // varargs 57 // varargs
57 ParameterSpec otherParameters = new ParameterSpec("other", allowedTypes); 58 ParameterSpec otherParameters = new ParameterSpec("other", allowedTypes, allowedIdentifiers);
58 otherParameters.setSignature(true); 59 otherParameters.setSignature(true);
59 spec.addRequired(otherParameters); 60 spec.addRequired(otherParameters);
60 return spec; 61 return spec;
62 }
63
64 @Override
65 protected List<TypeMirror> nodeTypeMirrors(NodeData nodeData) {
66 return getNode().getTypeSystem().getPrimitiveTypeMirrors();
67 }
68
69 @Override
70 protected Set<String> nodeTypeIdentifiers(NodeData nodeData) {
71 return getNode().getTypeSystem().getTypeIdentifiers();
61 } 72 }
62 73
63 @Override 74 @Override
64 public final boolean isParsable(ExecutableElement method) { 75 public final boolean isParsable(ExecutableElement method) {
65 if (method.getModifiers().contains(Modifier.STATIC)) { 76 if (method.getModifiers().contains(Modifier.STATIC)) {
66 return false; 77 return false;
67 } else if (method.getModifiers().contains(Modifier.NATIVE)) { 78 } else if (method.getModifiers().contains(Modifier.NATIVE)) {
68 return false; 79 return false;
69 } 80 }
70 return method.getSimpleName().toString().startsWith("execute"); 81 return method.getSimpleName().toString().startsWith("execute");
71 }
72
73 @Override
74 protected List<TypeMirror> nodeTypeMirrors(NodeData nodeData) {
75 List<TypeMirror> types = new ArrayList<>(getNode().getTypeSystem().getPrimitiveTypeMirrors());
76 types.add(getNode().getTypeSystem().getVoidType().getPrimitiveType());
77 return types;
78 } 82 }
79 83
80 @Override 84 @Override
81 public ExecutableTypeData create(TemplateMethod method, boolean invalid) { 85 public ExecutableTypeData create(TemplateMethod method, boolean invalid) {
82 TypeData resolvedType = method.getReturnType().getTypeSystemType(); 86 TypeData resolvedType = method.getReturnType().getTypeSystemType();