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);