diff --git a/regression/systemc/Preproc1/main.cpp b/regression/systemc/Preproc1/main.cpp new file mode 100644 index 00000000000..5e792b574d8 --- /dev/null +++ b/regression/systemc/Preproc1/main.cpp @@ -0,0 +1,7 @@ +#include + +int main(void) +{ + + return 0; +} diff --git a/regression/systemc/Preproc1/test.desc b/regression/systemc/Preproc1/test.desc new file mode 100644 index 00000000000..1c2f2ecde2c --- /dev/null +++ b/regression/systemc/Preproc1/test.desc @@ -0,0 +1,8 @@ +CORE +main.cpp +--preprocess +^EXIT=42$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- +^warning: ignoring diff --git a/regression/systemc/Preproc1/tuple.h b/regression/systemc/Preproc1/tuple.h new file mode 100644 index 00000000000..388ae0020f7 --- /dev/null +++ b/regression/systemc/Preproc1/tuple.h @@ -0,0 +1,171 @@ + +#ifndef TUPLE_H +#define TUPLE_H + +#define DECLARE_INSIDE + +#ifndef NO_IO +#include +#endif + +// --------------------------------------------------------------------- +// Templates for passing & returning tuples + +// null type +struct null_type {}; + +// a const value of null_type +inline const null_type cnull() {return null_type();} + +#ifndef NO_IO +std::ostream& operator<<(std::ostream& os, const null_type dummy) +{ + os << "-"; + return os; +} +#endif + +// a global to absorb "writes" to unused tuple fields. +// would be good to get rid of this. +null_type dummy; + +template + +class ltuple; + +template + +class tuple +{ + + T0 el0; + T1 el1; + T2 el2; + T3 el3; + +public: + + friend tuple + ltuple::operator= (tuple); + +#ifndef NO_IO + std::ostream& + dump (std::ostream& os) { + os << "(" << el0 << "," << el1 << "," << el2 << "," << el3 << ")"; + return os; + } +#endif + + tuple() {} + + tuple(T0 t0): el0(t0), el1(cnull()), el2(cnull()), el3(cnull()) {} + + tuple(T0 t0, T1 t1): el0(t0), el1(t1), el2(cnull()), el3(cnull()) {} + + tuple(T0 t0, T1 t1, T2 t2): el0(t0), el1(t1), el2(t2), el3(cnull()) {} + + tuple(T0 t0, T1 t1, T2 t2, T3 t3): el0(t0), el1(t1), el2(t2), el3(t3) {} + +}; + +#ifndef NO_IO +template + std::ostream& operator<<(std::ostream& os, tuple src) +{ + return src.dump(os); +} +#endif + +template + +class ltuple +{ + +private: + T0 &el0; + T1 &el1; + T2 &el2; + T3 &el3; + +public: + +#ifdef DECLARE_INSIDE + ltuple(T0 &t0, T1 &t1, T2 &t2, T3 &t3 ) + : el0(t0), el1(t1), el2(t2), el3(t3) + {} + + tuple + operator= (tuple src) + { + el0 = src.el0; + el1 = src.el1; + el2 = src.el2; + el3 = src.el3; + return src; + } +#else + ltuple(T0 &t0, T1 &t1, T2 &t2, T3 &t3 ); + + tuple + operator= (tuple src); +#endif +}; + + +#ifndef DECLARE_INSIDE +template +ltuple::ltuple(T0 &t0, T1 &t1, T2 &t2, T3 &t3 ) + : el0(t0), el1(t1), el2(t2), el3(t3) + {} + +template +tuple +ltuple::operator= (tuple src) +{ + el0 = src.el0; + el1 = src.el1; + el2 = src.el2; + el3 = src.el3; + return src; +} +#endif + +template +ltuple +tie(T0 &t0) +{ + return ltuple(t0, dummy, dummy, dummy); +} + +template +ltuple +tie(T0 &t0, T1 &t1) +{ + return ltuple(t0,t1,dummy,dummy); +} + +template +ltuple +tie(T0 &t0, T1 &t1, T2 &t2) +{ + return ltuple(t0,t1,t2,dummy); +} + +template +ltuple +tie(T0 &t0, T1 &t1, T2 &t2, T3 &t3) +{ + return ltuple(t0,t1,t2,t3); +} + +#endif +