소스 검색

Allow strings with type prefix when parsing (right now discarding it)

mingodad 4 년 전
부모
커밋
e9b6f0281b
2개의 변경된 파일27개의 추가작업 그리고 5개의 파일을 삭제
  1. 24 5
      SquiLu/squirrel/sqlexer.cpp
  2. 3 0
      SquiLu/tests/squilu-test.nut

+ 24 - 5
SquiLu/squirrel/sqlexer.cpp

@@ -996,11 +996,30 @@ SQInteger SQLexer::ReadID()
 		NEXT();
 	} while(scisalnum(CUR_CHAR) || CUR_CHAR == _SC('_'));
 	TERMINATE_BUFFER();
-	if((CUR_CHAR == _SC('"')) && (data->longstr[0] == _SC('R')) && (data->longstr.size() == 2))
-    {
-        //C++ multiline string
-        return ReadString(_SC('R'),true);
-    }
+	if(data->longstr.size() == 2)
+	{
+		if(CUR_CHAR == _SC('"'))
+		{
+		    if(data->longstr[0] == _SC('R'))
+		    {
+			//C++ multiline string
+			return ReadString(_SC('R'),true);
+		    }
+		    if(data->longstr[0] == _SC('L'))
+		    {
+			//C++ wchar string
+			return ReadString(CUR_CHAR,false);
+		    }
+		}
+		if(CUR_CHAR == _SC('\''))
+		{
+		    if(data->longstr[0] == _SC('L'))
+		    {
+			//C++ wchar string
+			return ReadString(CUR_CHAR,false);
+		    }
+		}
+	}
 	res = GetIDType(&data->longstr[0],data->longstr.size() - 1);
 	if(res == TK_IDENTIFIER || res == TK_CONSTRUCTOR || res == TK_DESTRUCTOR) {
 		data->svalue = &data->longstr[0];

+ 3 - 0
SquiLu/tests/squilu-test.nut

@@ -1286,6 +1286,9 @@ bar]==] == "foo\nbar");
 	sqt.ok(("(" + 0x7fffffff + ")") == "(2147483647)");
 	sqt.ok(("(" + -0x80000000 + ")") ==  "(-2147483648)");
 
+	//C/C++ wchar
+	sqt.ok(L"fake wchar" == "fake wchar");
+	sqt.ok(L'\n' == '\n');
 });
 
 sqt.run("number", function(){