diff options
Diffstat (limited to 'deps/v8/src/torque/declaration-visitor.cc')
-rw-r--r-- | deps/v8/src/torque/declaration-visitor.cc | 35 |
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 b83dbb3bc37..2f3a1fa869e 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(), |