hlvm_runtime/
literals.rs

1#[allow(unused_imports)]
2use std::str::FromStr;
3use crate::value::*;
4use crate::object::*;
5
6#[allow(unused_macros)]
7#[macro_export] macro_rules! inline_foreign_function {
8    ($input:ident, $body:block) => (
9        Value::from_foreign_function(
10            |$input| $body
11        )
12    )
13}
14
15#[allow(unused_macros)]
16#[macro_export] macro_rules! wrap_foreign_function {
17    ($function:expr) => (
18        Value::from_foreign_function(
19            |input: Value| {$function(input)}
20        )
21    )
22}
23
24#[allow(unused_macros)]
25#[macro_export] macro_rules! __obj {
26    ($object:ident, $name:meta~$value:expr) => (
27        $object.set_attr(stringify!($name).to_string(), $value)
28    );
29
30    ($object:ident, $name:meta~$value:expr, $($pass_name:meta~$pass_value:expr),+) => (
31        $object.set_attr(stringify!($name).to_string(), $value);
32        __obj!($object, $($pass_name~$pass_value),+)
33    )
34}
35
36#[allow(unused_macros)]
37#[macro_export]
38macro_rules! obj {
39    ($($name:meta~$value:expr),+) => (
40        (|| {
41            let mut value = Value::new(Type::Instance, NOTHING.to_vec());
42            __obj!(
43                value, $($name~$value),+
44            );
45            return value
46        })()
47    )
48}
49
50pub fn empty_obj() -> Value {
51    Value::new(Type::Instance, NOTHING.to_vec())
52}
53
54pub fn string(s: &str) -> Value {
55    Value::from_str(s)
56}
57
58pub fn num(n: &str) -> Value {
59    Value::from_number(string_to_number(n.to_string()))
60}
61
62pub fn none() -> Value {
63    Value::from_nothing()
64}
65
66pub fn list(arr: &[Value]) -> Value {
67    Value::from_vector(arr.to_vec())
68}
69
70pub fn fun(arr: &[Value]) -> Value {
71    Value::from_function(arr.to_vec())
72}
73
74pub fn ins(i: Instruction) -> Value {
75    Value::from_instruction(i)
76}
77
78
79// #[allow(unused_macros)]
80// #[macro_export] macro_rules! wrap_foreign_function {
81//     ($function:expr) => (
82//         Value::from_foreign_function(
83//             |input: Value| {$function(input)}
84//         )
85//     )
86// }
87
88pub fn foreign_function(fun: fn(Value) -> Value) -> Value {
89    Value::from_foreign_function(fun)
90}