# HG changeset patch # User Christian Humer # Date 1429032213 -7200 # Node ID 9a83732f97ebc116b875c23b21f6741faf48ccf7 # Parent a0d97b639d57364d1c438996211e6cfcdf7d7c0c Truffle-DSL: ensure proper wildcards for generics are filled in; remove unused type system node code generator. diff -r a0d97b639d57 -r 9a83732f97eb graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java Tue Apr 14 19:23:33 2015 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java Tue Apr 14 19:23:33 2015 +0200 @@ -406,7 +406,7 @@ // create specialization private CodeTypeElement createBaseSpecialization() { - CodeTypeElement clazz = createClass(node, null, modifiers(PRIVATE, ABSTRACT, STATIC), specializationTypeName(null), TypeSystemNodeFactory.nodeType(typeSystem)); + CodeTypeElement clazz = createClass(node, null, modifiers(PRIVATE, ABSTRACT, STATIC), specializationTypeName(null), typeSystem.getContext().getType(SpecializationNode.class)); clazz.addOptional(createSpecializationConstructor(clazz, null, null)); clazz.add(new CodeVariableElement(modifiers(PROTECTED, FINAL), nodeType(node), "root")); diff -r a0d97b639d57 -r 9a83732f97eb graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/TypeSystemCodeGenerator.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/TypeSystemCodeGenerator.java Tue Apr 14 19:23:33 2015 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/TypeSystemCodeGenerator.java Tue Apr 14 19:23:33 2015 +0200 @@ -95,7 +95,7 @@ TypeCastData cast = typeSystem.getCast(type); if (cast == null) { - builder.cast(type, content); + builder.cast(ElementUtils.fillInGenericWildcards(type), content); } else { builder.startStaticCall(typeSystem.getTemplateType().asType(), cast.getMethodName()).tree(content).end(); } @@ -116,10 +116,13 @@ return builder.build(); } - public static CodeExecutableElement createExpectMethod(Modifier visibility, TypeSystemData typeSystem, TypeMirror sourceType, TypeMirror expectedType) { + public static CodeExecutableElement createExpectMethod(Modifier visibility, TypeSystemData typeSystem, TypeMirror sourceTypeOriginal, TypeMirror expectedTypeOriginal) { + TypeMirror expectedType = ElementUtils.fillInGenericWildcards(expectedTypeOriginal); + TypeMirror sourceType = ElementUtils.fillInGenericWildcards(sourceTypeOriginal); if (ElementUtils.isObject(expectedType) || ElementUtils.isVoid(expectedType)) { return null; } + CodeExecutableElement method = new CodeExecutableElement(modifiers(STATIC), expectedType, TypeSystemCodeGenerator.expectTypeMethodName(typeSystem, expectedType)); method.setVisibility(visibility); method.addParameter(new CodeVariableElement(sourceType, LOCAL_VALUE)); @@ -209,8 +212,6 @@ public CodeTypeElement create(ProcessorContext context, TypeSystemData typeSystem) { CodeTypeElement clazz = new TypeClassFactory(context, typeSystem).create(); - clazz.add(new TypeSystemNodeFactory(context, typeSystem).create()); - if (typeSystem.getOptions().implicitCastOptimization().isMergeCasts()) { for (TypeMirror type : typeSystem.lookupTargetTypes()) { clazz.add(new ImplicitCastNodeFactory(context, typeSystem, type).create()); diff -r a0d97b639d57 -r 9a83732f97eb graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/TypeSystemNodeFactory.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/TypeSystemNodeFactory.java Tue Apr 14 19:23:33 2015 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,131 +0,0 @@ -/* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package com.oracle.truffle.dsl.processor.generator; - -import static com.oracle.truffle.dsl.processor.java.ElementUtils.*; -import static javax.lang.model.element.Modifier.*; - -import javax.lang.model.element.*; -import javax.lang.model.type.*; -import javax.lang.model.util.*; - -import com.oracle.truffle.api.dsl.internal.*; -import com.oracle.truffle.api.frame.*; -import com.oracle.truffle.api.nodes.*; -import com.oracle.truffle.dsl.processor.*; -import com.oracle.truffle.dsl.processor.java.*; -import com.oracle.truffle.dsl.processor.java.model.*; -import com.oracle.truffle.dsl.processor.model.*; - -public class TypeSystemNodeFactory { - - private final ProcessorContext context; - private final TypeSystemData typeSystem; - private final DSLOptions options; - - public TypeSystemNodeFactory(ProcessorContext context, TypeSystemData typeSystem) { - this.context = context; - this.typeSystem = typeSystem; - this.options = typeSystem.getOptions(); - } - - public static TypeMirror nodeType(TypeSystemData typeSystem) { - return typeSystem.getContext().getType(SpecializationNode.class); - } - - public static String typeName(TypeSystemData typeSystem) { - return getTypeId(typeSystem.getTemplateType().asType()) + "Node"; - } - - public static String acceptAndExecuteName() { - return "acceptAndExecute"; - } - - public static String executeName(TypeMirror type) { - if (type == null) { - return acceptAndExecuteName(); - } else if (ElementUtils.isObject(type)) { - return "executeGeneric"; - } else { - return "execute" + getTypeId(type); - } - } - - public static String voidBoxingExecuteName(TypeMirror type) { - return executeName(type) + "Void"; - } - - public CodeTypeElement create() { - String typeName = typeName(typeSystem); - TypeMirror baseType = context.getType(SpecializationNode.class); - CodeTypeElement clazz = GeneratorUtils.createClass(typeSystem, null, modifiers(PUBLIC, ABSTRACT, STATIC), typeName, baseType); - - for (ExecutableElement constructor : ElementFilter.constructorsIn(ElementUtils.fromTypeMirror(baseType).getEnclosedElements())) { - clazz.add(GeneratorUtils.createSuperConstructor(context, clazz, constructor)); - } - - for (TypeMirror type : typeSystem.getLegacyTypes()) { - clazz.add(createExecuteMethod(type)); - if (GeneratorUtils.isTypeBoxingOptimized(options.voidBoxingOptimization(), type)) { - clazz.add(createVoidBoxingExecuteMethod(type)); - } - } - return clazz; - } - - private Element createVoidBoxingExecuteMethod(TypeMirror type) { - TypeMirror voidType = context.getType(void.class); - String methodName = voidBoxingExecuteName(type); - CodeExecutableElement method = new CodeExecutableElement(modifiers(PROTECTED, FINAL), voidType, methodName); - method.addParameter(new CodeVariableElement(context.getType(Frame.class), "frame")); - - CodeTreeBuilder builder = method.createBuilder(); - builder.startTryBlock(); - builder.startStatement().startCall(executeName(type)).string("frame").end().end(); - builder.end(); - builder.startCatchBlock(context.getType(UnexpectedResultException.class), "e"); - builder.end(); - - return method; - } - - private Element createExecuteMethod(TypeMirror type) { - TypeMirror genericType = context.getType(Object.class); - String methodName = executeName(type); - CodeExecutableElement method = new CodeExecutableElement(modifiers(PUBLIC), type, methodName); - method.addParameter(new CodeVariableElement(context.getType(Frame.class), "frame")); - - if (ElementUtils.isObject(type)) { - method.getModifiers().add(ABSTRACT); - } else { - CodeTreeBuilder builder = method.createBuilder(); - CodeTree executeGeneric = builder.create().startCall(executeName(genericType)).string("frame").end().build(); - if (!ElementUtils.isVoid(type)) { - method.getThrownTypes().add(context.getType(UnexpectedResultException.class)); - } - builder.startReturn().tree(TypeSystemCodeGenerator.expect(typeSystem, type, executeGeneric)).end(); - } - - return method; - } -} diff -r a0d97b639d57 -r 9a83732f97eb graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/TypeSystemParser.java --- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/TypeSystemParser.java Tue Apr 14 19:23:33 2015 +0200 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/TypeSystemParser.java Tue Apr 14 19:23:33 2015 +0200 @@ -88,6 +88,10 @@ } List legacyTypes = ElementUtils.getAnnotationValueList(TypeMirror.class, typeSystem.getTemplateTypeAnnotation(), "value"); + for (int i = 0; i < legacyTypes.size(); i++) { + legacyTypes.set(i, ElementUtils.fillInGenericWildcards(legacyTypes.get(i))); + } + typeSystem.getLegacyTypes().addAll(legacyTypes); verifyTypes(typeSystem); typeSystem.getLegacyTypes().add(context.getType(Object.class));