Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/CodeGen/FixNames.cc

    r0270824 raaa1a99a  
    2222#include "SymTab/Mangler.h"
    2323#include "OperatorTable.h"
    24 
    25 extern std::unique_ptr<FunctionDecl> translation_unit_main_signature;
     24#include "FixMain.h"
    2625
    2726namespace CodeGen {
     
    119118
    120119                if(is_main( SymTab::Mangler::mangle(functionDecl, true, true) )) {
    121                         if(translation_unit_main_signature) {
    122                                 throw SemanticError("Multiple definition of main routine\n", functionDecl);
     120                        int nargs = functionDecl->get_functionType()->get_parameters().size();
     121                        if( !(nargs == 0 || nargs == 2 || nargs == 3) ) {
     122                                throw SemanticError("Main expected to have 0, 2 or 3 arguments\n", functionDecl);
    123123                        }
    124 
    125124                        functionDecl->get_statements()->get_kids().push_back( new ReturnStmt( noLabels, new ConstantExpr( Constant( new BasicType( Type::Qualifiers(), BasicType::SignedInt ), "0") ) ) );
    126                         translation_unit_main_signature.reset( functionDecl->clone() );
     125                        CodeGen::FixMain::registerMain( functionDecl );
    127126                }
    128127        }
Note: See TracChangeset for help on using the changeset viewer.