mirror of
https://github.com/ZDoom/raze-gles.git
synced 2025-01-09 09:40:49 +00:00
176 lines
3.4 KiB
C++
176 lines
3.4 KiB
C++
|
#include <sstream>
|
||
|
|
||
|
#include "src/codegen/input_api.h"
|
||
|
#include "src/codegen/indent.h"
|
||
|
#include "src/conf/opt.h"
|
||
|
#include "src/globals.h"
|
||
|
|
||
|
namespace re2c
|
||
|
{
|
||
|
|
||
|
InputAPI::InputAPI ()
|
||
|
: type_ (DEFAULT)
|
||
|
{}
|
||
|
|
||
|
InputAPI::type_t InputAPI::type () const
|
||
|
{
|
||
|
return type_;
|
||
|
}
|
||
|
|
||
|
void InputAPI::set (type_t t)
|
||
|
{
|
||
|
type_ = t;
|
||
|
}
|
||
|
|
||
|
std::string InputAPI::expr_peek () const
|
||
|
{
|
||
|
std::string s;
|
||
|
switch (type_)
|
||
|
{
|
||
|
case DEFAULT:
|
||
|
s = "*" + opts->yycursor;
|
||
|
break;
|
||
|
case CUSTOM:
|
||
|
s = opts->yypeek + " ()";
|
||
|
break;
|
||
|
}
|
||
|
return s;
|
||
|
}
|
||
|
|
||
|
std::string InputAPI::expr_peek_save () const
|
||
|
{
|
||
|
return opts->yych + " = " + opts.yychConversion () + expr_peek ();
|
||
|
}
|
||
|
|
||
|
std::string InputAPI::stmt_peek (uint32_t ind) const
|
||
|
{
|
||
|
return indent (ind) + expr_peek_save () + ";\n";
|
||
|
}
|
||
|
|
||
|
std::string InputAPI::stmt_skip (uint32_t ind) const
|
||
|
{
|
||
|
std::string s;
|
||
|
switch (type_)
|
||
|
{
|
||
|
case DEFAULT:
|
||
|
s = "++" + opts->yycursor;
|
||
|
break;
|
||
|
case CUSTOM:
|
||
|
s = opts->yyskip + " ()";
|
||
|
break;
|
||
|
}
|
||
|
return indent (ind) + s + ";\n";
|
||
|
}
|
||
|
|
||
|
std::string InputAPI::stmt_backup (uint32_t ind) const
|
||
|
{
|
||
|
std::string s;
|
||
|
switch (type_)
|
||
|
{
|
||
|
case DEFAULT:
|
||
|
s = opts->yymarker + " = " + opts->yycursor;
|
||
|
break;
|
||
|
case CUSTOM:
|
||
|
s = opts->yybackup + " ()";
|
||
|
break;
|
||
|
}
|
||
|
return indent (ind) + s + ";\n";
|
||
|
}
|
||
|
|
||
|
std::string InputAPI::stmt_backupctx (uint32_t ind) const
|
||
|
{
|
||
|
std::string s;
|
||
|
switch (type_)
|
||
|
{
|
||
|
case DEFAULT:
|
||
|
s = opts->yyctxmarker + " = " + opts->yycursor;
|
||
|
break;
|
||
|
case CUSTOM:
|
||
|
s = opts->yybackupctx + " ()";
|
||
|
break;
|
||
|
}
|
||
|
return indent (ind) + s + ";\n";
|
||
|
}
|
||
|
|
||
|
std::string InputAPI::stmt_restore (uint32_t ind) const
|
||
|
{
|
||
|
std::string s;
|
||
|
switch (type_)
|
||
|
{
|
||
|
case DEFAULT:
|
||
|
s = opts->yycursor + " = " + opts->yymarker;
|
||
|
break;
|
||
|
case CUSTOM:
|
||
|
s = opts->yyrestore + " ()";
|
||
|
break;
|
||
|
}
|
||
|
return indent (ind) + s + ";\n";
|
||
|
}
|
||
|
|
||
|
std::string InputAPI::stmt_restorectx (uint32_t ind) const
|
||
|
{
|
||
|
std::string s;
|
||
|
switch (type_)
|
||
|
{
|
||
|
case DEFAULT:
|
||
|
s = indent (ind) + opts->yycursor + " = " + opts->yyctxmarker + ";\n";
|
||
|
break;
|
||
|
case CUSTOM:
|
||
|
s = indent (ind) + opts->yyrestorectx + " ();\n";
|
||
|
break;
|
||
|
}
|
||
|
return s;
|
||
|
}
|
||
|
|
||
|
std::string InputAPI::stmt_skip_peek (uint32_t ind) const
|
||
|
{
|
||
|
return type_ == DEFAULT
|
||
|
? indent (ind) + opts->yych + " = " + opts.yychConversion () + "*++" + opts->yycursor + ";\n"
|
||
|
: stmt_skip (ind) + stmt_peek (ind);
|
||
|
}
|
||
|
|
||
|
std::string InputAPI::stmt_skip_backup (uint32_t ind) const
|
||
|
{
|
||
|
return type_ == DEFAULT
|
||
|
? indent (ind) + opts->yymarker + " = ++" + opts->yycursor + ";\n"
|
||
|
: stmt_skip (ind) + stmt_backup (ind);
|
||
|
}
|
||
|
|
||
|
std::string InputAPI::stmt_backup_peek (uint32_t ind) const
|
||
|
{
|
||
|
return type_ == DEFAULT
|
||
|
? indent (ind) + opts->yych + " = " + opts.yychConversion () + "*(" + opts->yymarker + " = " + opts->yycursor + ");\n"
|
||
|
: stmt_backup (ind) + stmt_peek (ind);
|
||
|
}
|
||
|
|
||
|
std::string InputAPI::stmt_skip_backup_peek (uint32_t ind) const
|
||
|
{
|
||
|
return type_ == DEFAULT
|
||
|
? indent (ind) + opts->yych + " = " + opts.yychConversion () + "*(" + opts->yymarker + " = ++" + opts->yycursor + ");\n"
|
||
|
: stmt_skip (ind) + stmt_backup (ind) + stmt_peek (ind);
|
||
|
}
|
||
|
|
||
|
std::string InputAPI::expr_lessthan_one () const
|
||
|
{
|
||
|
return type_ == DEFAULT
|
||
|
? opts->yylimit + " <= " + opts->yycursor
|
||
|
: expr_lessthan (1);
|
||
|
}
|
||
|
|
||
|
std::string InputAPI::expr_lessthan (size_t n) const
|
||
|
{
|
||
|
std::ostringstream s;
|
||
|
switch (type_)
|
||
|
{
|
||
|
case DEFAULT:
|
||
|
s << "(" << opts->yylimit << " - " << opts->yycursor << ") < " << n;
|
||
|
break;
|
||
|
case CUSTOM:
|
||
|
s << opts->yylessthan << " (" << n << ")";
|
||
|
break;
|
||
|
}
|
||
|
return s.str ();
|
||
|
}
|
||
|
|
||
|
} // end namespace re2c
|