Skip to documentation
SLOP

tiny.chant.parse.state.object

Reference tiny.chant parse state object

Defined in parse.state.

API (6)

Actions

Public operations.

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

Source

Called byCallsprivate sourcelib.chant.src.parse.constanthasScalarConstantShapeparse.expressionevaluateIntegerConstantprivate sourcelib.chant.src.parse.expressionparsePrimarytest sourcelib.chant.src.parse.state.objecttest: objects resolve through nested ...private sourcelib.chant.src.parse.state.objectlookupBindingparse.state.objectconstantValue
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsparse.expressioninferTypeprivate sourcelib.chant.src.parse.expressionparsePrimarytest sourcelib.chant.src.parse.state.objecttest: objects resolve through nested ...private sourcelib.chant.src.parse.state.objectlookupBindingparse.state.objectlookup
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callsparseparseExternaltest sourcelib.chant.src.parse.state.objecttest: objects resolve through nested ...private sourcelib.chant.src.parse.statementparseCompoundparse.state.objectpop
Static calls · unresolved targets: 0 · external targets: 2.
Called byCallsNo direct callsparseparseExternaltest sourcelib.chant.src.parse.state.objecttest: objects resolve through nested ...private sourcelib.chant.src.parse.statementparseCompoundparse.state.objectpush
Static calls · unresolved targets: 1 · external targets: 0.
Called byCallsNo direct callsprivate sourcelib.chant.src.parse.constexprregisterObjectprivate sourcelib.chant.src.parse.declarationparseLocaltest sourcelib.chant.src.parse.expressiontest: expression types infer from par...test sourcelib.chant.src.parse.expressiontest: pointer inference reuses one ch...parseparseExternaltest sourcelib.chant.src.parse.state.objecttest: objects resolve through nested ...parse.state.objectregister
Static calls · unresolved targets: 1 · external targets: 0.
Called byCallsNo direct callsprivate sourcelib.chant.src.parse.constexprregisterObjecttest sourcelib.chant.src.parse.state.objecttest: objects resolve through nested ...private sourcelib.chant.src.parse.type.speccompleteEnumprivate sourcelib.chant.src.parse.type.specparseEnumeratorsparse.state.objectregisterConstant
Static calls · unresolved targets: 1 · external targets: 0.

Source: lib/chant/src/parse/state/object.zig

zig
const std = @import("std");const ast = @import("../../ast/root.zig");const chant = @import("../../root.zig");const types = @import("types.zig");const Error = @import("../root.zig").Error;const Token = chant.token.Token;const Parser = types.Parser;pub fn push(parser: *Parser) Error!void {    try parser.object_scopes.append(parser.arena, parser.objects.items.len);}pub fn pop(parser: *Parser) void {    const mark = parser.object_scopes.pop().?;    parser.objects.shrinkRetainingCapacity(mark);}pub fn register(parser: *Parser, name: []const u8, resolved: *const ast.Type) Error!void {    try parser.objects.append(parser.arena, .{ .name = name, .type = resolved });}pub fn registerConstant(parser: *Parser, name: []const u8, resolved: *const ast.Type, value: i128) Error!void {    try parser.objects.append(parser.arena, .{ .name = name, .type = resolved, .value = value });}pub fn lookup(parser: *const Parser, name: []const u8) ?*const ast.Type {    const binding = lookupBinding(parser, name) orelse return null;    return binding.type;}pub fn constantValue(parser: *const Parser, name: []const u8) ?i128 {    const binding = lookupBinding(parser, name) orelse return null;    return binding.value;}fn lookupBinding(parser: *const Parser, name: []const u8) ?types.ObjectBinding {    var index = parser.objects.items.len;    while (index > 0) {        index -= 1;        const binding = parser.objects.items[index];        if (std.mem.eql(u8, binding.name, name)) return binding;    }    return null;}test "objects resolve through nested scopes" {    var arena_state = std.heap.ArenaAllocator.init(std.testing.allocator);    defer arena_state.deinit();    const arena = arena_state.allocator();    const tokens = [_]Token{        .{ .kind = .eof, .text = "", .file = "test.c", .line = 1, .column = 1 },    };    var parser = try @import("test.zig").initParser(arena, &tokens);    try push(&parser);    try register(&parser, "x", &ast.types.int_type);    try registerConstant(&parser, "C", &ast.types.int_type, 42);    try std.testing.expectEqual(ast.types.Kind.int_type, lookup(&parser, "x").?.kind);    try std.testing.expectEqual(@as(i128, 42), constantValue(&parser, "C").?);    try push(&parser);    try register(&parser, "x", &ast.types.double_type);    try std.testing.expectEqual(ast.types.Kind.double_type, lookup(&parser, "x").?.kind);    pop(&parser);    try std.testing.expectEqual(ast.types.Kind.int_type, lookup(&parser, "x").?.kind);    pop(&parser);    try std.testing.expect(lookup(&parser, "x") == null);}

Source: lib/chant/src/parse/state/root.zig:7

zig
pub const object = @import("object.zig");

Audit

Definitions7
Public names7
Members0
Version26.7.0
Revisiondaab053ee433