Print any code #10

Closed
Enyby wants to merge 4 commits from patch-3 into master
3 changed files with 142 additions and 118 deletions

View File

@@ -1,8 +1,8 @@
bin bin/
target target/
build build/
lib lib/
jit jit/
*.ser *.ser
*.gz *.gz
*.jar *.jar

View File

@@ -1,21 +1,18 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> # This is a fork!
<html> <div style="border: 1px dotted red; margin: 1.em 0.5em; font-weight: bold; color: red;">
This repository has been forked from the original CVS sources of Luaj.
The commit history has been converted to make sure that the original work of
James Roseborough and Ian Farmer is not lost.
Unfortunately, I was not able to contact either James or Ian to hand over
ownership of the Github organization/repo as I have originally intended to.
The community however seems interested enough to continue work on the original
sources and therefore I have decided to make sure that any useful pull requests
that may add some value to the original code base shall be merged in from now
on.<br>
-- Benjamin P. Jung, Jan. 26th 2018
</div>
<head> <h1>Getting Started with LuaJ</h1>
<title>Getting Started with LuaJ</title>
<link rel="stylesheet" type="text/css" href="http://www.lua.org/lua.css">
<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=iso-8859-1">
</head>
<body>
<hr>
<h1>
<a href="README.html"><img src="http://sourceforge.net/dbimage.php?id=196139" alt="" border="0"></a>
Getting Started with LuaJ
</h1>
James Roseborough, Ian Farmer, Version 3.0.1 James Roseborough, Ian Farmer, Version 3.0.1
<p> <p>
<small> <small>

View File

@@ -128,6 +128,10 @@ public class Print extends Lua {
} }
static void printValue( PrintStream ps, LuaValue v ) { static void printValue( PrintStream ps, LuaValue v ) {
if (v == null) {
ps.print("null");
return;
}
switch ( v.type() ) { switch ( v.type() ) {
case LuaValue.TSTRING: printString( ps, (LuaString) v ); break; case LuaValue.TSTRING: printString( ps, (LuaString) v ); break;
default: ps.print( v.tojstring() ); default: ps.print( v.tojstring() );
@@ -136,7 +140,7 @@ public class Print extends Lua {
} }
static void printConstant(PrintStream ps, Prototype f, int i) { static void printConstant(PrintStream ps, Prototype f, int i) {
printValue( ps, f.k[i] ); printValue( ps, i < f.k.length ? f.k[i] : LuaValue.valueOf("UNKNOWN_CONST_" + i) );
} }
static void printUpvalue(PrintStream ps, Upvaldesc u) { static void printUpvalue(PrintStream ps, Upvaldesc u) {
@@ -152,7 +156,7 @@ public class Print extends Lua {
int[] code = f.code; int[] code = f.code;
int pc, n = code.length; int pc, n = code.length;
for (pc = 0; pc < n; pc++) { for (pc = 0; pc < n; pc++) {
printOpCode(f, pc); pc = printOpCode(f, pc);
ps.println(); ps.println();
} }
} }
@@ -161,9 +165,10 @@ public class Print extends Lua {
* Print an opcode in a prototype * Print an opcode in a prototype
* @param f the {@link Prototype} * @param f the {@link Prototype}
* @param pc the program counter to look up and print * @param pc the program counter to look up and print
* @return pc same as above or changed
*/ */
public static void printOpCode(Prototype f, int pc) { public static int printOpCode(Prototype f, int pc) {
printOpCode(ps,f,pc); return printOpCode(ps,f,pc);
} }
/** /**
@@ -171,8 +176,9 @@ public class Print extends Lua {
* @param ps the {@link PrintStream} to print to * @param ps the {@link PrintStream} to print to
* @param f the {@link Prototype} * @param f the {@link Prototype}
* @param pc the program counter to look up and print * @param pc the program counter to look up and print
* @return pc same as above or changed
*/ */
public static void printOpCode(PrintStream ps, Prototype f, int pc) { public static int printOpCode(PrintStream ps, Prototype f, int pc) {
int[] code = f.code; int[] code = f.code;
int i = code[pc]; int i = code[pc];
int o = GET_OPCODE(i); int o = GET_OPCODE(i);
@@ -187,80 +193,67 @@ public class Print extends Lua {
ps.print("[" + line + "] "); ps.print("[" + line + "] ");
else else
ps.print("[-] "); ps.print("[-] ");
ps.print(OPNAMES[o] + " "); if (o >= OPNAMES.length - 1) {
switch (getOpMode(o)) { ps.print("UNKNOWN_OP_" + o + " ");
case iABC: } else {
ps.print( a ); ps.print(OPNAMES[o] + " ");
if (getBMode(o) != OpArgN) switch (getOpMode(o)) {
ps.print(" "+(ISK(b) ? (-1 - INDEXK(b)) : b)); case iABC:
if (getCMode(o) != OpArgN) ps.print( a );
ps.print(" "+(ISK(c) ? (-1 - INDEXK(c)) : c)); if (getBMode(o) != OpArgN)
break; ps.print(" "+(ISK(b) ? (-1 - INDEXK(b)) : b));
case iABx: if (getCMode(o) != OpArgN)
if (getBMode(o) == OpArgK) { ps.print(" "+(ISK(c) ? (-1 - INDEXK(c)) : c));
ps.print(a + " " + (-1 - bx)); break;
} else { case iABx:
ps.print(a + " " + (bx)); if (getBMode(o) == OpArgK) {
ps.print(a + " " + (-1 - bx));
} else {
ps.print(a + " " + (bx));
}
break;
case iAsBx:
if (o == OP_JMP)
ps.print( sbx );
else
ps.print(a + " " + sbx);
break;
} }
break; switch (o) {
case iAsBx: case OP_LOADK:
if (o == OP_JMP)
ps.print( sbx );
else
ps.print(a + " " + sbx);
break;
}
switch (o) {
case OP_LOADK:
ps.print(" ; ");
printConstant(ps, f, bx);
break;
case OP_GETUPVAL:
case OP_SETUPVAL:
ps.print(" ; ");
printUpvalue(ps, f.upvalues[b]);
break;
case OP_GETTABUP:
ps.print(" ; ");
printUpvalue(ps, f.upvalues[b]);
ps.print(" ");
if (ISK(c))
printConstant(ps, f, INDEXK(c));
else
ps.print("-");
break;
case OP_SETTABUP:
ps.print(" ; ");
printUpvalue(ps, f.upvalues[a]);
ps.print(" ");
if (ISK(b))
printConstant(ps, f, INDEXK(b));
else
ps.print("-");
ps.print(" ");
if (ISK(c))
printConstant(ps, f, INDEXK(c));
else
ps.print("-");
break;
case OP_GETTABLE:
case OP_SELF:
if (ISK(c)) {
ps.print(" ; "); ps.print(" ; ");
printConstant(ps, f, INDEXK(c)); printConstant(ps, f, bx);
} break;
break; case OP_GETUPVAL:
case OP_SETTABLE: case OP_SETUPVAL:
case OP_ADD:
case OP_SUB:
case OP_MUL:
case OP_DIV:
case OP_POW:
case OP_EQ:
case OP_LT:
case OP_LE:
if (ISK(b) || ISK(c)) {
ps.print(" ; "); ps.print(" ; ");
if (b < f.upvalues.length) {
printUpvalue(ps, f.upvalues[b]);
} else {
ps.print("UNKNOWN_UPVALUE_" + b);
}
break;
case OP_GETTABUP:
ps.print(" ; ");
if (b < f.upvalues.length) {
printUpvalue(ps, f.upvalues[b]);
} else {
ps.print("UNKNOWN_UPVALUE_" + b);
}
ps.print(" ");
if (ISK(c))
printConstant(ps, f, INDEXK(c));
else
ps.print("-");
break;
case OP_SETTABUP:
ps.print(" ; ");
if (a < f.upvalues.length) {
printUpvalue(ps, f.upvalues[a]);
} else {
ps.print("UNKNOWN_UPVALUE_" + a);
}
ps.print(" ");
if (ISK(b)) if (ISK(b))
printConstant(ps, f, INDEXK(b)); printConstant(ps, f, INDEXK(b));
else else
@@ -270,28 +263,62 @@ public class Print extends Lua {
printConstant(ps, f, INDEXK(c)); printConstant(ps, f, INDEXK(c));
else else
ps.print("-"); ps.print("-");
break;
case OP_GETTABLE:
case OP_SELF:
if (ISK(c)) {
ps.print(" ; ");
printConstant(ps, f, INDEXK(c));
}
break;
case OP_SETTABLE:
case OP_ADD:
case OP_SUB:
case OP_MUL:
case OP_DIV:
case OP_POW:
case OP_EQ:
case OP_LT:
case OP_LE:
if (ISK(b) || ISK(c)) {
ps.print(" ; ");
if (ISK(b))
printConstant(ps, f, INDEXK(b));
else
ps.print("-");
ps.print(" ");
if (ISK(c))
printConstant(ps, f, INDEXK(c));
else
ps.print("-");
}
break;
case OP_JMP:
case OP_FORLOOP:
case OP_FORPREP:
ps.print(" ; to " + (sbx + pc + 2));
break;
case OP_CLOSURE:
if (bx < f.p.length) {
ps.print(" ; " + f.p[bx].getClass().getName());
} else {
ps.print(" ; UNKNOWN_PROTYPE_" + bx);
}
break;
case OP_SETLIST:
if (c == 0)
ps.print(" ; " + ((int) code[++pc]) + " (stored in the next OP)");
else
ps.print(" ; " + ((int) c));
break;
case OP_VARARG:
ps.print( " ; is_vararg="+ f.is_vararg );
break;
default:
break;
} }
break;
case OP_JMP:
case OP_FORLOOP:
case OP_FORPREP:
ps.print(" ; to " + (sbx + pc + 2));
break;
case OP_CLOSURE:
ps.print(" ; " + f.p[bx].getClass().getName());
break;
case OP_SETLIST:
if (c == 0)
ps.print(" ; " + ((int) code[++pc]));
else
ps.print(" ; " + ((int) c));
break;
case OP_VARARG:
ps.print( " ; is_vararg="+ f.is_vararg );
break;
default:
break;
} }
return pc;
} }
private static int getline(Prototype f, int pc) { private static int getline(Prototype f, int pc) {