aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ChangeLog5
-rw-r--r--src/Makefile.am1
-rw-r--r--src/Makefile.in1
-rw-r--r--src/include/diagnostics.H55
-rw-r--r--src/io/Makefile.am2
-rw-r--r--src/io/Makefile.in20
-rw-r--r--src/io/std-streams.cc57
7 files changed, 138 insertions, 3 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 50be349c..30e2eea7 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,10 @@
2013-06-20 Gabriel Dos Reis <gdr@integrable-solutions.net>
+ * include/diagnostics.H: New.
+ * io/std-streams.cc: Likewise.
+
+2013-06-20 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
* boot/scanner.boot (shoeToken): Allow inerts.
* boot/ast.boot (bfInert): New.
* boot/parser.boot (bpInert): New.
diff --git a/src/Makefile.am b/src/Makefile.am
index 94d31b28..0758724c 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -52,6 +52,7 @@ oa_src_include_headers = \
structure.H \
iterator.H \
Input.H \
+ diagnostics.H \
token.H
if OA_BUILD_SMAN
diff --git a/src/Makefile.in b/src/Makefile.in
index b1c47d63..f8d671ce 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -369,6 +369,7 @@ oa_src_include_headers = \
structure.H \
iterator.H \
Input.H \
+ diagnostics.H \
token.H
@OA_BUILD_SMAN_TRUE@OA_SMAN_TARGETS = all-sman all-clef
diff --git a/src/include/diagnostics.H b/src/include/diagnostics.H
new file mode 100644
index 00000000..8f877e2f
--- /dev/null
+++ b/src/include/diagnostics.H
@@ -0,0 +1,55 @@
+// Copyright (C) 2013, Gabriel Dos Reis.
+// All rights reserved.
+// Written by Gabriel Dos Reis.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// - Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//
+// - Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in
+// the documentation and/or other materials provided with the
+// distribution.
+//
+// - Neither the name of OpenAxiom. nor the names of its contributors
+// may be used to endorse or promote products derived from this
+// software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef OPENAXIOM_DIAGNOSTICS_included
+#define OPENAXIOM_DIAGNOSTICS_included
+
+#include <iostream>
+
+namespace OpenAxiom {
+ namespace Diagnostics {
+ struct StandardStream {
+ StandardStream(std::ostream& = std::cout, std::ostream& = std::cerr);
+ ~StandardStream();
+
+ std::ostream& output() const { return *out; }
+ std::ostream& error() const { return *err; }
+ std::ostream& set_output(std::ostream&);
+ std::ostream& set_error(std::ostream&);
+ private:
+ std::ostream* out;
+ std::ostream* err;
+ };
+ }
+}
+
+#endif
diff --git a/src/io/Makefile.am b/src/io/Makefile.am
index bc1b59f5..63fbf41e 100644
--- a/src/io/Makefile.am
+++ b/src/io/Makefile.am
@@ -32,7 +32,7 @@
noinst_LIBRARIES = libio.a
-libio_a_SOURCES = Input.cc
+libio_a_SOURCES = Input.cc std-streams.cc
oa_target_incdir = $(top_builddir)/$(target)/include
diff --git a/src/io/Makefile.in b/src/io/Makefile.in
index 62adb6a3..728286d7 100644
--- a/src/io/Makefile.in
+++ b/src/io/Makefile.in
@@ -108,7 +108,8 @@ am__v_AR_0 = @echo " AR " $@;
am__v_AR_1 =
libio_a_AR = $(AR) $(ARFLAGS)
libio_a_LIBADD =
-am_libio_a_OBJECTS = libio_a-Input.$(OBJEXT)
+am_libio_a_OBJECTS = libio_a-Input.$(OBJEXT) \
+ libio_a-std-streams.$(OBJEXT)
libio_a_OBJECTS = $(am_libio_a_OBJECTS)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -347,7 +348,7 @@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
void_type = @void_type@
noinst_LIBRARIES = libio.a
-libio_a_SOURCES = Input.cc
+libio_a_SOURCES = Input.cc std-streams.cc
oa_target_incdir = $(top_builddir)/$(target)/include
libio_a_CPPFLAGS = -I$(top_srcdir)/src/include -I$(oa_target_incdir)
all: all-am
@@ -399,6 +400,7 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libio_a-Input.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libio_a-std-streams.Po@am__quote@
.cc.o:
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -435,6 +437,20 @@ libio_a-Input.obj: Input.cc
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libio_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libio_a-Input.obj `if test -f 'Input.cc'; then $(CYGPATH_W) 'Input.cc'; else $(CYGPATH_W) '$(srcdir)/Input.cc'; fi`
+libio_a-std-streams.o: std-streams.cc
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libio_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libio_a-std-streams.o -MD -MP -MF $(DEPDIR)/libio_a-std-streams.Tpo -c -o libio_a-std-streams.o `test -f 'std-streams.cc' || echo '$(srcdir)/'`std-streams.cc
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libio_a-std-streams.Tpo $(DEPDIR)/libio_a-std-streams.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='std-streams.cc' object='libio_a-std-streams.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libio_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libio_a-std-streams.o `test -f 'std-streams.cc' || echo '$(srcdir)/'`std-streams.cc
+
+libio_a-std-streams.obj: std-streams.cc
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libio_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libio_a-std-streams.obj -MD -MP -MF $(DEPDIR)/libio_a-std-streams.Tpo -c -o libio_a-std-streams.obj `if test -f 'std-streams.cc'; then $(CYGPATH_W) 'std-streams.cc'; else $(CYGPATH_W) '$(srcdir)/std-streams.cc'; fi`
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libio_a-std-streams.Tpo $(DEPDIR)/libio_a-std-streams.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='std-streams.cc' object='libio_a-std-streams.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libio_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libio_a-std-streams.obj `if test -f 'std-streams.cc'; then $(CYGPATH_W) 'std-streams.cc'; else $(CYGPATH_W) '$(srcdir)/std-streams.cc'; fi`
+
mostlyclean-libtool:
-rm -f *.lo
diff --git a/src/io/std-streams.cc b/src/io/std-streams.cc
new file mode 100644
index 00000000..a0a470ee
--- /dev/null
+++ b/src/io/std-streams.cc
@@ -0,0 +1,57 @@
+// Copyright (C) 2013, Gabriel Dos Reis.
+// All rights reserved.
+// Written by Gabriel Dos Reis.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// - Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//
+// - Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in
+// the documentation and/or other materials provided with the
+// distribution.
+//
+// - Neither the name of OpenAxiom. nor the names of its contributors
+// may be used to endorse or promote products derived from this
+// software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include <open-axiom/diagnostics>
+
+namespace OpenAxiom {
+ namespace Diagnostics {
+ StandardStream::StandardStream(std::ostream& o, std::ostream& e)
+ : out(&o), err(&e)
+ { }
+
+ StandardStream::~StandardStream() = default;
+
+ std::ostream&
+ StandardStream::set_output(std::ostream& os) {
+ auto prev = out;
+ out = &os;
+ return *prev;
+ }
+
+ std::ostream&
+ StandardStream::set_error(std::ostream& os) {
+ auto prev = err;
+ err = &os;
+ return *prev;
+ }
+ }
+}