Browse Source

Add optional message text parameter for assert(), from VasiliyRyabtsev https://github.com/albertodemichelis/squirrel/commit/c10a777285843af3fa5abca9b259f4ea76e96949

mingodad 8 years ago
parent
commit
26cbf6035e
2 changed files with 17 additions and 5 deletions
  1. 12 5
      SquiLu/squirrel/sqbaselib.cpp
  2. 5 0
      SquiLu/tests/squilu-test.nut

+ 12 - 5
SquiLu/squirrel/sqbaselib.cpp

@@ -230,10 +230,17 @@ static SQRESULT base_getdefaultdelegate(HSQUIRRELVM v)
 
 
 static SQRESULT base_assert(HSQUIRRELVM v)
 static SQRESULT base_assert(HSQUIRRELVM v)
 {
 {
-	if(SQVM::IsFalse(stack_get(v,2))){
-		return sq_throwerror(v,_SC("assertion failed"));
-	}
-	return 0;
+    if(SQVM::IsFalse(stack_get(v,2))){
+        SQInteger top = sq_gettop(v);
+        if (top>2 && SQ_SUCCEEDED(sq_tostring(v,3))) {
+            const SQChar *str = 0;
+            if (SQ_SUCCEEDED(sq_getstring(v,-1,&str))) {
+                return sq_throwerror(v, str);
+            }
+        }
+        return sq_throwerror(v, _SC("assertion failed"));
+    }
+    return 0;
 }
 }
 
 
 static SQRESULT get_slice_params(HSQUIRRELVM v,SQInteger &sidx,SQInteger &eidx,SQObjectPtr &o)
 static SQRESULT get_slice_params(HSQUIRRELVM v,SQInteger &sidx,SQInteger &eidx,SQObjectPtr &o)
@@ -548,7 +555,7 @@ static SQRegFunction base_funcs[]={
 	{_SC("setroottable"),base_setroottable,2, NULL},
 	{_SC("setroottable"),base_setroottable,2, NULL},
 	{_SC("getconsttable"),base_getconsttable,1, NULL},
 	{_SC("getconsttable"),base_getconsttable,1, NULL},
 	{_SC("setconsttable"),base_setconsttable,2, NULL},
 	{_SC("setconsttable"),base_setconsttable,2, NULL},
-	{_SC("assert"),base_assert,2, NULL},
+	{_SC("assert"),base_assert,-2, ".bs"},
 	{_SC("print1"),base_print1,2, NULL},
 	{_SC("print1"),base_print1,2, NULL},
 	{_SC("print"),base_print,-2, NULL},
 	{_SC("print"),base_print,-2, NULL},
 	{_SC("error"),base_error,2, NULL},
 	{_SC("error"),base_error,2, NULL},

+ 5 - 0
SquiLu/tests/squilu-test.nut

@@ -264,6 +264,11 @@ sqt.run("calls", function(){
 
 
 	Y, F, f = null
 	Y, F, f = null
 
 
+	try { assert(true); sqt.ok(true);} catch(e) {sqt.ok(false);};
+	try { assert(true, "opt msg"); sqt.ok(true);} catch(e) {sqt.ok(false);};
+	try { assert(false); sqt.ok(false);} catch(e) {sqt.ok(true);};
+	try { assert(false, "opt msg"); sqt.ok(false);} catch(e) {sqt.ok(e == "opt msg");};
+
 });
 });
 
 
 sqt.run("sort", function(){
 sqt.run("sort", function(){