use of org.luaj.vm2.Prototype in project LuaViewSDK by alibaba.
the class GlobalsExtender method doLoad.
/**
* 真正地加载一个库
*
* @param globals
* @param p
*/
public boolean doLoad(final Globals globals, Prototype p) {
boolean isAnyLoaded = false;
if (p != null && p.k != null && p.k.length > 0) {
StringBuffer sb = new StringBuffer();
for (LuaValue name : p.k) {
if (LuaUtil.isString(name)) {
sb.append(name).append(" ");
isAnyLoaded = (doLoad(globals, name.checkjstring()) != null) || isAnyLoaded;
}
}
}
return isAnyLoaded;
}
use of org.luaj.vm2.Prototype in project LuaViewSDK by alibaba.
the class DebugLib method getfuncname.
// Return the name info if found, or null if no useful information could be found.
static NameWhat getfuncname(DebugLib.CallFrame frame) {
if (!frame.f.isclosure())
return new NameWhat(frame.f.classnamestub(), "Java");
Prototype p = frame.f.checkclosure().p;
int pc = frame.pc;
int i = p.code[pc];
/* calling instruction */
LuaString tm;
switch(Lua.GET_OPCODE(i)) {
case Lua.OP_CALL:
case Lua.OP_TAILCALL:
/* get function name */
return getobjname(p, pc, Lua.GETARG_A(i));
case Lua.OP_TFORCALL:
/* for iterator */
return new NameWhat("(for iterator)", "(for iterator");
/* all other instructions can call only through metamethods */
case Lua.OP_SELF:
case Lua.OP_GETTABUP:
case Lua.OP_GETTABLE:
tm = LuaValue.INDEX;
break;
case Lua.OP_SETTABUP:
case Lua.OP_SETTABLE:
tm = LuaValue.NEWINDEX;
break;
case Lua.OP_EQ:
tm = LuaValue.EQ;
break;
case Lua.OP_ADD:
tm = LuaValue.ADD;
break;
case Lua.OP_SUB:
tm = LuaValue.SUB;
break;
case Lua.OP_MUL:
tm = LuaValue.MUL;
break;
case Lua.OP_DIV:
tm = LuaValue.DIV;
break;
case Lua.OP_MOD:
tm = LuaValue.MOD;
break;
case Lua.OP_POW:
tm = LuaValue.POW;
break;
case Lua.OP_UNM:
tm = LuaValue.UNM;
break;
case Lua.OP_LEN:
tm = LuaValue.LEN;
break;
case Lua.OP_LT:
tm = LuaValue.LT;
break;
case Lua.OP_LE:
tm = LuaValue.LE;
break;
case Lua.OP_CONCAT:
tm = LuaValue.CONCAT;
break;
default:
return null;
}
return new NameWhat(tm.tojstring(), "metamethod");
}
use of org.luaj.vm2.Prototype in project LuaViewSDK by alibaba.
the class LexState method parlist.
/* }====================================================================== */
void parlist() {
/* parlist -> [ param { `,' param } ] */
FuncState fs = this.fs;
Prototype f = fs.f;
int nparams = 0;
f.is_vararg = 0;
if (this.t.token != ')') {
/* is `parlist' not empty? */
do {
switch(this.t.token) {
case TK_NAME:
{
/* param . NAME */
this.new_localvar(this.str_checkname());
++nparams;
break;
}
case TK_DOTS:
{
/* param . `...' */
this.next();
f.is_vararg = 1;
break;
}
default:
this.syntaxerror("<name> or " + LUA_QL("...") + " expected");
}
} while ((f.is_vararg == 0) && this.testnext(','));
}
this.adjustlocalvars(nparams);
f.numparams = fs.nactvar;
fs.reserveregs(fs.nactvar);
/* reserve register for parameters */
}
use of org.luaj.vm2.Prototype in project LuaViewSDK by alibaba.
the class LexState method registerlocalvar.
int registerlocalvar(LuaString varname) {
FuncState fs = this.fs;
Prototype f = fs.f;
if (f.locvars == null || fs.nlocvars + 1 > f.locvars.length)
f.locvars = LuaC.realloc(f.locvars, fs.nlocvars * 2 + 1);
f.locvars[fs.nlocvars] = new LocVars(varname, 0, 0);
return fs.nlocvars++;
}
use of org.luaj.vm2.Prototype in project LuaViewSDK by alibaba.
the class FuncState method addk.
int addk(LuaValue v) {
if (this.h == null) {
this.h = new Hashtable();
} else if (this.h.containsKey(v)) {
return ((Integer) h.get(v)).intValue();
}
final int idx = this.nk;
this.h.put(v, new Integer(idx));
final Prototype f = this.f;
if (f.k == null || nk + 1 >= f.k.length)
f.k = realloc(f.k, nk * 2 + 1);
f.k[this.nk++] = v;
return idx;
}
Aggregations