ResolveGlobalStatus.h 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /*
  2. * Copyright (C) 2012 Apple Inc. All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions
  6. * are met:
  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.
  12. *
  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.
  24. */
  25. #ifndef ResolveGlobalStatus_h
  26. #define ResolveGlobalStatus_h
  27. #include "JSCJSValue.h"
  28. #include "PropertyOffset.h"
  29. #include <wtf/NotFound.h>
  30. namespace JSC {
  31. class CodeBlock;
  32. class Identifier;
  33. struct ResolveOperation;
  34. class Structure;
  35. class ResolveGlobalStatus {
  36. public:
  37. enum State {
  38. NoInformation,
  39. Simple,
  40. TakesSlowPath
  41. };
  42. ResolveGlobalStatus()
  43. : m_state(NoInformation)
  44. , m_structure(0)
  45. , m_offset(invalidOffset)
  46. {
  47. }
  48. ResolveGlobalStatus(
  49. State state, Structure* structure = 0, PropertyOffset offset = invalidOffset,
  50. JSValue specificValue = JSValue())
  51. : m_state(state)
  52. , m_structure(structure)
  53. , m_offset(offset)
  54. , m_specificValue(specificValue)
  55. {
  56. }
  57. static ResolveGlobalStatus computeFor(CodeBlock*, int bytecodeIndex, ResolveOperation*, Identifier&);
  58. State state() const { return m_state; }
  59. bool isSet() const { return m_state != NoInformation; }
  60. bool operator!() const { return !isSet(); }
  61. bool isSimple() const { return m_state == Simple; }
  62. bool takesSlowPath() const { return m_state == TakesSlowPath; }
  63. Structure* structure() const { return m_structure; }
  64. PropertyOffset offset() const { return m_offset; }
  65. JSValue specificValue() const { return m_specificValue; }
  66. private:
  67. State m_state;
  68. Structure* m_structure;
  69. PropertyOffset m_offset;
  70. JSValue m_specificValue;
  71. }; // class ResolveGlobalStatus
  72. } // namespace JSC
  73. #endif // ResolveGlobalStatus_h