Print any code #10
10
.cvsignore → .gitignore
vendored
10
.cvsignore → .gitignore
vendored
@@ -1,8 +1,8 @@
|
|||||||
bin
|
bin/
|
||||||
target
|
target/
|
||||||
build
|
build/
|
||||||
lib
|
lib/
|
||||||
jit
|
jit/
|
||||||
*.ser
|
*.ser
|
||||||
*.gz
|
*.gz
|
||||||
*.jar
|
*.jar
|
||||||
@@ -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>
|
||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user