fixed some bugs in parser
This commit is contained in:
parent
63f0379df0
commit
9363c73bbd
@ -6,8 +6,7 @@ gcc: {
|
|||||||
src_dirs: [ "src" ],
|
src_dirs: [ "src" ],
|
||||||
};
|
};
|
||||||
|
|
||||||
configurations: {
|
release: {
|
||||||
release: {
|
|
||||||
preprocess_sources: {
|
preprocess_sources: {
|
||||||
src_languages: [ "c", "c++" ],
|
src_languages: [ "c", "c++" ],
|
||||||
src_dirs: [ "src" ],
|
src_dirs: [ "src" ],
|
||||||
@ -15,8 +14,7 @@ configurations: {
|
|||||||
gcc: {
|
gcc: {
|
||||||
pre_args: [ "-O2" ],
|
pre_args: [ "-O2" ],
|
||||||
post_args: [ "-Wl,--gc-sections" ],
|
post_args: [ "-Wl,--gc-sections" ],
|
||||||
};
|
},
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
tasks: {
|
tasks: {
|
||||||
@ -24,7 +22,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: [
|
||||||
@ -35,14 +33,20 @@ 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,
|
||||||
}
|
},
|
||||||
];
|
];
|
||||||
@ -74,11 +74,14 @@ 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(!Hashtable_tryGet(t->supported_languages, l_name, &val))
|
if(!is_any_language && !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);
|
||||||
)
|
)
|
||||||
@ -127,11 +130,7 @@ 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);
|
||||||
|
|
||||||
os_and_arch = cptr_concat(os, "_", arch);
|
return SUCCESS(UniBool(_m0.value.Bool || _m1.value.Bool || _m2.value.Bool));
|
||||||
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){
|
||||||
@ -142,8 +141,13 @@ 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){
|
||||||
try(CompilationScenario_tryApplyConditionalOptions(sc, dtsod, task), _m0, ;);
|
Unitype tasks_uni;
|
||||||
if(!_m0.value.Bool)
|
if(!Hashtable_tryGet(dtsod, "tasks", &tasks_uni))
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
@ -192,10 +196,18 @@ 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user