From 8506cbe9209041cca7a9dbf3a598be4088d1b7ad Mon Sep 17 00:00:00 2001 From: Alexandre Bique Date: Thu, 5 Mar 2009 09:09:32 +0000 Subject: [PATCH] implemented unary exp in llvm generator --- src/ast/llvm-generator-visitor.cc | 28 ++++++++++++++++++++++++---- src/ast/llvm-generator-visitor.hh | 4 ++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/ast/llvm-generator-visitor.cc b/src/ast/llvm-generator-visitor.cc index 25074d4..3582cee 100644 --- a/src/ast/llvm-generator-visitor.cc +++ b/src/ast/llvm-generator-visitor.cc @@ -198,11 +198,31 @@ namespace ast GEN_DIV_MOD_EXP(Div) GEN_DIV_MOD_EXP(Mod) - // void - // LLVMGeneratorVisitor::visit(const EqExp & node) - // { - // } + void + LLVMGeneratorVisitor::visit(const NegExp & node) + { + out_ << "sub "; + node.type->accept(*this); + out_ << " 0, "; + node.exp->accept(*this); + } + + void + LLVMGeneratorVisitor::visit(const BangExp & node) + { + out_ << "xor i1 1b, "; + node.exp->accept(*this); + } + + void + LLVMGeneratorVisitor::visit(const NotExp & node) + { + out_ << "xor "; + node.type->accept(*this); + out_ << " -1, "; + node.exp->accept(*this); + } void LLVMGeneratorVisitor::visit(const IdExp & node) diff --git a/src/ast/llvm-generator-visitor.hh b/src/ast/llvm-generator-visitor.hh index d0e801a..71b2752 100644 --- a/src/ast/llvm-generator-visitor.hh +++ b/src/ast/llvm-generator-visitor.hh @@ -56,6 +56,10 @@ namespace ast virtual void visit(const AndAndExp & node); virtual void visit(const OrOrExp & node); + virtual void visit(const NotExp & node); + virtual void visit(const BangExp & node); + virtual void visit(const NegExp & node); + virtual void visit(const EqExp & node); virtual void visit(const NeqExp & node); virtual void visit(const LtExp & node); -- 2.11.4.GIT