summaryrefslogtreecommitdiff
path: root/src/libzisp/value/double.zig
blob: 5cfe6ee8dd1403797c6e1c3407f91419223ed9a1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
const value = @import("../value.zig");
const Value = value.Value;

// Zig API

/// Checks for a Zisp double (double, +inf, -inf, or canonical NaN).
pub fn check(v: Value) bool {
    return v.isDouble();
}

/// Asserts check().
pub fn assert(v: Value) void {
    if (!check(v)) {
        v.dump();
        @panic("not double");
    }
}

pub fn pack(d: f64) Value {
    return .{ .double = d };
}

pub fn unpack(v: Value) f64 {
    assert(v);
    return v.double;
}

// Zisp API

pub fn pred(v: Value) Value {
    return value.boole.pack(check(v));
}

pub fn add(v1: Value, v2: Value) Value {
    const d1 = unpack(v1);
    const d2 = unpack(v2);
    return pack(d1 + d2);
}