view interps/sadol/Source.cpp @ 9554:23f43464694e

<Zarutian> le/rn Frams\xc3\xb3knarflokkurinn/A, now defunct, political party in Iceland. Like its sister party Sj\xc3\xa1lfst\xc3\xa6\xc3\xb0isflokkurinn it is named by the antonym of what it is. (The name means the Progressive Party but they have nearly always been highly regressive). Think dumb Hill-Billies in ill fitting suits and you get their constiuents.
author HackBot
date Sun, 30 Oct 2016 14:33:24 +0000
parents 859f9b4339e6
children
line wrap: on
line source

/*
 * BDSM2
 * Author: Adam Sawicki
 * http://www.regedit.risp.pl
 * mailto:regedit@risp.pl
 */
#include "pch.hpp"
#include <sstream>
#include "Source.hpp"

string Source::Iterator::ToString() const
{
	std::ostringstream ss;
	ss << "index: " << (unsigned)Index << ", row: " << Row << ", col: " << Col;
	return ss.str();
}

void Source::Forward()
{
	if (Peek() == '\r')
	{
	}
	else if (Peek() == '\n')
	{
		m_Index.Row++;
		m_Index.Col = 1;
	}
	else
		m_Index.Col++;

	m_Index.Index++;
}

char Source::Get()
{
	char ch = Peek();
	Forward();
	return ch;
}

Source::Source(const string *Src) : m_Src(Src), m_ErrIndexSaved(false)
{
	m_Index.Index = 0;
	m_Index.Row = 1;
	m_Index.Col = 1;
}

char Source::GetS()
{
	if (End())
		SrcError("Unexpected end of file", ERR_PARSE);
	return Get();
}

void Source::Skip()
{
	char ch;
	while (!End())
	{
		ch = Peek();
		// Whitespace
		if (ch == ' ' || ch == '\t' || ch == '\v' || ch == '\r' || ch == '\n')
			Forward();
		// Comment
		else if (ch == '{')
		{
			Forward();
			for (;;)
			{
				if (End())
					SrcError("Unexpected end of comment", ERR_PARSE);
				ch = Peek();
				Forward();
				if (ch == '}')
					break;
			}
		}
		else
			break;
	}
}

void Source::SrcError(const string &msg, ERR_PLACE place)
{
	Error(msg + " (" + GetIterator().ToString() + ')', place);
}