Bläddra i källkod

Ensure class constructors are functions

Peter Hartley 10 år sedan
förälder
incheckning
d23b238093
1 ändrade filer med 6 tillägg och 4 borttagningar
  1. 6 4
      squirrel/sqvm.cpp

+ 6 - 4
squirrel/sqvm.cpp

@@ -1216,8 +1216,9 @@ bool SQVM::Get(const SQObjectPtr &self, const SQObjectPtr &key, SQObjectPtr &des
 	case OT_STRING:
 		if(sq_isnumeric(key)){
 			SQInteger n = tointeger(key);
-			if(abs((int)n) < _string(self)->_len) {
-				if(n < 0) n = _string(self)->_len - n;
+			SQInteger len = _string(self)->_len;
+			if (n < 0) { n += len; }
+			if (n >= 0 && n < len) {
 				dest = SQInteger(_stringval(self)[n]);
 				return true;
 			}
@@ -1551,7 +1552,8 @@ SQInteger prevstackbase = _stackbase;
 		SQObjectPtr constr;
 		SQObjectPtr temp;
 		CreateClassInstance(_class(closure),outres,constr);
-		if(type(constr) != OT_NULL) {
+		SQObjectType ctype = type(constr);
+		if (ctype == OT_NATIVECLOSURE || ctype == OT_CLOSURE) {
 			_stack[stackbase] = outres;
 			return Call(constr,nparams,stackbase,temp,raiseerror);
 		}
@@ -1631,7 +1633,7 @@ bool SQVM::EnterFrame(SQInteger newbase, SQInteger newtop, bool tailcall)
 			Raise_Error(_SC("stack overflow, cannot resize stack while in  a metamethod"));
 			return false;
 		}
-		_stack.resize(_stack.size() + (MIN_STACK_OVERHEAD << 2));
+		_stack.resize(newtop + (MIN_STACK_OVERHEAD << 2));
 		RelocateOuters();
 	}
 	return true;