Implements setting table values
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
2019-06-14 17:12:27 +02:00
parent 996b5be496
commit a9def6c539
14 changed files with 141 additions and 15 deletions

View File

@@ -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());
}