Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(68)

Side by Side Diff: src/compiler/ast-graph-builder.cc

Issue 2161263003: [debug] use catch prediction flag for promise rejections. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/ast-graph-builder.h" 5 #include "src/compiler/ast-graph-builder.h"
6 6
7 #include "src/ast/scopes.h" 7 #include "src/ast/scopes.h"
8 #include "src/compiler.h" 8 #include "src/compiler.h"
9 #include "src/compiler/ast-loop-assignment-analyzer.h" 9 #include "src/compiler/ast-loop-assignment-analyzer.h"
10 #include "src/compiler/control-builders.h" 10 #include "src/compiler/control-builders.h"
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 358
359 // Control scope implementation for a TryCatchStatement. 359 // Control scope implementation for a TryCatchStatement.
360 class AstGraphBuilder::ControlScopeForCatch : public ControlScope { 360 class AstGraphBuilder::ControlScopeForCatch : public ControlScope {
361 public: 361 public:
362 ControlScopeForCatch(AstGraphBuilder* owner, TryCatchStatement* stmt, 362 ControlScopeForCatch(AstGraphBuilder* owner, TryCatchStatement* stmt,
363 TryCatchBuilder* control) 363 TryCatchBuilder* control)
364 : ControlScope(owner), 364 : ControlScope(owner),
365 control_(control), 365 control_(control),
366 outer_prediction_(owner->try_catch_prediction_) { 366 outer_prediction_(owner->try_catch_prediction_) {
367 builder()->try_nesting_level_++; // Increment nesting. 367 builder()->try_nesting_level_++; // Increment nesting.
368 builder()->try_catch_prediction_ = stmt->catch_predicted(); 368 builder()->try_catch_prediction_ = stmt->catch_prediction();
369 } 369 }
370 ~ControlScopeForCatch() { 370 ~ControlScopeForCatch() {
371 builder()->try_nesting_level_--; // Decrement nesting. 371 builder()->try_nesting_level_--; // Decrement nesting.
372 builder()->try_catch_prediction_ = outer_prediction_; 372 builder()->try_catch_prediction_ = outer_prediction_;
373 } 373 }
374 374
375 protected: 375 protected:
376 bool Execute(Command cmd, Statement* target, Node** value) override { 376 bool Execute(Command cmd, Statement* target, Node** value) override {
377 switch (cmd) { 377 switch (cmd) {
378 case CMD_THROW: 378 case CMD_THROW:
379 control_->Throw(*value); 379 control_->Throw(*value);
380 return true; 380 return true;
381 case CMD_BREAK: 381 case CMD_BREAK:
382 case CMD_CONTINUE: 382 case CMD_CONTINUE:
383 case CMD_RETURN: 383 case CMD_RETURN:
384 break; 384 break;
385 } 385 }
386 return false; 386 return false;
387 } 387 }
388 388
389 private: 389 private:
390 TryCatchBuilder* control_; 390 TryCatchBuilder* control_;
391 bool outer_prediction_; 391 HandlerTable::CatchPrediction outer_prediction_;
392 }; 392 };
393 393
394 394
395 // Control scope implementation for a TryFinallyStatement. 395 // Control scope implementation for a TryFinallyStatement.
396 class AstGraphBuilder::ControlScopeForFinally : public ControlScope { 396 class AstGraphBuilder::ControlScopeForFinally : public ControlScope {
397 public: 397 public:
398 ControlScopeForFinally(AstGraphBuilder* owner, TryFinallyStatement* stmt, 398 ControlScopeForFinally(AstGraphBuilder* owner, TryFinallyStatement* stmt,
399 DeferredCommands* commands, TryFinallyBuilder* control) 399 DeferredCommands* commands, TryFinallyBuilder* control)
400 : ControlScope(owner), 400 : ControlScope(owner),
401 commands_(commands), 401 commands_(commands),
402 control_(control), 402 control_(control),
403 outer_prediction_(owner->try_catch_prediction_) { 403 outer_prediction_(owner->try_catch_prediction_) {
404 builder()->try_nesting_level_++; // Increment nesting. 404 builder()->try_nesting_level_++; // Increment nesting.
405 builder()->try_catch_prediction_ = stmt->catch_predicted(); 405 builder()->try_catch_prediction_ = stmt->catch_prediction();
406 } 406 }
407 ~ControlScopeForFinally() { 407 ~ControlScopeForFinally() {
408 builder()->try_nesting_level_--; // Decrement nesting. 408 builder()->try_nesting_level_--; // Decrement nesting.
409 builder()->try_catch_prediction_ = outer_prediction_; 409 builder()->try_catch_prediction_ = outer_prediction_;
410 } 410 }
411 411
412 protected: 412 protected:
413 bool Execute(Command cmd, Statement* target, Node** value) override { 413 bool Execute(Command cmd, Statement* target, Node** value) override {
414 Node* token = commands_->RecordCommand(cmd, target, *value); 414 Node* token = commands_->RecordCommand(cmd, target, *value);
415 control_->LeaveTry(token, *value); 415 control_->LeaveTry(token, *value);
416 return true; 416 return true;
417 } 417 }
418 418
419 private: 419 private:
420 DeferredCommands* commands_; 420 DeferredCommands* commands_;
421 TryFinallyBuilder* control_; 421 TryFinallyBuilder* control_;
422 bool outer_prediction_; 422 HandlerTable::CatchPrediction outer_prediction_;
423 }; 423 };
424 424
425 425
426 // Helper for generating before and after frame states. 426 // Helper for generating before and after frame states.
427 class AstGraphBuilder::FrameStateBeforeAndAfter { 427 class AstGraphBuilder::FrameStateBeforeAndAfter {
428 public: 428 public:
429 FrameStateBeforeAndAfter(AstGraphBuilder* builder, BailoutId id_before) 429 FrameStateBeforeAndAfter(AstGraphBuilder* builder, BailoutId id_before)
430 : builder_(builder), frame_state_before_(nullptr) { 430 : builder_(builder), frame_state_before_(nullptr) {
431 frame_state_before_ = id_before == BailoutId::None() 431 frame_state_before_ = id_before == BailoutId::None()
432 ? builder_->GetEmptyFrameState() 432 ? builder_->GetEmptyFrameState()
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 : isolate_(info->isolate()), 482 : isolate_(info->isolate()),
483 local_zone_(local_zone), 483 local_zone_(local_zone),
484 info_(info), 484 info_(info),
485 jsgraph_(jsgraph), 485 jsgraph_(jsgraph),
486 environment_(nullptr), 486 environment_(nullptr),
487 ast_context_(nullptr), 487 ast_context_(nullptr),
488 globals_(0, local_zone), 488 globals_(0, local_zone),
489 execution_control_(nullptr), 489 execution_control_(nullptr),
490 execution_context_(nullptr), 490 execution_context_(nullptr),
491 try_nesting_level_(0), 491 try_nesting_level_(0),
492 try_catch_prediction_(false), 492 try_catch_prediction_(HandlerTable::UNCAUGHT),
493 input_buffer_size_(0), 493 input_buffer_size_(0),
494 input_buffer_(nullptr), 494 input_buffer_(nullptr),
495 exit_controls_(local_zone), 495 exit_controls_(local_zone),
496 loop_assignment_analysis_(loop), 496 loop_assignment_analysis_(loop),
497 type_hint_analysis_(type_hint_analysis), 497 type_hint_analysis_(type_hint_analysis),
498 state_values_cache_(jsgraph), 498 state_values_cache_(jsgraph),
499 liveness_analyzer_(static_cast<size_t>(info->scope()->num_stack_slots()), 499 liveness_analyzer_(static_cast<size_t>(info->scope()->num_stack_slots()),
500 local_zone), 500 local_zone),
501 frame_state_function_info_(common()->CreateFrameStateFunctionInfo( 501 frame_state_function_info_(common()->CreateFrameStateFunctionInfo(
502 FrameStateType::kJavaScriptFunction, info->num_parameters() + 1, 502 FrameStateType::kJavaScriptFunction, info->num_parameters() + 1,
(...skipping 3668 matching lines...) Expand 10 before | Expand all | Expand 10 after
4171 if (NodeProperties::IsControl(result)) { 4171 if (NodeProperties::IsControl(result)) {
4172 environment_->UpdateControlDependency(result); 4172 environment_->UpdateControlDependency(result);
4173 } 4173 }
4174 // Update the current effect dependency for effect-producing nodes. 4174 // Update the current effect dependency for effect-producing nodes.
4175 if (result->op()->EffectOutputCount() > 0) { 4175 if (result->op()->EffectOutputCount() > 0) {
4176 environment_->UpdateEffectDependency(result); 4176 environment_->UpdateEffectDependency(result);
4177 } 4177 }
4178 // Add implicit exception continuation for throwing nodes. 4178 // Add implicit exception continuation for throwing nodes.
4179 if (!result->op()->HasProperty(Operator::kNoThrow) && inside_try_scope) { 4179 if (!result->op()->HasProperty(Operator::kNoThrow) && inside_try_scope) {
4180 // Conservative prediction whether caught locally. 4180 // Conservative prediction whether caught locally.
4181 IfExceptionHint hint = try_catch_prediction_ 4181 IfExceptionHint hint =
4182 ? IfExceptionHint::kLocallyCaught 4182 ExceptionHintFromCatchPrediction(try_catch_prediction_);
4183 : IfExceptionHint::kLocallyUncaught;
4184 // Copy the environment for the success continuation. 4183 // Copy the environment for the success continuation.
4185 Environment* success_env = environment()->CopyForConditional(); 4184 Environment* success_env = environment()->CopyForConditional();
4186 const Operator* op = common()->IfException(hint); 4185 const Operator* op = common()->IfException(hint);
4187 Node* effect = environment()->GetEffectDependency(); 4186 Node* effect = environment()->GetEffectDependency();
4188 Node* on_exception = graph()->NewNode(op, effect, result); 4187 Node* on_exception = graph()->NewNode(op, effect, result);
4189 environment_->UpdateControlDependency(on_exception); 4188 environment_->UpdateControlDependency(on_exception);
4190 environment_->UpdateEffectDependency(on_exception); 4189 environment_->UpdateEffectDependency(on_exception);
4191 execution_control()->ThrowValue(on_exception); 4190 execution_control()->ThrowValue(on_exception);
4192 set_environment(success_env); 4191 set_environment(success_env);
4193 } 4192 }
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
4411 // Phi does not exist yet, introduce one. 4410 // Phi does not exist yet, introduce one.
4412 value = NewPhi(inputs, value, control); 4411 value = NewPhi(inputs, value, control);
4413 value->ReplaceInput(inputs - 1, other); 4412 value->ReplaceInput(inputs - 1, other);
4414 } 4413 }
4415 return value; 4414 return value;
4416 } 4415 }
4417 4416
4418 } // namespace compiler 4417 } // namespace compiler
4419 } // namespace internal 4418 } // namespace internal
4420 } // namespace v8 4419 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698