From 1981e9bc81e92f479c725e6ac60ff3bd419cefd0 Mon Sep 17 00:00:00 2001 From: Chris Xiong Date: Mon, 26 Oct 2015 22:57:45 +0800 Subject: Git and markdown sucks... --- src/core/vmrunner.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'src/core/vmrunner.cpp') diff --git a/src/core/vmrunner.cpp b/src/core/vmrunner.cpp index 5569b1c..43fe1f5 100644 --- a/src/core/vmrunner.cpp +++ b/src/core/vmrunner.cpp @@ -95,7 +95,7 @@ int blrScriptVM::loadLSBFromMemory(const char *ptr,DWORD size) if(!infunc)return 1; infunc=0; break; - case 0x0F: + case 0x0F: case 0x25: case 0x26: if(!infunc)return 1; break; case 0x01: case 0x0C: case 0x0D: @@ -108,7 +108,7 @@ int blrScriptVM::loadLSBFromMemory(const char *ptr,DWORD size) case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: case 0x08: case 0x09: case 0x0A: case 0x0B: - case 0x22: case 0x23: + case 0x22: case 0x23: case 0x24: if(!infunc)return 1; readPara(&inst[ic].para1); readPara(&inst[ic].para2); @@ -270,7 +270,24 @@ void blrScriptVM::vmRunFunction(const char *fncnym) if(fetchData(inst[cur].para1).nez()) cur=fetchData(inst[cur].para2).i(),jmp=1; break; + case 0x24: + if(fetchData(inst[cur].para1).nez()) + { + lpjmp[lops]=cur; + lppos[lops++]=fetchData(inst[cur].para2); + } + else cur=fetchData(inst[cur].para2).i()+1,jmp=1; + break; + case 0x25: + if(!lops)throw; + cur=lppos[--lops]+1,jmp=1; + break; + case 0x26: + if(!lops)throw; + cur=lppos[--lops],jmp=1; + break; } + if(cur==lppos[lops-1])cur=lpjmp[--lops],jmp=1; if(!jmp)++cur; } } @@ -283,6 +300,7 @@ void blrScriptVM::vmInit(unsigned int seed) for(int i=0;i<10000;++i)ra[i].type=1,ia[i].type=0; re=new smRandomEngine; re->setSeed(seed); + lops=0; } void blrScriptVM::vmDeinit() { -- cgit v1.2.3