Mercurial > hg > truffle
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 } |