tiny.chant.parse.assertion
Defined in parse.
API (1)
Actions
Public operations.
Source
Source: lib/chant/src/parse/assert.zig
zig
const std = @import("std");const expression = @import("expression.zig");const state = @import("state/root.zig");const cursor = state.cursor;const diagnostic = state.diagnostic;const Error = @import("error.zig").Error;const Parser = state.Parser;pub fn consume(parser: *Parser) Error!bool { if (!cursor.consume(parser, .kw_static_assert)) return false; _ = try cursor.expect(parser, .lparen); const condition = try expression.parseExpression(parser); const value = expression.evaluateIntegerConstant(parser, condition) orelse return diagnostic.fail(parser, error.UnsupportedConstruct, "static_assert condition is not an integer constant"); if (cursor.consume(parser, .comma)) { _ = try cursor.expect(parser, .string); } _ = try cursor.expect(parser, .rparen); _ = try cursor.expect(parser, .semicolon); if (value == 0) { return diagnostic.fail(parser, error.StaticAssertionFailed, "static assertion failed"); } return true;}test "static assertions accept nonzero integer constants" { const lexer = @import("../lexer/root.zig"); var arena_state = std.heap.ArenaAllocator.init(std.testing.allocator); defer arena_state.deinit(); const arena = arena_state.allocator(); const source = "static_assert(alignof(double) == 8, \"lp64\");"; const token_survey = try lexer.survey(source, "assert.c"); const capacity = try lexer.Capacity.derive(token_survey.limits); const bytes = try arena.alignedAlloc( u8, .fromByteUnits(lexer.Storage.storage_alignment), capacity.storage_bytes, ); var storage = try lexer.Storage.init(bytes, token_survey.limits); storage.activate(); defer _ = storage.deinit(); const tokens = try storage.fill(token_survey, source, "assert.c"); var parser = try @import("state/test.zig").initParser(arena, tokens); try std.testing.expect(try consume(&parser));}test "static assertions reject zero" { const lexer = @import("../lexer/root.zig"); var arena_state = std.heap.ArenaAllocator.init(std.testing.allocator); defer arena_state.deinit(); const arena = arena_state.allocator(); const source = "static_assert(false);"; const token_survey = try lexer.survey(source, "assert.c"); const capacity = try lexer.Capacity.derive(token_survey.limits); const bytes = try arena.alignedAlloc( u8, .fromByteUnits(lexer.Storage.storage_alignment), capacity.storage_bytes, ); var storage = try lexer.Storage.init(bytes, token_survey.limits); storage.activate(); defer _ = storage.deinit(); const tokens = try storage.fill(token_survey, source, "assert.c"); var parser = try @import("state/test.zig").initParser(arena, tokens); try std.testing.expectError(error.StaticAssertionFailed, consume(&parser));}Source: lib/chant/src/parse/root.zig:9
zig
pub const assertion = @import("assert.zig");Audit
| Definitions | 2 |
|---|---|
| Public names | 2 |
| Members | 0 |
| Version | 26.7.0 |
| Revision | daab053ee433 |