- Fixed bug in script code of LoL
- Cleanup svn-id: r35905
This commit is contained in:
parent
ec5b64147d
commit
c003d62429
2 changed files with 13 additions and 8 deletions
|
@ -152,9 +152,9 @@ void EMCInterpreter::unload(EMCData *data) {
|
||||||
void EMCInterpreter::init(EMCState *scriptStat, const EMCData *data) {
|
void EMCInterpreter::init(EMCState *scriptStat, const EMCData *data) {
|
||||||
scriptStat->dataPtr = data;
|
scriptStat->dataPtr = data;
|
||||||
scriptStat->ip = 0;
|
scriptStat->ip = 0;
|
||||||
scriptStat->stack[60] = 0;
|
scriptStat->stack[EMCState::kStackLastEntry] = 0;
|
||||||
scriptStat->bp = 62;
|
scriptStat->bp = EMCState::kStackSize+1;
|
||||||
scriptStat->sp = 60;
|
scriptStat->sp = EMCState::kStackLastEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EMCInterpreter::start(EMCState *script, int function) {
|
bool EMCInterpreter::start(EMCState *script, int function) {
|
||||||
|
@ -346,7 +346,7 @@ void EMCInterpreter::cmd_popRetOrPos(EMCState* script) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
if (script->sp >= 60) {
|
if (script->sp >= EMCState::kStackLastEntry) {
|
||||||
script->ip = 0;
|
script->ip = 0;
|
||||||
} else {
|
} else {
|
||||||
script->bp = script->stack[script->sp++];
|
script->bp = script->stack[script->sp++];
|
||||||
|
@ -519,12 +519,12 @@ void EMCInterpreter::cmd_eval(EMCState* script) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void EMCInterpreter::cmd_setRetAndJmp(EMCState* script) {
|
void EMCInterpreter::cmd_setRetAndJmp(EMCState* script) {
|
||||||
if (script->sp >= 60) {
|
if (script->sp >= EMCState::kStackLastEntry) {
|
||||||
script->ip = 0;
|
script->ip = 0;
|
||||||
} else {
|
} else {
|
||||||
script->retValue = script->stack[script->sp++];
|
script->retValue = script->stack[script->sp++];
|
||||||
uint16 temp = script->stack[script->sp++];
|
uint16 temp = script->stack[script->sp++];
|
||||||
script->stack[60] = 0;
|
script->stack[EMCState::kStackLastEntry] = 0;
|
||||||
script->ip = &script->dataPtr->data[temp];
|
script->ip = &script->dataPtr->data[temp];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,13 +47,18 @@ struct EMCData {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct EMCState {
|
struct EMCState {
|
||||||
|
enum {
|
||||||
|
kStackSize = 100,
|
||||||
|
kStackLastEntry = kStackSize - 1
|
||||||
|
};
|
||||||
|
|
||||||
const uint16 *ip;
|
const uint16 *ip;
|
||||||
const EMCData *dataPtr;
|
const EMCData *dataPtr;
|
||||||
int16 retValue;
|
int16 retValue;
|
||||||
uint16 bp;
|
uint16 bp;
|
||||||
uint16 sp;
|
uint16 sp;
|
||||||
int16 regs[30]; // VM registers
|
int16 regs[30]; // VM registers
|
||||||
int16 stack[100]; // VM stack
|
int16 stack[kStackSize]; // VM stack
|
||||||
};
|
};
|
||||||
|
|
||||||
#define stackPos(x) (script->stack[script->sp+x])
|
#define stackPos(x) (script->stack[script->sp+x])
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue