MCPcopy Index your code
hub / github.com/nodejs/node / appendObjectRestAssignmentsIfNeeded

Function appendObjectRestAssignmentsIfNeeded

test/fixtures/snapshot/typescript.js:97194–97266  ·  view source on GitHub ↗
(statements, node)

Source from the content-addressed store, hash-verified

97192 return body;
97193 }
97194 function appendObjectRestAssignmentsIfNeeded(statements, node) {
97195 var containsPrecedingObjectRestOrSpread = false;
97196 for (var _i = 0, _a = node.parameters; _i < _a.length; _i++) {
97197 var parameter = _a[_i];
97198 if (containsPrecedingObjectRestOrSpread) {
97199 if (ts.isBindingPattern(parameter.name)) {
97200 // In cases where a binding pattern is simply '[]' or '{}',
97201 // we usually don't want to emit a var declaration; however, in the presence
97202 // of an initializer, we must emit that expression to preserve side effects.
97203 //
97204 // NOTE: see `insertDefaultValueAssignmentForBindingPattern` in es2015.ts
97205 if (parameter.name.elements.length > 0) {
97206 var declarations = ts.flattenDestructuringBinding(parameter, visitor, context, 0 /* FlattenLevel.All */, factory.getGeneratedNameForNode(parameter));
97207 if (ts.some(declarations)) {
97208 var declarationList = factory.createVariableDeclarationList(declarations);
97209 var statement = factory.createVariableStatement(/*modifiers*/ undefined, declarationList);
97210 ts.setEmitFlags(statement, 1048576 /* EmitFlags.CustomPrologue */);
97211 statements = ts.append(statements, statement);
97212 }
97213 }
97214 else if (parameter.initializer) {
97215 var name = factory.getGeneratedNameForNode(parameter);
97216 var initializer = ts.visitNode(parameter.initializer, visitor, ts.isExpression);
97217 var assignment = factory.createAssignment(name, initializer);
97218 var statement = factory.createExpressionStatement(assignment);
97219 ts.setEmitFlags(statement, 1048576 /* EmitFlags.CustomPrologue */);
97220 statements = ts.append(statements, statement);
97221 }
97222 }
97223 else if (parameter.initializer) {
97224 // Converts a parameter initializer into a function body statement, i.e.:
97225 //
97226 // function f(x = 1) { }
97227 //
97228 // becomes
97229 //
97230 // function f(x) {
97231 // if (typeof x === "undefined") { x = 1; }
97232 // }
97233 var name = factory.cloneNode(parameter.name);
97234 ts.setTextRange(name, parameter.name);
97235 ts.setEmitFlags(name, 48 /* EmitFlags.NoSourceMap */);
97236 var initializer = ts.visitNode(parameter.initializer, visitor, ts.isExpression);
97237 ts.addEmitFlags(initializer, 48 /* EmitFlags.NoSourceMap */ | 1536 /* EmitFlags.NoComments */);
97238 var assignment = factory.createAssignment(name, initializer);
97239 ts.setTextRange(assignment, parameter);
97240 ts.setEmitFlags(assignment, 1536 /* EmitFlags.NoComments */);
97241 var block = factory.createBlock([factory.createExpressionStatement(assignment)]);
97242 ts.setTextRange(block, parameter);
97243 ts.setEmitFlags(block, 1 /* EmitFlags.SingleLine */ | 32 /* EmitFlags.NoTrailingSourceMap */ | 384 /* EmitFlags.NoTokenSourceMaps */ | 1536 /* EmitFlags.NoComments */);
97244 var typeCheck = factory.createTypeCheck(factory.cloneNode(parameter.name), "undefined");
97245 var statement = factory.createIfStatement(typeCheck, block);
97246 ts.startOnNewLine(statement);
97247 ts.setTextRange(statement, parameter);
97248 ts.setEmitFlags(statement, 384 /* EmitFlags.NoTokenSourceMaps */ | 32 /* EmitFlags.NoTrailingSourceMap */ | 1048576 /* EmitFlags.CustomPrologue */ | 1536 /* EmitFlags.NoComments */);
97249 statements = ts.append(statements, statement);
97250 }
97251 }

Callers 2

transformFunctionBodyFunction · 0.85

Calls 2

someMethod · 0.80
appendMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…