PorygonLang/src/TableScriptType.hpp

49 lines
1.3 KiB
C++
Raw Normal View History

2019-06-12 13:19:28 +00:00
#ifndef PORYGONLANG_TABLESCRIPTTYPE_HPP
#define PORYGONLANG_TABLESCRIPTTYPE_HPP
#include <unordered_map>
#include "Binder/BoundVariables/BoundVariable.hpp"
class TableScriptType : public ScriptType{
2019-06-13 14:26:10 +00:00
const unordered_map<int, BoundVariable*>* _values;
const int _localVariableCount;
2019-06-12 13:19:28 +00:00
public:
2019-06-13 14:26:10 +00:00
explicit TableScriptType(unordered_map<int, BoundVariable*>* values, int localVariableCount)
: ScriptType(TypeClass::Table),
_values(values),
_localVariableCount(localVariableCount)
{}
2019-06-12 13:19:28 +00:00
~TableScriptType() final{
for (auto i : *_values){
delete i.second;
}
delete _values;
}
bool CanBeIndexedWith(ScriptType* indexer) final{
return indexer->GetClass() == TypeClass ::String;
}
shared_ptr<ScriptType> GetIndexedType(ScriptType* indexer) final{
auto stringKey = (StringScriptType*)indexer;
if (stringKey->IsKnownAtBind()){
return _values-> at(stringKey->GetHashValue())->GetType();
}
throw "TODO: indexing with dynamic keys";
}
2019-06-13 14:26:10 +00:00
const unordered_map<int, BoundVariable*>* GetValues(){
2019-06-12 13:19:28 +00:00
return _values;
}
2019-06-13 14:26:10 +00:00
const int GetLocalVariableCount(){
return _localVariableCount;
2019-06-12 13:19:28 +00:00
}
};
#include "ScriptType.hpp"
#endif //PORYGONLANG_TABLESCRIPTTYPE_HPP