/ runtime / StringIteratorPrototype.h
StringIteratorPrototype.h
 1  /*
 2   * Copyright (C) 2013-2019 Apple, Inc. All rights reserved.
 3   * Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>.
 4   *
 5   * Redistribution and use in source and binary forms, with or without
 6   * modification, are permitted provided that the following conditions
 7   * are met:
 8   * 1. Redistributions of source code must retain the above copyright
 9   *    notice, this list of conditions and the following disclaimer.
10   * 2. Redistributions in binary form must reproduce the above copyright
11   *    notice, this list of conditions and the following disclaimer in the
12   *    documentation and/or other materials provided with the distribution.
13   *
14   * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
15   * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
18   * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19   * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20   * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21   * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22   * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25   */
26  
27  #pragma once
28  
29  #include "JSObject.h"
30  
31  namespace JSC {
32  
33  class StringIteratorPrototype final : public JSNonFinalObject {
34  public:
35      using Base = JSNonFinalObject;
36      static constexpr unsigned StructureFlags = Base::StructureFlags | HasStaticPropertyTable;
37  
38      template<typename CellType, SubspaceAccess>
39      static IsoSubspace* subspaceFor(VM& vm)
40      {
41          STATIC_ASSERT_ISO_SUBSPACE_SHARABLE(StringIteratorPrototype, Base);
42          return &vm.plainObjectSpace;
43      }
44  
45      static StringIteratorPrototype* create(VM& vm, JSGlobalObject* globalObject, Structure* structure)
46      {
47          StringIteratorPrototype* prototype = new (NotNull, allocateCell<StringIteratorPrototype>(vm.heap)) StringIteratorPrototype(vm, structure);
48          prototype->finishCreation(vm, globalObject);
49          return prototype;
50      }
51  
52      DECLARE_INFO;
53  
54      static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
55      {
56          return Structure::create(vm, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), info());
57      }
58  
59  private:
60      StringIteratorPrototype(VM& vm, Structure* structure)
61          : Base(vm, structure)
62      {
63      }
64      void finishCreation(VM&, JSGlobalObject*);
65  };
66  
67  } // namespace JSC