summaryrefslogtreecommitdiff
path: root/deps/v8/src/torque/declaration-visitor.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/torque/declaration-visitor.cc')
-rw-r--r--deps/v8/src/torque/declaration-visitor.cc35
1 files changed, 24 insertions, 11 deletions
diff --git a/deps/v8/src/torque/declaration-visitor.cc b/deps/v8/src/torque/declaration-visitor.cc
index b83dbb3bc3..2f3a1fa869 100644
--- a/deps/v8/src/torque/declaration-visitor.cc
+++ b/deps/v8/src/torque/declaration-visitor.cc
@@ -299,15 +299,22 @@ Parameter* DeclarationVisitor::DeclareParameter(const std::string& name,
void DeclarationVisitor::Visit(VarDeclarationStatement* stmt) {
std::string variable_name = stmt->name;
- const Type* type = declarations()->GetType(stmt->type);
- if (type->IsConstexpr() && !stmt->const_qualified) {
- ReportError(
- "cannot declare variable with constexpr type. Use 'const' instead.");
- }
- DeclareVariable(variable_name, type, stmt->const_qualified);
- if (global_context_.verbose()) {
- std::cout << "declared variable " << variable_name << " with type " << *type
- << "\n";
+ if (!stmt->const_qualified) {
+ if (!stmt->type) {
+ ReportError(
+ "variable declaration is missing type. Only 'const' bindings can "
+ "infer the type.");
+ }
+ const Type* type = declarations()->GetType(*stmt->type);
+ if (type->IsConstexpr()) {
+ ReportError(
+ "cannot declare variable with constexpr type. Use 'const' instead.");
+ }
+ DeclareVariable(variable_name, type, stmt->const_qualified);
+ if (global_context_.verbose()) {
+ std::cout << "declared variable " << variable_name << " with type "
+ << *type << "\n";
+ }
}
// const qualified variables are required to be initialized properly.
@@ -434,9 +441,15 @@ void DeclarationVisitor::Visit(ForLoopStatement* stmt) {
Declarations::NodeScopeActivator scope(declarations(), stmt);
if (stmt->var_declaration) Visit(*stmt->var_declaration);
PushControlSplit();
- DeclareExpressionForBranch(stmt->test);
+
+ // Same as DeclareExpressionForBranch, but without the extra scope.
+ // If no test expression is present we can not use it for the scope.
+ declarations()->DeclareLabel(kTrueLabelName);
+ declarations()->DeclareLabel(kFalseLabelName);
+ if (stmt->test) Visit(*stmt->test);
+
Visit(stmt->body);
- Visit(stmt->action);
+ if (stmt->action) Visit(*stmt->action);
auto changed_vars = PopControlSplit();
global_context_.AddControlSplitChangedVariables(
stmt, declarations()->GetCurrentSpecializationTypeNamesVector(),