Target.hpp: Simplify the Target::forName function and change its return type to unique_ptr instead of shared_ptr
Signed-off-by: Username404 <w.iron.zombie@gmail.com>
This commit is contained in:
parent
b63bf0d480
commit
34134dda71
|
@ -140,7 +140,7 @@ public:
|
|||
}));
|
||||
return staticMap;
|
||||
};
|
||||
static shared_ptr<Target> forName(string_view name, bool newLines);
|
||||
static unique_ptr<Target> forName(string_view name, bool newLines);
|
||||
string transpileWithTree(const ParseTree& tree) {
|
||||
separator = newLines ? "\n" : (use_uniqueLineSeparator() ? uniqueLineSeparator().value() : throw Yerbacon::Exception("--newlines=off is not supported by the current target"));
|
||||
output.str(string());
|
||||
|
@ -156,39 +156,19 @@ public:
|
|||
#include "implementations/Js.hpp"
|
||||
#include "implementations/Py.hpp"
|
||||
|
||||
enum LANGUAGE: signed short { NONE = -1, LUA, JS, PY };
|
||||
constinit const array<string_view, 3> languages { "lua", "js", "py" };
|
||||
|
||||
shared_ptr<Target> Target::forName(string_view name, const bool newLines = true) {
|
||||
LANGUAGE selected = NONE;
|
||||
for (unsigned int i = 0; i < languages.size(); ++i) {
|
||||
if (name == languages[i]) {
|
||||
selected = static_cast<LANGUAGE>(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
shared_ptr<Target> target;
|
||||
#define ADDTARGET(X) target = shared_ptr<X>(new X(newLines))
|
||||
switch (selected) {
|
||||
#ifdef LUA_HPP
|
||||
case LUA: ADDTARGET(LUA_HPP); break;
|
||||
#endif
|
||||
#ifdef JS_HPP
|
||||
case JS: ADDTARGET(JS_HPP); break;
|
||||
#endif
|
||||
#ifdef PY_HPP
|
||||
case PY: ADDTARGET(PY_HPP); break;
|
||||
#endif
|
||||
case NONE:
|
||||
default: Yerbacon::fail({"\"", string(1, (char) toupper(name.at(1))).data(), name.substr(2).data(), "\" is not a valid target."});
|
||||
}
|
||||
unique_ptr<Target> Target::forName(string_view name, const bool newLines = true) {
|
||||
#define ADDTARGET(X, target_class) if (name == X) return unique_ptr<target_class>(new target_class(newLines))
|
||||
ADDTARGET("lua", LuaTarget);
|
||||
ADDTARGET("js", JsTarget);
|
||||
ADDTARGET("py", PyTarget);
|
||||
#undef ADDTARGET
|
||||
#undef make_nonlocal_task
|
||||
#undef make_task_noR
|
||||
#undef make_task
|
||||
#undef make_task_base_R
|
||||
#undef make_task_base
|
||||
return target;
|
||||
Yerbacon::fail({"\"", to_string(toupper(name.at(1))).data(), name.substr(2).data(), "\" is not a valid target."});
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
#endif //YERBACON_TARGET_HPP
|
|
@ -1,5 +1,5 @@
|
|||
#ifndef JS_HPP
|
||||
#define JS_HPP JsTarget
|
||||
#define JS_HPP
|
||||
using namespace StandardComponents;
|
||||
|
||||
struct JsTarget: Target {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#ifndef LUA_HPP
|
||||
#define LUA_HPP LuaTarget
|
||||
#define LUA_HPP
|
||||
using namespace StandardComponents;
|
||||
|
||||
struct LuaTarget: Target {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#ifndef PY_HPP
|
||||
#define PY_HPP PyTarget
|
||||
#define PY_HPP
|
||||
using namespace StandardComponents;
|
||||
|
||||
struct PyTarget: Target {
|
||||
|
|
Loading…
Reference in New Issue