Class HDLBody

Inheritance Relationships

Base Type

  • public RecursiveASTVisitor< HDLBody >

Class Documentation

class HDLBody : public RecursiveASTVisitor<HDLBody>

Public Functions

HDLBody(CXXMethodDecl *emd, hNodep &h_top, clang::DiagnosticsEngine &diag_engine)

Entry point for SC_METHOD body generation

Starting with outer compount statement, generate hcode for each statement, recursively traversing expressions

HDLBody(Stmt *stmt, hNodep &h_top, clang::DiagnosticsEngine &diag_engine)
virtual ~HDLBody()
bool TraverseCompoundStmt(CompoundStmt *compoundStmt)
bool TraverseStmt(Stmt *stmt)
bool TraverseDeclStmt(DeclStmt *declstmt)

Process local variable and signal declarations, promoting to module level with unique names

bool ProcessVarDecl(VarDecl *vardecl)
bool TraverseBinaryOperator(BinaryOperator *expr)
bool TraverseUnaryOperator(UnaryOperator *expr)
bool TraverseConditionalOperator(ConditionalOperator *expr)
bool TraverseIntegerLiteral(IntegerLiteral *lit)
bool TraverseCXXBoolLiteralExpr(CXXBoolLiteralExpr *b)
bool TraverseDeclRefExpr(DeclRefExpr *expr)
bool TraverseArraySubscriptExpr(ArraySubscriptExpr *expr)
bool TraverseCXXMemberCallExpr(CXXMemberCallExpr *callexpr)
bool TraverseCXXOperatorCallExpr(CXXOperatorCallExpr *opcall)
bool TraverseCallExpr(CallExpr *callexpr)
bool TraverseMemberExpr(MemberExpr *memberexpr)
bool TraverseIfStmt(IfStmt *ifs)
bool TraverseForStmt(ForStmt *fors)
bool TraverseSwitchStmt(SwitchStmt *switchs)
bool ProcessSwitchCase(SwitchCase *cases)
bool TraverseWhileStmt(WhileStmt *whiles)
void AddVnames(hNodep &hvns)

Public Members

std::unordered_map<string, FunctionDecl*> methodecls
clang::DiagnosticsEngine &diag_e