summaryrefslogtreecommitdiff
path: root/source/slang/slang-ast-dump.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-ast-dump.cpp')
-rw-r--r--source/slang/slang-ast-dump.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/source/slang/slang-ast-dump.cpp b/source/slang/slang-ast-dump.cpp
index d016d1c15..7dba55c52 100644
--- a/source/slang/slang-ast-dump.cpp
+++ b/source/slang/slang-ast-dump.cpp
@@ -644,6 +644,55 @@ struct ASTDumpContext
m_writer->emit(")");
}
+ void dump(const SPIRVAsmOperand& operand)
+ {
+ switch(operand.flavor)
+ {
+ case SPIRVAsmOperand::Id:
+ m_writer->emit("%");
+ break;
+ case SPIRVAsmOperand::Literal:
+ case SPIRVAsmOperand::NamedValue:
+ break;
+ case SPIRVAsmOperand::SlangValue:
+ m_writer->emit("$");
+ break;
+ case SPIRVAsmOperand::SlangValueAddr:
+ m_writer->emit("&");
+ break;
+ case SPIRVAsmOperand::SlangType:
+ m_writer->emit("$$");
+ break;
+ default:
+ SLANG_UNREACHABLE("Unhandled case in ast dump for SPIRVAsmOperand");
+ }
+ if(operand.expr)
+ dump(operand.expr);
+ else
+ dump(operand.token);
+ }
+
+ void dump(const SPIRVAsmInst& inst)
+ {
+ dump(inst.opcode);
+ for(const auto& o : inst.operands)
+ dump(o);
+ }
+
+ void dump(const SPIRVAsmExpr& expr)
+ {
+ m_writer->emit("spirv_asm\n");
+ m_writer->emit("{\n");
+ m_writer->indent();
+ for(const auto& i : expr.insts)
+ {
+ dump(i);
+ m_writer->emit(";\n");
+ }
+ m_writer->dedent();
+ m_writer->emit("}");
+ }
+
void dumpObjectFull(NodeBase* node);
ASTDumpContext(SourceWriter* writer, ASTDumpUtil::Flags flags, ASTDumpUtil::Style dumpStyle):