diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2018-06-10 01:18:31 -0400 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2018-06-10 01:18:31 -0400 |
| commit | 0a95b0f1ffeb8ae5ee317b02626890adebe5ec63 (patch) | |
| tree | b81af85f0e9ba611aa24ae8b1c855095f5c8f9e8 | |
| parent | 77678b2cbc7ac9ba2d5d4725241f6a9f7ac64fa4 (diff) | |
| download | zig-0a95b0f1ffeb8ae5ee317b02626890adebe5ec63.tar.gz zig-0a95b0f1ffeb8ae5ee317b02626890adebe5ec63.zip | |
std.zig: update syntax for orelse keyword
| -rw-r--r-- | src/ir.cpp | 16 | ||||
| -rw-r--r-- | std/zig/parse.zig | 2 | ||||
| -rw-r--r-- | std/zig/parser_test.zig | 2 | ||||
| -rw-r--r-- | std/zig/tokenizer.zig | 27 |
4 files changed, 9 insertions, 38 deletions
diff --git a/src/ir.cpp b/src/ir.cpp index 96eb5f7434..38f4dc90e7 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -14842,22 +14842,6 @@ static TypeTableEntry *ir_analyze_instruction_unwrap_maybe(IrAnalyze *ira, TypeTableEntry *type_entry = ptr_type->data.pointer.child_type; if (type_is_invalid(type_entry)) { return ira->codegen->builtin_types.entry_invalid; - } else if (type_entry->id == TypeTableEntryIdMetaType) { - // surprise! actually this is just ??T not an unwrap maybe instruction - ConstExprValue *ptr_val = const_ptr_pointee(ira->codegen, &value->value); - assert(ptr_val->type->id == TypeTableEntryIdMetaType); - TypeTableEntry *child_type = ptr_val->data.x_type; - - type_ensure_zero_bits_known(ira->codegen, child_type); - TypeTableEntry *layer1 = get_maybe_type(ira->codegen, child_type); - TypeTableEntry *layer2 = get_maybe_type(ira->codegen, layer1); - - IrInstruction *const_instr = ir_build_const_type(&ira->new_irb, unwrap_maybe_instruction->base.scope, - unwrap_maybe_instruction->base.source_node, layer2); - IrInstruction *result_instr = ir_get_ref(ira, &unwrap_maybe_instruction->base, const_instr, - ptr_type->data.pointer.is_const, ptr_type->data.pointer.is_volatile); - ir_link_new_instruction(result_instr, &unwrap_maybe_instruction->base); - return result_instr->value.type; } else if (type_entry->id != TypeTableEntryIdOptional) { ir_add_error_node(ira, unwrap_maybe_instruction->value->source_node, buf_sprintf("expected optional type, found '%s'", buf_ptr(&type_entry->name))); diff --git a/std/zig/parse.zig b/std/zig/parse.zig index 5752f69409..877b81c527 100644 --- a/std/zig/parse.zig +++ b/std/zig/parse.zig @@ -3248,7 +3248,7 @@ fn tokenIdToAssignment(id: *const Token.Id) ?ast.Node.InfixOp.Op { fn tokenIdToUnwrapExpr(id: @TagType(Token.Id)) ?ast.Node.InfixOp.Op { return switch (id) { Token.Id.Keyword_catch => ast.Node.InfixOp.Op{ .Catch = null }, - Token.Id.QuestionMarkQuestionMark => ast.Node.InfixOp.Op{ .UnwrapOptional = void{} }, + Token.Id.Keyword_orelse => ast.Node.InfixOp.Op{ .UnwrapOptional = void{} }, else => null, }; } diff --git a/std/zig/parser_test.zig b/std/zig/parser_test.zig index ea3a4858b0..09ea8aa1a1 100644 --- a/std/zig/parser_test.zig +++ b/std/zig/parser_test.zig @@ -1151,7 +1151,7 @@ test "zig fmt: infix operators" { \\ _ = i!i; \\ _ = i ** i; \\ _ = i ++ i; - \\ _ = i ?? i; + \\ _ = i orelse i; \\ _ = i % i; \\ _ = i / i; \\ _ = i *% i; diff --git a/std/zig/tokenizer.zig b/std/zig/tokenizer.zig index b288a3adb7..4534529f36 100644 --- a/std/zig/tokenizer.zig +++ b/std/zig/tokenizer.zig @@ -39,6 +39,7 @@ pub const Token = struct { Keyword{ .bytes = "noalias", .id = Id.Keyword_noalias }, Keyword{ .bytes = "null", .id = Id.Keyword_null }, Keyword{ .bytes = "or", .id = Id.Keyword_or }, + Keyword{ .bytes = "orelse", .id = Id.Keyword_orelse }, Keyword{ .bytes = "packed", .id = Id.Keyword_packed }, Keyword{ .bytes = "promise", .id = Id.Keyword_promise }, Keyword{ .bytes = "pub", .id = Id.Keyword_pub }, @@ -129,7 +130,6 @@ pub const Token = struct { Ampersand, AmpersandEqual, QuestionMark, - QuestionMarkQuestionMark, AngleBracketLeft, AngleBracketLeftEqual, AngleBracketAngleBracketLeft, @@ -171,6 +171,7 @@ pub const Token = struct { Keyword_noalias, Keyword_null, Keyword_or, + Keyword_orelse, Keyword_packed, Keyword_promise, Keyword_pub, @@ -254,7 +255,6 @@ pub const Tokenizer = struct { Ampersand, Caret, Percent, - QuestionMark, Plus, PlusPercent, AngleBracketLeft, @@ -345,6 +345,11 @@ pub const Tokenizer = struct { self.index += 1; break; }, + '?' => { + result.id = Token.Id.QuestionMark; + self.index += 1; + break; + }, ':' => { result.id = Token.Id.Colon; self.index += 1; @@ -359,9 +364,6 @@ pub const Tokenizer = struct { '+' => { state = State.Plus; }, - '?' => { - state = State.QuestionMark; - }, '<' => { state = State.AngleBracketLeft; }, @@ -496,18 +498,6 @@ pub const Tokenizer = struct { }, }, - State.QuestionMark => switch (c) { - '?' => { - result.id = Token.Id.QuestionMarkQuestionMark; - self.index += 1; - break; - }, - else => { - result.id = Token.Id.QuestionMark; - break; - }, - }, - State.Percent => switch (c) { '=' => { result.id = Token.Id.PercentEqual; @@ -1084,9 +1074,6 @@ pub const Tokenizer = struct { State.Plus => { result.id = Token.Id.Plus; }, - State.QuestionMark => { - result.id = Token.Id.QuestionMark; - }, State.Percent => { result.id = Token.Id.Percent; }, |
