Program Listing for File quack_program.h

Return to documentation for file (src/quack_program.h)

//
// Created by Zayd Hammoudeh on 10/4/18.
//

#ifndef PROJECT02_QUACK_PROGRAM_H
#define PROJECT02_QUACK_PROGRAM_H

#include <vector>
#include <string>
#include <iostream>

#include "ASTNode.h"
#include "quack_class.h"
#include "quack_method.h"
#include "keywords.h"

namespace CodeGen { class Gen; }

namespace Quack {
  // Forward Declarations
  class TypeChecker;

  class Program {
    friend class TypeChecker;
    friend class CodeGen::Gen;

   public:
    explicit Program(Class::Container *classes, AST::Block *block) : classes_(classes) {
      main_ = new Method(METHOD_MAIN, CLASS_NOTHING, new Param::Container(), block);
    }

    ~Program() {
      //delete classes_; // Cleared when the singleton is cleared
      delete main_;
    }

    void print_original_src() {
      if (classes_)
        classes_->print_original_src(0);
      std::cout << "\n";
      if (main_ && main_->block_)
        main_->block_->print_original_src(0);
      std::cout << std::flush;
    }

   private:
    Class::Container *classes_;
    Quack::Method* main_;
  };
}

#endif //PROJECT02_QUACK_PROGRAM_H