10000 improve generics tests; prevent out of bounds access · swiftlang/swift-syntax@b696a64 · GitHub
[go: up one dir, main page]

Skip to content

Commit b696a64

Browse files
committed
improve generics tests; prevent out of bounds access
1 parent 87176ef commit b696a64

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

Sources/SwiftSyntaxMacroExpansion/MacroReplacement.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,10 @@ private final class MacroExpansionRewriter: SyntaxRewriter {
330330
guard let parameterIndex = genericParameterReplacements[node] else {
331331
return super.visit(node)
332332
}
333+
334+
guard parameterIndex < genericArguments.count else {
335+
return super.visit(node)
336+
}
333337

334338
// Swap in the argument for type parameter
335339
return GenericArgumentSyntax(

Tests/SwiftSyntaxMacroExpansionTest/MacroReplacementTests.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ final class MacroReplacementTests: XCTestCase {
132132
XCTFail("not a normal expansion")
133133
return
134134
}
135-
135+
136136
let replacementA = try XCTUnwrap(genericReplacements.first)
137137
let replacementB = try XCTUnwrap(genericReplacements.dropFirst().first)
138138

@@ -237,12 +237,12 @@ final class MacroReplacementTests: XCTestCase {
237237
func testMacroGenericArgumentExpansion_replaceInner() throws {
238238
let macro: DeclSyntax =
239239
"""
240-
macro gen<A>(a: Array<A>) = #otherMacro(first: a)
240+
macro gen<A>(a: Array<A>) = #reduce<A>(first: a)
241241
"""
242242

243243
let use: ExprSyntax =
244244
"""
245-
#gen(a: [1, 2, 3])
245+
#gen<Int>(a: [1, 2, 3])
246246
"""
247247

248248
let macroDecl = macro.as(MacroDeclSyntax.self)!
@@ -252,7 +252,7 @@ final class MacroReplacementTests: XCTestCase {
252252
return
253253
}
254254

255-
XCTAssertEqual(genericReplacements.count, 0)
255+
XCTAssertEqual(genericReplacements.count, 1)
256256

257257
let expandedSyntax = macroDecl.expand(
258258
use.as(MacroExpansionExprSyntax.self)!,
@@ -263,7 +263,7 @@ final class MacroReplacementTests: XCTestCase {
263263
assertStringsEqualWithDiff(
264264
expandedSyntax.description,
265265
"""
266-
#otherMacro(first: [1, 2, 3])
266+
#reduce<Int>(first: [1, 2, 3])
267267
"""
268268
)
269269
}

0 commit comments

Comments
 (0)
0