Skip to content

Commit d8add5e

Browse files
committed
compiler: remove builtin.das builtin module
Now builtin das module lives as a separate file in daslib.
1 parent 718ec7e commit d8add5e

File tree

10 files changed

+88
-8365
lines changed

10 files changed

+88
-8365
lines changed

CMakeLists.txt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,6 @@ src/builtin/module_builtin_runtime_lockcheck.cpp
601601
src/builtin/module_builtin_vector.cpp
602602
src/builtin/module_builtin_vector_ctor.cpp
603603
src/builtin/module_builtin_array.cpp
604-
src/builtin/module_builtin_das.cpp
605604
src/builtin/module_builtin_math.cpp
606605
src/builtin/module_builtin_string.cpp
607606
src/builtin/module_builtin_rtti.h
@@ -624,12 +623,9 @@ src/builtin/module_builtin_network.cpp
624623
src/builtin/module_builtin_debugger.cpp
625624
src/builtin/module_builtin_jobque.cpp
626625
src/builtin/module_file_access.cpp
627-
src/builtin/builtin.das.inc
628-
src/builtin/builtin.das
629626
)
630627
list(SORT BUILTIN_SRC)
631628
SOURCE_GROUP_FILES("module builtin" BUILTIN_SRC)
632-
CMAKE_TEXT_XXD(libDaScript src/builtin/builtin.das)
633629

634630
SET(MISC_SRC
635631
include/daScript/misc/enums.h

include/daScript/ast/ast.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1170,6 +1170,7 @@ namespace das
11701170
return requireModule.find(objModule) != requireModule.end();
11711171
}
11721172
bool compileBuiltinModule ( const string & name, const unsigned char * const str, unsigned int str_len );//will replace last symbol to 0
1173+
bool compileBuiltinModule ( const string & modName, const string & filePath, const FileAccessPtr & access );
11731174
static Module * require ( const string & name );
11741175
static Module * requireEx ( const string & name, bool allowPromoted );
11751176
static void Initialize();

src/ast/ast_module.cpp

Lines changed: 81 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -608,83 +608,96 @@ namespace das {
608608
return it != callThis.end() ? &it->second : nullptr;
609609
}
610610

611+
static bool appendBuiltinModuleContent ( Module * target, ProgramPtr program, const string & modName ) {
612+
if ( !program ) {
613+
DAS_FATAL_ERROR("builtin module did not parse %s\n", modName.c_str());
614+
return false;
615+
}
616+
if (program->failed()) {
617+
TextWriter issues;
618+
for (auto & err : program->errors) {
619+
issues << reportError(err.at, err.what, err.extra, err.fixme, err.cerr);
620+
}
621+
DAS_FATAL_ERROR("%s\nbuiltin module did not compile %s\n", issues.str().c_str(), modName.c_str());
622+
return false;
623+
}
624+
// append content into target module
625+
program->thisModule->aliasTypes.foreach([&](auto aliasTypePtr){
626+
target->addAlias(aliasTypePtr);
627+
});
628+
program->thisModule->enumerations.foreach([&](auto penum){
629+
target->addEnumeration(penum);
630+
});
631+
program->thisModule->structures.foreach([&](auto pst){
632+
target->addStructure(pst);
633+
});
634+
program->thisModule->generics.foreach([&](auto fn){
635+
target->addGeneric(fn);
636+
});
637+
program->thisModule->globals.foreach([&](auto gvar){
638+
target->addVariable(gvar);
639+
});
640+
program->thisModule->functions.foreach([&](auto fn){
641+
target->addFunction(fn);
642+
});
643+
for (auto & rqm : program->thisModule->requireModule) {
644+
if ( rqm.first != target ) {
645+
target->requireModule[rqm.first] |= rqm.second;
646+
}
647+
}
648+
// macros
649+
auto ptm = program->thisModule.get();
650+
if ( ptm->macroContext ) {
651+
swap ( target->macroContext, ptm->macroContext );
652+
ptm->handleTypes.foreach([&](auto fna){
653+
target->addAnnotation(fna);
654+
});
655+
}
656+
target->simulateMacros.insert(target->simulateMacros.end(), ptm->simulateMacros.begin(), ptm->simulateMacros.end());
657+
target->captureMacros.insert(target->captureMacros.end(), ptm->captureMacros.begin(), ptm->captureMacros.end());
658+
target->forLoopMacros.insert(target->forLoopMacros.end(), ptm->forLoopMacros.begin(), ptm->forLoopMacros.end());
659+
target->variantMacros.insert(target->variantMacros.end(), ptm->variantMacros.begin(), ptm->variantMacros.end());
660+
target->macros.insert(target->macros.end(), ptm->macros.begin(), ptm->macros.end());
661+
target->inferMacros.insert(target->inferMacros.end(), ptm->inferMacros.begin(), ptm->inferMacros.end());
662+
target->optimizationMacros.insert(target->optimizationMacros.end(), ptm->optimizationMacros.begin(), ptm->optimizationMacros.end());
663+
target->lintMacros.insert(target->lintMacros.end(), ptm->lintMacros.begin(), ptm->lintMacros.end());
664+
target->globalLintMacros.insert(target->globalLintMacros.end(), ptm->globalLintMacros.begin(), ptm->globalLintMacros.end());
665+
for ( auto & rm : ptm->readMacros ) {
666+
target->addReaderMacro(rm.second);
667+
}
668+
for ( auto & tm : ptm->typeMacros ) {
669+
target->addTypeMacro(tm.second);
670+
}
671+
target->commentReader = ptm->commentReader;
672+
for ( auto & op : ptm->options) {
673+
DAS_ASSERTF(target->options.find(op.first)==target->options.end(),"duplicate option %s", op.first.c_str());
674+
target->options[op.first] = op.second;
675+
}
676+
SubstituteBuiltinModuleRefs( program, program->thisModule.get(), target );
677+
return true;
678+
}
679+
611680
bool Module::compileBuiltinModule ( const string & modName, const unsigned char * const str, unsigned int str_len ) {
612681
TextWriter issues;
613682
auto access = make_smart<FileAccess>();
614683
auto fileInfo = make_unique<TextFileInfo>((char *) str, uint32_t(str_len), false);
615684
access->setFileInfo(modName, das::move(fileInfo));
616685
ModuleGroup dummyLibGroup;
617-
CodeOfPolicies builtinPolicies;
618-
builtinPolicies.version_2_syntax = false; // NOTE: no version 2 syntax in builtin modules (yet)
619686
auto program = parseDaScript(modName, "", access, issues, dummyLibGroup, true);
620687
ownFileInfo = access->letGoOfFileInfo(modName);
621688
DAS_ASSERTF(ownFileInfo,"something went wrong and FileInfo for builtin module can not be obtained");
622-
if ( program ) {
623-
if (program->failed()) {
624-
for (auto & err : program->errors) {
625-
issues << reportError(err.at, err.what, err.extra, err.fixme, err.cerr);
626-
}
627-
DAS_FATAL_ERROR("%s\nbuiltin module did not compile %s\n", issues.str().c_str(), modName.c_str());
628-
return false;
629-
}
630-
// ok, now let's rip content
631-
program->thisModule->aliasTypes.foreach([&](auto aliasTypePtr){
632-
addAlias(aliasTypePtr);
633-
});
634-
program->thisModule->enumerations.foreach([&](auto penum){
635-
addEnumeration(penum);
636-
});
637-
program->thisModule->structures.foreach([&](auto pst){
638-
addStructure(pst);
639-
});
640-
program->thisModule->generics.foreach([&](auto fn){
641-
addGeneric(fn);
642-
});
643-
program->thisModule->globals.foreach([&](auto gvar){
644-
addVariable(gvar);
645-
});
646-
program->thisModule->functions.foreach([&](auto fn){
647-
addFunction(fn);
648-
});
649-
for (auto & rqm : program->thisModule->requireModule) {
650-
if ( rqm.first != this ) {
651-
requireModule[rqm.first] |= rqm.second;
652-
}
653-
}
654-
// macros
655-
auto ptm = program->thisModule.get();
656-
if ( ptm->macroContext ) {
657-
swap ( macroContext, ptm->macroContext );
658-
ptm->handleTypes.foreach([&](auto fna){
659-
addAnnotation(fna);
660-
});
661-
}
662-
simulateMacros.insert(simulateMacros.end(), ptm->simulateMacros.begin(), ptm->simulateMacros.end());
663-
captureMacros.insert(captureMacros.end(), ptm->captureMacros.begin(), ptm->captureMacros.end());
664-
forLoopMacros.insert(forLoopMacros.end(), ptm->forLoopMacros.begin(), ptm->forLoopMacros.end());
665-
variantMacros.insert(variantMacros.end(), ptm->variantMacros.begin(), ptm->variantMacros.end());
666-
macros.insert(macros.end(), ptm->macros.begin(), ptm->macros.end());
667-
inferMacros.insert(inferMacros.end(), ptm->inferMacros.begin(), ptm->inferMacros.end());
668-
optimizationMacros.insert(optimizationMacros.end(), ptm->optimizationMacros.begin(), ptm->optimizationMacros.end());
669-
lintMacros.insert(lintMacros.end(), ptm->lintMacros.begin(), ptm->lintMacros.end());
670-
globalLintMacros.insert(globalLintMacros.end(), ptm->globalLintMacros.begin(), ptm->globalLintMacros.end());
671-
for ( auto & rm : ptm->readMacros ) {
672-
addReaderMacro(rm.second);
673-
}
674-
for ( auto & tm : ptm->typeMacros ) {
675-
addTypeMacro(tm.second);
676-
}
677-
commentReader = ptm->commentReader;
678-
for ( auto & op : ptm->options) {
679-
DAS_ASSERTF(options.find(op.first)==options.end(),"duplicate option %s", op.first.c_str());
680-
options[op.first] = op.second;
681-
}
682-
SubstituteBuiltinModuleRefs( program, program->thisModule.get(), this );
683-
return true;
684-
} else {
685-
DAS_FATAL_ERROR("builtin module did not parse %s\n", modName.c_str());
686-
return false;
687-
}
689+
return appendBuiltinModuleContent(this, program, modName);
690+
}
691+
692+
bool Module::compileBuiltinModule ( const string & modName, const string & filePath, const FileAccessPtr & access ) {
693+
TextWriter issues;
694+
ModuleGroup dummyLibGroup;
695+
auto program = parseDaScript(filePath, modName, access, issues, dummyLibGroup, true);
696+
const char *src; uint32_t length;
697+
access->getFileInfo(filePath)->getSourceAndLength(src, length);
698+
ownFileInfo = make_unique<TextFileInfo>((char *) src, uint32_t(length), false);
699+
DAS_ASSERTF(ownFileInfo,"something went wrong and FileInfo for builtin module can not be obtained");
700+
return appendBuiltinModuleContent(this, program, modName);
688701
}
689702

690703
bool isValidBuiltinName ( const string & name, bool canPunkt ) {

src/ast/ast_parse.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1096,6 +1096,12 @@ namespace das {
10961096
vector<NamelessMismatch> namelessMismatches;
10971097
uint64_t preqT = 0;
10981098
string modName;
1099+
auto builtinModule = Module::require("$");
1100+
DAS_ASSERTF(builtinModule, "Somehow `builtin` module is missing.")
1101+
if (!builtinModule->getFileInfo()) {
1102+
// compile daslib builtin module into its C++ module (once)
1103+
builtinModule->compileBuiltinModule("builtin.das", getDasRoot() + "/daslib/builtin.das", access);
1104+
}
10991105
bool allGood = true;
11001106
for ( const auto & em : access->getExtraModules() ) {
11011107
allGood = addExtraDependency(em.first, em.second, missing, circular, notAllowed, req, dependencies, namelessReq, namelessMismatches, access, libGroup, policies, &logs) && allGood;

0 commit comments

Comments
 (0)