Skip to documentation
SLOP

tiny.chant.parse.assertion

Reference tiny.chant parse assertion

Defined in parse.

API (1)

Actions

Public operations.

No direct callersNo direct callsparseassertion
Static calls · unresolved targets: unknown · external targets: unknown.

Source

Called byCallstest sourcelib.chant.src.parse.asserttest: static assertions accept nonzer...test sourcelib.chant.src.parse.asserttest: static assertions reject zeroparse.expressionevaluateIntegerConstantparse.expressionparseExpressionparse.state.cursorconsumeparse.state.cursorexpectparse.state.diagnosticfailparse.assertionconsume
Static calls · unresolved targets: 0 · external targets: 0.

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

Definitions2
Public names2
Members0
Version26.7.0
Revisiondaab053ee433