// rpimpl_ex.h
// Copyright (c) Menno Rubingh 2016. Web: [http://rubinghsoftware.de]
//
// MR Mar 2016.
//
// Exception and scanning context (character number in input string)
// used internally by the RPInterpreter implementation.
//
// The purpose of the scanning context is to print error messages that
// specify the position in the input string (1) where the scanning error
// occured, or (2) of the lexical element where the evaluation error
// occurred.
//
#ifndef _RPIMPL_EX_H_
#define _RPIMPL_EX_H_
class SContext
{
int m_n; //Character number in input string, 0-based.
public:
SContext( void ) : m_n(0) { } //Initialize to zero.
void advance( int iN ) { m_n += iN; }
int getN( void ) const { return m_n; }
};
class Ex
{
SContext m_cxt;
char const * m_msg;
public:
Ex( SContext const * iCxt, char const * iMsg ) :
m_cxt( *iCxt ), //(Note)
m_msg( iMsg )
{ }
//Note: Copy whole struct, since caller's SContext instance is in general
// a local variable going out of scope when throwing exception.
char const * getMsg( void ) const { return m_msg; }
int getCol( void ) const { return m_cxt.getN(); }
};
#endif //_RPIMPL_EX_H_