Files
PorygonLang/src/StandardLibraries/StaticScope.hpp
Deukhoofd 24c560b52d
All checks were successful
continuous-integration/drone/push Build is passing
Initial work on standard library
2019-06-29 16:18:59 +02:00

52 lines
1.8 KiB
C++

#include <utility>
#ifndef PORYGONLANG_STATICSCOPE_HPP
#define PORYGONLANG_STATICSCOPE_HPP
#include <map>
#include "../Utilities/HashedString.hpp"
#include "../Binder/BoundVariables/BoundVariable.hpp"
#include "../Evaluator/EvalValues/EvalValue.hpp"
#include "BasicLibrary.hpp"
using namespace std;
namespace Porygon::StandardLibraries{
/*!
\class StaticScope
\brief The static shared scope for all scripts. Variables registered in here should be stateless.
*/
class StaticScope {
class InternalScope{
public:
map<Utilities::HashedString, Binder::BoundVariable *> _boundVariables;
map<Utilities::HashedString, shared_ptr<Evaluation::EvalValue>> _variables;
InternalScope(){
BasicLibrary::RegisterVariables(&_boundVariables, &_variables);
}
};
static InternalScope _internal;
public:
static void RegisterVariable(const Utilities::HashedString& identifier, shared_ptr<ScriptType> type, Evaluation::EvalValue* value){
_internal._boundVariables.insert({identifier, new Binder::BoundVariable(std::move(type))});
_internal._variables.insert({identifier, shared_ptr<Evaluation::EvalValue>(value)});
}
static Binder::BoundVariable* GetBoundVariable(const Utilities::HashedString &identifier){
auto found = _internal._boundVariables.find(identifier);
if (found != _internal._boundVariables.end()) {
return found->second;
}
return nullptr;
}
static shared_ptr<Evaluation::EvalValue> GetVariable(const Utilities::HashedString &identifier){
return _internal._variables[identifier];
}
};
}
#endif //PORYGONLANG_STATICSCOPE_HPP