summaryrefslogtreecommitdiff
path: root/tiger-compiler/tcsh/src/tiger_common.i
diff options
context:
space:
mode:
Diffstat (limited to 'tiger-compiler/tcsh/src/tiger_common.i')
-rw-r--r--tiger-compiler/tcsh/src/tiger_common.i73
1 files changed, 73 insertions, 0 deletions
diff --git a/tiger-compiler/tcsh/src/tiger_common.i b/tiger-compiler/tcsh/src/tiger_common.i
new file mode 100644
index 0000000..ff43652
--- /dev/null
+++ b/tiger-compiler/tcsh/src/tiger_common.i
@@ -0,0 +1,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;
+%}