Improve bytecode generation.
This commit is contained in:
@@ -338,7 +338,7 @@ public class JavaGen {
|
|||||||
// a[2] = a[3] = v[1]
|
// a[2] = a[3] = v[1]
|
||||||
builder.createUpvalues(pc, a+3, c);
|
builder.createUpvalues(pc, a+3, c);
|
||||||
builder.loadVarresult();
|
builder.loadVarresult();
|
||||||
builder.dup();
|
if ( c>=2 ) builder.dup();
|
||||||
builder.arg( 1 );
|
builder.arg( 1 );
|
||||||
builder.dup();
|
builder.dup();
|
||||||
builder.storeLocal(pc, a+2);
|
builder.storeLocal(pc, a+2);
|
||||||
|
|||||||
@@ -201,20 +201,18 @@ public class Slots {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case Lua.OP_CALL: /* A B C R(A), ... ,R(A+C-2):= R(A)(R(A+1), ... ,R(A+B-1)) */
|
case Lua.OP_CALL: /* A B C R(A), ... ,R(A+C-2):= R(A)(R(A+1), ... ,R(A+B-1)) */
|
||||||
s[a] |= BIT_ASSIGN | BIT_REFER;
|
for ( int i=0; i<b; i++ )
|
||||||
for ( int i=1; i<b; i++ )
|
|
||||||
s[a+i] |= BIT_REFER;
|
s[a+i] |= BIT_REFER;
|
||||||
for ( int i=1; i<c-1; i++ )
|
for ( int i=0; i<c-1; i++, a++ )
|
||||||
s[++a] |= BIT_ASSIGN;
|
s[a] |= BIT_ASSIGN;
|
||||||
while ( ++a<m )
|
for ( ; a<m; a++ )
|
||||||
s[a] |= BIT_INVALID;
|
s[a] |= BIT_INVALID;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Lua.OP_TAILCALL: /* A B C return R(A)(R(A+1), ... ,R(A+B-1)) */
|
case Lua.OP_TAILCALL: /* A B C return R(A)(R(A+1), ... ,R(A+B-1)) */
|
||||||
s[a] |= BIT_REFER;
|
for ( int i=1; i<b; i++, a++ )
|
||||||
for ( int i=1; i<b; i++ )
|
s[a] |= BIT_REFER;
|
||||||
s[++a] |= BIT_REFER;
|
for ( ; a<m; a++ )
|
||||||
while ( ++a<m )
|
|
||||||
s[a] |= BIT_INVALID;
|
s[a] |= BIT_INVALID;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -395,7 +393,7 @@ public class Slots {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private int lastAssignBefore(int index, int limit, int j) {
|
private int lastAssignBefore(int index, int limit, int j) {
|
||||||
for ( int i=index-1; i>limit; --i )
|
for ( int i=index; i>limit; --i )
|
||||||
if ( (slots[i][j] & (BIT_ASSIGN | BIT_NIL)) != 0 )
|
if ( (slots[i][j] & (BIT_ASSIGN | BIT_NIL)) != 0 )
|
||||||
return i;
|
return i;
|
||||||
return index;
|
return index;
|
||||||
|
|||||||
Reference in New Issue
Block a user