lib/pluck/src/toplevel/definitions.zig

daab053ee43316e1809a84551d573ddd1e5bf3d2

 1 const pluck = @import("../root.zig");
 2 
 3 const pexpr = pluck.pexpr;
 4 const PExpr = pexpr.PExpr;
 5 const Symbol = pexpr.Symbol;
 6 
 7 const context_owner = @import("context.zig");
 8 const ToplevelContext = context_owner.ToplevelContext;
 9 
10 pub fn clearUserDefinitions(self: *ToplevelContext) void {
11     self.definitions.clearUserDefinitions();
12 }
13 
14 pub fn removeUserDefinition(self: *ToplevelContext, name: Symbol) void {
15     if (self.definitions.lookupDefinition(name)) |def| {
16         if (def.is_stdlib) {
17             return;
18         }
19     } else {
20         return;
21     }
22 
23     if (self.definitions.remove(name)) |expr| {
24         expr.deinit(self.arena.allocator());
25     }
26 }
27 
28 pub fn isDefined(self: *const ToplevelContext, name: Symbol) bool {
29     return self.definitions.isDefined(name);
30 }
31 
32 pub fn lookup(self: *const ToplevelContext, name: Symbol) ?*PExpr {
33     return self.definitions.lookup(name);
34 }
35 
36 pub fn define(self: *ToplevelContext, name: Symbol, expr: *PExpr) !void {
37     _ = try defineWithDocTrackChange(self, name, expr, null);
38 }
39 
40 pub fn defineWithDoc(self: *ToplevelContext, name: Symbol, expr: *PExpr, doc: ?[]const u8) !void {
41     _ = try defineWithDocTrackChange(self, name, expr, doc);
42 }
43 
44 pub fn defineWithDocTrackChange(self: *ToplevelContext, name: Symbol, expr: *PExpr, doc: ?[]const u8) !bool {
45     if (self.loading_stdlib) {
46         try self.definitions.defineStdlibWithDoc(name, expr, doc);
47     } else {
48         try self.definitions.defineWithDoc(name, expr, doc);
49     }
50     return false;
51 }