MCPcopy Create free account
hub / github.com/GaijinEntertainment/daScript / trySerializeProgramModule

Function trySerializeProgramModule

src/ast/ast_parse.cpp:485–539  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

483 static DAS_THREAD_LOCAL(int64_t) totM;
484
485 bool trySerializeProgramModule (
486 ProgramPtr & program,
487 const FileAccessPtr & access,
488 const string & fileName,
489 ModuleGroup & libGroup,
490 TextWriter & logs ) {
491 auto & serializer_read = daScriptEnvironment::getBound()->serializer_read;
492 auto & serializer_write = daScriptEnvironment::getBound()->serializer_write;
493
494 if ( serializer_read == nullptr || serializer_read->seenNewModule ) {
495 return false;
496 }
497
498 int64_t file_mtime = access->getFileMtime(fileName.c_str());
499 int64_t saved_mtime = 0; *serializer_read << saved_mtime;
500 string saved_filename{}; *serializer_read << saved_filename;
501
502 if ( saved_filename != fileName || file_mtime != saved_mtime ) {
503 serializer_read->seenNewModule = true;
504 if (saved_filename != fileName) {
505 logs << "ser: file name mismatch. Expected '" << saved_filename << "', got '" << fileName << "'\n";
506 }
507 if (file_mtime != saved_mtime) {
508 logs << "ser: file mtime mismatch. Expected " << saved_mtime << ", got " << file_mtime << "\n";
509 }
510 serializer_read->failed = true;
511 return false;
512 }
513
514 serializer_read->thisModuleGroup = &libGroup;
515 serializer_read->serializeProgram(program, libGroup);
516
517 if ( program->failed()) {
518 serializer_read->seenNewModule = true;
519 serializer_read->failed = true;
520 program = make_smart<Program>();
521 logs << "ser: program failed '" << fileName << "'\n";
522 return false;
523 }
524
525 program->thisModuleGroup = &libGroup;
526
527 if ( serializer_read->failed ) {
528 serializer_read->seenNewModule = true;
529 program = make_smart<Program>();
530 logs << "ser: serialization failed. Internal issue.\n";
531 return false;
532 }
533
534 if ( serializer_write != nullptr ) {
535 serializer_write->parsedModules.push_back({fileName, file_mtime, program, program->thisModule.get()});
536 }
537
538 return true;
539 }
540
541 bool detectGen2Syntax ( const char * text, uint32_t length, bool& value ) {
542 // we search for #gen2#, and return true if its there

Callers 1

parseDaScriptFunction · 0.85

Calls 5

getFileMtimeMethod · 0.80
serializeProgramMethod · 0.80
c_strMethod · 0.45
push_backMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected