Skip to content

Commit 015dc8a

Browse files
authored
Merge pull request swiftlang#79453 from rintaro/astgen-minus-number
[ASTGen] Generate "minus" number literal expression
2 parents 9ffdbbf + 57b6d1e commit 015dc8a

File tree

4 files changed

+42
-6
lines changed

4 files changed

+42
-6
lines changed

include/swift/AST/ASTBridging.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1837,6 +1837,11 @@ BridgedFloatLiteralExpr_createParsed(BridgedASTContext cContext,
18371837
BridgedStringRef cStr,
18381838
BridgedSourceLoc cTokenLoc);
18391839

1840+
SWIFT_NAME("BridgedFloatLiteralExpr.setNegative(self:loc:)")
1841+
BRIDGED_INLINE void
1842+
BridgedFloatLiteralExpr_setNegative(BridgedFloatLiteralExpr cExpr,
1843+
BridgedSourceLoc cLoc);
1844+
18401845
SWIFT_NAME("BridgedForceTryExpr.createParsed(_:tryLoc:subExpr:exclaimLoc:)")
18411846
BridgedForceTryExpr
18421847
BridgedForceTryExpr_createParsed(BridgedASTContext cContext,
@@ -1878,6 +1883,11 @@ BridgedIntegerLiteralExpr_createParsed(BridgedASTContext cContext,
18781883
BridgedStringRef cStr,
18791884
BridgedSourceLoc cTokenLoc);
18801885

1886+
SWIFT_NAME("BridgedIntegerLiteralExpr.setNegative(self:loc:)")
1887+
BRIDGED_INLINE void
1888+
BridgedIntegerLiteralExpr_setNegative(BridgedIntegerLiteralExpr cExpr,
1889+
BridgedSourceLoc cLoc);
1890+
18811891
SWIFT_NAME("BridgedInterpolatedStringLiteralExpr.createParsed(_:loc:"
18821892
"literalCapacity:interpolationCount:appendingExpr:)")
18831893
BridgedInterpolatedStringLiteralExpr

include/swift/AST/ASTBridgingImpl.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,20 @@ BridgedVarDecl BridegedCaptureListEntry_getVar(BridgedCaptureListEntry entry) {
648648
return entry.unbridged().getVar();
649649
}
650650

651+
//===----------------------------------------------------------------------===//
652+
// MARK: NumberLiteralExpr
653+
//===----------------------------------------------------------------------===//
654+
655+
void BridgedFloatLiteralExpr_setNegative(BridgedFloatLiteralExpr cExpr,
656+
BridgedSourceLoc cLoc) {
657+
cExpr.unbridged()->setNegative(cLoc.unbridged());
658+
}
659+
660+
void BridgedIntegerLiteralExpr_setNegative(BridgedIntegerLiteralExpr cExpr,
661+
BridgedSourceLoc cLoc) {
662+
cExpr.unbridged()->setNegative(cLoc.unbridged());
663+
}
664+
651665
SWIFT_END_NULLABILITY_ANNOTATIONS
652666

653667
#endif // SWIFT_AST_ASTBRIDGINGIMPL_H

lib/ASTGen/Sources/ASTGen/Exprs.swift

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ extension ASTGenVisitor {
9191
case .postfixOperatorExpr(let node):
9292
return self.generate(postfixOperatorExpr: node).asExpr
9393
case .prefixOperatorExpr(let node):
94-
return self.generate(prefixOperatorExpr: node).asExpr
94+
return self.generate(prefixOperatorExpr: node)
9595
case .regexLiteralExpr(let node):
9696
return self.generate(regexLiteralExpr: node).asExpr
9797
case .sequenceExpr(let node):
@@ -1099,15 +1099,27 @@ extension ASTGenVisitor {
10991099
)
11001100
}
11011101

1102-
func generate(prefixOperatorExpr node: PrefixOperatorExprSyntax) -> BridgedPrefixUnaryExpr {
1103-
return .createParsed(
1102+
func generate(prefixOperatorExpr node: PrefixOperatorExprSyntax) -> BridgedExpr {
1103+
if node.operator.rawText == "-" {
1104+
if let subNode = node.expression.as(IntegerLiteralExprSyntax.self) {
1105+
let literal = self.generate(integerLiteralExpr: subNode)
1106+
literal.setNegative(loc: self.generateSourceLoc(node.operator))
1107+
return literal.asExpr
1108+
}
1109+
if let subNode = node.expression.as(FloatLiteralExprSyntax.self) {
1110+
let literal = self.generate(floatLiteralExpr: subNode)
1111+
literal.setNegative(loc: self.generateSourceLoc(node.operator))
1112+
return literal.asExpr
1113+
}
1114+
}
1115+
return BridgedPrefixUnaryExpr.createParsed(
11041116
self.ctx,
11051117
operator: self.createUnresolvedDeclRefExpr(
11061118
token: node.operator,
11071119
kind: .prefixOperator
11081120
).asExpr,
11091121
operand: self.generate(expr: node.expression)
1110-
)
1122+
).asExpr
11111123
}
11121124

11131125
func generate(regexLiteralExpr node: RegexLiteralExprSyntax) -> BridgedRegexLiteralExpr {

test/ASTGen/exprs.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ func test1(x: Int, fn: (Int) -> Int) async throws -> Int {
2525
true
2626

2727
let arlit = [0]
28-
let tuple = (0, 1)
29-
let diclit = [0: 1, 2: 3]
28+
let tuple = (0, -21.4)
29+
let diclit = [0: 1, 2: -3]
3030

3131
return fn(x)
3232
}

0 commit comments

Comments
 (0)