aboutsummaryrefslogtreecommitdiff
path: root/test/behavior/enum.zig
AgeCommit message (Collapse)Author
2022-09-09stage2 ARM: implement struct_field_val for registersjoachimschmidt557
2022-09-09stage2 ARM: amend implementation of various AIR instructionsjoachimschmidt557
- unwrap_errunion_err for registers - unwrap_errunion_payload for registers - ptr_slice_len_ptr for all MCValues - ptr_slice_ptr_ptr for all MCValues
2022-09-02Sema: improve behavior of comptime_int backed enumsVeikka Tuominen
2022-08-28Sema: fix handling of non-standard int types in empty non-exhaustive enumsVeikka Tuominen
Closes #12649
2022-08-24stage2: explicitly tagged enums no longer have one possible valueAndrew Kelley
Previously, Zig had inconsistent semantics for an enum like this: `enum(u8){zero = 0}` Although in theory this can only hold one possible value, the tag `zero`, Zig no longer will treat the type this way. It will do loads and stores, as if the type has runtime bits. Closes #12619 Tests passed locally: * test-behavior * test-cases
2022-06-30stage2 llvm: ensure `@tagName` functions are uniqueVeikka Tuominen
2022-06-25stage2 ARM: implement basic intCast and error union wrappingjoachimschmidt557
2022-03-09wasm: Enable passing behavior testsLuuk de Gram
This also adds some float-related instructions to MIR/Emit
2022-03-05stage2 AArch64: add more slice supportjoachimschmidt557
* airSlice * airArrayToSlice * and initial support for airSlicePtr and co
2022-03-02x64: rectify and add missing optionals bitsJakub Konka
Includes changes/additions to: * `wrap_optional` * `optional_payload` * `isNull` helper
2022-03-01stage2: introduce anonymous struct literalsAndrew Kelley
2022-02-28x64: pass more behavior testsJakub Konka
2022-02-27stage2 ARM: enable more behavior testsjoachimschmidt557
2022-02-22Skip unsupported enum behavior testsJakub Konka
2022-02-22Port more behavior testsJakub Konka
2022-02-22Sema: fix comptime coercion of payload to error unionAndrew Kelley
2022-02-22Sema: auto-numbered enums increment from last tag valueAndrew Kelley
This matches stage1 and the existing behavior tests.
2022-01-26Sema: implement struct init is_ref=trueAndrew Kelley
Takes advantage of the pattern already established with array_init_anon. Also upgrades array_init (non-anon) to the pattern. Implements comptime struct value equality and pointer value hashing.
2022-01-26organize behavior testsAndrew Kelley
Every test that is moved in this commit has been checked to see if it is now passing.
2021-12-27Sema: fix anytype parameters whose types require comptimeAndrew Kelley
2021-12-27stage2: LLVM backend: implement `@tagName` for enumsAndrew Kelley
Introduced a new AIR instruction: `tag_name`. Reasons to do this instead of lowering it in Sema to a switch, function call, array lookup, or if-else tower: * Sema is a bottleneck; do less work in Sema whenever possible. * If any optimization passes run, and the operand to becomes comptime-known, then it could change to have a comptime result value instead of lowering to a function or array or something which would then have to be garbage-collected. * Backends may want to choose to use a function and a switch branch, or they may want to use a different strategy. Codegen for `@tagName` is implemented for the LLVM backend but not any others yet. Introduced some new `Type` tags: * `const_slice_u8_sentinel_0` * `manyptr_const_u8_sentinel_0` The motivation for this was to make typeof() on the tag_name AIR instruction non-allocating. A bunch more enum tests are passing now.
2021-12-26Sema: fix enum tag type not initialized when 0 fieldsAndrew Kelley
2021-12-26Sema: improve non-exhaustive enum supportAndrew Kelley
* remove false positive "all prongs handled" compile error for non-exhaustive enums. * implement `@TypeInfo` for enums, except enums which have any declarations is still TODO. * `getBuiltin` uses nomespaceLookup/analyzeDeclVal rather than namespaceLookupRef/analyzeLoad. Avoids a detour through an unnecessary type, and adds a detour through a caching mechanism. * `Value.eql`: add missing code to handle enum comparisons for non-exhaustive enums. It works by converting the enum tags to numeric values and comparing those.
2021-11-27stage2: implement `@typeName`Andrew Kelley
* stage1: change the `@typeName` of `@TypeOf(undefined)`, `@TypeOf(null)`, and `@TypeOf(.foo)` to match stage2. * move passing behavior tests to the passing-for-stage2 section.
2021-10-05stage2: implement runtime `@intToEnum`Andrew Kelley
* Update AIR instruction `intcast` to allow the dest type to be an enum. * LLVM backend: update `intcast` to support when the bit counts of operand and dest type are the same. This was already a requirement of the instruction previously. * Type: `intInfo` supports the case when the type is an enum, and retrieves the info for the integer tag type. This makes it pretty easy for backends to implement `intcast` without having to care explicitly that the new type is an enum. As a bonus, simple enums never have to go through the type system; their signedness and bit count are computed directly. The "int to enum" behavior test case is now passing for stage2 in the LLVM backend.
2021-10-05move tagged union behavior tests to the appropriate placeAndrew Kelley
tagged unions used to be called "enums" but now they are called "tagged unions".
2021-10-02AstGen: fix `while` and `for` with unreachable bodiesAndrew Kelley
Companion commit to 61a53a587558ff1fe1b0ec98bb424022885edccf. This commit also moves over a bunch of behavior test cases to the passing-for-stage2 section.
2021-08-23stage1: `@intToEnum` implicitly does an `@intCast`Andrew Kelley
This is a backwards-compatible language change. Previously, `@intToEnum` coerced its integer operand to the integer tag type of the destination enum type, often requiring the callsite to additionally wrap the operand in an `@intCast`. Now, the `@intCast` is implicit, and any integer operand can be passed to `@intToEnum`. The same as before, it is illegal behavior to pass any integer which does not have a corresponding enum tag.
2021-06-21std, src, doc, test: remove unused variablesJacob G-W
2021-06-14add ast-check flag to zig fmt, fix found bugsVeikka Tuominen
2021-05-08Merge remote-tracking branch 'origin/master' into stage2-whole-file-astgenAndrew Kelley
Conflicts: * doc/langref.html.in * lib/std/enums.zig * lib/std/fmt.zig * lib/std/hash/auto_hash.zig * lib/std/math.zig * lib/std/mem.zig * lib/std/meta.zig * test/behavior/alignof.zig * test/behavior/bitcast.zig * test/behavior/bugs/1421.zig * test/behavior/cast.zig * test/behavior/ptrcast.zig * test/behavior/type_info.zig * test/behavior/vector.zig Master branch added `try` to a bunch of testing function calls, and some lines also had changed how to refer to the native architecture and other `@import("builtin")` stuff.
2021-04-29move behavior tests from test/stage1/ to test/Andrew Kelley
And fix test cases to make them pass. This is in preparation for starting to pass behavior tests with self-hosted.