diff graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/ExecutableTypeMethodParser.java @ 18776:c0fb70634640

Truffle-DSL: support for frame types Frame, MaterializedFrame. Added validation for frame type consistency. Some refactorings along the way.
author Christian Humer <christian.humer@gmail.com>
date Mon, 05 Jan 2015 01:31:08 +0100
parents a069a87b9a02
children 906367e494ca
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/ExecutableTypeMethodParser.java	Mon Jan 05 01:31:08 2015 +0100
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/ExecutableTypeMethodParser.java	Mon Jan 05 01:31:08 2015 +0100
@@ -35,8 +35,11 @@
 
 public class ExecutableTypeMethodParser extends NodeMethodParser<ExecutableTypeData> {
 
-    public ExecutableTypeMethodParser(ProcessorContext context, NodeData node) {
+    private final List<TypeMirror> frameTypes;
+
+    public ExecutableTypeMethodParser(ProcessorContext context, NodeData node, List<TypeMirror> frameTypes) {
         super(context, node);
+        this.frameTypes = frameTypes;
         setParseNullOnError(false);
         getParser().setEmitErrors(false);
         getParser().setUseVarArgs(true);
@@ -48,8 +51,9 @@
         List<ParameterSpec> requiredSpecs = new ArrayList<>(spec.getRequired());
         spec.getRequired().clear();
 
-        List<TypeMirror> allowedTypes = getNode().getTypeSystem().getPrimitiveTypeMirrors();
-        Set<String> allowedIdentifiers = getNode().getTypeSystem().getTypeIdentifiers();
+        TypeSystemData typeSystem = getNode().getTypeSystem();
+        List<TypeMirror> allowedTypes = typeSystem.getPrimitiveTypeMirrors();
+        Set<String> allowedIdentifiers = typeSystem.getTypeIdentifiers();
         for (ParameterSpec originalSpec : requiredSpecs) {
             spec.addRequired(new ParameterSpec(originalSpec, allowedTypes, allowedIdentifiers));
         }
@@ -64,6 +68,11 @@
     }
 
     @Override
+    protected void addDefaultFrame(MethodSpec methodSpec) {
+        methodSpec.addOptional(new ParameterSpec("frame", frameTypes));
+    }
+
+    @Override
     protected List<TypeMirror> nodeTypeMirrors(NodeData nodeData) {
         return getNode().getTypeSystem().getPrimitiveTypeMirrors();
     }