mjplusplus  v0.4.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
firm::visitor::MemberVisitor Class Reference

#include <MemberVisitor.hpp>

Inheritance diagram for firm::visitor::MemberVisitor:
firm::visitor::FirmVisitor ast::ASTVisitor

Public Member Functions

 MemberVisitor (ClassVisitor &classVisitor)
 
virtual void visit (shptr< const ast::MethodDeclaration > methodDeclaration)
 
virtual void visit (shptr< const ast::MainMethodDeclaration > mainMethodDecl)
 
virtual void visit (shptr< const ast::FieldDeclaration >)
 
ir_graph * getGraph () const
 
- Public Member Functions inherited from firm::visitor::FirmVisitor
 FirmVisitor ()
 
virtual void setOwner (ir_type *owner)
 
virtual ir_type * getOwner () const
 
- Public Member Functions inherited from ast::ASTVisitor
virtual void visit (shptr< Node const > node)
 
virtual void visit (shptr< Arguments const > node)
 
virtual void visit (shptr< be::BinaryExpression const > node)
 
virtual void visit (shptr< be::AndAnd const > node)
 
virtual void visit (shptr< be::Eq const > node)
 
virtual void visit (shptr< be::EqEq const > node)
 
virtual void visit (shptr< be::GreaterThan const > node)
 
virtual void visit (shptr< be::GreaterThanEq const > node)
 
virtual void visit (shptr< be::Invalid const > node)
 
virtual void visit (shptr< be::LessThan const > node)
 
virtual void visit (shptr< be::LessThanEq const > node)
 
virtual void visit (shptr< be::Minus const > node)
 
virtual void visit (shptr< be::Mod const > node)
 
virtual void visit (shptr< be::Mult const > node)
 
virtual void visit (shptr< be::NotEq const > node)
 
virtual void visit (shptr< be::OrOr const > node)
 
virtual void visit (shptr< be::Plus const > node)
 
virtual void visit (shptr< be::Slash const > node)
 
virtual void visit (shptr< ClassDeclaration const > node)
 
virtual void visit (shptr< ClassMember const > node)
 
virtual void visit (shptr< Expression const > node)
 
virtual void visit (shptr< Ident const > node)
 
virtual void visit (shptr< pe::PrimaryExpression const > node)
 
virtual void visit (shptr< pe::Bool const > node)
 
virtual void visit (shptr< pe::Ident const > node)
 
virtual void visit (shptr< pe::Integer const > node)
 
virtual void visit (shptr< pe::MethodInvocation const > node)
 
virtual void visit (shptr< pe::NewArrayExpression const > node)
 
virtual void visit (shptr< pe::NewObjectExpression const > node)
 
virtual void visit (shptr< pe::Object const > node)
 
virtual void visit (shptr< po::PostfixExpression const > node)
 
virtual void visit (shptr< po::PostfixOp const > node)
 
virtual void visit (shptr< po::ArrayAccess const > node)
 
virtual void visit (shptr< po::FieldAccess const > node)
 
virtual void visit (shptr< po::MethodInvocation const > node)
 
virtual void visit (shptr< Program const > node)
 
virtual void visit (shptr< stmt::Statement const > node)
 
virtual void visit (shptr< stmt::Block const > node)
 
virtual void visit (shptr< stmt::ExpressionStatement const > node)
 
virtual void visit (shptr< stmt::IfStatement const > node)
 
virtual void visit (shptr< stmt::LVDStatement const > node)
 
virtual void visit (shptr< stmt::ReturnStatement const > node)
 
virtual void visit (shptr< stmt::WhileStatement const > node)
 
virtual void visit (shptr< Type const > node)
 
virtual void visit (shptr< TypeIdent const > node)
 
virtual void visit (shptr< ue::UnaryExpression const > node)
 
virtual void visit (shptr< ue::Neg const > node)
 
virtual void visit (shptr< ue::Not const > node)
 

Protected Member Functions

void visitMethodBodyAndFinalize (shptr< const ast::MethodDeclaration > methodDeclaration, ir_graph *irg)
 

Protected Attributes

ir_graph * function_graph
 
ClassVisitorclassVisitor
 
- Protected Attributes inherited from firm::visitor::FirmVisitor
ir_type * owner
 

Constructor & Destructor Documentation

firm::visitor::MemberVisitor::MemberVisitor ( ClassVisitor classVisitor)

Constructs a MemberVisitor from the given ClassVisitor. Sets this owner to the one from the ClassVisitor.

Parameters
classVisitorthe given ClassVisitor

Member Function Documentation

ir_graph * firm::visitor::MemberVisitor::getGraph ( ) const

Get the current graph.

Returns
function graph
void firm::visitor::MemberVisitor::visit ( shptr< const ast::MethodDeclaration methodDeclaration)
virtual

Gets the entity of the corresponding method from the FirmInterface using the owner and mangled name and then creates a new function graph from it and the number of local variables. Then it evaluates the method body with the help of a StatementVisitor, optimizes and then finalizes the graph.

Parameters
methodDeclarationthe method's declaration
See also
FirmInterface
MemberVisitor::visitMethodBodyAndFinalize

Reimplemented from ast::ASTVisitor.

void firm::visitor::MemberVisitor::visit ( shptr< const ast::MainMethodDeclaration mainMethodDecl)
virtual

Creates a new Method-entity for the main method and uses it for a new function graph. This is then evaluated, optimized and finalized.

Parameters
mainMethodDeclthe methods' declaration
See also
MemberVisitor::visitMethodBodyAndFinalize

Reimplemented from ast::ASTVisitor.

void firm::visitor::MemberVisitor::visit ( shptr< const ast::FieldDeclaration )
virtual

Nothing to be done for fields.

Reimplemented from ast::ASTVisitor.

void firm::visitor::MemberVisitor::visitMethodBodyAndFinalize ( shptr< const ast::MethodDeclaration methodDeclaration,
ir_graph *  irg 
)
protected

Create method body firm nodes, create local variables for parameters and add a trailing return statement if necessary. After that the graph is optimized and then finalized.

Parameters
methodDeclarationthe method's declaration
irgthe graph for this method call
See also
StatementVisitor

Member Data Documentation

ClassVisitor& firm::visitor::MemberVisitor::classVisitor
protected

The calling ClassVisitor

ir_graph* firm::visitor::MemberVisitor::function_graph
protected

The resulting function graph


The documentation for this class was generated from the following files: