jsonpiler 0.7.4

a Json syntax programming language for Windows
Documentation
#[macro_export]
#[doc(hidden)]
macro_rules! extend_bytes {
  ($vec:expr, $($data:expr),+ $(,)?) => {
    $($vec.extend_from_slice($data);)+
  };
}
#[macro_export]
#[doc(hidden)]
macro_rules! return_if {
  ($self:ident, $ch:expr, $value:expr) => {
    if $self.peek() == $ch {
      $self.pos.offset += 1;
      return Ok($value);
    }
  };
}
#[macro_export]
#[doc(hidden)]
macro_rules! parse_err {
  ($self:ident, $pos:expr, $kind:expr) => {
    Err(CompilationError { kind: $kind, pos: $pos })
  };
  ($self:ident, $kind:expr) => {
    Err(CompilationError { kind: $kind, pos: $self.pos })
  };
}
#[macro_export]
#[doc(hidden)]
macro_rules! err {
  ($self:ident, $pos:expr, $kind:expr) => {
    Err(CompilationError { kind: $kind, pos: $pos })
  };
}
#[macro_export]
#[doc(hidden)]
macro_rules! warn {
  ($self:ident, $pos:expr, $($arg:tt)*) => {println!("Warning: {}", $self.parser[$pos.file].fmt_err(&format!($($arg)*), $pos))};
}
#[macro_export]
#[doc(hidden)]
macro_rules! get_target_mem {
  ($self:expr, $scope:expr, $is_global:expr, $size:expr, $ref_label:expr, ($($kind:tt)+) => $kind_expr:ident) => {
    if let Some(json) = &$ref_label {
      match json {
        Json::$($kind)+ => $kind_expr.mem,
        _ => return Err(InternalError(MismatchReassignment)),
      }
    } else if $is_global {
      Global { id: $self.get_bss_id($size, $size) }
    } else {
      $scope.local($size, $size)?.mem
    }
  };
}
#[macro_export]
#[doc(hidden)]
macro_rules! unwrap_arg {
  (
    $self:ident,
    $arg:expr,
    $func:expr,
    $expected:literal,
    ($($kind:tt)+) => $body:ident
  ) => {{
    if let Json::$($kind)+ = $arg.value {
      $crate::WithPos { value: $body, pos: $arg.pos }
    } else {
      return Err(args_type_error($func.nth, &$func.name, $expected.into(), &$arg));
    }
  }};
}
#[macro_export]
#[doc(hidden)]
macro_rules! take_arg {
  (
    $self:ident,
    $func:expr,
    ($($kind:tt)+) => $body:ident
  ) => {{
    let arg = $func.arg()?;
    if let Json::$($kind)+ = arg.value {
      $crate::WithPos { value: $body, pos: arg.pos }
    } else {
      let $body = Default::default();
      let expected = Json::$($kind)+.type_name();
      return Err(
        $crate::utility::args_type_error($func.nth, &$func.name, expected, &arg).into(),
      );
    }
  }};
}
#[macro_export]
#[doc(hidden)]
macro_rules! take_arg_custom {
  (
    $self:ident,
    $func:expr,
    $expected:literal,
    ($($kind:tt)+) => $body:ident
  ) => {{
    let arg = $func.arg()?;
    if let Json::$($kind)+ = arg.value {
      $crate::WithPos { value: $body, pos: arg.pos }
    } else {
      return Err(
        $crate::utility::args_type_error($func.nth, &$func.name, $expected.into(), &arg).into(),
      );
    }
  }};
}
#[macro_export]
#[doc(hidden)]
macro_rules! built_in {
  (
    $self:ident, $func:ident, $scope:ident, $register_fn:ident;
    $( $name:ident => { $key:literal, $attrs:tt, $arity:expr, $block:block } ),+ $(,)?
  ) => {
    impl Jsonpiler {
      pub(crate) fn $register_fn(&mut self) {
      $(self.register($key, Jsonpiler::$attrs, Jsonpiler::$name, $arity);)+
      }
    }
    #[allow(clippy::allow_attributes, clippy::single_call_fn, clippy::unnecessary_wraps)]
    impl Jsonpiler {
    $(
      fn $name(&mut $self, $func: &mut FuncInfo, $scope: &mut ScopeInfo) -> ErrOR<Json> { $block }
    )+
  }};
}