LCOV - code coverage report
Current view: top level - src/interpreter - handler-table-builder.cc (source / functions) Hit Total Coverage
Test: app.info Lines: 32 32 100.0 %
Date: 2017-04-26 Functions: 8 8 100.0 %

          Line data    Source code
       1             : // Copyright 2016 the V8 project authors. All rights reserved.
       2             : // Use of this source code is governed by a BSD-style license that can be
       3             : // found in the LICENSE file.
       4             : 
       5             : #include "src/interpreter/handler-table-builder.h"
       6             : 
       7             : #include "src/factory.h"
       8             : #include "src/interpreter/bytecode-register.h"
       9             : #include "src/isolate.h"
      10             : #include "src/objects-inl.h"
      11             : 
      12             : namespace v8 {
      13             : namespace internal {
      14             : namespace interpreter {
      15             : 
      16     4209806 : HandlerTableBuilder::HandlerTableBuilder(Zone* zone) : entries_(zone) {}
      17             : 
      18     2103822 : Handle<HandlerTable> HandlerTableBuilder::ToHandlerTable(Isolate* isolate) {
      19     4384153 :   int handler_table_size = static_cast<int>(entries_.size());
      20             :   Handle<HandlerTable> table =
      21             :       Handle<HandlerTable>::cast(isolate->factory()->NewFixedArray(
      22     2103822 :           HandlerTable::LengthForRange(handler_table_size), TENURED));
      23     2280329 :   for (int i = 0; i < handler_table_size; ++i) {
      24      176509 :     Entry& entry = entries_[i];
      25      176509 :     HandlerTable::CatchPrediction pred = entry.catch_prediction_;
      26      353018 :     table->SetRangeStart(i, static_cast<int>(entry.offset_start));
      27      353018 :     table->SetRangeEnd(i, static_cast<int>(entry.offset_end));
      28      353018 :     table->SetRangeHandler(i, static_cast<int>(entry.offset_target), pred);
      29      176509 :     table->SetRangeData(i, entry.context.index());
      30             :   }
      31     2103820 :   return table;
      32             : }
      33             : 
      34             : 
      35      176533 : int HandlerTableBuilder::NewHandlerEntry() {
      36      353066 :   int handler_id = static_cast<int>(entries_.size());
      37      176533 :   Entry entry = {0, 0, 0, Register(), HandlerTable::UNCAUGHT};
      38      176533 :   entries_.push_back(entry);
      39      176533 :   return handler_id;
      40             : }
      41             : 
      42             : 
      43      176533 : void HandlerTableBuilder::SetTryRegionStart(int handler_id, size_t offset) {
      44             :   DCHECK(Smi::IsValid(offset));  // Encoding of handler table requires this.
      45      353066 :   entries_[handler_id].offset_start = offset;
      46      176533 : }
      47             : 
      48             : 
      49      176533 : void HandlerTableBuilder::SetTryRegionEnd(int handler_id, size_t offset) {
      50             :   DCHECK(Smi::IsValid(offset));  // Encoding of handler table requires this.
      51      353066 :   entries_[handler_id].offset_end = offset;
      52      176533 : }
      53             : 
      54             : 
      55      176533 : void HandlerTableBuilder::SetHandlerTarget(int handler_id, size_t offset) {
      56             :   DCHECK(Smi::IsValid(offset));  // Encoding of handler table requires this.
      57      353066 :   entries_[handler_id].offset_target = offset;
      58      176533 : }
      59             : 
      60      176533 : void HandlerTableBuilder::SetPrediction(
      61             :     int handler_id, HandlerTable::CatchPrediction prediction) {
      62      353066 :   entries_[handler_id].catch_prediction_ = prediction;
      63      176533 : }
      64             : 
      65             : 
      66      176533 : void HandlerTableBuilder::SetContextRegister(int handler_id, Register reg) {
      67      353066 :   entries_[handler_id].context = reg;
      68      176533 : }
      69             : 
      70             : }  // namespace interpreter
      71             : }  // namespace internal
      72             : }  // namespace v8

Generated by: LCOV version 1.10