[GTK][WPE] QR code not loaded in web.whatsapp.com
[WebKit-https.git] / Source / WebInspectorUI / UserInterface / Models / TypeSet.js
1 /*
2  * Copyright (C) 2014, 2015 Apple Inc. All rights reserved.
3  * Copyright (C) Saam Barati.
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. AND ITS CONTRIBUTORS ``AS IS''
15  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
16  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
18  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
24  * THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 WI.TypeSet = class TypeSet
28 {
29     constructor(typeSet)
30     {
31         console.assert(typeSet);
32
33         var bitString = 0x0;
34         if (typeSet.isFunction)
35             bitString |= WI.TypeSet.TypeBit.Function;
36         if (typeSet.isUndefined)
37             bitString |= WI.TypeSet.TypeBit.Undefined;
38         if (typeSet.isNull)
39             bitString |= WI.TypeSet.TypeBit.Null;
40         if (typeSet.isBoolean)
41             bitString |= WI.TypeSet.TypeBit.Boolean;
42         if (typeSet.isInteger)
43             bitString |= WI.TypeSet.TypeBit.Integer;
44         if (typeSet.isNumber)
45             bitString |= WI.TypeSet.TypeBit.Number;
46         if (typeSet.isString)
47             bitString |= WI.TypeSet.TypeBit.String;
48         if (typeSet.isObject)
49             bitString |= WI.TypeSet.TypeBit.Object;
50         if (typeSet.isSymbol)
51             bitString |= WI.TypeSet.TypeBit.Symbol;
52         if (typeSet.isBigInt)
53             bitString |= WI.TypeSet.TypeBit.BigInt;
54         console.assert(bitString);
55
56         this._typeSet = typeSet;
57         this._bitString = bitString;
58         this._primitiveTypeNames = null;
59     }
60
61     // Static
62
63     static fromPayload(payload)
64     {
65         return new WI.TypeSet(payload);
66     }
67
68     // Public
69
70     isContainedIn(test)
71     {
72         // This function checks if types in bitString are contained in the types described by the 'test' bitstring. (i.e we haven't seen more types than 'test').
73         // We have seen fewer or equal number of types as 'test' if ANDing bitString with test doesn't zero out any of our bits.
74
75         // For example:
76
77         // 0b0110 (bitString)
78         // 0b1111 (test)
79         // ------ (AND)
80         // 0b0110 == bitString
81
82         // 0b0110 (bitString)
83         // 0b0010 (test)
84         // ------ (AND)
85         // 0b0010 != bitString
86
87         return this._bitString && (this._bitString & test) === this._bitString;
88     }
89
90     get primitiveTypeNames()
91     {
92         if (this._primitiveTypeNames)
93             return this._primitiveTypeNames;
94
95         this._primitiveTypeNames = [];
96         var typeSet = this._typeSet;
97         if (typeSet.isUndefined)
98             this._primitiveTypeNames.push("Undefined");
99         if (typeSet.isNull)
100             this._primitiveTypeNames.push("Null");
101         if (typeSet.isBoolean)
102             this._primitiveTypeNames.push("Boolean");
103         if (typeSet.isString)
104             this._primitiveTypeNames.push("String");
105         if (typeSet.isSymbol)
106             this._primitiveTypeNames.push("Symbol");
107         if (typeSet.isBigInt)
108             this._primitiveTypeNames.push("BigInt");
109
110         // It's implied that type Integer is contained in type Number. Don't put
111         // both 'Integer' and 'Number' into the set because this could imply that
112         // Number means to Double instead of Double|Integer.
113         if (typeSet.isNumber)
114             this._primitiveTypeNames.push("Number");
115         else if (typeSet.isInteger)
116             this._primitiveTypeNames.push("Integer");
117
118         return this._primitiveTypeNames;
119     }
120 };
121
122 WI.TypeSet.TypeBit = {
123     "Function"    :  0x1,
124     "Undefined"   :  0x2,
125     "Null"        :  0x4,
126     "Boolean"     :  0x8,
127     "Integer"     :  0x10,
128     "Number"      :  0x20,
129     "String"      :  0x40,
130     "Object"      :  0x80,
131     "Symbol"      :  0x100,
132     "BigInt"      :  0x200,
133 };
134
135 WI.TypeSet.NullOrUndefinedTypeBits = WI.TypeSet.TypeBit.Null | WI.TypeSet.TypeBit.Undefined;