Mercurial > hg > truffle
comparison graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/TypeSystemParser.java @ 18761:a665483c3881
Truffle-DSL: new node layout implementation.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Mon, 29 Dec 2014 23:38:54 +0100 |
parents | 58eb9bbb60c4 |
children | 3ea386a1036f |
comparison
equal
deleted
inserted
replaced
18760:6fa3999631d8 | 18761:a665483c3881 |
---|---|
30 import javax.lang.model.element.*; | 30 import javax.lang.model.element.*; |
31 import javax.lang.model.type.*; | 31 import javax.lang.model.type.*; |
32 import javax.lang.model.util.*; | 32 import javax.lang.model.util.*; |
33 | 33 |
34 import com.oracle.truffle.api.dsl.*; | 34 import com.oracle.truffle.api.dsl.*; |
35 import com.oracle.truffle.api.dsl.internal.*; | |
35 import com.oracle.truffle.dsl.processor.generator.*; | 36 import com.oracle.truffle.dsl.processor.generator.*; |
36 import com.oracle.truffle.dsl.processor.java.*; | 37 import com.oracle.truffle.dsl.processor.java.*; |
37 import com.oracle.truffle.dsl.processor.model.*; | 38 import com.oracle.truffle.dsl.processor.model.*; |
38 | 39 |
40 @DSLOptions | |
39 public class TypeSystemParser extends AbstractParser<TypeSystemData> { | 41 public class TypeSystemParser extends AbstractParser<TypeSystemData> { |
40 | 42 |
41 public static final List<Class<? extends Annotation>> ANNOTATIONS = Arrays.asList(TypeSystem.class, ExpectError.class); | 43 public static final List<Class<? extends Annotation>> ANNOTATIONS = Arrays.asList(TypeSystem.class, ExpectError.class); |
42 | 44 |
43 @Override | 45 @Override |
47 | 49 |
48 @Override | 50 @Override |
49 protected TypeSystemData parse(Element element, AnnotationMirror mirror) { | 51 protected TypeSystemData parse(Element element, AnnotationMirror mirror) { |
50 TypeElement templateType = (TypeElement) element; | 52 TypeElement templateType = (TypeElement) element; |
51 AnnotationMirror templateTypeAnnotation = mirror; | 53 AnnotationMirror templateTypeAnnotation = mirror; |
52 TypeSystemData typeSystem = new TypeSystemData(context, templateType, templateTypeAnnotation); | 54 DSLOptions options = element.getAnnotation(DSLOptions.class); |
55 if (options == null) { | |
56 options = TypeSystemParser.class.getAnnotation(DSLOptions.class); | |
57 } | |
58 assert options != null; | |
59 | |
60 TypeSystemData typeSystem = new TypeSystemData(context, templateType, templateTypeAnnotation, options); | |
53 | 61 |
54 // annotation type on class path!? | 62 // annotation type on class path!? |
55 TypeElement annotationTypeElement = processingEnv.getElementUtils().getTypeElement(getAnnotationType().getCanonicalName()); | 63 TypeElement annotationTypeElement = processingEnv.getElementUtils().getTypeElement(getAnnotationType().getCanonicalName()); |
56 if (annotationTypeElement == null) { | 64 if (annotationTypeElement == null) { |
57 typeSystem.addError("Required class %s is not on the classpath.", getAnnotationType().getName()); | 65 typeSystem.addError("Required class %s is not on the classpath.", getAnnotationType().getName()); |
75 | 83 |
76 typeSystem.setTypes(types); | 84 typeSystem.setTypes(types); |
77 if (typeSystem.hasErrors()) { | 85 if (typeSystem.hasErrors()) { |
78 return typeSystem; | 86 return typeSystem; |
79 } | 87 } |
80 | |
81 typeSystem.setGenericType(genericType); | 88 typeSystem.setGenericType(genericType); |
82 typeSystem.setVoidType(voidType); | 89 typeSystem.setVoidType(voidType); |
90 | |
91 TypeData booleanType = typeSystem.findTypeData(context.getType(boolean.class)); | |
92 if (booleanType == null) { | |
93 booleanType = new TypeData(typeSystem, types.size(), null, context.getType(boolean.class), context.getType(Boolean.class)); | |
94 } | |
95 typeSystem.setBooleanType(booleanType); | |
83 | 96 |
84 verifyExclusiveMethodAnnotation(typeSystem, TypeCast.class, TypeCheck.class); | 97 verifyExclusiveMethodAnnotation(typeSystem, TypeCast.class, TypeCheck.class); |
85 | 98 |
86 List<Element> elements = new ArrayList<>(context.getEnvironment().getElementUtils().getAllMembers(templateType)); | 99 List<Element> elements = new ArrayList<>(context.getEnvironment().getElementUtils().getAllMembers(templateType)); |
87 List<ImplicitCastData> implicitCasts = new ImplicitCastParser(context, typeSystem).parse(elements); | 100 List<ImplicitCastData> implicitCasts = new ImplicitCastParser(context, typeSystem).parse(elements); |