Mercurial > hg > graal-jvmci-8
diff graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/ExecutableTypeMethodParser.java @ 9217:61ba6fc21ba4
Sourcegen can now generate execute methods of signature execute(frame, evaluatedValue).
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Mon, 15 Apr 2013 18:50:19 +0200 |
parents | 8a1115c92271 |
children | 97ad6d3e7557 |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/ExecutableTypeMethodParser.java Mon Apr 08 18:28:41 2013 +0200 +++ b/graal/com.oracle.truffle.codegen.processor/src/com/oracle/truffle/codegen/processor/node/ExecutableTypeMethodParser.java Mon Apr 15 18:50:19 2013 +0200 @@ -30,6 +30,7 @@ import com.oracle.truffle.codegen.processor.*; import com.oracle.truffle.codegen.processor.template.*; +import com.oracle.truffle.codegen.processor.template.ParameterSpec.*; import com.oracle.truffle.codegen.processor.typesystem.*; public class ExecutableTypeMethodParser extends NodeMethodParser<ExecutableTypeData> { @@ -42,27 +43,37 @@ @Override public MethodSpec createSpecification(ExecutableElement method, AnnotationMirror mirror) { - - List<TypeMirror> types = new ArrayList<>(); - types.addAll(getNode().getTypeSystem().getPrimitiveTypeMirrors()); - types.add(getContext().getType(void.class)); - - ParameterSpec returnTypeSpec = new ParameterSpec("executedValue", types); - returnTypeSpec.setSignature(true); - MethodSpec spec = new MethodSpec(returnTypeSpec); - spec.addOptional(new ParameterSpec("frame", getContext().getTruffleTypes().getFrame())); + MethodSpec spec = createDefaultMethodSpec(method, mirror, false, null); + spec.setVariableRequiredArguments(true); + ParameterSpec other = new ParameterSpec("other", nodeTypeMirrors(getNode())); + other.setCardinality(Cardinality.MULTIPLE); + other.setSignature(true); + other.setIndexed(true); + spec.addRequired(other); return spec; } @Override public final boolean isParsable(ExecutableElement method) { - boolean parsable = method.getSimpleName().toString().startsWith("execute"); - return parsable; + if (method.getModifiers().contains(Modifier.STATIC)) { + return false; + } else if (method.getModifiers().contains(Modifier.NATIVE)) { + return false; + } + return method.getSimpleName().toString().startsWith("execute"); + } + + @Override + protected List<TypeMirror> nodeTypeMirrors(NodeData nodeData) { + // executable types not yet available + List<TypeMirror> types = new ArrayList<>(nodeData.getTypeSystem().getPrimitiveTypeMirrors()); + types.add(nodeData.getTypeSystem().getVoidType().getPrimitiveType()); + return types; } @Override public ExecutableTypeData create(TemplateMethod method) { - TypeData resolvedType = method.getReturnType().getActualTypeData(getNode().getTypeSystem()); + TypeData resolvedType = method.getReturnType().getTypeSystemType(); return new ExecutableTypeData(method, getNode().getTypeSystem(), resolvedType); }