tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

InlineScriptTree-inl.h (2269B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
      2 * vim: set ts=8 sts=2 et sw=2 tw=80:
      3 * This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef jit_InlineScriptTree_inl_h
      8 #define jit_InlineScriptTree_inl_h
      9 
     10 #include "jit/InlineScriptTree.h"
     11 
     12 #include "mozilla/Assertions.h"
     13 
     14 #include "jit/JitAllocPolicy.h"
     15 #include "js/TypeDecls.h"
     16 #include "vm/JSScript.h"
     17 
     18 namespace js {
     19 namespace jit {
     20 
     21 InlineScriptTree* InlineScriptTree::New(TempAllocator* allocator,
     22                                        InlineScriptTree* callerTree,
     23                                        jsbytecode* callerPc, JSScript* script,
     24                                        bool isMonomorphicallyInlined) {
     25  MOZ_ASSERT_IF(!callerTree, !callerPc);
     26  MOZ_ASSERT_IF(callerTree, callerTree->script()->containsPC(callerPc));
     27 
     28  // Allocate a new InlineScriptTree
     29  void* treeMem = allocator->allocate(sizeof(InlineScriptTree));
     30  if (!treeMem) {
     31    return nullptr;
     32  }
     33 
     34  // Initialize it.
     35  return new (treeMem)
     36      InlineScriptTree(callerTree, callerPc, script, isMonomorphicallyInlined);
     37 }
     38 
     39 InlineScriptTree* InlineScriptTree::addCallee(TempAllocator* allocator,
     40                                              jsbytecode* callerPc,
     41                                              JSScript* calleeScript,
     42                                              bool isMonomorphicallyInlined) {
     43  MOZ_ASSERT(script_ && script_->containsPC(callerPc));
     44  InlineScriptTree* calleeTree =
     45      New(allocator, this, callerPc, calleeScript, isMonomorphicallyInlined);
     46  if (!calleeTree) {
     47    return nullptr;
     48  }
     49 
     50  calleeTree->nextCallee_ = children_;
     51  children_ = calleeTree;
     52  return calleeTree;
     53 }
     54 
     55 void InlineScriptTree::removeCallee(InlineScriptTree* callee) {
     56  InlineScriptTree** prevPtr = &children_;
     57  for (InlineScriptTree* child = children_; child; child = child->nextCallee_) {
     58    if (child == callee) {
     59      *prevPtr = child->nextCallee_;
     60      return;
     61    }
     62    prevPtr = &child->nextCallee_;
     63  }
     64  MOZ_CRASH("Callee not found");
     65 }
     66 
     67 }  // namespace jit
     68 }  // namespace js
     69 
     70 #endif /* jit_InlineScriptTree_inl_h */