Compare commits

..

No commits in common. "9363c73bbdcd50ae05f27370ab92c433157ddc56" and "4002a222f553f1e4f80bea0160e1e661b03cb317" have entirely different histories.

19 changed files with 99 additions and 122 deletions

View File

@ -35,7 +35,7 @@ $SRC
if [ ! -f "kerep/bin/libkerep-$OS-$ARCH.a" ]; then if [ ! -f "kerep/bin/libkerep-$OS-$ARCH.a" ]; then
echo "libkerep-$OS-$ARCH.a not found" echo "libkerep-$OS-$ARCH.a not found"
cd kerep cd kerep
./build.sh "$1" ./build.sh
cd .. cd ..
fi fi

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
uname_result="$(uname -m)" uname_rezult="$(uname -m)"
case "$uname_result" in case "$uname_rezult" in
arm | arm32 | armhf | aarch32) arm | arm32 | armhf | aarch32)
ARCH=arm32 ARCH=arm32
;; ;;
@ -15,7 +15,7 @@ case "$uname_result" in
ARCH=x64 ARCH=x64
;; ;;
*) *)
echo "unknown CPU architecture: $uname_result" echo "unknown CPU architecture: $uname_rezult"
exit 1 exit 1
;; ;;
esac esac

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
uname_result="$(uname -o)" uname_rezult="$(uname -o)"
case "$uname_result" in case "$uname_rezult" in
Msys | Cygwin | "MS/Windows") Msys | Cygwin | "MS/Windows")
OS=windows OS=windows
;; ;;
@ -18,7 +18,7 @@ case "$uname_result" in
OS=macos OS=macos
;; ;;
*) *)
echo "unknown operating system: $uname_result" echo "unknown operating system: $uname_rezult"
exit 1 exit 1
;; ;;
esac esac

View File

@ -6,15 +6,17 @@ gcc: {
src_dirs: [ "src" ], src_dirs: [ "src" ],
}; };
release: { configurations: {
preprocess_sources: { release: {
src_languages: [ "c", "c++" ], preprocess_sources: {
src_dirs: [ "src" ], src_languages: [ "c", "c++" ],
}, src_dirs: [ "src" ],
gcc: { },
pre_args: [ "-O2" ], gcc: {
post_args: [ "-Wl,--gc-sections" ], pre_args: [ "-O2" ],
}, post_args: [ "-Wl,--gc-sections" ],
};
};
}; };
tasks: { tasks: {
@ -22,7 +24,7 @@ tasks: {
pre_tasks: [ ], pre_tasks: [ ],
tool_order: [ "preprocess_sources", "gcc", "g++", "g++-link" ], tool_order: [ "preprocess_sources", "gcc", "g++", "g++-link" ],
#g++: [ ... ], #g++: [ ... ],
}, };
}; };
languages: [ languages: [
@ -33,20 +35,14 @@ languages: [
{ {
aliases: [ "c-header" ], aliases: [ "c-header" ],
file_extensions: [ "h" ], file_extensions: [ "h" ],
}, }
]; ];
tools: [ tools: [
{
aliases: [ "preprocess_sources" ],
exe_file: "echo",
supported_languages: [ "any" ],
parallel: false,
},
{ {
aliases: [ "gcc" ], aliases: [ "gcc" ],
exe_file: "gcc", exe_file: "gcc",
supported_languages: [ "c" ]; # set to "any" to use with any lang supported_languages: [ "c" ]; # set to "any" to use with any lang
parallel: false, parallel: false,
}, }
]; ];

View File

@ -2,15 +2,8 @@
set -eo pipefail set -eo pipefail
CMP="gcc" CMP="gcc"
WARN="-std=c99 -Wall -Wextra -Wno-discarded-qualifiers -Wno-unused-parameter" WARN="-std=c11 -Wall -Wno-discarded-qualifiers -Wno-unused-parameter"
ARGS_DEBUG="-O0 -g" ARGS="-O2"
ARGS_RELEASE="-O2 -flto=auto -fdata-sections -ffunction-sections -Wl,--gc-sections"
if [[ "$1" = "debug" ]]; then
ARGS=$ARGS_DEBUG
else
ARGS=$ARGS_RELEASE
fi
SRC="$(find src -name '*.c')" SRC="$(find src -name '*.c')"
OS=$(../detect_os.sh) OS=$(../detect_os.sh)

View File

@ -64,64 +64,64 @@ Maybe file_close(FileHandle file){
} }
#define ioWriteCheck() \ #define ioWriteCheck() \
if(result==EOF) \ if(rezult==EOF) \
safethrow(ERR_IO_EOF,;); \ safethrow(ERR_IO_EOF,;); \
if(result!=0) \ if(rezult!=0) \
safethrow(ERR_IO,;); safethrow(ERR_IO,;);
Maybe file_writeChar(FileHandle file, char byte){ Maybe file_writeChar(FileHandle file, char byte){
i32 result=fputc(byte, file); i32 rezult=fputc(byte, file);
ioWriteCheck(); ioWriteCheck();
return MaybeNull; return MaybeNull;
} }
Maybe file_writeBuffer(FileHandle file, char* buffer, u64 length){ Maybe file_writeBuffer(FileHandle file, char* buffer, u64 length){
i32 result=0; i32 rezult=0;
for(u64 i=0; i<length && !result; i++) for(u64 i=0; i<length && !rezult; i++)
result=fputc(buffer[i], file); rezult=fputc(buffer[i], file);
ioWriteCheck(); ioWriteCheck();
return MaybeNull; return MaybeNull;
} }
Maybe file_writeCptr(FileHandle file, char* cptr){ Maybe file_writeCptr(FileHandle file, char* cptr){
i32 result=fputs(cptr, file); i32 rezult=fputs(cptr, file);
ioWriteCheck(); ioWriteCheck();
return MaybeNull; return MaybeNull;
} }
Maybe file_readChar(FileHandle file){ Maybe file_readChar(FileHandle file){
i32 result=fgetc(file); i32 rezult=fgetc(file);
if(feof(file)) safethrow(ERR_IO_EOF,;); if(feof(file)) safethrow(ERR_IO_EOF,;);
if(ferror(file)) safethrow(ERR_IO,;); if(ferror(file)) safethrow(ERR_IO,;);
return SUCCESS(UniUInt64(result)); return SUCCESS(UniUInt64(rezult));
} }
Maybe file_readBuffer(FileHandle file, char* buffer, u64 length){ Maybe file_readBuffer(FileHandle file, char* buffer, u64 length){
i32 result=0; i32 rezult=0;
u64 i=0; u64 i=0;
for(; i<length && result!=EOF; i++){ for(; i<length && rezult!=EOF; i++){
result=fgetc(file); rezult=fgetc(file);
buffer[i]=(char)result; buffer[i]=(char)rezult;
} }
if(ferror(file)) safethrow(ERR_IO,;); if(ferror(file)) safethrow(ERR_IO,;);
return SUCCESS(UniUInt64(i)); return SUCCESS(UniUInt64(i));
} }
Maybe file_readAll(FileHandle file, char** allBytes){ Maybe file_readAll(FileHandle file, char** allBytes){
i32 result=0; i32 rezult=0;
char buffer[256]; char buffer[256];
string bufStr={.ptr=buffer, .length=sizeof(buffer)}; string bufStr={.ptr=buffer, .length=sizeof(buffer)};
StringBuilder* sb=StringBuilder_create(); StringBuilder* sb=StringBuilder_create();
u64 i=0; u64 i=0;
while(true){ while(true){
result=fgetc(file); rezult=fgetc(file);
if(result==EOF){ if(rezult==EOF){
if(ferror(file)) if(ferror(file))
safethrow(ERR_IO, StringBuilder_free(sb)); safethrow(ERR_IO, StringBuilder_free(sb));
break; break;
} }
buffer[i%sizeof(buffer)]=(char)result; buffer[i%sizeof(buffer)]=(char)rezult;
i++; i++;
if(!(i%sizeof(buffer))) if(!(i%sizeof(buffer)))
StringBuilder_append_string(sb,bufStr); StringBuilder_append_string(sb,bufStr);

View File

@ -22,7 +22,7 @@ char* __path_concat(u32 n, ...){
const char* output=totality; const char* output=totality;
totality[totalLength]=0; totality[totalLength]=0;
// copying content of all strings to result // copying content of all strings to rezult
u16 k=0; u16 k=0;
for(; k<n-1; k++){ for(; k<n-1; k++){
memcopy(parts[k], totality, lengths[k]); memcopy(parts[k], totality, lengths[k]);
@ -74,11 +74,11 @@ char* path_parentDir(char* dir){
char* path_basename(char* path, bool with_extension){ char* path_basename(char* path, bool with_extension){
i32 nameIndex=cptr_lastIndexOfChar(path, path_sep)+1; i32 nameIndex=cptr_lastIndexOfChar(path, path_sep)+1;
string result=string_fromCptr(path+nameIndex); string rezult=string_fromCptr(path+nameIndex);
if(!with_extension){ if(!with_extension){
i32 extIndex=cptr_lastIndexOfChar(result.ptr, '.'); i32 extIndex=cptr_lastIndexOfChar(rezult.ptr, '.');
if(extIndex!=0 && extIndex!=-1) if(extIndex!=0 && extIndex!=-1)
result.length=extIndex; rezult.length=extIndex;
} }
return string_extract(result); return string_extract(rezult);
} }

View File

@ -58,7 +58,7 @@ void Hashtable_expand(Hashtable* ht){
ht->rows=newrows; ht->rows=newrows;
} }
Autoarr(KVPair)* getrow(Hashtable* ht, const char* key, bool can_expand){ Autoarr(KVPair)* getrow(Hashtable* ht, char* key, bool can_expand){
u32 hash=hashs(hash_sdbm32, key); u32 hash=hashs(hash_sdbm32, key);
Autoarr(KVPair)* ar=ht->rows[hash%HT_HEIGHTS[ht->hein]]; Autoarr(KVPair)* ar=ht->rows[hash%HT_HEIGHTS[ht->hein]];
if(can_expand && Autoarr_length(ar)==Autoarr_max_length(ar)) if(can_expand && Autoarr_length(ar)==Autoarr_max_length(ar))
@ -69,7 +69,7 @@ Autoarr(KVPair)* getrow(Hashtable* ht, const char* key, bool can_expand){
/// @param key must be heap allocated /// @param key must be heap allocated
/// Hashtable_free will free this pointer /// Hashtable_free will free this pointer
void Hashtable_add(Hashtable* ht, const char* key, Unitype u){ void Hashtable_add(Hashtable* ht, char* key, Unitype u){
KVPair p={ .key=key, .value=u }; KVPair p={ .key=key, .value=u };
Autoarr_add(getrow(ht,key,true),p); Autoarr_add(getrow(ht,key,true),p);
} }
@ -81,7 +81,7 @@ void Hashtable_addMany(Hashtable* ht, KVPair* pair_array, u32 count){
} }
// returns null or pointer to value in hashtable // returns null or pointer to value in hashtable
Unitype* Hashtable_getPtr(Hashtable* ht, const char* key){ Unitype* Hashtable_getPtr(Hashtable* ht, char* key){
Autoarr(KVPair)* ar=getrow(ht,key,false); Autoarr(KVPair)* ar=getrow(ht,key,false);
u32 arlen=Autoarr_length(ar); u32 arlen=Autoarr_length(ar);
for(u32 i=0;i<arlen;i++){ for(u32 i=0;i<arlen;i++){
@ -91,7 +91,7 @@ Unitype* Hashtable_getPtr(Hashtable* ht, const char* key){
return NULL; return NULL;
} }
Unitype Hashtable_get(Hashtable* ht, const char* key){ Unitype Hashtable_get(Hashtable* ht, char* key){
Autoarr(KVPair)* ar=getrow(ht,key,false); Autoarr(KVPair)* ar=getrow(ht,key,false);
u32 arlen=Autoarr_length(ar); u32 arlen=Autoarr_length(ar);
for(u32 i=0;i<arlen;i++){ for(u32 i=0;i<arlen;i++){
@ -101,14 +101,14 @@ Unitype Hashtable_get(Hashtable* ht, const char* key){
return UniNull; return UniNull;
} }
bool Hashtable_tryGet(Hashtable* ht, const char* key, Unitype* output){ bool Hashtable_tryGet(Hashtable* ht, char* key, Unitype* output){
Unitype u=Hashtable_get(ht,key); Unitype u=Hashtable_get(ht,key);
*output=u; *output=u;
return !Unitype_isUniNull(u); return !Unitype_isUniNull(u);
} }
bool Hashtable_trySet(Hashtable* ht, const char* key, Unitype u){ bool Hashtable_trySet(Hashtable* ht, char* key, Unitype u){
Unitype* val=Hashtable_getPtr(ht,key); Unitype* val=Hashtable_getPtr(ht,key);
if(val==NULL) if(val==NULL)
return false; return false;
@ -116,7 +116,7 @@ bool Hashtable_trySet(Hashtable* ht, const char* key, Unitype u){
return true; return true;
} }
bool Hashtable_tryAdd(Hashtable* ht, const char* key, Unitype u){ bool Hashtable_tryAdd(Hashtable* ht, char* key, Unitype u){
Unitype* val=Hashtable_getPtr(ht,key); Unitype* val=Hashtable_getPtr(ht,key);
if(val==NULL){ if(val==NULL){
Hashtable_add(ht, key, u); Hashtable_add(ht, key, u);
@ -125,7 +125,7 @@ bool Hashtable_tryAdd(Hashtable* ht, const char* key, Unitype u){
return false; return false;
} }
void Hashtable_addOrSet(Hashtable* ht, const char* key, Unitype u){ void Hashtable_addOrSet(Hashtable* ht, char* key, Unitype u){
Unitype* val=Hashtable_getPtr(ht, key); Unitype* val=Hashtable_getPtr(ht, key);
if(val==NULL) if(val==NULL)
Hashtable_add(ht, key, u); // add Hashtable_add(ht, key, u); // add

View File

@ -23,18 +23,18 @@ u16 Hashtable_height(Hashtable* ht);
// don't add pairs with the same keys, // don't add pairs with the same keys,
// or something weird will happen // or something weird will happen
// if not sure, use Hashtable_addOrSet() // if not sure, use Hashtable_addOrSet()
void Hashtable_add(Hashtable* ht, const char* key, Unitype u); void Hashtable_add(Hashtable* ht, char* key, Unitype u);
void Hashtable_addOrSet(Hashtable* ht, const char* key, Unitype u); void Hashtable_addOrSet(Hashtable* ht, char* key, Unitype u);
void Hashtable_addMany(Hashtable* ht, KVPair* pair_array, u32 count); void Hashtable_addMany(Hashtable* ht, KVPair* pair_array, u32 count);
bool Hashtable_tryAdd(Hashtable* ht, const char* key, Unitype u); bool Hashtable_tryAdd(Hashtable* ht, char* key, Unitype u);
bool Hashtable_trySet(Hashtable* ht, const char* key, Unitype u); bool Hashtable_trySet(Hashtable* ht, char* key, Unitype u);
// returns null or pointer to value in hashtable // returns null or pointer to value in hashtable
Unitype* Hashtable_getPtr(Hashtable* ht, const char* key); Unitype* Hashtable_getPtr(Hashtable* ht, char* key);
Unitype Hashtable_get(Hashtable* ht, const char* key); Unitype Hashtable_get(Hashtable* ht, char* key);
bool Hashtable_tryGet(Hashtable* ht, const char* key, Unitype* output); bool Hashtable_tryGet(Hashtable* ht, char* key, Unitype* output);
#define Hashtable_foreach(HT, EL, codeblock...) { \ #define Hashtable_foreach(HT, EL, codeblock...) { \
u16 hmax=Hashtable_height(HT); \ u16 hmax=Hashtable_height(HT); \

View File

@ -8,7 +8,7 @@ extern "C" {
#include "../Autoarr/Autoarr.h" #include "../Autoarr/Autoarr.h"
STRUCT(KVPair, STRUCT(KVPair,
const char* key; char* key;
Unitype value; Unitype value;
) )

View File

@ -160,7 +160,7 @@ char* __cptr_concat(u32 n, ...){
char* output=totality; char* output=totality;
totality[totalLength]=0; totality[totalLength]=0;
// copying content of all strings to result // copying content of all strings to rezult
for(u16 k=0; k<n; k++){ for(u16 k=0; k<n; k++){
memcopy(strs[k], totality, lengths[k]); memcopy(strs[k], totality, lengths[k]);
totality+=lengths[k]; totality+=lengths[k];
@ -212,6 +212,6 @@ char* cptr_replaceIn(const char* src, const char* str_old, const char* str_new,
u32 src_remains_len=cptr_length(src); u32 src_remains_len=cptr_length(src);
if(src_remains_len>0) if(src_remains_len>0)
StringBuilder_append_string(sb, (string){.ptr=(char*)src, .length=src_remains_len}); StringBuilder_append_string(sb, (string){.ptr=(char*)src, .length=src_remains_len});
string result=StringBuilder_build(sb); string rezult=StringBuilder_build(sb);
return result.ptr; return rezult.ptr;
} }

View File

@ -25,23 +25,23 @@ char* errname(ErrorId err){
char* __genErrMsg(const char* errmsg, const char* srcfile, i32 line, const char* funcname){ char* __genErrMsg(const char* errmsg, const char* srcfile, i32 line, const char* funcname){
size_t bufsize=ERRMSG_MAXLENGTH; size_t bufsize=ERRMSG_MAXLENGTH;
char* result=malloc(bufsize); char* rezult=malloc(bufsize);
IFMSC( IFMSC(
sprintf_s(result,bufsize,"[%s:%d] %s() throwed error: %s",srcfile,line,funcname,errmsg), sprintf_s(rezult,bufsize,"[%s:%d] %s() throwed error: %s",srcfile,line,funcname,errmsg),
sprintf(result,"[%s:%d] %s() throwed error: %s",srcfile,line,funcname,errmsg) sprintf(rezult,"[%s:%d] %s() throwed error: %s",srcfile,line,funcname,errmsg)
); );
return result; return rezult;
} }
char* __extendErrMsg(const char* errmsg, const char* srcfile, i32 line, const char* funcname){ char* __extendErrMsg(const char* errmsg, const char* srcfile, i32 line, const char* funcname){
size_t bufsize=cptr_length(errmsg)+ERRMSG_MAXLENGTH; size_t bufsize=cptr_length(errmsg)+ERRMSG_MAXLENGTH;
char* result=malloc(bufsize); char* rezult=malloc(bufsize);
IFMSC( IFMSC(
sprintf_s(result,bufsize,"%s\n \\___[%s:%d] %s()",errmsg,srcfile,line,funcname), sprintf_s(rezult,bufsize,"%s\n \\___[%s:%d] %s()",errmsg,srcfile,line,funcname),
sprintf(result,"%s\n \\___[%s:%d] %s()",errmsg,srcfile,line,funcname) sprintf(rezult,"%s\n \\___[%s:%d] %s()",errmsg,srcfile,line,funcname)
); );
free(errmsg); free(errmsg);
return result; return rezult;
} }
void Maybe_free(Maybe e){ void Maybe_free(Maybe e){

View File

@ -60,10 +60,10 @@ char* __unknownErr( );
__RETURN_EXCEPTION(((char*)__genErrMsg(E, __FILE__,__LINE__,__func__))); \ __RETURN_EXCEPTION(((char*)__genErrMsg(E, __FILE__,__LINE__,__func__))); \
} }
#define try_cpp(_funcCall, _result, freeMem) Maybe _result=_funcCall; if(_result.errmsg){ \ #define try_cpp(_funcCall, _rezult, freeMem) Maybe _rezult=_funcCall; if(_rezult.errmsg){ \
freeMem; \ freeMem; \
_result.errmsg=__extendErrMsg(_result.errmsg, __FILE__,__LINE__,__func__); \ _rezult.errmsg=__extendErrMsg(_rezult.errmsg, __FILE__,__LINE__,__func__); \
return _result; \ return _rezult; \
} }
#else #else
@ -73,16 +73,16 @@ char* __unknownErr( );
__RETURN_EXCEPTION(((char*)__genErrMsg((__stringify_err(E)), __FILE__,__LINE__,__func__))); \ __RETURN_EXCEPTION(((char*)__genErrMsg((__stringify_err(E)), __FILE__,__LINE__,__func__))); \
} }
#define try(_funcCall, _result, freeMem) Maybe _result=_funcCall; if(_result.errmsg){ \ #define try(_funcCall, _rezult, freeMem) Maybe _rezult=_funcCall; if(_rezult.errmsg){ \
freeMem; \ freeMem; \
_result.errmsg=__extendErrMsg(_result.errmsg, __FILE__,__LINE__,__func__); \ _rezult.errmsg=__extendErrMsg(_rezult.errmsg, __FILE__,__LINE__,__func__); \
return _result; \ return _rezult; \
} }
#endif #endif
#define tryLast(_funcCall, _result, ON_EXIT) Maybe _result=_funcCall; if(_result.errmsg){ \ #define tryLast(_funcCall, _rezult, ON_EXIT) Maybe _rezult=_funcCall; if(_rezult.errmsg){ \
_result.errmsg=__extendErrMsg(_result.errmsg, __FILE__,__LINE__,__func__); \ _rezult.errmsg=__extendErrMsg(_rezult.errmsg, __FILE__,__LINE__,__func__); \
__EXIT(_result.errmsg); \ __EXIT(_rezult.errmsg); \
} }
#if __cplusplus #if __cplusplus

View File

@ -132,7 +132,7 @@ You can even embed it into macro in header (see kprint.h)
PRAGMA_WARNING_POP PRAGMA_WARNING_POP
/// gcc throws warning on unused function return value /// gcc throws warning on unused function return value
#define WARN_UNUSED_RESULT __attribute__((WARN_UNUSED_RESULT)) #define WARN_UNUSED_REZULT __attribute__((warn_unused_result))
#if __cplusplus #if __cplusplus
} }

View File

@ -34,7 +34,7 @@ typedef void (*freeMembers_t)(void*);
typedef char* (*toString_t)(void* obj, u32 fmt); typedef char* (*toString_t)(void* obj, u32 fmt);
STRUCT(ktDescriptor, STRUCT(ktDescriptor,
const char* name; char* name;
ktid id; ktid id;
u16 size; u16 size;
freeMembers_t freeMembers; // NULL or function which frees all struct members freeMembers_t freeMembers; // NULL or function which frees all struct members

View File

@ -85,11 +85,11 @@ char *Unitype_toString(Unitype u, u32 fmt)
valuestr = type->toString(u.VoidPtr, fmt); valuestr = type->toString(u.VoidPtr, fmt);
else else
valuestr = "ERR_NO_TOSTRING_FUNC"; valuestr = "ERR_NO_TOSTRING_FUNC";
char *result = cptr_concat("{ type: ", type->name, ", allocated on heap: ", (u.allocatedInHeap ? "true" : "false"), char *rezult = cptr_concat("{ type: ", type->name, ", allocated on heap: ", (u.allocatedInHeap ? "true" : "false"),
", value:", valuestr, " }"); ", value:", valuestr, " }");
if (type->toString) if (type->toString)
free(valuestr); free(valuestr);
return result; return rezult;
} }
void printuni(Unitype v) void printuni(Unitype v)

View File

@ -53,8 +53,8 @@ Maybe __ksprint(u8 n, kp_fmt* formats, __kp_value_union* objects){
StringBuilder_append_cptr(strb, mStr.value.VoidPtr); StringBuilder_append_cptr(strb, mStr.value.VoidPtr);
Unitype_free(mStr.value); Unitype_free(mStr.value);
} }
char* result=StringBuilder_build(strb).ptr; char* rezult=StringBuilder_build(strb).ptr;
return SUCCESS(UniHeapPtr(char, result)); return SUCCESS(UniHeapPtr(char, rezult));
} }
Maybe __kfprint(FILE* file, u8 n, kp_fmt* formats, __kp_value_union* objects){ Maybe __kfprint(FILE* file, u8 n, kp_fmt* formats, __kp_value_union* objects){

View File

@ -74,14 +74,11 @@ Maybe Tool_tryApplyOptions(Tool* t, Hashtable* dtsod){
if(!UniCheckTypePtr(val, Autoarr(Unitype))) if(!UniCheckTypePtr(val, Autoarr(Unitype)))
safethrow("src_languages value expected to be a string array", ;); safethrow("src_languages value expected to be a string array", ;);
Autoarr(Unitype)* ar = val.VoidPtr; Autoarr(Unitype)* ar = val.VoidPtr;
Unitype any_lang_uni;
bool is_any_language = Hashtable_tryGet(t->supported_languages, "any", &any_lang_uni);
Autoarr_foreach(ar, el, Autoarr_foreach(ar, el,
if(!UniCheckTypePtr(el, char)) if(!UniCheckTypePtr(el, char))
safethrow("src_languages array values expected to be string", ;); safethrow("src_languages array values expected to be string", ;);
const char* l_name = el.VoidPtr; const char* l_name = el.VoidPtr;
if(!is_any_language && !Hashtable_tryGet(t->supported_languages, l_name, &val)) if(!Hashtable_tryGet(t->supported_languages, l_name, &val))
safethrow(cptr_concat("language '", l_name, "' isn't supported by tool '", Autoarr_get(t->aliases, 0), "'"), ;); safethrow(cptr_concat("language '", l_name, "' isn't supported by tool '", Autoarr_get(t->aliases, 0), "'"), ;);
Hashtable_add(t->src_languages, l_name, val); Hashtable_add(t->src_languages, l_name, val);
) )
@ -130,7 +127,11 @@ Maybe CompilationScenario_tryApplyPlatformSpecificOptions(CompilationScenario* s
try(CompilationScenario_tryApplyConditionalOptions(sc, dtsod, os_and_arch), _m2, ;); try(CompilationScenario_tryApplyConditionalOptions(sc, dtsod, os_and_arch), _m2, ;);
free(os_and_arch); free(os_and_arch);
return SUCCESS(UniBool(_m0.value.Bool || _m1.value.Bool || _m2.value.Bool)); os_and_arch = cptr_concat(os, "_", arch);
try(CompilationScenario_tryApplyConditionalOptions(sc, dtsod, os_and_arch), _m3, ;);
free(os_and_arch);
return SUCCESS(UniBool(_m0.value.Bool || _m1.value.Bool || _m2.value.Bool || _m3.value.Bool));
} }
Maybe CompilationScenario_applyConfigurationOptions(CompilationScenario* sc, Hashtable* dtsod, const char* configuration){ Maybe CompilationScenario_applyConfigurationOptions(CompilationScenario* sc, Hashtable* dtsod, const char* configuration){
@ -141,13 +142,8 @@ Maybe CompilationScenario_applyConfigurationOptions(CompilationScenario* sc, Has
} }
Maybe CompilationScenario_applyTaskOptions(CompilationScenario* sc, Hashtable* dtsod, const char* task){ Maybe CompilationScenario_applyTaskOptions(CompilationScenario* sc, Hashtable* dtsod, const char* task){
Unitype tasks_uni; try(CompilationScenario_tryApplyConditionalOptions(sc, dtsod, task), _m0, ;);
if(!Hashtable_tryGet(dtsod, "tasks", &tasks_uni)) if(!_m0.value.Bool)
safethrow(cptr_concat("key 'tasks' not found"), ;);
if(!UniCheckTypePtr(tasks_uni, Hashtable))
safethrow(ERR_WRONGTYPE, ;);
try(CompilationScenario_tryApplyConditionalOptions(sc, tasks_uni.VoidPtr, task), _m1, ;);
if(!_m1.value.Bool)
safethrow(cptr_concat("task '", task, "' not found"), ;); safethrow(cptr_concat("task '", task, "' not found"), ;);
return MaybeNull; return MaybeNull;
} }
@ -196,18 +192,10 @@ Maybe CompilationScenario_tryRegisterLanguages(CompilationScenario* sc, Hashtabl
// registers each alias of the language // registers each alias of the language
Autoarr_foreach(aliases, l_name, Autoarr_foreach(aliases, l_name,
if(!Hashtable_tryAdd(sc->languages, l_name, UniHeapPtr(Language, lang))) if(!Hashtable_tryAdd(sc->languages, l_name, UniHeapPtr(Language, lang)))
safethrow(cptr_concat("language '", l_name, "' has been already registered"), ;); safethrow(cptr_concat("language '", l_name, "has been already registered"), ;);
) )
) )
// "any" language
Language* any_lang = malloc(sizeof(Language));
Autoarr(Pointer)* any_aliases = Autoarr_create(Pointer, 1, 1);
Autoarr_add(any_aliases, cptr_copy("any"));
Language_construct(any_lang, any_aliases, Autoarr_create(Pointer, 0, 0));
if(!Hashtable_tryAdd(sc->languages, "any", UniHeapPtr(Language, any_lang)))
safethrow(cptr_concat("language '", "any", "has been already registered"), ;);
return SUCCESS(UniTrue); return SUCCESS(UniTrue);
} }

View File

@ -10,9 +10,9 @@ Maybe Process_start(Process* p, const char* file_path, const char** args, int ar
memset(p, 0, sizeof(Process)); memset(p, 0, sizeof(Process));
if(search_in_PATH && !cptr_contains(file_path, "\\")){ if(search_in_PATH && !cptr_contains(file_path, "\\")){
LPSTR lpFilePart; LPSTR lpFilePart;
char search_result[MAX_PATH]; char search_rezult[MAX_PATH];
safethrow_if_false(SearchPath( NULL, file_path, NULL, MAX_PATH, search_result, &lpFilePart)) safethrow_if_false(SearchPath( NULL, file_path, NULL, MAX_PATH, search_rezult, &lpFilePart))
file_path = cptr_copy(search_result); file_path = cptr_copy(search_rezult);
} }
SECURITY_ATTRIBUTES saAttr; SECURITY_ATTRIBUTES saAttr;