summaryrefslogtreecommitdiff
path: root/source/slang/slang-serialize-ast.cpp
diff options
context:
space:
mode:
authorEllie Hermaszewska <ellieh@nvidia.com>2024-10-29 14:49:26 +0800
committerGitHub <noreply@github.com>2024-10-29 14:49:26 +0800
commitf65d756bff8d4c5cbc15bd0322a2ae8e6b896a21 (patch)
treeea1d61342cd29368e19135000ec2948813096205 /source/slang/slang-serialize-ast.cpp
parenta729c15e9dce9f5116a38afc66329ab2ca4cea54 (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.cpp94
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);