Initial work on standard library
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2019-06-29 16:18:59 +02:00
parent ecfc1ae3b7
commit 24c560b52d
12 changed files with 213 additions and 22 deletions

View File

@@ -0,0 +1,51 @@
#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