package se.krka.kahlua.scriptengine;
import se.krka.kahlua.vm.LuaClosure;
import java.io.IOException;
import se.krka.kahlua.luaj.compiler.LuaCompiler;
import se.krka.kahlua.vm.LuaState;
import java.io.Reader;
import javax.script.Bindings;
import javax.script.ScriptContext;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptException;
import javax.script.ScriptEngine;
public class KahluaEngine implements ScriptEngine {
private final LuaState state;
private final ScriptEngineFactory factory;
public KahluaEngine(ScriptEngineFactory factory) {
this.factory = factory;
state = new LuaState();
}
@Override
public Bindings createBindings() {
// TODO Auto-generated method stub
return null;
}
@Override
public Object eval(String script) throws ScriptException {
try {
LuaClosure closure = LuaCompiler.loadstring(script, "stdin", state.getEnvironment());
return state.call(closure, null);
} catch (IOException e) {
throw new ScriptException(e);
} catch (RuntimeException e) {
throw new ScriptException(e);
}
}
@Override
public Object eval(Reader reader) throws ScriptException {
try {
LuaClosure closure = LuaCompiler.loadis(reader, "stdin", state.getEnvironment());
return state.call(closure, null);
} catch (IOException e) {
throw new ScriptException(e);
} catch (RuntimeException e) {
throw new ScriptException(e);
}
}
@Override
public Object eval(String script, ScriptContext context) throws ScriptException {
return eval(script);
}
@Override
public Object eval(Reader reader, ScriptContext context)
throws ScriptException {
return eval(reader);
}
@Override
public Object eval(String script, Bindings n) throws ScriptException {
return eval(script);
}
@Override
public Object eval(Reader reader, Bindings n) throws ScriptException {
return eval(reader);
}
@Override
public Object get(String key) {
return state.tableGet(state.getEnvironment(), key);
}
@Override
public void put(String key, Object value) {
state.tableSet(state.getEnvironment(), key, value);
}
@Override
public Bindings getBindings(int scope) {
return null;
}
@Override
public ScriptContext getContext() {
return null;
}
@Override
public ScriptEngineFactory getFactory() {
return factory;
}
@Override
public void setBindings(Bindings bindings, int scope) {
}
@Override
public void setContext(ScriptContext context) {
}
}