15#include "SubComponent.h"
23struct TooFewArgumentsError :
public util::ParseError {
24 using ParseError::ParseError;
27struct TooManyArgumentsError :
public util::ParseError {
28 using ParseError::ParseError;
31struct ScriptInterruption: util::Exception {
32 using Exception::Exception;
35class Interpreter:
public SubComponent
37 Descriptions descriptions = {{
39 .name =
"Interpreter",
40 .description =
"Command Interpreter"
43 enum class Shell { Command, Debug };
46 Shell shell = Shell::Command;
49 Command commandShellRoot;
52 Command debugShellRoot;
61 Interpreter(C64 &ref);
62 Interpreter& operator= (
const Interpreter& other) {
return *
this; }
71 template <
class T>
void serialize(T& worker) { } SERIALIZERS(serialize);
80 const Descriptions &getDescriptions()
const override {
return descriptions; }
84 void _dump(Category category, std::ostream& os)
const override { }
85 void _initialize()
override;
87 void initCommons(Command &root);
88 void initCommandShell(Command &root);
89 void initDebugShell(Command &root);
93 static string shellName(
const CoreObject &
object);
103 string autoComplete(
const string& userInput);
108 Arguments split(
const string& userInput);
111 void autoComplete(Arguments &argv);
114 bool isBool(
const string &argv);
115 bool parseBool(
const string &argv);
116 bool parseBool(
const string &argv,
bool fallback);
117 bool parseBool(
const Arguments &argv,
long nr,
long fallback);
119 bool isOnOff(
const string &argv);
120 bool parseOnOff(
const string &argv);
121 bool parseOnOff(
const string &argv,
bool fallback);
122 bool parseOnOff(
const Arguments &argv,
long nr,
long fallback);
124 long isNum(
const string &argv);
125 long parseNum(
const string &argv);
126 long parseNum(
const string &argv,
long fallback);
127 long parseNum(
const Arguments &argv,
long nr,
long fallback);
129 u16 parseAddr(
const string &argv) {
return (u16)parseNum(argv); }
130 u16 parseAddr(
const string &argv,
long fallback) {
return (u16)parseNum(argv, fallback); }
131 u16 parseAddr(
const Arguments &argv,
long nr,
long fallback) {
return (u16)parseNum(argv, nr, fallback); }
133 string parseSeq(
const string &argv);
134 string parseSeq(
const string &argv,
const string &fallback);
136 template <
typename T>
long parseEnum(
const string &argv) {
137 return util::parseEnum<T>(argv);
139 template <
typename T>
long parseEnum(
const string &argv,
long fallback) {
140 try {
return util::parseEnum<T>(argv); }
catch(...) {
return fallback; }
142 template <
typename E,
typename T> E parseEnum(
const string &argv) {
143 return (E)util::parseEnum<T>(argv);
145 template <
typename E,
typename T>
long parseEnum(
const string &argv, E fallback) {
146 try {
return (E)util::parseEnum<T>(argv); }
catch(...) {
return fallback; }
160 void switchInterpreter();
162 bool inCommandShell() {
return shell == Shell::Command; }
163 bool inDebugShell() {
return shell == Shell::Debug; }
174 void exec(
const string& userInput,
bool verbose =
false) throws;
175 void exec(const Arguments &argv,
bool verbose = false) throws;
178 void usage(const Command &command);
181 void help(const
string &userInput);
182 void help(const Arguments &argv);
183 void help(const Command &command);
190 void configure(Option opt, i64 value) throws;
191 void configure(Option opt, i64 value, isize
id) throws;
VirtualC64 project namespace.
Definition CmdQueue.cpp:16