diff --git a/src/lib/kaba/dynamic/exception.cpp b/src/lib/kaba/dynamic/exception.cpp index a261df79..07097882 100644 --- a/src/lib/kaba/dynamic/exception.cpp +++ b/src/lib/kaba/dynamic/exception.cpp @@ -546,5 +546,12 @@ void kaba_die(KabaException* e) { just_die(e, trace); } +void kaba_assert(bool b) { + if (!b) { + auto e = new KabaException("assert failed"); + kaba_die(e); + } +} + } diff --git a/src/lib/kaba/dynamic/exception.h b/src/lib/kaba/dynamic/exception.h index bb343801..2ed0afca 100644 --- a/src/lib/kaba/dynamic/exception.h +++ b/src/lib/kaba/dynamic/exception.h @@ -19,8 +19,8 @@ class KabaException { public: string text; KabaException(){} - KabaException(const string &message); - virtual ~KabaException(){} + explicit KabaException(const string &message); + virtual ~KabaException() = default; void _cdecl __init__(const string &message); virtual _cdecl void __delete__(); virtual _cdecl string message(); @@ -45,6 +45,7 @@ enum class ErrorID { void _cdecl kaba_raise_exception(KabaException *kaba_exception); void kaba_die(KabaException* e); +void kaba_assert(bool b); diff --git a/src/lib/kaba/lib/lib_base.cpp b/src/lib/kaba/lib/lib_base.cpp index 94c8f93e..3aae9f16 100644 --- a/src/lib/kaba/lib/lib_base.cpp +++ b/src/lib/kaba/lib/lib_base.cpp @@ -956,6 +956,8 @@ void SIAddPackageBase(Context *c) { func_add_param("e", TypeExceptionXfer); add_func("@die", TypeVoid, &kaba_die, Flags::Static | Flags::RaisesExceptions); func_add_param("e", TypePointer); + add_func(Identifier::Assert, TypeVoid, &kaba_assert, Flags::Static | Flags::RaisesExceptions); + func_add_param("b", TypeBool); // type casting diff --git a/src/lib/kaba/syntax/Identifier.cpp b/src/lib/kaba/syntax/Identifier.cpp index 15310480..5f0aa843 100644 --- a/src/lib/kaba/syntax/Identifier.cpp +++ b/src/lib/kaba/syntax/Identifier.cpp @@ -67,6 +67,7 @@ namespace Identifier { const string Raise = "raise"; const string Try = "try"; const string Except = "except"; + const string Assert = "assert"; const string If = "if"; const string Else = "else"; const string While = "while"; diff --git a/src/lib/kaba/syntax/Identifier.h b/src/lib/kaba/syntax/Identifier.h index fa7d6b09..550979e6 100644 --- a/src/lib/kaba/syntax/Identifier.h +++ b/src/lib/kaba/syntax/Identifier.h @@ -67,6 +67,7 @@ namespace Identifier { extern const string Raise; extern const string Try; extern const string Except; + extern const string Assert; extern const string If; extern const string Else; extern const string While;