view core/src/luan/LuanState.java @ 423:1eafb11a150d

remove Luan.repr()
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 01 May 2015 16:30:28 -0600
parents 8fbb961aabd5
children f28320fd671d
line wrap: on
line source

package luan;

import java.util.List;
import java.util.ArrayList;
import luan.impl.LuanCompiler;
import luan.modules.BasicLuan;


public abstract class LuanState implements DeepCloneable<LuanState> {

	final List<StackTraceElement> stackTrace = new ArrayList<StackTraceElement>();

	private LuanTable registry;

	protected LuanState() {
		registry = new LuanTable();
	}

	protected LuanState(LuanState luan) {}

	@Override public void deepenClone(LuanState clone,DeepCloner cloner) {
		clone.registry = cloner.deepClone(registry);
	}

	public abstract LuanTable currentEnvironment();
	public abstract LuanSource currentSource();

	public final LuanTable registry() {
		return registry;
	}

	public static LuanState newInstance() {
		return LuanCompiler.newLuanState();
	}

	public final Object eval(String cmd) throws LuanException {
		return eval(cmd,new LuanTable());
	}

	public final Object eval(String cmd,LuanTable env) throws LuanException {
		LuanFunction fn = BasicLuan.load(this,cmd,"eval",env,true);
		return call(fn);
	}

	public final LuanBit bit(LuanElement el) {
		return new LuanBit(this,el);
	}

	// convenience methods

	private final LuanBit JAVA = bit(LuanElement.JAVA);

	public LuanException exception(Object msg) {
		return JAVA.exception(msg);
	}

	public Object call(LuanFunction fn) throws LuanException {
		return call(fn,null,LuanFunction.NOTHING);
	}

	public Object call(LuanFunction fn,String fnName) throws LuanException {
		return call(fn,fnName,LuanFunction.NOTHING);
	}

	public Object call(LuanFunction fn,Object[] args) throws LuanException {
		return call(fn,null,args);
	}

	public Object call(LuanFunction fn,String fnName,Object[] args) throws LuanException {
		return JAVA.call(fn,fnName,args);
	}

	public LuanFunction checkFunction(Object obj) throws LuanException {
		return JAVA.checkFunction(obj);
	}

	public String toString(Object obj) throws LuanException {
		return JAVA.toString(obj);
	}

	public boolean isLessThan(Object o1,Object o2) throws LuanException {
		return JAVA.isLessThan(o1,o2);
	}
}