Changeset c6b4432 for src/CodeGen/FixNames.cc
- Timestamp:
- Nov 8, 2023, 2:01:11 PM (7 months ago)
- Branches:
- master
- Children:
- 3e4bf0d, f5ec35a
- Parents:
- 790d835
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/CodeGen/FixNames.cc
r790d835 rc6b4432 22 22 #include "AST/Expr.hpp" 23 23 #include "AST/Pass.hpp" 24 #include "Common/PassVisitor.h"25 24 #include "Common/SemanticError.h" // for SemanticError 26 25 #include "FixMain.h" // for FixMain 27 26 #include "SymTab/Mangler.h" // for Mangler 28 #include "SynTree/LinkageSpec.h" // for Cforall, isMangled29 #include "SynTree/Constant.h" // for Constant30 #include "SynTree/Declaration.h" // for FunctionDecl, ObjectDecl, Declarat...31 #include "SynTree/Expression.h" // for ConstantExpr32 #include "SynTree/Label.h" // for Label, noLabels33 #include "SynTree/Statement.h" // for ReturnStmt, CompoundStmt34 #include "SynTree/Type.h" // for Type, BasicType, Type::Qualifiers35 #include "SynTree/Visitor.h" // for Visitor, acceptAll36 27 #include "CompilationState.h" 37 28 38 29 namespace CodeGen { 39 class FixNames : public WithGuards {40 public:41 void postvisit( ObjectDecl *objectDecl );42 void postvisit( FunctionDecl *functionDecl );43 44 void previsit( CompoundStmt *compoundStmt );45 private:46 int scopeLevel = 1;47 48 void fixDWT( DeclarationWithType *dwt );49 };50 51 void fixNames( std::list< Declaration* > & translationUnit ) {52 PassVisitor<FixNames> fixer;53 acceptAll( translationUnit, fixer );54 }55 56 void FixNames::fixDWT( DeclarationWithType * dwt ) {57 if ( dwt->get_name() != "" ) {58 if ( LinkageSpec::isMangled( dwt->get_linkage() ) ) {59 if (!useNewAST) {60 dwt->set_mangleName( SymTab::Mangler::mangle( dwt ) );61 }62 dwt->set_scopeLevel( scopeLevel );63 } // if64 } // if65 }66 67 void FixNames::postvisit( ObjectDecl * objectDecl ) {68 fixDWT( objectDecl );69 }70 71 void FixNames::postvisit( FunctionDecl * functionDecl ) {72 fixDWT( functionDecl );73 74 if ( FixMain::isMain( functionDecl ) ) {75 int nargs = functionDecl->get_functionType()->get_parameters().size();76 if( !(nargs == 0 || nargs == 2 || nargs == 3) ) {77 SemanticError(functionDecl, "Main expected to have 0, 2 or 3 arguments\n");78 }79 functionDecl->get_statements()->get_kids().push_back( new ReturnStmt( new ConstantExpr( Constant::from_int( 0 ) ) ) );80 }81 }82 83 void FixNames::previsit( CompoundStmt * ) {84 scopeLevel++;85 GuardAction( [this](){ scopeLevel--; } );86 }87 88 30 /// Does work with the main function and scopeLevels. 89 31 class FixNames_new final {
Note: See TracChangeset
for help on using the changeset viewer.