Mercurial > hg > truffle
comparison graal/com.oracle.truffle.api/src/com/oracle/truffle/api/TruffleLanguage.java @ 21557:31fc2fce38f3
Merge.
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 27 May 2015 13:32:18 +0200 |
parents | b1530a6cce8c 3286fb5fea4a |
children | 1c76a5662753 |
comparison
equal
deleted
inserted
replaced
21556:48c1ebd24120 | 21557:31fc2fce38f3 |
---|---|
131 * them. | 131 * them. |
132 */ | 132 */ |
133 public static final class Env { | 133 public static final class Env { |
134 private final TruffleVM vm; | 134 private final TruffleVM vm; |
135 private final TruffleLanguage lang; | 135 private final TruffleLanguage lang; |
136 | 136 private final Reader in; |
137 Env(TruffleVM vm, Constructor<?> langConstructor) { | 137 private final Writer err; |
138 private final Writer out; | |
139 | |
140 Env(TruffleVM vm, Constructor<?> langConstructor, Writer out, Writer err, Reader in) { | |
138 this.vm = vm; | 141 this.vm = vm; |
142 this.in = in; | |
143 this.err = err; | |
144 this.out = out; | |
139 try { | 145 try { |
140 this.lang = (TruffleLanguage) langConstructor.newInstance(this); | 146 this.lang = (TruffleLanguage) langConstructor.newInstance(this); |
141 } catch (Exception ex) { | 147 } catch (Exception ex) { |
142 throw new IllegalStateException("Cannot construct language " + langConstructor.getClass().getName(), ex); | 148 throw new IllegalStateException("Cannot construct language " + langConstructor.getDeclaringClass().getName(), ex); |
143 } | 149 } |
144 } | 150 } |
145 | 151 |
146 /** | 152 /** |
147 * Asks the environment to go through other registered languages and find whether they | 153 * Asks the environment to go through other registered languages and find whether they |
153 * @return object representing the symbol or <code>null</code> | 159 * @return object representing the symbol or <code>null</code> |
154 */ | 160 */ |
155 public Object importSymbol(String globalName) { | 161 public Object importSymbol(String globalName) { |
156 return API.importSymbol(vm, lang, globalName); | 162 return API.importSymbol(vm, lang, globalName); |
157 } | 163 } |
164 | |
165 /** | |
166 * Input associated with this {@link TruffleVM}. | |
167 * | |
168 * @return reader, never <code>null</code> | |
169 */ | |
170 public Reader stdIn() { | |
171 return in; | |
172 } | |
173 | |
174 /** | |
175 * Standard output writer for this {@link TruffleVM}. | |
176 * | |
177 * @return writer, never <code>null</code> | |
178 */ | |
179 public Writer stdOut() { | |
180 return out; | |
181 } | |
182 | |
183 /** | |
184 * Standard error writer for this {@link TruffleVM}. | |
185 * | |
186 * @return writer, never <code>null</code> | |
187 */ | |
188 public Writer stdErr() { | |
189 return err; | |
190 } | |
158 } | 191 } |
159 | 192 |
160 private static final AccessAPI API = new AccessAPI(); | 193 private static final AccessAPI API = new AccessAPI(); |
161 | 194 |
162 private static final class AccessAPI extends Accessor { | 195 private static final class AccessAPI extends Accessor { |
163 | 196 @Override |
164 @Override | 197 protected TruffleLanguage attachEnv(TruffleVM vm, Constructor<?> langClazz, Writer stdOut, Writer stdErr, Reader stdIn) { |
165 protected TruffleLanguage attachEnv(TruffleVM vm, Constructor<?> langClazz) { | 198 Env env = new Env(vm, langClazz, stdOut, stdErr, stdIn); |
166 Env env = new Env(vm, langClazz); | |
167 return env.lang; | 199 return env.lang; |
168 } | 200 } |
169 | 201 |
170 @Override | 202 @Override |
171 public Object importSymbol(TruffleVM vm, TruffleLanguage queryingLang, String globalName) { | 203 public Object importSymbol(TruffleVM vm, TruffleLanguage queryingLang, String globalName) { |