summaryrefslogtreecommitdiff
path: root/tiger-compiler/tcsh/src/tiger_common.i
blob: ff43652b0d0571c1b38ce605136c06449f61a7c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// -*- C++ -*-

%module tiger_common

%include std_string.i

%{
  #include <fstream>
  #include <sstream>
  #include <iostream>
  #include <cassert>
  #include <string>
  #include <misc/timer.hh>
%}

// Warning 454: Setting a pointer/reference variable may leak memory.
%warnfilter(454) Cout;
%warnfilter(454) Cerr;
%warnfilter(454) Clog;

// Ofstream.
%inline %{
  struct Ofstream
  {
    Ofstream (const std::string& filename) : closed_ (false)
    {
      stream_ = new std::ofstream (filename.c_str ());
    }

    ~Ofstream ()
    {
      if (!closed_)
        close ();
    }

    std::ostream&
    to ()
    {
      assert (stream_);
      return *stream_;
    }

    void
    close ()
    {
      assert (stream_);
      stream_->close ();
      delete stream_;
      closed_ = true;
    }

    std::ofstream* stream_;
    bool closed_;
  };

  std::ostream&
  get_cout()
  {
    return std::cout;
  }

  std::ostream&
  get_cerr()
  {
    return std::cerr;
  }

  std::ostream* Cout = &std::cout;
  std::ostream* Cerr = &std::cerr;
  std::ostream* Clog = &std::clog;

  misc::timer timer;
%}