Skip to content
Snippets Groups Projects
Commit d2d7dbce authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Define array subscript data type

By now it is always `ASTNodeDataType::double_t`. However, one checks that array
type is `ASTNodeDataType::vector_t` and that index type casts to integer.
parent a7b86249
No related branches found
No related tags found
1 merge request!37Feature/language
......@@ -409,6 +409,22 @@ ASTNodeDataTypeBuilder::_buildNodeDataTypes(ASTNode& n) const
<< ") is not a function!" << std::ends;
throw parse_error(message.str(), n.begin());
}
} else if (n.is_type<language::subscript_expression>()) {
Assert(n.children.size() == 2, "invalid number of sub-expressions in array subscript expression");
auto& array_expression = *n.children[0];
auto& index_expression = *n.children[1];
ASTNodeNaturalConversionChecker{index_expression, index_expression.m_data_type, ASTNodeDataType::int_t};
if (array_expression.m_data_type != ASTNodeDataType::vector_t) {
std::ostringstream message;
message << "invalid types '" << rang::fgB::yellow << dataTypeName(array_expression.m_data_type)
<< rang::style::reset << '[' << dataTypeName(index_expression.m_data_type) << ']'
<< "' for array subscript" << std::ends;
throw parse_error(message.str(), n.begin());
} else {
n.m_data_type = ASTNodeDataType::double_t;
}
} else if (n.is_type<language::B_set>() or n.is_type<language::Z_set>() or n.is_type<language::N_set>() or
n.is_type<language::R_set>() or n.is_type<language::string_type>() or
n.is_type<language::vector_type>()) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment