Skip to content

Commit e52e043

Browse files
authored
[Parse] Don't use tok::unknown as a dummy token (#5171)
Use tok::NUM_TOKENS instead. tok::unknown can easily appear in source code. For instance `skipUntil(tok::eof)` did not work as expected, because that was `skipUntil(tok::eof, tok::unknown)` hence does stop at error tokens such as `0xG` (invalid hex number literal). Revert 2abc92b, since that was accidental side-effect of 4511803. Forward references are not allowed actually.
1 parent 392a803 commit e52e043

13 files changed

+44
-45
lines changed

include/swift/Parse/Parser.h

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ class Parser {
424424
/// \brief Read tokens until we get to one of the specified tokens, then
425425
/// return without consuming it. Because we cannot guarantee that the token
426426
/// will ever occur, this skips to some likely good stopping point.
427-
void skipUntil(tok T1, tok T2 = tok::unknown);
427+
void skipUntil(tok T1, tok T2 = tok::NUM_TOKENS);
428428
void skipUntilAnyOperator();
429429

430430
/// \brief Skip until a token that starts with '>', and consume it if found.
@@ -438,12 +438,7 @@ class Parser {
438438

439439
void skipUntilDeclStmtRBrace(tok T1);
440440

441-
/// \brief Skip to the next decl, statement or '}'.
442-
void skipUntilDeclStmtRBrace() {
443-
skipUntilDeclStmtRBrace(tok::unknown);
444-
}
445-
446-
void skipUntilDeclRBrace(tok T1, tok T2 = tok::unknown);
441+
void skipUntilDeclRBrace(tok T1, tok T2);
447442

448443
/// Skip a single token, but match parentheses, braces, and square brackets.
449444
///

lib/Parse/ParseDecl.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2477,7 +2477,7 @@ parseIdentifierDeclName(Parser &P, Identifier &Result, SourceLoc &L,
24772477
tok ResyncT1, tok ResyncT2, Diag<DiagArgTypes...> ID,
24782478
ArgTypes... Args) {
24792479
return parseIdentifierDeclName(P, Result, L, ResyncT1, ResyncT2,
2480-
tok::unknown, tok::unknown,
2480+
tok::NUM_TOKENS, tok::NUM_TOKENS,
24812481
TokenProperty::None,
24822482
Diagnostic(ID, Args...));
24832483
}
@@ -2488,7 +2488,7 @@ parseIdentifierDeclName(Parser &P, Identifier &Result, SourceLoc &L,
24882488
tok ResyncT1, tok ResyncT2, tok ResyncT3,
24892489
Diag<DiagArgTypes...> ID, ArgTypes... Args) {
24902490
return parseIdentifierDeclName(P, Result, L, ResyncT1, ResyncT2, ResyncT3,
2491-
tok::unknown, TokenProperty::None,
2491+
tok::NUM_TOKENS, TokenProperty::None,
24922492
Diagnostic(ID, Args...));
24932493
}
24942494

@@ -2508,8 +2508,8 @@ static ParserStatus
25082508
parseIdentifierDeclName(Parser &P, Identifier &Result, SourceLoc &L,
25092509
tok ResyncT1, tok ResyncT2, TokenProperty ResyncP1,
25102510
Diag<DiagArgTypes...> ID, ArgTypes... Args) {
2511-
return parseIdentifierDeclName(P, Result, L, ResyncT1, ResyncT2, tok::unknown,
2512-
tok::unknown,
2511+
return parseIdentifierDeclName(P, Result, L, ResyncT1, ResyncT2,
2512+
tok::NUM_TOKENS, tok::NUM_TOKENS,
25132513
ResyncP1, Diagnostic(ID, Args...));
25142514
}
25152515

lib/Parse/Parser.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -420,8 +420,8 @@ void Parser::skipSingle() {
420420
}
421421

422422
void Parser::skipUntil(tok T1, tok T2) {
423-
// tok::unknown is a sentinel that means "don't skip".
424-
if (T1 == tok::unknown && T2 == tok::unknown) return;
423+
// tok::NUM_TOKENS is a sentinel that means "don't skip".
424+
if (T1 == tok::NUM_TOKENS && T2 == tok::NUM_TOKENS) return;
425425

426426
while (Tok.isNot(T1, T2, tok::eof, tok::pound_endif, tok::code_complete))
427427
skipSingle();

test/IDE/complete_at_top_level.swift

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PLAIN_TOP_LEVEL_1 > %t.toplevel.txt
1919
// RUN: %FileCheck %s -check-prefix=PLAIN_TOP_LEVEL < %t.toplevel.txt
2020
// RUN: %FileCheck %s -check-prefix=PLAIN_TOP_LEVEL_NO_DUPLICATES < %t.toplevel.txt
21+
// RUN: %FileCheck %s -check-prefix=NEGATIVE < %t.toplevel.txt
2122
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PLAIN_TOP_LEVEL_2 | %FileCheck %s -check-prefix=PLAIN_TOP_LEVEL
23+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PLAIN_TOP_LEVEL_2 | %FileCheck %s -check-prefix=NEGATIVE
2224

2325
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TOP_LEVEL_CLOSURE_1 | %FileCheck %s -check-prefix=TOP_LEVEL_CLOSURE_1
2426

@@ -45,34 +47,42 @@
4547
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TOP_LEVEL_VAR_TYPE_5 > %t.toplevel.5.txt
4648
// RUN: %FileCheck %s -check-prefix=TOP_LEVEL_VAR_TYPE_1 < %t.toplevel.5.txt
4749
// RUN: %FileCheck %s -check-prefix=TOP_LEVEL_VAR_TYPE_NEGATIVE_1 < %t.toplevel.5.txt
50+
// RUN: %FileCheck %s -check-prefix=NEGATIVE < %t.toplevel.5.txt
4851

4952
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TOP_LEVEL_VAR_TYPE_5 > %t.toplevel.5.txt
5053
// RUN: %FileCheck %s -check-prefix=TOP_LEVEL_VAR_TYPE_1 < %t.toplevel.5.txt
5154
// RUN: %FileCheck %s -check-prefix=TOP_LEVEL_VAR_TYPE_NEGATIVE_1 < %t.toplevel.5.txt
55+
// RUN: %FileCheck %s -check-prefix=NEGATIVE < %t.toplevel.5.txt
5256

5357
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TOP_LEVEL_VAR_TYPE_6 > %t.toplevel.6.txt
5458
// RUN: %FileCheck %s -check-prefix=TOP_LEVEL_VAR_TYPE_1 < %t.toplevel.6.txt
5559
// RUN: %FileCheck %s -check-prefix=TOP_LEVEL_VAR_TYPE_NEGATIVE_1 < %t.toplevel.6.txt
60+
// RUN: %FileCheck %s -check-prefix=NEGATIVE < %t.toplevel.6.txt
5661

5762
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TOP_LEVEL_EXPR_TYPE_1 > %t.toplevel-expr.1.txt
5863
// RUN: %FileCheck %s -check-prefix=TOP_LEVEL_VAR_TYPE_1 < %t.toplevel-expr.1.txt
5964
// RUN: %FileCheck %s -check-prefix=TOP_LEVEL_VAR_TYPE_NEGATIVE_1 < %t.toplevel-expr.1.txt
65+
// RUN: %FileCheck %s -check-prefix=NEGATIVE < %t.toplevel-expr.1.txt
6066

6167
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TOP_LEVEL_EXPR_TYPE_2 > %t.toplevel-expr.2.txt
6268
// RUN: %FileCheck %s -check-prefix=TOP_LEVEL_VAR_TYPE_1 < %t.toplevel-expr.2.txt
6369
// RUN: %FileCheck %s -check-prefix=TOP_LEVEL_VAR_TYPE_NEGATIVE_1 < %t.toplevel-expr.2.txt
70+
// RUN: %FileCheck %s -check-prefix=NEGATIVE < %t.toplevel-expr.2.txt
6471

6572
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TOP_LEVEL_EXPR_TYPE_3 > %t.toplevel-expr.3.txt
6673
// RUN: %FileCheck %s -check-prefix=TOP_LEVEL_VAR_TYPE_1 < %t.toplevel-expr.3.txt
6774
// RUN: %FileCheck %s -check-prefix=TOP_LEVEL_VAR_TYPE_NEGATIVE_1 < %t.toplevel-expr.3.txt
75+
// RUN: %FileCheck %s -check-prefix=NEGATIVE < %t.toplevel-expr.3.txt
6876

6977
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TOP_LEVEL_EXPR_TYPE_4 > %t.toplevel-expr.4.txt
7078
// RUN: %FileCheck %s -check-prefix=TOP_LEVEL_VAR_TYPE_1 < %t.toplevel-expr.4.txt
7179
// RUN: %FileCheck %s -check-prefix=TOP_LEVEL_VAR_TYPE_NEGATIVE_1 < %t.toplevel-expr.4.txt
80+
// RUN: %FileCheck %s -check-prefix=NEGATIVE < %t.toplevel-expr.4.txt
7281

7382
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TOP_LEVEL_EXPR_TYPE_2 > %t.toplevel-expr.2.txt
7483
// RUN: %FileCheck %s -check-prefix=TOP_LEVEL_VAR_TYPE_1 < %t.toplevel-expr.2.txt
7584
// RUN: %FileCheck %s -check-prefix=TOP_LEVEL_VAR_TYPE_NEGATIVE_1 < %t.toplevel-expr.2.txt
85+
// RUN: %FileCheck %s -check-prefix=NEGATIVE < %t.toplevel-expr.2.txt
7686

7787
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TOP_LEVEL_STMT_1 | %FileCheck %s -check-prefix=PLAIN_TOP_LEVEL
7888
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TOP_LEVEL_STMT_2 | %FileCheck %s -check-prefix=PLAIN_TOP_LEVEL
@@ -143,7 +153,6 @@ fooObject#^TYPE_CHECKED_EXPR_1^#
143153
// TYPE_CHECKED_EXPR_1: Begin completions
144154
// TYPE_CHECKED_EXPR_1-NEXT: Decl[InstanceVar]/CurrNominal: .instanceVar[#Int#]{{; name=.+$}}
145155
// TYPE_CHECKED_EXPR_1-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc({#(a): Int#})[#Void#]{{; name=.+$}}
146-
// TYPE_CHECKED_EXPR_1-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFuncAtEOF()[#Void#]; name=instanceFuncAtEOF()
147156
// TYPE_CHECKED_EXPR_1-NEXT: BuiltinOperator/None: = {#FooStruct#}[#Void#];
148157
// TYPE_CHECKED_EXPR_1-NEXT: End completions
149158

@@ -156,7 +165,6 @@ fooObject#^TYPE_CHECKED_EXPR_2^#
156165
// TYPE_CHECKED_EXPR_2: Begin completions
157166
// TYPE_CHECKED_EXPR_2-NEXT: Decl[InstanceVar]/CurrNominal: .instanceVar[#Int#]{{; name=.+$}}
158167
// TYPE_CHECKED_EXPR_2-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc({#(a): Int#})[#Void#]{{; name=.+$}}
159-
// TYPE_CHECKED_EXPR_2-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFuncAtEOF()[#Void#]; name=instanceFuncAtEOF()
160168
// TYPE_CHECKED_EXPR_2-NEXT: BuiltinOperator/None: = {#FooStruct#}[#Void#];
161169
// TYPE_CHECKED_EXPR_2-NEXT: End completions
162170

@@ -166,7 +174,6 @@ fooObject#^TYPE_CHECKED_EXPR_3^#.bar
166174
// TYPE_CHECKED_EXPR_3: Begin completions
167175
// TYPE_CHECKED_EXPR_3-NEXT: Decl[InstanceVar]/CurrNominal: .instanceVar[#Int#]{{; name=.+$}}
168176
// TYPE_CHECKED_EXPR_3-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc({#(a): Int#})[#Void#]{{; name=.+$}}
169-
// TYPE_CHECKED_EXPR_3-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFuncAtEOF()[#Void#]; name=instanceFuncAtEOF()
170177
// TYPE_CHECKED_EXPR_3-NEXT: BuiltinOperator/None: = {#FooStruct#}[#Void#];
171178
// TYPE_CHECKED_EXPR_3-NEXT: End completions
172179

@@ -176,7 +183,6 @@ fooObject.#^TYPE_CHECKED_EXPR_4^#
176183
// TYPE_CHECKED_EXPR_4: Begin completions
177184
// TYPE_CHECKED_EXPR_4-NEXT: Decl[InstanceVar]/CurrNominal: instanceVar[#Int#]{{; name=.+$}}
178185
// TYPE_CHECKED_EXPR_4-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc({#(a): Int#})[#Void#]{{; name=.+$}}
179-
// TYPE_CHECKED_EXPR_4-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFuncAtEOF()[#Void#]; name=instanceFuncAtEOF()
180186
// TYPE_CHECKED_EXPR_4-NEXT: End completions
181187

182188
func resyncParser5() {}
@@ -185,7 +191,6 @@ fooObject.#^TYPE_CHECKED_EXPR_5^#.bar
185191
// TYPE_CHECKED_EXPR_5: Begin completions
186192
// TYPE_CHECKED_EXPR_5-NEXT: Decl[InstanceVar]/CurrNominal: instanceVar[#Int#]{{; name=.+$}}
187193
// TYPE_CHECKED_EXPR_5-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc({#(a): Int#})[#Void#]{{; name=.+$}}
188-
// TYPE_CHECKED_EXPR_5-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFuncAtEOF()[#Void#]; name=instanceFuncAtEOF()
189194
// TYPE_CHECKED_EXPR_5-NEXT: End completions
190195

191196
func resyncParser6() {}
@@ -208,7 +213,6 @@ fooObjectWithErrorInInit.#^TYPE_CHECKED_EXPR_WITH_ERROR_IN_INIT_1^#
208213
// TYPE_CHECKED_EXPR_WITH_ERROR_IN_INIT_1: Begin completions
209214
// TYPE_CHECKED_EXPR_WITH_ERROR_IN_INIT_1-NEXT: Decl[InstanceVar]/CurrNominal: instanceVar[#Int#]{{; name=.+$}}
210215
// TYPE_CHECKED_EXPR_WITH_ERROR_IN_INIT_1-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc({#(a): Int#})[#Void#]{{; name=.+$}}
211-
// TYPE_CHECKED_EXPR_WITH_ERROR_IN_INIT_1-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFuncAtEOF()[#Void#]; name=instanceFuncAtEOF()
212216
// TYPE_CHECKED_EXPR_WITH_ERROR_IN_INIT_1-NEXT: End completions
213217

214218
func resyncParser6a() {}

validation-test/IDE/crashers/010-swift-archetypebuilder-addrequirement.swift

Lines changed: 0 additions & 7 deletions
This file was deleted.

validation-test/IDE/crashers/085-swift-persistentparserstate-delaytoplevel.swift

Lines changed: 0 additions & 4 deletions
This file was deleted.

validation-test/IDE/crashers/089-swift-namealiastype-getsinglydesugaredtype.swift

Lines changed: 0 additions & 10 deletions
This file was deleted.

validation-test/IDE/crashers/090-swift-iterativetypechecker-satisfy.swift

Lines changed: 0 additions & 4 deletions
This file was deleted.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// RUN: %target-swift-ide-test -code-completion -code-completion-token=A -source-filename=%s
2+
// REQUIRES: asserts
3+
#^A^#{"
4+
protocol c{
5+
func a
6+
associatedtype b:c
7+
associatedtype e:c
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// RUN: %target-swift-ide-test -code-completion -code-completion-token=A -source-filename=%s
2+
// REQUIRES: asserts
3+
class A{let:e({var _={"
4+
}#^A^#
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// RUN: %target-swift-ide-test -code-completion -code-completion-token=A -source-filename=%s
2+
// REQUIRES: asserts
3+
#^A^#
4+
func"
5+
struct c
6+
class A{
7+
protocol e
8+
var f=F
9+
typealias e:f{}
10+
typealias f=c
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// RUN: %target-swift-ide-test -code-completion -code-completion-token=A -source-filename=%s
2+
// REQUIRES: asserts
3+
#^A^#}"
4+
typealias B<T T>:T

validation-test/SIL/crashers/027-swift-nominaltypedecl-getdeclaredtype.sil renamed to validation-test/SIL/crashers_fixed/027-swift-nominaltypedecl-getdeclaredtype.sil

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: not --crash %target-sil-opt %s
1+
// RUN: not %target-sil-opt %s
22
// REQUIRES: asserts, OS=linux-gnu
33
bb0(@test_existential_metatype : $Int
44
%0 to $@callee_owned (thin) -> ("01234567-cdef-> (thin) -> @owned @callee_owned (Int

0 commit comments

Comments
 (0)