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-01-20 Functions: 10 10 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     4259934 : HandlerTableBuilder::HandlerTableBuilder(Zone* zone) : entries_(zone) {}
      17             : 
      18     2105793 : Handle<ByteArray> HandlerTableBuilder::ToHandlerTable(Isolate* isolate) {
      19     4358620 :   int handler_table_size = static_cast<int>(entries_.size());
      20             :   Handle<ByteArray> table_byte_array = isolate->factory()->NewByteArray(
      21     2105793 :       HandlerTable::LengthForRange(handler_table_size), TENURED);
      22     2105811 :   HandlerTable table(*table_byte_array);
      23     2252850 :   for (int i = 0; i < handler_table_size; ++i) {
      24      147034 :     Entry& entry = entries_[i];
      25      147034 :     HandlerTable::CatchPrediction pred = entry.catch_prediction_;
      26      147034 :     table.SetRangeStart(i, static_cast<int>(entry.offset_start));
      27      147030 :     table.SetRangeEnd(i, static_cast<int>(entry.offset_end));
      28      147034 :     table.SetRangeHandler(i, static_cast<int>(entry.offset_target), pred);
      29      147036 :     table.SetRangeData(i, entry.context.index());
      30             :   }
      31     2105816 :   return table_byte_array;
      32             : }
      33             : 
      34             : 
      35      154513 : int HandlerTableBuilder::NewHandlerEntry() {
      36      309026 :   int handler_id = static_cast<int>(entries_.size());
      37      154513 :   Entry entry = {0, 0, 0, Register::invalid_value(), HandlerTable::UNCAUGHT};
      38      154513 :   entries_.push_back(entry);
      39      154521 :   return handler_id;
      40             : }
      41             : 
      42             : 
      43      154528 : void HandlerTableBuilder::SetTryRegionStart(int handler_id, size_t offset) {
      44             :   DCHECK(Smi::IsValid(offset));  // Encoding of handler table requires this.
      45      309056 :   entries_[handler_id].offset_start = offset;
      46      154528 : }
      47             : 
      48             : 
      49      154530 : void HandlerTableBuilder::SetTryRegionEnd(int handler_id, size_t offset) {
      50             :   DCHECK(Smi::IsValid(offset));  // Encoding of handler table requires this.
      51      309060 :   entries_[handler_id].offset_end = offset;
      52      154530 : }
      53             : 
      54             : 
      55      154540 : void HandlerTableBuilder::SetHandlerTarget(int handler_id, size_t offset) {
      56             :   DCHECK(Smi::IsValid(offset));  // Encoding of handler table requires this.
      57      309080 :   entries_[handler_id].offset_target = offset;
      58      154540 : }
      59             : 
      60      154544 : void HandlerTableBuilder::SetPrediction(
      61             :     int handler_id, HandlerTable::CatchPrediction prediction) {
      62      309088 :   entries_[handler_id].catch_prediction_ = prediction;
      63      154544 : }
      64             : 
      65             : 
      66      154526 : void HandlerTableBuilder::SetContextRegister(int handler_id, Register reg) {
      67      309052 :   entries_[handler_id].context = reg;
      68      154526 : }
      69             : 
      70             : }  // namespace interpreter
      71             : }  // namespace internal
      72      183867 : }  // namespace v8

Generated by: LCOV version 1.10