Mercurial > hg > truffle
diff truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLContext.java @ 22046:e7c2d36daf72
TruffleLanguage.parse method to convert a source to CallTarget. Basic caching to make sure the code is shared among tenants in one JVM.
author | Jaroslav Tulach <jaroslav.tulach@oracle.com> |
---|---|
date | Thu, 30 Jul 2015 17:36:34 +0200 |
parents | 5bc7f7b867ab |
children | 503529c65456 |
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLContext.java Thu Jul 30 17:16:59 2015 +0200 +++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLContext.java Thu Jul 30 17:36:34 2015 +0200 @@ -74,11 +74,19 @@ private final Shape emptyShape; public SLContext(SLLanguage language, BufferedReader input, PrintWriter output) { + this(language, input, output, true); + } + + public SLContext(SLLanguage language) { + this(language, null, null, false); + } + + private SLContext(SLLanguage language, BufferedReader input, PrintWriter output, boolean installBuiltins) { this.language = language; this.input = input; this.output = output; this.functionRegistry = new SLFunctionRegistry(); - installBuiltins(); + installBuiltins(installBuiltins); this.emptyShape = LAYOUT.createShape(new ObjectType()); } @@ -114,19 +122,19 @@ * Adds all builtin functions to the {@link SLFunctionRegistry}. This method lists all * {@link SLBuiltinNode builtin implementation classes}. */ - private void installBuiltins() { - installBuiltin(SLReadlnBuiltinFactory.getInstance()); - installBuiltin(SLPrintlnBuiltinFactory.getInstance()); - installBuiltin(SLNanoTimeBuiltinFactory.getInstance()); - installBuiltin(SLDefineFunctionBuiltinFactory.getInstance()); - installBuiltin(SLStackTraceBuiltinFactory.getInstance()); - installBuiltin(SLHelloEqualsWorldBuiltinFactory.getInstance()); - installBuiltin(SLAssertTrueBuiltinFactory.getInstance()); - installBuiltin(SLAssertFalseBuiltinFactory.getInstance()); - installBuiltin(SLNewObjectBuiltinFactory.getInstance()); + private void installBuiltins(boolean registerRootNodes) { + installBuiltin(SLReadlnBuiltinFactory.getInstance(), registerRootNodes); + installBuiltin(SLPrintlnBuiltinFactory.getInstance(), registerRootNodes); + installBuiltin(SLNanoTimeBuiltinFactory.getInstance(), registerRootNodes); + installBuiltin(SLDefineFunctionBuiltinFactory.getInstance(), registerRootNodes); + installBuiltin(SLStackTraceBuiltinFactory.getInstance(), registerRootNodes); + installBuiltin(SLHelloEqualsWorldBuiltinFactory.getInstance(), registerRootNodes); + installBuiltin(SLAssertTrueBuiltinFactory.getInstance(), registerRootNodes); + installBuiltin(SLAssertFalseBuiltinFactory.getInstance(), registerRootNodes); + installBuiltin(SLNewObjectBuiltinFactory.getInstance(), registerRootNodes); } - public void installBuiltin(NodeFactory<? extends SLBuiltinNode> factory) { + public void installBuiltin(NodeFactory<? extends SLBuiltinNode> factory, boolean registerRootNodes) { /* * The builtin node factory is a class that is automatically generated by the Truffle DSL. * The signature returned by the factory reflects the signature of the @Specialization @@ -149,8 +157,13 @@ /* Wrap the builtin in a RootNode. Truffle requires all AST to start with a RootNode. */ SLRootNode rootNode = new SLRootNode(this, new FrameDescriptor(), builtinBodyNode, name); - /* Register the builtin function in our function registry. */ - getFunctionRegistry().register(name, rootNode); + if (registerRootNodes) { + /* Register the builtin function in our function registry. */ + getFunctionRegistry().register(name, rootNode); + } else { + // make sure the function is known + getFunctionRegistry().lookup(name); + } } public static NodeInfo lookupNodeInfo(Class<?> clazz) {