diff --git a/.gitignore b/.gitignore index afd10c0786da9..7da43014e005c 100644 --- a/.gitignore +++ b/.gitignore @@ -84,3 +84,4 @@ tests/cases/user/puppeteer/puppeteer tests/cases/user/axios-src/axios-src tests/cases/user/prettier/prettier .eslintcache +isolate-*-v8.log \ No newline at end of file diff --git a/src/compiler/factory/nodeFactory.ts b/src/compiler/factory/nodeFactory.ts index 713df9c86780a..ab9805908d885 100644 --- a/src/compiler/factory/nodeFactory.ts +++ b/src/compiler/factory/nodeFactory.ts @@ -1171,6 +1171,9 @@ namespace ts { node.constraint = constraint; node.default = defaultType; node.transformFlags = TransformFlags.ContainsTypeScript; + + // prevent megamorphism + node.expression = undefined; return node; } @@ -1372,6 +1375,8 @@ namespace ts { ); node.questionToken = questionToken; node.transformFlags = TransformFlags.ContainsTypeScript; + node.jsDoc = undefined; // added by parser + node.jsDocCache = undefined; // added by utilities return node; } @@ -1438,6 +1443,12 @@ namespace ts { // The following properties are used only to report grammar errors node.exclamationToken = undefined; + + // prevent megamorphism + node.jsDoc = undefined; // added by parser + node.jsDocCache = undefined; // added by utilities + node.flowNode = undefined; // added by binder + node.endFlowNode = undefined; // added by binder return node; } @@ -2363,6 +2374,11 @@ namespace ts { node.properties = createNodeArray(properties); node.multiLine = multiLine; node.transformFlags |= propagateChildrenFlags(node.properties); + + // prevent megamorphism + node.symbol = undefined!; + node.nextContainer = undefined; + (node as JSDocContainer).jsDocCache = undefined; return node; } @@ -2732,6 +2748,14 @@ namespace ts { if (modifiersToFlags(node.modifiers) & ModifierFlags.Async) { node.transformFlags |= TransformFlags.ContainsES2017 | TransformFlags.ContainsLexicalThis; } + + // prevent megamorphism + node.flowNode = undefined; + node.endFlowNode = undefined; + node.jsDoc = undefined; + node.jsDocCache = undefined; + node.contextualType = undefined; + node.inferenceContext = undefined; return node; } @@ -3729,6 +3753,12 @@ namespace ts { // The following properties are used only to report grammar errors node.illegalDecorators = undefined; + + // prevent megamorphism + node.jsDoc = undefined; // added by parser + node.jsDocCache = undefined; // added by utilities + node.endFlowNode = undefined; // added by binder + return node; } @@ -5232,11 +5262,13 @@ namespace ts { propagateChildFlags(node.name) | propagateChildFlags(node.initializer); + node.jsDoc = undefined; // added by parser + // The following properties are used only to report grammar errors - node.illegalDecorators = undefined; - node.modifiers = undefined; - node.questionToken = undefined; - node.exclamationToken = undefined; + node.illegalDecorators = undefined; // added by parser + node.modifiers = undefined; // added by parser + node.questionToken = undefined; // added by parser + node.exclamationToken = undefined; // added by parser return node; }