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) {