@@ -162,9 +162,9 @@ public static { bool isSpace (dchar c) { return std.ctype.isspace(c)!=0; } bool isSymbol (dchar c) { return 0x21<=c && c<=0x7f && !std.ctype.isalnum(c) && c!='_' && c!='\''; } - bool isSSymbol (dchar c) { return !find("()[]{};", c).empty; } + bool isSSymbol (dchar c) { return "()[]{};@".canFind(c); } bool isMSymbol (dchar c) { return isSymbol(c) && !isSSymbol(c) && c!='"' && c!='#'; } bool isLetter (dchar c) { return !isSpace(c) && !isSymbol(c); } } @@ -272,12 +272,13 @@ assert_eq( ts[5].pos.lineno, 2 ); assert_eq( ts[5].pos.column, 8 ); assert_eq( ts[5].str, "(" ); - assert_eq( ts[6].str, "@@" ); - assert_eq( ts[7].str, ";" ); // paren and simicolons are split + assert_eq( ts[6].str, "@" ); + assert_eq( ts[7].str, "@" ); + assert_eq( ts[8].str, ";" ); // paren and simicolons, atmarks are split - assert_eq( ts.length, 8 ); + assert_eq( ts.length, 9 ); } unittest { @@ -367,8 +368,9 @@ auto lex = lexerFromString(`=""`); assert_eq(lex.front.str, "="); lex.popFront; assert_eq(lex.front.str, ""); lex.popFront; assert( lex.empty ); + assert_eq( lexerFromString(`-@`).front.str, "-" ); } /// Forward range for reader character by character, /// keeping track of position information and caring \r\n -> \n conversion.