/platform/external/webkit/WebCore/bindings/js/ScriptArray.cpp

https://github.com/aharish/totoro-gb-opensource-update2 · C++ · 112 lines · 67 code · 16 blank · 29 comment · 3 complexity · c24a007980bad1922c996489163a9c2d MD5 · raw file

  1. /*
  2. * Copyright (C) 2009 Google 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 are
  6. * met:
  7. *
  8. * * Redistributions of source code must retain the above copyright
  9. * notice, this list of conditions and the following disclaimer.
  10. * * Redistributions in binary form must reproduce the above
  11. * copyright notice, this list of conditions and the following disclaimer
  12. * in the documentation and/or other materials provided with the
  13. * distribution.
  14. * * Neither the name of Google Inc. nor the names of its
  15. * contributors may be used to endorse or promote products derived from
  16. * this software without specific prior written permission.
  17. *
  18. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  19. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  20. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  21. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  22. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  23. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  24. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  25. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  26. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  27. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  28. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  29. */
  30. #include "config.h"
  31. #include "ScriptArray.h"
  32. #include <runtime/JSLock.h>
  33. using namespace JSC;
  34. namespace WebCore {
  35. ScriptArray::ScriptArray(ScriptState* scriptState, JSArray* object)
  36. : ScriptObject(scriptState, object)
  37. {
  38. }
  39. static bool handleException(ScriptState* scriptState)
  40. {
  41. if (!scriptState->hadException())
  42. return true;
  43. reportException(scriptState, scriptState->exception());
  44. return false;
  45. }
  46. bool ScriptArray::set(unsigned index, const ScriptObject& value)
  47. {
  48. if (value.scriptState() != m_scriptState) {
  49. ASSERT_NOT_REACHED();
  50. return false;
  51. }
  52. JSLock lock(SilenceAssertionsOnly);
  53. jsArray()->put(m_scriptState, index, value.jsObject());
  54. return handleException(m_scriptState);
  55. }
  56. bool ScriptArray::set(unsigned index, const String& value)
  57. {
  58. JSLock lock(SilenceAssertionsOnly);
  59. jsArray()->put(m_scriptState, index, jsString(m_scriptState, value));
  60. return handleException(m_scriptState);
  61. }
  62. bool ScriptArray::set(unsigned index, double value)
  63. {
  64. JSLock lock(SilenceAssertionsOnly);
  65. jsArray()->put(m_scriptState, index, jsNumber(m_scriptState, value));
  66. return handleException(m_scriptState);
  67. }
  68. bool ScriptArray::set(unsigned index, long long value)
  69. {
  70. JSLock lock(SilenceAssertionsOnly);
  71. jsArray()->put(m_scriptState, index, jsNumber(m_scriptState, value));
  72. return handleException(m_scriptState);
  73. }
  74. bool ScriptArray::set(unsigned index, int value)
  75. {
  76. JSLock lock(SilenceAssertionsOnly);
  77. jsArray()->put(m_scriptState, index, jsNumber(m_scriptState, value));
  78. return handleException(m_scriptState);
  79. }
  80. bool ScriptArray::set(unsigned index, bool value)
  81. {
  82. JSLock lock(SilenceAssertionsOnly);
  83. jsArray()->put(m_scriptState, index, jsBoolean(value));
  84. return handleException(m_scriptState);
  85. }
  86. unsigned ScriptArray::length()
  87. {
  88. JSLock lock(SilenceAssertionsOnly);
  89. return jsArray()->length();
  90. }
  91. ScriptArray ScriptArray::createNew(ScriptState* scriptState)
  92. {
  93. JSLock lock(SilenceAssertionsOnly);
  94. return ScriptArray(scriptState, constructEmptyArray(scriptState));
  95. }
  96. } // namespace WebCore