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