added on_exit arg to tryLast()
This commit is contained in:
parent
588453a2b7
commit
70807ed22b
@ -80,7 +80,7 @@ char* __unknownErr( );
|
||||
}
|
||||
#endif
|
||||
|
||||
#define tryLast(_funcCall, _rezult) Maybe _rezult=_funcCall; if(_rezult.errmsg){ \
|
||||
#define tryLast(_funcCall, _rezult, ON_EXIT) Maybe _rezult=_funcCall; if(_rezult.errmsg){ \
|
||||
_rezult.errmsg=__extendErrMsg(_rezult.errmsg, __FILE__,__LINE__,__func__); \
|
||||
__EXIT(_rezult.errmsg); \
|
||||
}
|
||||
|
||||
@ -40,6 +40,10 @@ STRUCT(Unitype,
|
||||
|
||||
#define Unitype_isUniNull(UNI) (UNI.typeId==0 && UNI.Int64==0)
|
||||
|
||||
#define UniCheckTypeId(UNI, TYPE_ID) (UNI.typeId==TYPE_ID)
|
||||
#define UniCheckType(UNI, TYPE) UniCheckTypeId(UNI, ktid_name(TYPE))
|
||||
#define UniCheckTypePtr(UNI, TYPE) UniCheckTypeId(UNI, ktid_ptrName(TYPE))
|
||||
|
||||
// frees VoidPtr value or does nothing if type isn't pointer
|
||||
void Unitype_free(Unitype u);
|
||||
void __UnitypePtr_free(void* u);
|
||||
|
||||
@ -71,12 +71,12 @@ Maybe __kfprint(FILE* file, u8 n, kp_fmt* formats, __kp_value_union* objects){
|
||||
}
|
||||
|
||||
void __kprint(u8 n, kp_fmt* formats, __kp_value_union* objects){
|
||||
tryLast(check_argsN(n), _);
|
||||
tryLast(check_argsN(n), _,;);
|
||||
n/=2;
|
||||
for(u8 i=0; i<n; i++){
|
||||
kp_fmt fmt=formats[i];
|
||||
kprint_setColor(fmt);
|
||||
tryLast(__next_toString(fmt, &objects[i]),maybeStr);
|
||||
tryLast(__next_toString(fmt, &objects[i]),maybeStr, kprint_setColor(kp_bgBlack|kp_fgGray));
|
||||
if(fputs(maybeStr.value.VoidPtr, stdout)==EOF) \
|
||||
throw("can't write string to stdout");
|
||||
//, Unitype_free(maybeStr.value)
|
||||
|
||||
@ -43,23 +43,23 @@ void test_dtsod(){
|
||||
char* s;
|
||||
|
||||
optime("deserialize",1,
|
||||
tryLast(DtsodV24_deserialize(text),r)
|
||||
tryLast(DtsodV24_deserialize(text),r,;)
|
||||
dtsod=r.value.VoidPtr;
|
||||
);
|
||||
print_dtsod(dtsod);
|
||||
|
||||
optime("serialize",1,
|
||||
tryLast(DtsodV24_serialize(dtsod),r)
|
||||
tryLast(DtsodV24_serialize(dtsod),r,;)
|
||||
s=r.value.VoidPtr;
|
||||
);
|
||||
DtsodV24_free(dtsod);
|
||||
kprintf("\e[92m%s",s);
|
||||
|
||||
optime("reserialize",10,
|
||||
tryLast(DtsodV24_deserialize(s),r)
|
||||
tryLast(DtsodV24_deserialize(s),r,;)
|
||||
dtsod=r.value.VoidPtr;
|
||||
free(s);
|
||||
tryLast(DtsodV24_serialize(dtsod),rr)
|
||||
tryLast(DtsodV24_serialize(dtsod),rr,;)
|
||||
s=rr.value.VoidPtr;
|
||||
DtsodV24_free(dtsod);
|
||||
);
|
||||
|
||||
@ -15,7 +15,7 @@ Maybe throw_errcode(){
|
||||
|
||||
Maybe test_maybe(){
|
||||
kprintf("\e[94mdont_throw returns \e[92m");
|
||||
tryLast(dont_throw(),rez0)
|
||||
tryLast(dont_throw(),rez0,;)
|
||||
printMaybe(rez0);
|
||||
kprintf("\n");
|
||||
try(throw_error(),rez1,;)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user