2
0
Эх сурвалжийг харах

Changes provided by Alberto to fix incorrect line numbers on stack dumps

mingodad 13 жил өмнө
parent
commit
64a08183f1
1 өөрчлөгдсөн 30 нэмэгдсэн , 27 устгасан
  1. 30 27
      squirrel/sqobject.cpp

+ 30 - 27
squirrel/sqobject.cpp

@@ -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()