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:
Ted Kremenek
2014-05-15 07:05:59 +00:00
parent d640eb4083
commit 7da31bdfdd
16 changed files with 29 additions and 17 deletions

View File

@@ -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

View File

@@ -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">;

View File

@@ -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);

View File

@@ -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();

View File

@@ -1,4 +1,4 @@
// RUN: %swift %s -parse-as-library -verify
// RUN: %swift %s -parse-as-library -verify -enable-character-literals
struct S {
init() {

View File

@@ -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"

View File

@@ -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

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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

View File

@@ -1,4 +1,4 @@
// RUN: %swift %s -verify -parse-stdlib
// RUN: %swift %s -verify -parse-stdlib -enable-character-literals
import Swift

View File

@@ -1,4 +1,4 @@
// RUN: %swift %s -verify
// RUN: %swift %s -verify -enable-character-literals
//===----------------------------------------------------------------------===//
// Tests and samples.

View File

@@ -1,4 +1,4 @@
// RUN: %swift %s -verify
// RUN: %swift %s -verify -enable-character-literals
func testTypeInference() {
func isUnicodeScalar(inout _: UnicodeScalar) {}

View File

@@ -1,4 +1,4 @@
// RUN: %swift %s -verify
// RUN: %swift %s -verify -enable-character-literals
/* block comments */
/* /* nested too */ */

View File

@@ -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);