Mercurial > hg > graal-compiler
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(); |