LCOV - code coverage report
Current view: top level - src/interpreter - handler-table-builder.cc (source / functions) Hit Total Coverage
Test: app.info Lines: 34 34 100.0 %
Date: 2019-03-21 Functions: 9 9 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/heap/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     4233748 : HandlerTableBuilder::HandlerTableBuilder(Zone* zone) : entries_(zone) {}
      17             : 
      18     2092248 : Handle<ByteArray> HandlerTableBuilder::ToHandlerTable(Isolate* isolate) {
      19     2092248 :   int handler_table_size = static_cast<int>(entries_.size());
      20             :   Handle<ByteArray> table_byte_array = isolate->factory()->NewByteArray(
      21     2092248 :       HandlerTable::LengthForRange(handler_table_size), AllocationType::kOld);
      22     2092238 :   HandlerTable table(*table_byte_array);
      23     2375412 :   for (int i = 0; i < handler_table_size; ++i) {
      24      141587 :     Entry& entry = entries_[i];
      25      141587 :     HandlerTable::CatchPrediction pred = entry.catch_prediction_;
      26      141587 :     table.SetRangeStart(i, static_cast<int>(entry.offset_start));
      27      141587 :     table.SetRangeEnd(i, static_cast<int>(entry.offset_end));
      28      141587 :     table.SetRangeHandler(i, static_cast<int>(entry.offset_target), pred);
      29      141587 :     table.SetRangeData(i, entry.context.index());
      30             :   }
      31     2092238 :   return table_byte_array;
      32             : }
      33             : 
      34             : 
      35      149236 : int HandlerTableBuilder::NewHandlerEntry() {
      36      149236 :   int handler_id = static_cast<int>(entries_.size());
      37      149236 :   Entry entry = {0, 0, 0, Register::invalid_value(), HandlerTable::UNCAUGHT};
      38      149236 :   entries_.push_back(entry);
      39      149237 :   return handler_id;
      40             : }
      41             : 
      42             : 
      43      149236 : void HandlerTableBuilder::SetTryRegionStart(int handler_id, size_t offset) {
      44             :   DCHECK(Smi::IsValid(offset));  // Encoding of handler table requires this.
      45      298472 :   entries_[handler_id].offset_start = offset;
      46      149236 : }
      47             : 
      48             : 
      49      149235 : void HandlerTableBuilder::SetTryRegionEnd(int handler_id, size_t offset) {
      50             :   DCHECK(Smi::IsValid(offset));  // Encoding of handler table requires this.
      51      298470 :   entries_[handler_id].offset_end = offset;
      52      149235 : }
      53             : 
      54             : 
      55      149234 : void HandlerTableBuilder::SetHandlerTarget(int handler_id, size_t offset) {
      56             :   DCHECK(Smi::IsValid(offset));  // Encoding of handler table requires this.
      57      298468 :   entries_[handler_id].offset_target = offset;
      58      149234 : }
      59             : 
      60      149234 : void HandlerTableBuilder::SetPrediction(
      61             :     int handler_id, HandlerTable::CatchPrediction prediction) {
      62      298468 :   entries_[handler_id].catch_prediction_ = prediction;
      63      149234 : }
      64             : 
      65             : 
      66      149236 : void HandlerTableBuilder::SetContextRegister(int handler_id, Register reg) {
      67      298472 :   entries_[handler_id].context = reg;
      68      149236 : }
      69             : 
      70             : }  // namespace interpreter
      71             : }  // namespace internal
      72      120216 : }  // namespace v8

Generated by: LCOV version 1.10