aboutsummaryrefslogtreecommitdiff
path: root/src/tokenizer.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-02-15 02:20:42 -0500
committerGitHub <noreply@github.com>2019-02-15 02:20:42 -0500
commit567c9b688effdb64e3995df09af4b45105515c2c (patch)
tree11bc01aa7484d427455a12502710b0ee286fb6aa /src/tokenizer.cpp
parentee5e196f8832359cfe05808677f143d4f460f6bc (diff)
parent99b19adeb31469cbc4a906f036bb4d70d8730916 (diff)
downloadzig-567c9b688effdb64e3995df09af4b45105515c2c.tar.gz
zig-567c9b688effdb64e3995df09af4b45105515c2c.zip
Merge pull request #1965 from ziglang/c-pointer-type
implement C pointers
Diffstat (limited to 'src/tokenizer.cpp')
-rw-r--r--src/tokenizer.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp
index 3acd605748..9ff6ed3bbe 100644
--- a/src/tokenizer.cpp
+++ b/src/tokenizer.cpp
@@ -221,6 +221,7 @@ enum TokenizeState {
TokenizeStateError,
TokenizeStateLBracket,
TokenizeStateLBracketStar,
+ TokenizeStateLBracketStarC,
};
@@ -846,7 +847,6 @@ void tokenize(Buf *buf, Tokenization *out) {
switch (c) {
case '*':
t.state = TokenizeStateLBracketStar;
- set_token_id(&t, t.cur_tok, TokenIdBracketStarBracket);
break;
default:
// reinterpret as just an lbracket
@@ -858,6 +858,21 @@ void tokenize(Buf *buf, Tokenization *out) {
break;
case TokenizeStateLBracketStar:
switch (c) {
+ case 'c':
+ t.state = TokenizeStateLBracketStarC;
+ set_token_id(&t, t.cur_tok, TokenIdBracketStarCBracket);
+ break;
+ case ']':
+ set_token_id(&t, t.cur_tok, TokenIdBracketStarBracket);
+ end_token(&t);
+ t.state = TokenizeStateStart;
+ break;
+ default:
+ invalid_char_error(&t, c);
+ }
+ break;
+ case TokenizeStateLBracketStarC:
+ switch (c) {
case ']':
end_token(&t);
t.state = TokenizeStateStart;
@@ -1491,6 +1506,7 @@ void tokenize(Buf *buf, Tokenization *out) {
case TokenizeStateLineStringContinue:
case TokenizeStateLineStringContinueC:
case TokenizeStateLBracketStar:
+ case TokenizeStateLBracketStarC:
tokenize_error(&t, "unexpected EOF");
break;
case TokenizeStateLineComment:
@@ -1528,6 +1544,7 @@ const char * token_name(TokenId id) {
case TokenIdBitShiftRightEq: return ">>=";
case TokenIdBitXorEq: return "^=";
case TokenIdBracketStarBracket: return "[*]";
+ case TokenIdBracketStarCBracket: return "[*c]";
case TokenIdCharLiteral: return "CharLiteral";
case TokenIdCmpEq: return "==";
case TokenIdCmpGreaterOrEq: return ">=";