jsonpiler 0.10.4

a Json syntax programming language for Windows
Documentation
use crate::prelude::*;
built_in! {self, _func, scope, io;
  confirm => {"confirm", COMMON, Exact(2), {
    scope.extend(&[
      self.mov_str(Rcx, arg!(_func, (Str(x)) => x).val),
      self.mov_str(Rdx, arg!(_func, (Str(x)) => x).val),
      mov_d(R8, 4),
      Call(self.get_msg_box(scope.id)?),
      mov_d(Rcx, 6),
      Clear(Rdx),
      mov_d(R8, 0xFF),
      LogicRR(Cmp, Rax, Rcx),
      CMovCc(E, Rdx, R8),
    ]);
    scope.ret_bool(Rdx)
  }},
  input => {"input", COMMON, Exact(0), {
    scope.push(Call(self.get_input(scope.id)?));
    scope.ret_str(Rax, HeapPtr)
  }},
  message => {"message", COMMON, Exact(2), {
    scope.extend(&[
      self.mov_str(Rcx, arg!(_func, (Str(x)) => x).val),
      self.mov_str(Rdx, arg!(_func, (Str(x)) => x).val),
      Clear(R8),
      Call(self.get_msg_box(scope.id)?)
    ]);
    Ok(Null(Lit(())))
  }},
  print => {"print", SPECIAL, AtLeast(1), {
    for _ in 1..=_func.val.len {
      let raw = _func.arg()?;
      let printable = self.eval(raw, scope)?;
      let Str(arg) = printable.val else {
        return Err(_func.args_err(vec![StrT], printable.map_ref(Json::as_type)));
      };
      scope.extend(&[self.mov_str(Rcx, arg.clone()), Call(self.get_print(scope.id)?)]);
      self.drop_json(Str(arg), false, scope);
    }
    Ok(Null(Lit(())))
  }},
}