use microcad_lang::{diag::*, eval::*, resolve::*, syntax::*, value::*};
pub fn log() -> Symbol {
crate::ModuleBuilder::new("log".try_into().expect("valid id"))
.symbol(todo())
.symbol(error())
.symbol(warning())
.symbol(info())
.build()
}
pub fn error() -> Symbol {
Symbol::new_builtin(
Identifier::no_ref("error"),
None,
&|_params, args, context| {
args.iter()
.try_for_each(|(_, arg)| -> Result<(), EvalError> {
context.error(
args,
EvalError::BuiltinError(format!("{value}", value = arg.value)),
)
})?;
Ok(Value::None)
},
)
}
pub fn warning() -> Symbol {
Symbol::new_builtin(
Identifier::no_ref("warning"),
None,
&|_params, args, context| {
args.iter()
.try_for_each(|(_, arg)| -> Result<(), EvalError> {
context.warning(
args,
EvalError::BuiltinError(format!("{value}", value = arg.value)),
)
})?;
Ok(Value::None)
},
)
}
pub fn info() -> Symbol {
Symbol::new_builtin(
Identifier::no_ref("info"),
None,
&|_params, args, context| {
args.iter()
.try_for_each(|(_, arg)| -> Result<(), EvalError> {
context.info(args, format!("{value}", value = arg.value));
Ok(())
})?;
Ok(Value::None)
},
)
}
pub fn todo() -> Symbol {
Symbol::new_builtin(
Identifier::no_ref("todo"),
None,
&|_params, args, context| {
args.iter()
.try_for_each(|(_, arg)| -> Result<(), EvalError> {
context.error(args, EvalError::Todo(format!("{value}", value = arg.value)))
})?;
Ok(Value::None)
},
)
}