/ runtime / RuntimeType.h
RuntimeType.h
 1  /*
 2   * Copyright (C) 2015 Apple Inc. All rights reserved.
 3   * Copyright (C) Saam Barati <saambarati1@gmail.com>. All rights reserved.
 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 "VM.h"
30  #include <wtf/text/WTFString.h>
31  
32  namespace JSC {
33  
34  enum RuntimeType : uint16_t {
35      TypeNothing            = 0x0,
36      TypeFunction           = 0x1,
37      TypeUndefined          = 0x2,
38      TypeNull               = 0x4,
39      TypeBoolean            = 0x8,
40      TypeAnyInt             = 0x10,
41      TypeNumber             = 0x20,
42      TypeString             = 0x40,
43      TypeObject             = 0x80,
44      TypeSymbol             = 0x100,
45      TypeBigInt             = 0x200,
46  };
47  
48  typedef uint16_t RuntimeTypeMask;
49  
50  static const RuntimeTypeMask RuntimeTypeMaskAllTypes = TypeFunction | TypeUndefined | TypeNull | TypeBoolean | TypeAnyInt | TypeNumber | TypeString | TypeObject | TypeSymbol | TypeBigInt;
51  
52  class JSValue;
53  RuntimeType runtimeTypeForValue(VM&, JSValue);
54  String runtimeTypeAsString(RuntimeType);
55  
56  ALWAYS_INLINE bool runtimeTypeIsPrimitive(RuntimeTypeMask type)
57  {
58      return type & ~(TypeFunction | TypeObject);
59  }
60  
61  } // namespace JSC