Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/CodeGen/FixMain.cc

    ra16764a6 rbf2438c  
    2323
    2424#include "Common/SemanticError.h"  // for SemanticError
    25 #include "CodeGen/GenType.h"       // for GenType
    2625#include "SynTree/Declaration.h"   // for FunctionDecl, operator<<
    2726#include "SynTree/Type.h"          // for FunctionType
     
    3130        std::unique_ptr<FunctionDecl> FixMain::main_signature = nullptr;
    3231
    33         template<typename container>
    34         std::string genTypeAt(const container& p, size_t idx) {
    35                 return genType((*std::next(p.begin(), idx))->get_type(), "");
    36         }
    37 
    3832        void FixMain::registerMain(FunctionDecl* functionDecl)
    3933        {
    4034                if(main_signature) {
    41                         SemanticError(functionDecl, "Multiple definition of main routine\n");
     35                        throw SemanticError("Multiple definition of main routine\n", functionDecl);
    4236                }
    4337                main_signature.reset( functionDecl->clone() );
     
    4943
    5044                        os << main_signature->get_scopedMangleName() << "(";
    51                         const auto& params = main_signature->get_functionType()->get_parameters();
    52                         switch(params.size()) {
    53                                 case 3: os << "(" << genTypeAt(params, 0) << ")argc, (" << genTypeAt(params, 1) << ")argv, (" << genTypeAt(params, 2) << ")envp"; break;
    54                                 case 2: os << "(" << genTypeAt(params, 0) << ")argc, (" << genTypeAt(params, 1) << ")argv"; break;
     45                        switch(main_signature->get_functionType()->get_parameters().size()) {
     46                                case 3: os << "argc, argv, envp"; break;
     47                                case 2: os << "argc, argv"; break;
    5548                                case 0: break;
    5649                                default : assert(false);
Note: See TracChangeset for help on using the changeset viewer.