summaryrefslogtreecommitdiff
path: root/src/ast/expr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ast/expr.cpp')
-rw-r--r--src/ast/expr.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/ast/expr.cpp b/src/ast/expr.cpp
index cc6ca98f..6983221d 100644
--- a/src/ast/expr.cpp
+++ b/src/ast/expr.cpp
@@ -101,6 +101,18 @@ NODE(ExprNode_Macro, {
return NEWNODE(ExprNode_Macro, m_name, m_ident, m_tokens.clone());
})
+NODE(ExprNode_Asm, {
+ os << "asm!()";
+},{
+ ::std::vector<ExprNode_Asm::ValRef> outputs;
+ for(const auto& v : m_output)
+ outputs.push_back( ExprNode_Asm::ValRef { v.name, v.value->clone() });
+ ::std::vector<ExprNode_Asm::ValRef> inputs;
+ for(const auto& v : m_input)
+ inputs.push_back( ExprNode_Asm::ValRef { v.name, v.value->clone() });
+ return NEWNODE(ExprNode_Asm, m_text, mv$(outputs), mv$(inputs), m_clobbers, m_flags);
+})
+
NODE(ExprNode_Flow, {
switch(m_type)
{
@@ -418,6 +430,13 @@ NV(ExprNode_Macro,
{
BUG(node.get_pos(), "Hit unexpanded macro in expression - " << node);
})
+NV(ExprNode_Asm,
+{
+ for(auto& v : node.m_output)
+ visit(v.value);
+ for(auto& v : node.m_input)
+ visit(v.value);
+})
NV(ExprNode_Flow,
{
visit(node.m_value);