mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Disable parsing of single quoted character literals, enabling under a flag.
I didn't want to rip this logic out wholesale. There is a possibility the character lexing can be reborn/revisited later, and disabling it in the parser was easy. Swift SVN r18102
This commit is contained in:
@@ -30,6 +30,9 @@ namespace swift {
|
||||
class LangOptions {
|
||||
public:
|
||||
|
||||
/// \brief Enable legacy character literals.
|
||||
bool EnableCharacterLiterals = false;
|
||||
|
||||
/// \brief Whether we are debugging the constraint solver.
|
||||
///
|
||||
/// This option enables verbose debugging output from the constraint
|
||||
|
||||
@@ -120,6 +120,9 @@ def enable_dynamic_value_type_layout :
|
||||
def enable_experimental_patterns : Flag<["-"], "enable-experimental-patterns">,
|
||||
HelpText<"Enable experimental 'switch' pattern matching features">;
|
||||
|
||||
def enable_character_literals : Flag<["-"], "enable-character-literals">,
|
||||
HelpText<"Enable legacy character literals">;
|
||||
|
||||
def enable_objc_implicit_properties :
|
||||
Flag<["-"], "enable-objc-implicit-properties">,
|
||||
HelpText<"Import Objective-C \"implicit properties\" as properties">;
|
||||
|
||||
@@ -534,6 +534,8 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
|
||||
|
||||
Opts.EnableExperimentalPatterns |= Args.hasArg(OPT_enable_experimental_patterns);
|
||||
|
||||
Opts.EnableCharacterLiterals |= Args.hasArg(OPT_enable_character_literals);
|
||||
|
||||
Opts.DebugConstraintSolver |= Args.hasArg(OPT_debug_constraints);
|
||||
|
||||
Opts.DebuggerSupport |= Args.hasArg(OPT_debugger_support);
|
||||
|
||||
@@ -1371,6 +1371,11 @@ Restart:
|
||||
const char *TokStart = CurPtr;
|
||||
|
||||
switch (*CurPtr++) {
|
||||
case '\'':
|
||||
if (LangOpts.EnableCharacterLiterals)
|
||||
return lexCharacterLiteral();
|
||||
SWIFT_FALLTHROUGH;
|
||||
|
||||
default: {
|
||||
char const *tmp = CurPtr-1;
|
||||
if (advanceIfValidStartOfIdentifier(tmp, BufferEnd))
|
||||
@@ -1542,8 +1547,6 @@ Restart:
|
||||
case '5': case '6': case '7': case '8': case '9':
|
||||
return lexNumber();
|
||||
|
||||
case '\'':
|
||||
return lexCharacterLiteral();
|
||||
case '"':
|
||||
return lexStringLiteral();
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %swift %s -parse-as-library -verify
|
||||
// RUN: %swift %s -parse-as-library -verify -enable-character-literals
|
||||
|
||||
struct S {
|
||||
init() {
|
||||
|
||||
@@ -105,10 +105,10 @@ class Attributes {
|
||||
}
|
||||
|
||||
func stringLikeLiterals() {
|
||||
// CHECK: <kw>var</kw> us1: <type>UnicodeScalar</type> = <char>'a'</char>
|
||||
var us1: UnicodeScalar = 'a'
|
||||
// CHECK: <kw>var</kw> us2: <type>UnicodeScalar</type> = <char>'ы'</char>
|
||||
var us2: UnicodeScalar = 'ы'
|
||||
// CHECK: <kw>var</kw> us1: <type>UnicodeScalar</type> = <str>"a"</str>
|
||||
var us1: UnicodeScalar = "a"
|
||||
// CHECK: <kw>var</kw> us2: <type>UnicodeScalar</type> = <str>"ы"</str>
|
||||
var us2: UnicodeScalar = "ы"
|
||||
|
||||
// CHECK: <kw>var</kw> ch1: <type>Character</type> = <str>"a"</str>
|
||||
var ch1: Character = "a"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %swift -target x86_64-apple-darwin10 %s -emit-ir -parse-stdlib | FileCheck %s
|
||||
// RUN: %swift -target x86_64-apple-darwin10 %s -emit-ir -parse-stdlib -enable-character-literals | FileCheck %s
|
||||
|
||||
import Swift
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %swift %s -verify -parse
|
||||
// RUN: %swift %s -verify -parse -enable-character-literals
|
||||
|
||||
// Check that we correctly process an unterminated character literal right near
|
||||
// EOF.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %swift %s -verify -parse
|
||||
// RUN: %swift %s -verify -parse -enable-character-literals
|
||||
|
||||
// Check that we correctly process an unterminated character literal right near
|
||||
// EOF.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %swift %s -verify -parse
|
||||
// RUN: %swift %s -verify -parse -enable-character-literals
|
||||
|
||||
// Check that we correctly process an unterminated character literal right near
|
||||
// EOF.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %swift -parse-stdlib -emit-silgen %s | FileCheck %s
|
||||
// RUN: %swift -parse-stdlib -emit-silgen %s -enable-character-literals | FileCheck %s
|
||||
import Swift
|
||||
|
||||
typealias CharacterLiteralType = SillyCharacter
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %swift %s -verify -parse-stdlib
|
||||
// RUN: %swift %s -verify -parse-stdlib -enable-character-literals
|
||||
|
||||
import Swift
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %swift %s -verify
|
||||
// RUN: %swift %s -verify -enable-character-literals
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Tests and samples.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %swift %s -verify
|
||||
// RUN: %swift %s -verify -enable-character-literals
|
||||
|
||||
func testTypeInference() {
|
||||
func isUnicodeScalar(inout _: UnicodeScalar) {}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// RUN: %swift %s -verify
|
||||
// RUN: %swift %s -verify -enable-character-literals
|
||||
|
||||
/* block comments */
|
||||
/* /* nested too */ */
|
||||
|
||||
@@ -121,6 +121,7 @@ TEST_F(LexerTest, CharacterLiterals) {
|
||||
|
||||
MemoryBuffer *Buf = MemoryBuffer::getMemBuffer(Source);
|
||||
LangOptions LangOpts;
|
||||
LangOpts.EnableCharacterLiterals = true;
|
||||
SourceManager SourceMgr;
|
||||
unsigned BufferID = SourceMgr.addNewSourceBuffer(Buf);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user