|
|
@@ -223,33 +223,36 @@ const SQChar* SQFunctionProto::GetLocal(SQVM *vm,SQUnsignedInteger stackbase,SQU
|
|
|
|
|
|
SQInteger SQFunctionProto::GetLine(SQInstruction *curr)
|
|
|
{
|
|
|
- SQInteger op = (SQInteger)(curr-_instructions);
|
|
|
- SQInteger line=_lineinfos[0]._line;
|
|
|
- SQInteger low = 0;
|
|
|
- SQInteger high = _nlineinfos - 1;
|
|
|
- SQInteger mid = 0;
|
|
|
- while(low <= high)
|
|
|
- {
|
|
|
- mid = low + ((high - low) >> 1);
|
|
|
- SQInteger curop = _lineinfos[mid]._op;
|
|
|
- if(curop > op)
|
|
|
- {
|
|
|
- high = mid - 1;
|
|
|
- }
|
|
|
- else if(curop < op) {
|
|
|
- if(mid < (_nlineinfos - 1)
|
|
|
- && _lineinfos[mid + 1]._op >= op) {
|
|
|
- break;
|
|
|
- }
|
|
|
- low = mid + 1;
|
|
|
- }
|
|
|
- else { //equal
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- line = _lineinfos[mid]._line;
|
|
|
- return line;
|
|
|
+ SQInteger op = (SQInteger)(curr-_instructions);
|
|
|
+ SQInteger line=_lineinfos[0]._line;
|
|
|
+ SQInteger low = 0;
|
|
|
+ SQInteger high = _nlineinfos - 1;
|
|
|
+ SQInteger mid = 0;
|
|
|
+ while(low <= high)
|
|
|
+ {
|
|
|
+ mid = low + ((high - low) >> 1);
|
|
|
+ SQInteger curop = _lineinfos[mid]._op;
|
|
|
+ if(curop > op)
|
|
|
+ {
|
|
|
+ high = mid - 1;
|
|
|
+ }
|
|
|
+ else if(curop < op) {
|
|
|
+ if(mid < (_nlineinfos - 1)
|
|
|
+ && _lineinfos[mid + 1]._op >= op) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ low = mid + 1;
|
|
|
+ }
|
|
|
+ else { //equal
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ while(_lineinfos[mid]._op >= op && mid >= 0) mid--;
|
|
|
+
|
|
|
+ line = _lineinfos[mid]._line;
|
|
|
+
|
|
|
+ return line;
|
|
|
}
|
|
|
|
|
|
SQClosure::~SQClosure()
|