| 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 |
no test coverage detected