/*******************************************************************************
* Copyright (c) 2009-2013 CWI
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* * Jurgen J. Vinju - Jurgen.Vinju@cwi.nl - CWI
* * Tijs van der Storm - Tijs.van.der.Storm@cwi.nl
* * Emilie Balland - (CWI)
* * Anya Helene Bagge - (UiB)
* * Paul Klint - Paul.Klint@cwi.nl - CWI
* * Mark Hills - Mark.Hills@cwi.nl (CWI)
* * Arnold Lankamp - Arnold.Lankamp@cwi.nl
*******************************************************************************/
package org.rascalmpl.interpreter;
import java.io.PrintWriter;
import java.util.Collection;
import java.util.Stack;
import org.rascalmpl.ast.AbstractAST;
import org.rascalmpl.debug.IRascalMonitor;
import org.rascalmpl.interpreter.env.Environment;
import org.rascalmpl.interpreter.env.GlobalEnvironment;
import org.rascalmpl.interpreter.result.Result;
import org.rascalmpl.repl.RascalInterpreterREPL;
import org.rascalmpl.value.IValue;
import org.rascalmpl.value.IValueFactory;
// TODO: this interface needs to be split into an external interface, for clients
// which want to call Rascal from Java, and an internal interface for managing the global
// state of the interpreter between its different components.
public interface IEvaluatorContext extends IRascalMonitor {
/** for error messaging */
public AbstractAST getCurrentAST();
public void setCurrentAST(AbstractAST ast);
public StackTrace getStackTrace();
/** for standard IO */
public PrintWriter getStdOut();
public PrintWriter getStdErr();
/** for "internal use" */
public IEvaluator<Result<IValue>> getEvaluator();
public boolean isInterrupted();
public void interrupt();
public Environment getCurrentEnvt();
public void setCurrentEnvt(Environment environment);
public void pushEnv();
public void pushEnv(String name);
public void unwind(Environment old);
public GlobalEnvironment getHeap();
public Configuration getConfiguration();
public boolean runTests(IRascalMonitor monitor);
public IValueFactory getValueFactory();
public void setAccumulators(Stack<Accumulator> accumulators);
public Stack<Accumulator> getAccumulators();
public Collection<String> completePartialIdentifier(String qualifier, String partialIdentifier);
public RascalInterpreterREPL getREPL();
}