Implements setting table values
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
@@ -29,6 +29,7 @@ BoundStatement* Binder::BindStatement(const ParsedStatement* statement){
|
||||
case ParsedStatementKind ::Block: return this -> BindBlockStatement(statement);
|
||||
case ParsedStatementKind ::Expression: return this -> BindExpressionStatement(statement);
|
||||
case ParsedStatementKind::Assignment: return this -> BindAssignmentStatement(statement);
|
||||
case ParsedStatementKind::IndexAssignment: return this -> BindIndexAssignmentStatement(statement);
|
||||
case ParsedStatementKind ::FunctionDeclaration: return this->BindFunctionDeclarationStatement(statement);
|
||||
case ParsedStatementKind::Return: return this -> BindReturnStatement(statement);
|
||||
case ParsedStatementKind::Conditional: return this -> BindConditionalStatement(statement);
|
||||
@@ -70,6 +71,17 @@ BoundStatement* Binder::BindAssignmentStatement(const ParsedStatement *statement
|
||||
}
|
||||
}
|
||||
|
||||
BoundStatement *Binder::BindIndexAssignmentStatement(const ParsedStatement *statement) {
|
||||
auto s = (ParsedIndexAssignmentStatement*) statement;
|
||||
auto boundIndexExpression = this -> BindIndexExpression((IndexExpression*)s->GetIndexExpression());
|
||||
auto valueExpression = this -> BindExpression(s->GetValueExpression());
|
||||
if (boundIndexExpression->GetType()->operator!=(valueExpression->GetType().get())){
|
||||
this -> _scriptData -> Diagnostics -> LogError(DiagnosticCode::InvalidTableValueType, statement->GetStartPosition(), statement->GetLength());
|
||||
return new BoundBadStatement();
|
||||
}
|
||||
return new BoundIndexAssignmentStatement(boundIndexExpression, valueExpression);
|
||||
}
|
||||
|
||||
std::shared_ptr<ScriptType> ParseTypeIdentifier(HashedString s){
|
||||
switch (s.GetHash()){
|
||||
case HashedString::ConstHash("number"): return std::make_shared<NumericScriptType>(false, false);
|
||||
@@ -442,3 +454,4 @@ BoundExpression *Binder::BindTableExpression(const ParsedTableExpression *expres
|
||||
|
||||
return new BoundTableExpression((BoundBlockStatement*)block, tableType, expression->GetStartPosition(), expression->GetLength());
|
||||
}
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ class Binder {
|
||||
BoundStatement *BindBlockStatement(const ParsedStatement *statement);
|
||||
BoundStatement *BindExpressionStatement(const ParsedStatement *statement);
|
||||
BoundStatement *BindAssignmentStatement(const ParsedStatement *statement);
|
||||
BoundStatement *BindIndexAssignmentStatement(const ParsedStatement *statement);
|
||||
BoundStatement *BindFunctionDeclarationStatement(const ParsedStatement * statement);
|
||||
BoundStatement *BindReturnStatement(const ParsedStatement *statement);
|
||||
BoundStatement *BindConditionalStatement(const ParsedStatement *statement);
|
||||
|
||||
@@ -18,6 +18,7 @@ enum class BoundStatementKind{
|
||||
Block,
|
||||
Expression,
|
||||
Assignment,
|
||||
IndexAssignment,
|
||||
FunctionDeclaration,
|
||||
Return,
|
||||
Conditional,
|
||||
@@ -124,6 +125,33 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class BoundIndexAssignmentStatement : public BoundStatement{
|
||||
const BoundExpression* _indexExpression;
|
||||
const BoundExpression* _valueExpression;
|
||||
public:
|
||||
BoundIndexAssignmentStatement(BoundExpression* index, BoundExpression* value)
|
||||
: _indexExpression(index), _valueExpression(value)
|
||||
{
|
||||
}
|
||||
|
||||
~BoundIndexAssignmentStatement() final{
|
||||
delete _indexExpression;
|
||||
delete _valueExpression;
|
||||
}
|
||||
|
||||
const BoundStatementKind GetKind() const final{
|
||||
return BoundStatementKind ::IndexAssignment;
|
||||
}
|
||||
|
||||
const BoundExpression* GetIndexExpression() const {
|
||||
return _indexExpression;
|
||||
}
|
||||
|
||||
const BoundExpression* GetValueExpression() const {
|
||||
return _valueExpression;
|
||||
}
|
||||
};
|
||||
|
||||
class BoundReturnStatement : public BoundStatement{
|
||||
const BoundExpression* _expression;
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user