mirror of
https://github.com/ZDoom/raze-gles.git
synced 2025-01-08 17:30:39 +00:00
8c95516224
- updaterevision for automated revision string generation - re2c as a prerequisite to use sc_man in the future - zipdir to automatically generate an engine resource file.
175 lines
3.4 KiB
C++
175 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
|