diff 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
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/TypeSystemParser.java	Mon Dec 29 23:38:50 2014 +0100
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/TypeSystemParser.java	Mon Dec 29 23:38:54 2014 +0100
@@ -32,10 +32,12 @@
 import javax.lang.model.util.*;
 
 import com.oracle.truffle.api.dsl.*;
+import com.oracle.truffle.api.dsl.internal.*;
 import com.oracle.truffle.dsl.processor.generator.*;
 import com.oracle.truffle.dsl.processor.java.*;
 import com.oracle.truffle.dsl.processor.model.*;
 
+@DSLOptions
 public class TypeSystemParser extends AbstractParser<TypeSystemData> {
 
     public static final List<Class<? extends Annotation>> ANNOTATIONS = Arrays.asList(TypeSystem.class, ExpectError.class);
@@ -49,7 +51,13 @@
     protected TypeSystemData parse(Element element, AnnotationMirror mirror) {
         TypeElement templateType = (TypeElement) element;
         AnnotationMirror templateTypeAnnotation = mirror;
-        TypeSystemData typeSystem = new TypeSystemData(context, templateType, templateTypeAnnotation);
+        DSLOptions options = element.getAnnotation(DSLOptions.class);
+        if (options == null) {
+            options = TypeSystemParser.class.getAnnotation(DSLOptions.class);
+        }
+        assert options != null;
+
+        TypeSystemData typeSystem = new TypeSystemData(context, templateType, templateTypeAnnotation, options);
 
         // annotation type on class path!?
         TypeElement annotationTypeElement = processingEnv.getElementUtils().getTypeElement(getAnnotationType().getCanonicalName());
@@ -77,10 +85,15 @@
         if (typeSystem.hasErrors()) {
             return typeSystem;
         }
-
         typeSystem.setGenericType(genericType);
         typeSystem.setVoidType(voidType);
 
+        TypeData booleanType = typeSystem.findTypeData(context.getType(boolean.class));
+        if (booleanType == null) {
+            booleanType = new TypeData(typeSystem, types.size(), null, context.getType(boolean.class), context.getType(Boolean.class));
+        }
+        typeSystem.setBooleanType(booleanType);
+
         verifyExclusiveMethodAnnotation(typeSystem, TypeCast.class, TypeCheck.class);
 
         List<Element> elements = new ArrayList<>(context.getEnvironment().getElementUtils().getAllMembers(templateType));