diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2019-03-24 18:47:36 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2019-03-24 18:47:36 -0400 |
| commit | da9d8a6ecfb0428ce3d6575905f96fa1661c9b80 (patch) | |
| tree | 2c5085a1a6c81887e527d06380c8389ad4c43b5c /src/ir.cpp | |
| parent | aff7b38838628a18f384c1f625d71c085c8eee1f (diff) | |
| download | zig-da9d8a6ecfb0428ce3d6575905f96fa1661c9b80.tar.gz zig-da9d8a6ecfb0428ce3d6575905f96fa1661c9b80.zip | |
implement peer type resolution for enum literals
See #683
Diffstat (limited to 'src/ir.cpp')
| -rw-r--r-- | src/ir.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/ir.cpp b/src/ir.cpp index 29b6eef27a..58db315665 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -9573,6 +9573,21 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT continue; } + if (prev_type->id == ZigTypeIdEnum && cur_type->id == ZigTypeIdEnumLiteral) { + TypeEnumField *field = find_enum_type_field(prev_type, cur_inst->value.data.x_enum_literal); + if (field != nullptr) { + continue; + } + } + + if (cur_type->id == ZigTypeIdEnum && prev_type->id == ZigTypeIdEnumLiteral) { + TypeEnumField *field = find_enum_type_field(cur_type, prev_inst->value.data.x_enum_literal); + if (field != nullptr) { + prev_inst = cur_inst; + continue; + } + } + if (prev_type->id == ZigTypeIdPointer && prev_type->data.pointer.ptr_len == PtrLenC && (cur_type->id == ZigTypeIdComptimeInt || cur_type->id == ZigTypeIdInt)) { |
