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-02-19 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     4214570 : HandlerTableBuilder::HandlerTableBuilder(Zone* zone) : entries_(zone) {}
      17             : 
      18     2082969 : Handle<ByteArray> HandlerTableBuilder::ToHandlerTable(Isolate* isolate) {
      19     4307047 :   int handler_table_size = static_cast<int>(entries_.size());
      20             :   Handle<ByteArray> table_byte_array = isolate->factory()->NewByteArray(
      21     2082969 :       HandlerTable::LengthForRange(handler_table_size), TENURED);
      22     2082964 :   HandlerTable table(*table_byte_array);
      23     2224079 :   for (int i = 0; i < handler_table_size; ++i) {
      24      141109 :     Entry& entry = entries_[i];
      25      141109 :     HandlerTable::CatchPrediction pred = entry.catch_prediction_;
      26      141109 :     table.SetRangeStart(i, static_cast<int>(entry.offset_start));
      27      141107 :     table.SetRangeEnd(i, static_cast<int>(entry.offset_end));
      28      141107 :     table.SetRangeHandler(i, static_cast<int>(entry.offset_target), pred);
      29      141108 :     table.SetRangeData(i, entry.context.index());
      30             :   }
      31     2082970 :   return table_byte_array;
      32             : }
      33             : 
      34             : 
      35      148671 : int HandlerTableBuilder::NewHandlerEntry() {
      36      297342 :   int handler_id = static_cast<int>(entries_.size());
      37      148671 :   Entry entry = {0, 0, 0, Register::invalid_value(), HandlerTable::UNCAUGHT};
      38      148671 :   entries_.push_back(entry);
      39      148681 :   return handler_id;
      40             : }
      41             : 
      42             : 
      43      148688 : void HandlerTableBuilder::SetTryRegionStart(int handler_id, size_t offset) {
      44             :   DCHECK(Smi::IsValid(offset));  // Encoding of handler table requires this.
      45      297376 :   entries_[handler_id].offset_start = offset;
      46      148688 : }
      47             : 
      48             : 
      49      148690 : void HandlerTableBuilder::SetTryRegionEnd(int handler_id, size_t offset) {
      50             :   DCHECK(Smi::IsValid(offset));  // Encoding of handler table requires this.
      51      297380 :   entries_[handler_id].offset_end = offset;
      52      148690 : }
      53             : 
      54             : 
      55      148688 : void HandlerTableBuilder::SetHandlerTarget(int handler_id, size_t offset) {
      56             :   DCHECK(Smi::IsValid(offset));  // Encoding of handler table requires this.
      57      297376 :   entries_[handler_id].offset_target = offset;
      58      148688 : }
      59             : 
      60      148692 : void HandlerTableBuilder::SetPrediction(
      61             :     int handler_id, HandlerTable::CatchPrediction prediction) {
      62      297384 :   entries_[handler_id].catch_prediction_ = prediction;
      63      148692 : }
      64             : 
      65             : 
      66      148686 : void HandlerTableBuilder::SetContextRegister(int handler_id, Register reg) {
      67      297372 :   entries_[handler_id].context = reg;
      68      148686 : }
      69             : 
      70             : }  // namespace interpreter
      71             : }  // namespace internal
      72      178779 : }  // namespace v8

Generated by: LCOV version 1.10