diff options
| author | Ellie Hermaszewska <ellieh@nvidia.com> | 2024-10-29 14:49:26 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-29 14:49:26 +0800 |
| commit | f65d756bff8d4c5cbc15bd0322a2ae8e6b896a21 (patch) | |
| tree | ea1d61342cd29368e19135000ec2948813096205 /source/slang/slang-serialize-ast.cpp | |
| parent | a729c15e9dce9f5116a38afc66329ab2ca4cea54 (diff) | |
format
* format
* Minor test fixes
* enable checking cpp format in ci
Diffstat (limited to 'source/slang/slang-serialize-ast.cpp')
| -rw-r--r-- | source/slang/slang-serialize-ast.cpp | 94 |
1 files changed, 59 insertions, 35 deletions
diff --git a/source/slang/slang-serialize-ast.cpp b/source/slang/slang-serialize-ast.cpp index 2465de812..a7837edea 100644 --- a/source/slang/slang-serialize-ast.cpp +++ b/source/slang/slang-serialize-ast.cpp @@ -1,46 +1,59 @@ // slang-serialize-ast.cpp #include "slang-serialize-ast.h" -#include "slang-generated-ast.h" -#include "slang-generated-ast-macro.h" - #include "slang-ast-dump.h" - #include "slang-ast-support-types.h" - +#include "slang-generated-ast-macro.h" +#include "slang-generated-ast.h" #include "slang-serialize-ast-type-info.h" - #include "slang-serialize-factory.h" -namespace Slang { +namespace Slang +{ // !!!!!!!!!!!!!!!!!!!!!! Generate fields for a type !!!!!!!!!!!!!!!!!!!!!!!!!!! -static const SerialClass* _addClass(SerialClasses* serialClasses, ASTNodeType type, ASTNodeType super, const List<SerialField>& fields) +static const SerialClass* _addClass( + SerialClasses* serialClasses, + ASTNodeType type, + ASTNodeType super, + const List<SerialField>& fields) { - const SerialClass* superClass = serialClasses->getSerialClass(SerialTypeKind::NodeBase, SerialSubType(super)); - return serialClasses->add(SerialTypeKind::NodeBase, SerialSubType(type), fields.getBuffer(), fields.getCount(), superClass); + const SerialClass* superClass = + serialClasses->getSerialClass(SerialTypeKind::NodeBase, SerialSubType(super)); + return serialClasses->add( + SerialTypeKind::NodeBase, + SerialSubType(type), + fields.getBuffer(), + fields.getCount(), + superClass); } -#define SLANG_AST_ADD_SERIAL_FIELD(FIELD_NAME, TYPE, param) fields.add(SerialField::make(#FIELD_NAME, &obj->FIELD_NAME)); - -// Note that the obj point is not nullptr, because some compilers notice this is 'indexing from null' -// and warn/error. So we offset from 1. -#define SLANG_AST_ADD_SERIAL_CLASS(NAME, SUPER, ORIGIN, LAST, MARKER, TYPE, param) \ -{ \ - NAME* obj = SerialField::getPtr<NAME>(); \ - SLANG_UNUSED(obj); \ - fields.clear(); \ - SLANG_FIELDS_ASTNode_##NAME(SLANG_AST_ADD_SERIAL_FIELD, param) \ - _addClass(serialClasses, ASTNodeType::NAME, ASTNodeType::SUPER, fields); \ -} +#define SLANG_AST_ADD_SERIAL_FIELD(FIELD_NAME, TYPE, param) \ + fields.add(SerialField::make(#FIELD_NAME, &obj->FIELD_NAME)); + +// Note that the obj point is not nullptr, because some compilers notice this is 'indexing from +// null' and warn/error. So we offset from 1. +#define SLANG_AST_ADD_SERIAL_CLASS(NAME, SUPER, ORIGIN, LAST, MARKER, TYPE, param) \ + { \ + NAME* obj = SerialField::getPtr<NAME>(); \ + SLANG_UNUSED(obj); \ + fields.clear(); \ + SLANG_FIELDS_ASTNode_##NAME(SLANG_AST_ADD_SERIAL_FIELD, param) \ + _addClass(serialClasses, ASTNodeType::NAME, ASTNodeType::SUPER, fields); \ + } struct ASTFieldAccess { static void calcClasses(SerialClasses* serialClasses) { // Add NodeBase first, and specially handle so that we add a null super class - serialClasses->add(SerialTypeKind::NodeBase, SerialSubType(ASTNodeType::NodeBase), nullptr, 0, nullptr); + serialClasses->add( + SerialTypeKind::NodeBase, + SerialSubType(ASTNodeType::NodeBase), + nullptr, + 0, + nullptr); // Add the rest in order such that Super class is always added before its children List<SerialField> fields; @@ -50,12 +63,16 @@ struct ASTFieldAccess // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ASTSerialUtil !!!!!!!!!!!!!!!!!!!!!!!!!!!! -/* static */void ASTSerialUtil::addSerialClasses(SerialClasses* serialClasses) +/* static */ void ASTSerialUtil::addSerialClasses(SerialClasses* serialClasses) { - ASTFieldAccess::calcClasses(serialClasses); + ASTFieldAccess::calcClasses(serialClasses); } - -/* static */SlangResult ASTSerialUtil::testSerialize(NodeBase* node, RootNamePool* rootNamePool, SharedASTBuilder* sharedASTBuilder, SourceManager* sourceManager) + +/* static */ SlangResult ASTSerialUtil::testSerialize( + NodeBase* node, + RootNamePool* rootNamePool, + SharedASTBuilder* sharedASTBuilder, + SourceManager* sourceManager) { RefPtr<SerialClasses> classes; @@ -96,7 +113,11 @@ struct ASTFieldAccess const List<SerialInfo::Entry*>& writtenEntries = writer.getEntries(); List<const SerialInfo::Entry*> readEntries; - SlangResult res = SerialReader::loadEntries(contents.getBuffer(), contents.getCount(), classes, readEntries); + SlangResult res = SerialReader::loadEntries( + contents.getBuffer(), + contents.getCount(), + classes, + readEntries); SLANG_UNUSED(res); SLANG_ASSERT(writtenEntries.getCount() == readEntries.getCount()); @@ -116,25 +137,28 @@ struct ASTFieldAccess // Check the payload is the same SLANG_ASSERT(memcmp(readEntry, writtenEntry, readSize) == 0); } - } SerialReader reader(classes, nullptr); { - + SlangResult res = reader.load(contents.getBuffer(), contents.getCount(), &namePool); SLANG_UNUSED(res); } // Lets see what we have - const ASTDumpUtil::Flags dumpFlags = ASTDumpUtil::Flag::HideSourceLoc | ASTDumpUtil::Flag::HideScope; + const ASTDumpUtil::Flags dumpFlags = + ASTDumpUtil::Flag::HideSourceLoc | ASTDumpUtil::Flag::HideScope; String readDump; { SourceWriter sourceWriter(sourceManager, LineDirectiveMode::None, nullptr); - ASTDumpUtil::dump(reader.getPointer(SerialIndex(1)).dynamicCast<NodeBase>(), ASTDumpUtil::Style::Hierachical, dumpFlags, &sourceWriter); + ASTDumpUtil::dump( + reader.getPointer(SerialIndex(1)).dynamicCast<NodeBase>(), + ASTDumpUtil::Style::Hierachical, + dumpFlags, + &sourceWriter); readDump = sourceWriter.getContentAndClear(); - } String origDump; { @@ -156,9 +180,9 @@ struct ASTFieldAccess return SLANG_OK; } -/* static */List<uint8_t> ASTSerialUtil::serializeAST(ModuleDecl* moduleDecl) +/* static */ List<uint8_t> ASTSerialUtil::serializeAST(ModuleDecl* moduleDecl) { - //TODO: we should store `classes` in GlobalSession to avoid recomputing them every time. + // TODO: we should store `classes` in GlobalSession to avoid recomputing them every time. RefPtr<SerialClasses> classes; SerialClassesUtil::create(classes); |
