comparison truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLContext.java @ 22375:78594d342228

Give Truffle languages access to evaluation functions of other languages.
author Jaroslav Tulach <jaroslav.tulach@oracle.com>
date Mon, 16 Nov 2015 15:41:29 +0100
parents 8dddde8b20d4
children a765d165e7ec
comparison
equal deleted inserted replaced
22369:05f812bce8cc 22375:78594d342228
39 * SOFTWARE. 39 * SOFTWARE.
40 */ 40 */
41 package com.oracle.truffle.sl.runtime; 41 package com.oracle.truffle.sl.runtime;
42 42
43 import com.oracle.truffle.api.ExecutionContext; 43 import com.oracle.truffle.api.ExecutionContext;
44 import com.oracle.truffle.api.TruffleLanguage;
44 import com.oracle.truffle.api.dsl.NodeFactory; 45 import com.oracle.truffle.api.dsl.NodeFactory;
45 import com.oracle.truffle.api.frame.FrameDescriptor; 46 import com.oracle.truffle.api.frame.FrameDescriptor;
46 import com.oracle.truffle.api.nodes.NodeInfo; 47 import com.oracle.truffle.api.nodes.NodeInfo;
47 import com.oracle.truffle.api.object.DynamicObject; 48 import com.oracle.truffle.api.object.DynamicObject;
48 import com.oracle.truffle.api.object.Layout; 49 import com.oracle.truffle.api.object.Layout;
52 import com.oracle.truffle.sl.SLLanguage; 53 import com.oracle.truffle.sl.SLLanguage;
53 import com.oracle.truffle.sl.builtins.SLAssertFalseBuiltinFactory; 54 import com.oracle.truffle.sl.builtins.SLAssertFalseBuiltinFactory;
54 import com.oracle.truffle.sl.builtins.SLAssertTrueBuiltinFactory; 55 import com.oracle.truffle.sl.builtins.SLAssertTrueBuiltinFactory;
55 import com.oracle.truffle.sl.builtins.SLBuiltinNode; 56 import com.oracle.truffle.sl.builtins.SLBuiltinNode;
56 import com.oracle.truffle.sl.builtins.SLDefineFunctionBuiltinFactory; 57 import com.oracle.truffle.sl.builtins.SLDefineFunctionBuiltinFactory;
58 import com.oracle.truffle.sl.builtins.SLEvalBuiltinFactory;
57 import com.oracle.truffle.sl.builtins.SLHelloEqualsWorldBuiltinFactory; 59 import com.oracle.truffle.sl.builtins.SLHelloEqualsWorldBuiltinFactory;
58 import com.oracle.truffle.sl.builtins.SLNanoTimeBuiltinFactory; 60 import com.oracle.truffle.sl.builtins.SLNanoTimeBuiltinFactory;
59 import com.oracle.truffle.sl.builtins.SLNewObjectBuiltinFactory; 61 import com.oracle.truffle.sl.builtins.SLNewObjectBuiltinFactory;
60 import com.oracle.truffle.sl.builtins.SLPrintlnBuiltin; 62 import com.oracle.truffle.sl.builtins.SLPrintlnBuiltin;
61 import com.oracle.truffle.sl.builtins.SLPrintlnBuiltinFactory; 63 import com.oracle.truffle.sl.builtins.SLPrintlnBuiltinFactory;
67 import com.oracle.truffle.sl.nodes.local.SLReadArgumentNode; 69 import com.oracle.truffle.sl.nodes.local.SLReadArgumentNode;
68 import com.oracle.truffle.sl.parser.Parser; 70 import com.oracle.truffle.sl.parser.Parser;
69 import com.oracle.truffle.sl.parser.SLNodeFactory; 71 import com.oracle.truffle.sl.parser.SLNodeFactory;
70 72
71 import java.io.BufferedReader; 73 import java.io.BufferedReader;
74 import java.io.IOException;
72 import java.io.PrintWriter; 75 import java.io.PrintWriter;
73 import java.math.BigInteger; 76 import java.math.BigInteger;
74 77
75 /** 78 /**
76 * The run-time state of SL during execution. One context is instantiated before any source code is 79 * The run-time state of SL during execution. One context is instantiated before any source code is
88 private final SLLanguage language; 91 private final SLLanguage language;
89 private final BufferedReader input; 92 private final BufferedReader input;
90 private final PrintWriter output; 93 private final PrintWriter output;
91 private final SLFunctionRegistry functionRegistry; 94 private final SLFunctionRegistry functionRegistry;
92 private final Shape emptyShape; 95 private final Shape emptyShape;
93 96 private final TruffleLanguage.Env env;
94 public SLContext(SLLanguage language, BufferedReader input, PrintWriter output) { 97
95 this(language, input, output, true); 98 public SLContext(SLLanguage language, TruffleLanguage.Env env, BufferedReader input, PrintWriter output) {
99 this(language, env, input, output, true);
96 } 100 }
97 101
98 public SLContext(SLLanguage language) { 102 public SLContext(SLLanguage language) {
99 this(language, null, null, false); 103 this(language, null, null, null, false);
100 } 104 }
101 105
102 private SLContext(SLLanguage language, BufferedReader input, PrintWriter output, boolean installBuiltins) { 106 private SLContext(SLLanguage language, TruffleLanguage.Env env, BufferedReader input, PrintWriter output, boolean installBuiltins) {
103 this.language = language; 107 this.language = language;
104 this.input = input; 108 this.input = input;
105 this.output = output; 109 this.output = output;
110 this.env = env;
106 this.functionRegistry = new SLFunctionRegistry(); 111 this.functionRegistry = new SLFunctionRegistry();
107 installBuiltins(installBuiltins); 112 installBuiltins(installBuiltins);
108 113
109 this.emptyShape = LAYOUT.createShape(new SLObjectType()); 114 this.emptyShape = LAYOUT.createShape(new SLObjectType());
110 } 115 }
148 installBuiltin(SLStackTraceBuiltinFactory.getInstance(), registerRootNodes); 153 installBuiltin(SLStackTraceBuiltinFactory.getInstance(), registerRootNodes);
149 installBuiltin(SLHelloEqualsWorldBuiltinFactory.getInstance(), registerRootNodes); 154 installBuiltin(SLHelloEqualsWorldBuiltinFactory.getInstance(), registerRootNodes);
150 installBuiltin(SLAssertTrueBuiltinFactory.getInstance(), registerRootNodes); 155 installBuiltin(SLAssertTrueBuiltinFactory.getInstance(), registerRootNodes);
151 installBuiltin(SLAssertFalseBuiltinFactory.getInstance(), registerRootNodes); 156 installBuiltin(SLAssertFalseBuiltinFactory.getInstance(), registerRootNodes);
152 installBuiltin(SLNewObjectBuiltinFactory.getInstance(), registerRootNodes); 157 installBuiltin(SLNewObjectBuiltinFactory.getInstance(), registerRootNodes);
158 installBuiltin(SLEvalBuiltinFactory.getInstance(), registerRootNodes);
153 } 159 }
154 160
155 public void installBuiltin(NodeFactory<? extends SLBuiltinNode> factory, boolean registerRootNodes) { 161 public void installBuiltin(NodeFactory<? extends SLBuiltinNode> factory, boolean registerRootNodes) {
156 /* 162 /*
157 * The builtin node factory is a class that is automatically generated by the Truffle DSL. 163 * The builtin node factory is a class that is automatically generated by the Truffle DSL.
225 } else if (a instanceof Number) { 231 } else if (a instanceof Number) {
226 return ((Number) a).longValue(); 232 return ((Number) a).longValue();
227 } 233 }
228 return a; 234 return a;
229 } 235 }
236
237 public Object evalAny(Source source) throws IOException {
238 return env.eval(source);
239 }
230 } 240 }