• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2* Copyright (c) Microsoft Corporation. All rights reserved.
3* Copyright (c) 2023 Huawei Device Co., Ltd.
4* Licensed under the Apache License, Version 2.0 (the "License");
5* you may not use this file except in compliance with the License.
6* You may obtain a copy of the License at
7*
8*     http://www.apache.org/licenses/LICENSE-2.0
9*
10* Unless required by applicable law or agreed to in writing, software
11* distributed under the License is distributed on an "AS IS" BASIS,
12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13* See the License for the specific language governing permissions and
14* limitations under the License.
15*
16* This file has been modified by Huawei to verify type inference by adding verification statements.
17*/
18
19// === tests/cases/compiler/escapedReservedCompilerNamedIdentifier.ts ===
20declare function AssertType(value:any, type:string):void;
21// double underscores
22let __proto__ = 10;
23AssertType(__proto__, "number");
24AssertType(10, "int");
25
26let o = {
27AssertType(o, "{ __proto__: number; }");
28AssertType({    "__proto__": 0}, "{ __proto__: number; }");
29
30    "__proto__": 0
31AssertType("__proto__", "number");
32AssertType(0, "int");
33
34};
35let b = o["__proto__"];
36AssertType(b, "number");
37AssertType(o["__proto__"], "number");
38AssertType(o, "{ __proto__: number; }");
39AssertType("__proto__", "string");
40
41let o1 = {
42AssertType(o1, "{ __proto__: number; }");
43AssertType({    __proto__: 0}, "{ __proto__: number; }");
44
45    __proto__: 0
46AssertType(__proto__, "number");
47AssertType(0, "int");
48
49};
50let b1 = o1["__proto__"];
51AssertType(b1, "number");
52AssertType(o1["__proto__"], "number");
53AssertType(o1, "{ __proto__: number; }");
54AssertType("__proto__", "string");
55
56// Triple underscores
57let ___proto__ = 10;
58AssertType(___proto__, "number");
59AssertType(10, "int");
60
61let o2 = {
62AssertType(o2, "{ ___proto__: number; }");
63AssertType({    "___proto__": 0}, "{ ___proto__: number; }");
64
65    "___proto__": 0
66AssertType("___proto__", "number");
67AssertType(0, "int");
68
69};
70let b2 = o2["___proto__"];
71AssertType(b2, "number");
72AssertType(o2["___proto__"], "number");
73AssertType(o2, "{ ___proto__: number; }");
74AssertType("___proto__", "string");
75
76let o3 = {
77AssertType(o3, "{ ___proto__: number; }");
78AssertType({    ___proto__: 0}, "{ ___proto__: number; }");
79
80    ___proto__: 0
81AssertType(___proto__, "number");
82AssertType(0, "int");
83
84};
85let b3 = o3["___proto__"];
86AssertType(b3, "number");
87AssertType(o3["___proto__"], "number");
88AssertType(o3, "{ ___proto__: number; }");
89AssertType("___proto__", "string");
90
91// One underscore
92let _proto__ = 10;
93AssertType(_proto__, "number");
94AssertType(10, "int");
95
96let o4 = {
97AssertType(o4, "{ _proto__: number; }");
98AssertType({    "_proto__": 0}, "{ _proto__: number; }");
99
100    "_proto__": 0
101AssertType("_proto__", "number");
102AssertType(0, "int");
103
104};
105let b4 = o4["_proto__"];
106AssertType(b4, "number");
107AssertType(o4["_proto__"], "number");
108AssertType(o4, "{ _proto__: number; }");
109AssertType("_proto__", "string");
110
111let o5 = {
112AssertType(o5, "{ _proto__: number; }");
113AssertType({    _proto__: 0}, "{ _proto__: number; }");
114
115    _proto__: 0
116AssertType(_proto__, "number");
117AssertType(0, "int");
118
119};
120let b5 = o5["_proto__"];
121AssertType(b5, "number");
122AssertType(o5["_proto__"], "number");
123AssertType(o5, "{ _proto__: number; }");
124AssertType("_proto__", "string");
125
126
127