Skip to content

Commit 5073b62

Browse files
committed
refrect reviews
1 parent e6c8381 commit 5073b62

File tree

1 file changed

+18
-20
lines changed

1 file changed

+18
-20
lines changed

src/compiler/checker.ts

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24364,24 +24364,25 @@ namespace ts {
2436424364
// If we are missing the close parenthesis, the call is incomplete.
2436524365
callIsIncomplete = node.arguments.end === node.end;
2436624366

24367-
// If a spread argument is present, check that it corresponds to a rest parameter or at least that it's in the valid range.
24367+
// If one or more spread arguments are present, check that they correspond to a rest parameter or at least that they are in the valid range.
2436824368
const firstSpreadArgIndex = getSpreadArgumentIndex(args);
24369-
const existSpreadArgIndex = firstSpreadArgIndex >= 0;
24370-
if (existSpreadArgIndex) {
24371-
if (firstSpreadArgIndex === args.length - 1) {
24372-
return firstSpreadArgIndex >= getMinArgumentCount(signature) && (hasEffectiveRestParameter(signature) || firstSpreadArgIndex < getParameterCount(signature));
24373-
}
24374-
24375-
const totalCount = node.arguments.reduce((total, next) => {
24376-
if (isSpreadArgument(next)) {
24377-
const spreadArgment = <SpreadElement>next;
24369+
if (firstSpreadArgIndex >= 0) {
24370+
if (firstSpreadArgIndex === args.length - 1) {
24371+
return firstSpreadArgIndex >= getMinArgumentCount(signature) && (hasEffectiveRestParameter(signature) || firstSpreadArgIndex < getParameterCount(signature));
24372+
}
24373+
24374+
let totalCount = firstSpreadArgIndex + 1;
24375+
for (let i = firstSpreadArgIndex; i < args.length; i++) {
24376+
if (isSpreadArgument(args[i])) {
24377+
const spreadArgment = <SpreadElement>args[i];
2437824378
const type = flowLoopCount ? checkExpression(spreadArgment.expression) : checkExpressionCached(spreadArgment.expression);
2437924379
if (isTupleType(type)) {
24380-
return total + getSyntheticExpressions(type, spreadArgment).length;
24380+
totalCount += getTypeArguments(type).length;
24381+
continue;
2438124382
}
2438224383
}
24383-
return total + 1;
24384-
}, 0);
24384+
totalCount += 1;
24385+
}
2438524386
return totalCount >= getMinArgumentCount(signature) && (hasEffectiveRestParameter(signature) || totalCount < getParameterCount(signature));
2438624387
}
2438724388
}
@@ -24855,18 +24856,15 @@ namespace ts {
2485524856
const spreadArgument = <SpreadElement>args[length - 1];
2485624857
const type = flowLoopCount ? checkExpression(spreadArgument.expression) : checkExpressionCached(spreadArgument.expression);
2485724858
if (isTupleType(type)) {
24858-
return concatenate(args.slice(0, length - 1), getSyntheticExpressions(type, spreadArgument));
24859+
const typeArguments = getTypeArguments(type);
24860+
const restIndex = type.target.hasRestElement ? typeArguments.length - 1 : -1;
24861+
const syntheticArgs = map(typeArguments, (t, i) => createSyntheticExpression(spreadArgument, t, /*isSpread*/ i === restIndex));
24862+
return concatenate(args.slice(0, length - 1), syntheticArgs);
2485924863
}
2486024864
}
2486124865
return args;
2486224866
}
2486324867

24864-
function getSyntheticExpressions(type: TupleTypeReference, spreadArgument: SpreadElement): SyntheticExpression[] {
24865-
const typeArguments = getTypeArguments(<TypeReference>type);
24866-
const restIndex = type.target.hasRestElement ? typeArguments.length - 1 : -1;
24867-
return map(typeArguments, (t, i) => createSyntheticExpression(spreadArgument, t, /*isSpread*/ i === restIndex));
24868-
}
24869-
2487024868
/**
2487124869
* Returns the synthetic argument list for a decorator invocation.
2487224870
*/

0 commit comments

Comments
 (0)