mirror of
https://github.com/ziglang/zig.git
synced 2026-02-13 12:59:04 +00:00
parent
661fc79fba
commit
4a1b910e03
@ -3525,7 +3525,12 @@ fn tokenIdToPrefixOp(id: Token.Id) ?ast.Node.PrefixOp.Op {
|
||||
Token.Id.Minus => ast.Node.PrefixOp.Op{ .Negation = void{} },
|
||||
Token.Id.MinusPercent => ast.Node.PrefixOp.Op{ .NegationWrap = void{} },
|
||||
Token.Id.Ampersand => ast.Node.PrefixOp.Op{ .AddressOf = void{} },
|
||||
Token.Id.Asterisk, Token.Id.AsteriskAsterisk, Token.Id.BracketStarBracket => ast.Node.PrefixOp.Op{
|
||||
|
||||
Token.Id.Asterisk,
|
||||
Token.Id.AsteriskAsterisk,
|
||||
Token.Id.BracketStarBracket,
|
||||
Token.Id.BracketStarCBracket,
|
||||
=> ast.Node.PrefixOp.Op{
|
||||
.PtrType = ast.Node.PrefixOp.PtrInfo{
|
||||
.align_info = null,
|
||||
.const_token = null,
|
||||
|
||||
@ -1,3 +1,10 @@
|
||||
test "zig fmt: C pointers" {
|
||||
try testCanonical(
|
||||
\\const Ptr = [*c]i32;
|
||||
\\
|
||||
);
|
||||
}
|
||||
|
||||
test "zig fmt: threadlocal" {
|
||||
try testCanonical(
|
||||
\\threadlocal var x: i32 = 1234;
|
||||
|
||||
@ -141,6 +141,7 @@ pub const Token = struct {
|
||||
LineComment,
|
||||
DocComment,
|
||||
BracketStarBracket,
|
||||
BracketStarCBracket,
|
||||
ShebangLine,
|
||||
Keyword_align,
|
||||
Keyword_and,
|
||||
@ -279,6 +280,7 @@ pub const Tokenizer = struct {
|
||||
SawAtSign,
|
||||
LBracket,
|
||||
LBracketStar,
|
||||
LBracketStarC,
|
||||
};
|
||||
|
||||
pub fn next(self: *Tokenizer) Token {
|
||||
@ -456,6 +458,9 @@ pub const Tokenizer = struct {
|
||||
},
|
||||
|
||||
State.LBracketStar => switch (c) {
|
||||
'c' => {
|
||||
state = State.LBracketStarC;
|
||||
},
|
||||
']' => {
|
||||
result.id = Token.Id.BracketStarBracket;
|
||||
self.index += 1;
|
||||
@ -467,6 +472,18 @@ pub const Tokenizer = struct {
|
||||
},
|
||||
},
|
||||
|
||||
State.LBracketStarC => switch (c) {
|
||||
']' => {
|
||||
result.id = Token.Id.BracketStarCBracket;
|
||||
self.index += 1;
|
||||
break;
|
||||
},
|
||||
else => {
|
||||
result.id = Token.Id.Invalid;
|
||||
break;
|
||||
},
|
||||
},
|
||||
|
||||
State.Ampersand => switch (c) {
|
||||
'=' => {
|
||||
result.id = Token.Id.AmpersandEqual;
|
||||
@ -1035,6 +1052,7 @@ pub const Tokenizer = struct {
|
||||
State.CharLiteralEnd,
|
||||
State.StringLiteralBackslash,
|
||||
State.LBracketStar,
|
||||
State.LBracketStarC,
|
||||
=> {
|
||||
result.id = Token.Id.Invalid;
|
||||
},
|
||||
@ -1169,12 +1187,15 @@ test "tokenizer" {
|
||||
testTokenize("test", []Token.Id{Token.Id.Keyword_test});
|
||||
}
|
||||
|
||||
test "tokenizer - unknown length pointer" {
|
||||
test "tokenizer - unknown length pointer and then c pointer" {
|
||||
testTokenize(
|
||||
\\[*]u8
|
||||
\\[*c]u8
|
||||
, []Token.Id{
|
||||
Token.Id.BracketStarBracket,
|
||||
Token.Id.Identifier,
|
||||
Token.Id.BracketStarCBracket,
|
||||
Token.Id.Identifier,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user