]>
git.saurik.com Git - apple/javascriptcore.git/blob - bytecode/VariableWatchpointSet.h
34cefa0ee4e05e1da91daf4587ff3fbe76fc0e30
   2  * Copyright (C) 2012-2014 Apple Inc. All rights reserved. 
   4  * Redistribution and use in source and binary forms, with or without 
   5  * modification, are permitted provided that the following conditions 
   7  * 1. Redistributions of source code must retain the above copyright 
   8  *    notice, this list of conditions and the following disclaimer. 
   9  * 2. Redistributions in binary form must reproduce the above copyright 
  10  *    notice, this list of conditions and the following disclaimer in the 
  11  *    documentation and/or other materials provided with the distribution. 
  13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 
  14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
  15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
  16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR 
  17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
  18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
  19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
  20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
  21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
  22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
  23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
  26 #ifndef VariableWatchpointSet_h 
  27 #define VariableWatchpointSet_h 
  29 #include "Watchpoint.h" 
  30 #include "WriteBarrier.h" 
  36 class VariableWatchpointSet 
: public WatchpointSet 
{ 
  37     friend class LLIntOffsetsExtractor
; 
  39     VariableWatchpointSet(SymbolTable
& symbolTable
) 
  40         : WatchpointSet(ClearWatchpoint
) 
  41         , m_symbolTable(symbolTable
) 
  45     ~VariableWatchpointSet() { } 
  47     // For the purpose of deciding whether or not to watch this variable, you only need 
  48     // to inspect inferredValue(). If this returns something other than the empty 
  49     // value, then it means that at all future safepoints, this watchpoint set will be 
  50     // in one of these states: 
  52     //    IsWatched: in this case, the variable's value must still be the 
  55     //    IsInvalidated: in this case the variable's value may be anything but you'll 
  56     //        either notice that it's invalidated and not install the watchpoint, or 
  57     //        you will have been notified that the watchpoint was fired. 
  58     JSValue 
inferredValue() const { return m_inferredValue
.get(); } 
  60     inline void notifyWrite(VM
&, JSValue
); 
  64         m_inferredValue
.clear(); 
  65         WatchpointSet::invalidate(); 
  68     void finalizeUnconditionally() 
  70         ASSERT(!!m_inferredValue 
== (state() == IsWatched
)); 
  73         JSValue inferredValue 
= m_inferredValue
.get(); 
  74         if (!inferredValue
.isCell()) 
  76         JSCell
* cell 
= inferredValue
.asCell(); 
  77         if (Heap::isMarked(cell
)) 
  82     WriteBarrier
<Unknown
>* addressOfInferredValue() { return &m_inferredValue
; } 
  85     SymbolTable
& m_symbolTable
; 
  86     WriteBarrier
<Unknown
> m_inferredValue
; 
  91 #endif // VariableWatchpointSet_h