#ifndef __CPP__INCLUDED__RPerl_cpp #define __CPP__INCLUDED__RPerl_cpp 0.004_000 #include <RPerl.h> // -> (rperltypes_mode.h; rperloperations.h; rperltypes.h; HelperFunctions.cpp) # ifdef __PERL__TYPES // [[[<<< BEGIN PERL TYPES >>>]]] // [[[<<< BEGIN PERL TYPES >>>]]] // [[[<<< BEGIN PERL TYPES >>>]]] // START HERE: test RPerl::diag() for CPPOPS_PERLTYPES; then implement RPerl::verbose() and RPerl::warning() for CPPOPS_PERLTYPES; decide what to do with RPerl::DUMPER() and native C++ RPerl::diag() below // START HERE: test RPerl::diag() for CPPOPS_PERLTYPES; then implement RPerl::verbose() and RPerl::warning() for CPPOPS_PERLTYPES; decide what to do with RPerl::DUMPER() and native C++ RPerl::diag() below // START HERE: test RPerl::diag() for CPPOPS_PERLTYPES; then implement RPerl::verbose() and RPerl::warning() for CPPOPS_PERLTYPES; decide what to do with RPerl::DUMPER() and native C++ RPerl::diag() below int RPerl__diag(SV* message) { dSP; int retcnt; int retval; ENTER; SAVETMPS; PUSHMARK(SP); XPUSHs(message); PUTBACK; retcnt = call_pv("RPerl::diag", G_SCALAR); SPAGAIN; if (retcnt != 1) { croak("RPerl::diag(message) return count is %"INTEGER", expected 1, croaking", (integer) retcnt); } retval = POPi; PUTBACK; // FREETMPS; LEAVE; return retval; } /* #include <stdlib.h> // for getenv() #include <stdio.h> // for ostream object type ostringstream RPerl__diag; ostream& operator<<(ostream& ostream_object, const char* char_star_input) { if (getenv("RPERL_DEBUG") { cerr << char_star_input; } return ostream_object; } ostream& operator<<(ostream& ostream_object, std::string string_input) { if (getenv("RPERL_DEBUG") { cerr << string_input; } return ostream_object; } */ /* char* RPerl::DUMPER(SV* dumpee) { dSP; int retcnt; char* retval; ENTER; SAVETMPS; PUSHMARK(SP); XPUSHs(dumpee); PUTBACK; retcnt = call_pv("RPerl::DUMPER", G_SCALAR); SPAGAIN; if (retcnt != 1) { croak("RPerl::DUMPER(dumpee) return count is %"INTEGER", expected 1, croaking", (integer) retcnt); } retval = POPp; PUTBACK; // FREETMPS; LEAVE; return retval; } */ // [[[<<< END PERL TYPES >>>]]] // [[[<<< END PERL TYPES >>>]]] // [[[<<< END PERL TYPES >>>]]] # elif defined __CPP__TYPES // [[[<<< BEGIN CPP TYPES >>>]]] // [[[<<< BEGIN CPP TYPES >>>]]] // [[[<<< BEGIN CPP TYPES >>>]]] integer RPerl__diag(string message) { dSP; int retcnt; int retval; ENTER; SAVETMPS; PUSHMARK(SP); XPUSHs(newSVpv(message.c_str(), 0)); PUTBACK; retcnt = call_pv("RPerl::diag", G_SCALAR); SPAGAIN; if (retcnt != 1) { croak("RPerl::diag(message) return count is %"INTEGER", expected 1, croaking", (integer) retcnt); } retval = POPi; PUTBACK; // FREETMPS; LEAVE; return retval; } integer RPerl__verbose(string message) { dSP; int retcnt; int retval; ENTER; SAVETMPS; PUSHMARK(SP); XPUSHs(newSVpv(message.c_str(), 0)); PUTBACK; retcnt = call_pv("RPerl::verbose", G_SCALAR); SPAGAIN; if (retcnt != 1) { croak("RPerl::verbose(message) return count is %"INTEGER", expected 1, croaking", (integer) retcnt); } retval = POPi; PUTBACK; // FREETMPS; LEAVE; return retval; } integer RPerl__warning(string message) { dSP; int retcnt; int retval; ENTER; SAVETMPS; PUSHMARK(SP); XPUSHs(newSVpv(message.c_str(), 0)); PUTBACK; retcnt = call_pv("RPerl::warning", G_SCALAR); SPAGAIN; if (retcnt != 1) { croak("RPerl::warning(message) return count is %"INTEGER", expected 1, croaking", (integer) retcnt); } retval = POPi; PUTBACK; // FREETMPS; LEAVE; return retval; } // [[[<<< END CPP TYPES >>>]]] // [[[<<< END CPP TYPES >>>]]] // [[[<<< END CPP TYPES >>>]]] # else Purposefully_die_from_a_compile-time_error,_due_to_neither___PERL__TYPES_nor___CPP__TYPES_being_defined.__We_need_to_define_exactly_one! # endif #endif