1use std::{collections::BTreeMap, error::Error, fmt};
2
3use serde::{Deserialize, Serialize};
4
5use crate::{
6 AssignmentOp, BinaryOp, BlockStmt, BuiltinValue, Expr, ExprKind, FunctionDecl,
7 IncludeDirective, LangSpec, Literal, Script, SemanticModel, SemanticType, Stmt, StructDecl,
8 TypeSpec, UnaryOp,
9};
10
11#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirModule {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field4_finish(f, "HirModule",
"includes", &self.includes, "structs", &self.structs, "globals",
&self.globals, "functions", &&self.functions)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirModule {
#[inline]
fn clone(&self) -> HirModule {
HirModule {
includes: ::core::clone::Clone::clone(&self.includes),
structs: ::core::clone::Clone::clone(&self.structs),
globals: ::core::clone::Clone::clone(&self.globals),
functions: ::core::clone::Clone::clone(&self.functions),
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirModule {
#[inline]
fn eq(&self, other: &HirModule) -> bool {
self.includes == other.includes && self.structs == other.structs &&
self.globals == other.globals &&
self.functions == other.functions
}
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirModule {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"HirModule", false as usize + 1 + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"includes", &self.includes)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"structs", &self.structs)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"globals", &self.globals)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"functions", &self.functions)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirModule {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field {
__field0,
__field1,
__field2,
__field3,
__ignore,
}
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
3u64 => _serde::__private228::Ok(__Field::__field3),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"includes" => _serde::__private228::Ok(__Field::__field0),
"structs" => _serde::__private228::Ok(__Field::__field1),
"globals" => _serde::__private228::Ok(__Field::__field2),
"functions" => _serde::__private228::Ok(__Field::__field3),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"includes" => _serde::__private228::Ok(__Field::__field0),
b"structs" => _serde::__private228::Ok(__Field::__field1),
b"globals" => _serde::__private228::Ok(__Field::__field2),
b"functions" => _serde::__private228::Ok(__Field::__field3),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirModule>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirModule;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct HirModule")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<Vec<IncludeDirective>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct HirModule with 4 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<Vec<HirStruct>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct HirModule with 4 elements")),
};
let __field2 =
match _serde::de::SeqAccess::next_element::<Vec<HirGlobal>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
&"struct HirModule with 4 elements")),
};
let __field3 =
match _serde::de::SeqAccess::next_element::<Vec<HirFunction>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(3usize,
&"struct HirModule with 4 elements")),
};
_serde::__private228::Ok(HirModule {
includes: __field0,
structs: __field1,
globals: __field2,
functions: __field3,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0:
_serde::__private228::Option<Vec<IncludeDirective>> =
_serde::__private228::None;
let mut __field1:
_serde::__private228::Option<Vec<HirStruct>> =
_serde::__private228::None;
let mut __field2:
_serde::__private228::Option<Vec<HirGlobal>> =
_serde::__private228::None;
let mut __field3:
_serde::__private228::Option<Vec<HirFunction>> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("includes"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<IncludeDirective>>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("structs"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<HirStruct>>(&mut __map)?);
}
__Field::__field2 => {
if _serde::__private228::Option::is_some(&__field2) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("globals"));
}
__field2 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<HirGlobal>>(&mut __map)?);
}
__Field::__field3 => {
if _serde::__private228::Option::is_some(&__field3) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("functions"));
}
__field3 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<HirFunction>>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("includes")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("structs")?,
};
let __field2 =
match __field2 {
_serde::__private228::Some(__field2) => __field2,
_serde::__private228::None =>
_serde::__private228::de::missing_field("globals")?,
};
let __field3 =
match __field3 {
_serde::__private228::Some(__field3) => __field3,
_serde::__private228::None =>
_serde::__private228::de::missing_field("functions")?,
};
_serde::__private228::Ok(HirModule {
includes: __field0,
structs: __field1,
globals: __field2,
functions: __field3,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["includes", "structs", "globals", "functions"];
_serde::Deserializer::deserialize_struct(__deserializer,
"HirModule", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirModule>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
13pub struct HirModule {
14 pub includes: Vec<IncludeDirective>,
16 pub structs: Vec<HirStruct>,
18 pub globals: Vec<HirGlobal>,
20 pub functions: Vec<HirFunction>,
22}
23
24#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirStruct {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f, "HirStruct",
"span", &self.span, "name", &self.name, "fields", &&self.fields)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirStruct {
#[inline]
fn clone(&self) -> HirStruct {
HirStruct {
span: ::core::clone::Clone::clone(&self.span),
name: ::core::clone::Clone::clone(&self.name),
fields: ::core::clone::Clone::clone(&self.fields),
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirStruct {
#[inline]
fn eq(&self, other: &HirStruct) -> bool {
self.span == other.span && self.name == other.name &&
self.fields == other.fields
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for HirStruct {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<crate::Span>;
let _: ::core::cmp::AssertParamIsEq<String>;
let _: ::core::cmp::AssertParamIsEq<Vec<HirField>>;
}
}Eq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirStruct {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"HirStruct", false as usize + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"span", &self.span)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"name", &self.name)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"fields", &self.fields)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirStruct {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __field2, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"span" => _serde::__private228::Ok(__Field::__field0),
"name" => _serde::__private228::Ok(__Field::__field1),
"fields" => _serde::__private228::Ok(__Field::__field2),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"span" => _serde::__private228::Ok(__Field::__field0),
b"name" => _serde::__private228::Ok(__Field::__field1),
b"fields" => _serde::__private228::Ok(__Field::__field2),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirStruct>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirStruct;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct HirStruct")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<crate::Span>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct HirStruct with 3 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<String>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct HirStruct with 3 elements")),
};
let __field2 =
match _serde::de::SeqAccess::next_element::<Vec<HirField>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
&"struct HirStruct with 3 elements")),
};
_serde::__private228::Ok(HirStruct {
span: __field0,
name: __field1,
fields: __field2,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0:
_serde::__private228::Option<crate::Span> =
_serde::__private228::None;
let mut __field1: _serde::__private228::Option<String> =
_serde::__private228::None;
let mut __field2:
_serde::__private228::Option<Vec<HirField>> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("span"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<crate::Span>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("name"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<String>(&mut __map)?);
}
__Field::__field2 => {
if _serde::__private228::Option::is_some(&__field2) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("fields"));
}
__field2 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<HirField>>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("span")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("name")?,
};
let __field2 =
match __field2 {
_serde::__private228::Some(__field2) => __field2,
_serde::__private228::None =>
_serde::__private228::de::missing_field("fields")?,
};
_serde::__private228::Ok(HirStruct {
span: __field0,
name: __field1,
fields: __field2,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["span", "name", "fields"];
_serde::Deserializer::deserialize_struct(__deserializer,
"HirStruct", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirStruct>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
26pub struct HirStruct {
27 pub span: crate::Span,
29 pub name: String,
31 pub fields: Vec<HirField>,
33}
34
35#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirField {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f, "HirField",
"name", &self.name, "ty", &&self.ty)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirField {
#[inline]
fn clone(&self) -> HirField {
HirField {
name: ::core::clone::Clone::clone(&self.name),
ty: ::core::clone::Clone::clone(&self.ty),
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirField {
#[inline]
fn eq(&self, other: &HirField) -> bool {
self.name == other.name && self.ty == other.ty
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for HirField {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<String>;
let _: ::core::cmp::AssertParamIsEq<SemanticType>;
}
}Eq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirField {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"HirField", false as usize + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"name", &self.name)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"ty", &self.ty)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirField {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"name" => _serde::__private228::Ok(__Field::__field0),
"ty" => _serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"name" => _serde::__private228::Ok(__Field::__field0),
b"ty" => _serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirField>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirField;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct HirField")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<String>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct HirField with 2 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<SemanticType>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct HirField with 2 elements")),
};
_serde::__private228::Ok(HirField {
name: __field0,
ty: __field1,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0: _serde::__private228::Option<String> =
_serde::__private228::None;
let mut __field1:
_serde::__private228::Option<SemanticType> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("name"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<String>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("ty"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<SemanticType>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("name")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("ty")?,
};
_serde::__private228::Ok(HirField {
name: __field0,
ty: __field1,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] = &["name", "ty"];
_serde::Deserializer::deserialize_struct(__deserializer,
"HirField", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirField>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
37pub struct HirField {
38 pub name: String,
40 pub ty: SemanticType,
42}
43
44#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirGlobal {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field5_finish(f, "HirGlobal",
"span", &self.span, "name", &self.name, "ty", &self.ty,
"is_const", &self.is_const, "initializer", &&self.initializer)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirGlobal {
#[inline]
fn clone(&self) -> HirGlobal {
HirGlobal {
span: ::core::clone::Clone::clone(&self.span),
name: ::core::clone::Clone::clone(&self.name),
ty: ::core::clone::Clone::clone(&self.ty),
is_const: ::core::clone::Clone::clone(&self.is_const),
initializer: ::core::clone::Clone::clone(&self.initializer),
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirGlobal {
#[inline]
fn eq(&self, other: &HirGlobal) -> bool {
self.is_const == other.is_const && self.span == other.span &&
self.name == other.name && self.ty == other.ty &&
self.initializer == other.initializer
}
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirGlobal {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"HirGlobal", false as usize + 1 + 1 + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"span", &self.span)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"name", &self.name)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"ty", &self.ty)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"is_const", &self.is_const)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"initializer", &self.initializer)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirGlobal {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field {
__field0,
__field1,
__field2,
__field3,
__field4,
__ignore,
}
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
3u64 => _serde::__private228::Ok(__Field::__field3),
4u64 => _serde::__private228::Ok(__Field::__field4),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"span" => _serde::__private228::Ok(__Field::__field0),
"name" => _serde::__private228::Ok(__Field::__field1),
"ty" => _serde::__private228::Ok(__Field::__field2),
"is_const" => _serde::__private228::Ok(__Field::__field3),
"initializer" =>
_serde::__private228::Ok(__Field::__field4),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"span" => _serde::__private228::Ok(__Field::__field0),
b"name" => _serde::__private228::Ok(__Field::__field1),
b"ty" => _serde::__private228::Ok(__Field::__field2),
b"is_const" => _serde::__private228::Ok(__Field::__field3),
b"initializer" =>
_serde::__private228::Ok(__Field::__field4),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirGlobal>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirGlobal;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct HirGlobal")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<crate::Span>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct HirGlobal with 5 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<String>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct HirGlobal with 5 elements")),
};
let __field2 =
match _serde::de::SeqAccess::next_element::<SemanticType>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
&"struct HirGlobal with 5 elements")),
};
let __field3 =
match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(3usize,
&"struct HirGlobal with 5 elements")),
};
let __field4 =
match _serde::de::SeqAccess::next_element::<Option<HirExpr>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(4usize,
&"struct HirGlobal with 5 elements")),
};
_serde::__private228::Ok(HirGlobal {
span: __field0,
name: __field1,
ty: __field2,
is_const: __field3,
initializer: __field4,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0:
_serde::__private228::Option<crate::Span> =
_serde::__private228::None;
let mut __field1: _serde::__private228::Option<String> =
_serde::__private228::None;
let mut __field2:
_serde::__private228::Option<SemanticType> =
_serde::__private228::None;
let mut __field3: _serde::__private228::Option<bool> =
_serde::__private228::None;
let mut __field4:
_serde::__private228::Option<Option<HirExpr>> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("span"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<crate::Span>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("name"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<String>(&mut __map)?);
}
__Field::__field2 => {
if _serde::__private228::Option::is_some(&__field2) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("ty"));
}
__field2 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<SemanticType>(&mut __map)?);
}
__Field::__field3 => {
if _serde::__private228::Option::is_some(&__field3) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("is_const"));
}
__field3 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
}
__Field::__field4 => {
if _serde::__private228::Option::is_some(&__field4) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("initializer"));
}
__field4 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<HirExpr>>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("span")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("name")?,
};
let __field2 =
match __field2 {
_serde::__private228::Some(__field2) => __field2,
_serde::__private228::None =>
_serde::__private228::de::missing_field("ty")?,
};
let __field3 =
match __field3 {
_serde::__private228::Some(__field3) => __field3,
_serde::__private228::None =>
_serde::__private228::de::missing_field("is_const")?,
};
let __field4 =
match __field4 {
_serde::__private228::Some(__field4) => __field4,
_serde::__private228::None =>
_serde::__private228::de::missing_field("initializer")?,
};
_serde::__private228::Ok(HirGlobal {
span: __field0,
name: __field1,
ty: __field2,
is_const: __field3,
initializer: __field4,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["span", "name", "ty", "is_const", "initializer"];
_serde::Deserializer::deserialize_struct(__deserializer,
"HirGlobal", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirGlobal>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
46pub struct HirGlobal {
47 pub span: crate::Span,
49 pub name: String,
51 pub ty: SemanticType,
53 pub is_const: bool,
55 pub initializer: Option<HirExpr>,
57}
58
59#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirFunction {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
let names: &'static _ =
&["span", "name", "return_type", "parameters", "locals", "body",
"is_builtin"];
let values: &[&dyn ::core::fmt::Debug] =
&[&self.span, &self.name, &self.return_type, &self.parameters,
&self.locals, &self.body, &&self.is_builtin];
::core::fmt::Formatter::debug_struct_fields_finish(f, "HirFunction",
names, values)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirFunction {
#[inline]
fn clone(&self) -> HirFunction {
HirFunction {
span: ::core::clone::Clone::clone(&self.span),
name: ::core::clone::Clone::clone(&self.name),
return_type: ::core::clone::Clone::clone(&self.return_type),
parameters: ::core::clone::Clone::clone(&self.parameters),
locals: ::core::clone::Clone::clone(&self.locals),
body: ::core::clone::Clone::clone(&self.body),
is_builtin: ::core::clone::Clone::clone(&self.is_builtin),
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirFunction {
#[inline]
fn eq(&self, other: &HirFunction) -> bool {
self.is_builtin == other.is_builtin && self.span == other.span &&
self.name == other.name &&
self.return_type == other.return_type &&
self.parameters == other.parameters &&
self.locals == other.locals && self.body == other.body
}
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirFunction {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"HirFunction", false as usize + 1 + 1 + 1 + 1 + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"span", &self.span)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"name", &self.name)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"return_type", &self.return_type)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"parameters", &self.parameters)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"locals", &self.locals)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"body", &self.body)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"is_builtin", &self.is_builtin)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirFunction {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field {
__field0,
__field1,
__field2,
__field3,
__field4,
__field5,
__field6,
__ignore,
}
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
3u64 => _serde::__private228::Ok(__Field::__field3),
4u64 => _serde::__private228::Ok(__Field::__field4),
5u64 => _serde::__private228::Ok(__Field::__field5),
6u64 => _serde::__private228::Ok(__Field::__field6),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"span" => _serde::__private228::Ok(__Field::__field0),
"name" => _serde::__private228::Ok(__Field::__field1),
"return_type" =>
_serde::__private228::Ok(__Field::__field2),
"parameters" => _serde::__private228::Ok(__Field::__field3),
"locals" => _serde::__private228::Ok(__Field::__field4),
"body" => _serde::__private228::Ok(__Field::__field5),
"is_builtin" => _serde::__private228::Ok(__Field::__field6),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"span" => _serde::__private228::Ok(__Field::__field0),
b"name" => _serde::__private228::Ok(__Field::__field1),
b"return_type" =>
_serde::__private228::Ok(__Field::__field2),
b"parameters" =>
_serde::__private228::Ok(__Field::__field3),
b"locals" => _serde::__private228::Ok(__Field::__field4),
b"body" => _serde::__private228::Ok(__Field::__field5),
b"is_builtin" =>
_serde::__private228::Ok(__Field::__field6),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirFunction>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirFunction;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct HirFunction")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<crate::Span>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct HirFunction with 7 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<String>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct HirFunction with 7 elements")),
};
let __field2 =
match _serde::de::SeqAccess::next_element::<SemanticType>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
&"struct HirFunction with 7 elements")),
};
let __field3 =
match _serde::de::SeqAccess::next_element::<Vec<HirParameter>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(3usize,
&"struct HirFunction with 7 elements")),
};
let __field4 =
match _serde::de::SeqAccess::next_element::<Vec<HirLocal>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(4usize,
&"struct HirFunction with 7 elements")),
};
let __field5 =
match _serde::de::SeqAccess::next_element::<Option<HirBlock>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(5usize,
&"struct HirFunction with 7 elements")),
};
let __field6 =
match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(6usize,
&"struct HirFunction with 7 elements")),
};
_serde::__private228::Ok(HirFunction {
span: __field0,
name: __field1,
return_type: __field2,
parameters: __field3,
locals: __field4,
body: __field5,
is_builtin: __field6,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0:
_serde::__private228::Option<crate::Span> =
_serde::__private228::None;
let mut __field1: _serde::__private228::Option<String> =
_serde::__private228::None;
let mut __field2:
_serde::__private228::Option<SemanticType> =
_serde::__private228::None;
let mut __field3:
_serde::__private228::Option<Vec<HirParameter>> =
_serde::__private228::None;
let mut __field4:
_serde::__private228::Option<Vec<HirLocal>> =
_serde::__private228::None;
let mut __field5:
_serde::__private228::Option<Option<HirBlock>> =
_serde::__private228::None;
let mut __field6: _serde::__private228::Option<bool> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("span"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<crate::Span>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("name"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<String>(&mut __map)?);
}
__Field::__field2 => {
if _serde::__private228::Option::is_some(&__field2) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("return_type"));
}
__field2 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<SemanticType>(&mut __map)?);
}
__Field::__field3 => {
if _serde::__private228::Option::is_some(&__field3) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("parameters"));
}
__field3 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<HirParameter>>(&mut __map)?);
}
__Field::__field4 => {
if _serde::__private228::Option::is_some(&__field4) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("locals"));
}
__field4 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<HirLocal>>(&mut __map)?);
}
__Field::__field5 => {
if _serde::__private228::Option::is_some(&__field5) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("body"));
}
__field5 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<HirBlock>>(&mut __map)?);
}
__Field::__field6 => {
if _serde::__private228::Option::is_some(&__field6) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("is_builtin"));
}
__field6 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("span")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("name")?,
};
let __field2 =
match __field2 {
_serde::__private228::Some(__field2) => __field2,
_serde::__private228::None =>
_serde::__private228::de::missing_field("return_type")?,
};
let __field3 =
match __field3 {
_serde::__private228::Some(__field3) => __field3,
_serde::__private228::None =>
_serde::__private228::de::missing_field("parameters")?,
};
let __field4 =
match __field4 {
_serde::__private228::Some(__field4) => __field4,
_serde::__private228::None =>
_serde::__private228::de::missing_field("locals")?,
};
let __field5 =
match __field5 {
_serde::__private228::Some(__field5) => __field5,
_serde::__private228::None =>
_serde::__private228::de::missing_field("body")?,
};
let __field6 =
match __field6 {
_serde::__private228::Some(__field6) => __field6,
_serde::__private228::None =>
_serde::__private228::de::missing_field("is_builtin")?,
};
_serde::__private228::Ok(HirFunction {
span: __field0,
name: __field1,
return_type: __field2,
parameters: __field3,
locals: __field4,
body: __field5,
is_builtin: __field6,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["span", "name", "return_type", "parameters", "locals",
"body", "is_builtin"];
_serde::Deserializer::deserialize_struct(__deserializer,
"HirFunction", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirFunction>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
61pub struct HirFunction {
62 pub span: crate::Span,
64 pub name: String,
66 pub return_type: SemanticType,
68 pub parameters: Vec<HirParameter>,
70 pub locals: Vec<HirLocal>,
72 pub body: Option<HirBlock>,
74 pub is_builtin: bool,
76}
77
78#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirParameter {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field5_finish(f, "HirParameter",
"local", &self.local, "name", &self.name, "ty", &self.ty,
"is_optional", &self.is_optional, "default", &&self.default)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirParameter {
#[inline]
fn clone(&self) -> HirParameter {
HirParameter {
local: ::core::clone::Clone::clone(&self.local),
name: ::core::clone::Clone::clone(&self.name),
ty: ::core::clone::Clone::clone(&self.ty),
is_optional: ::core::clone::Clone::clone(&self.is_optional),
default: ::core::clone::Clone::clone(&self.default),
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirParameter {
#[inline]
fn eq(&self, other: &HirParameter) -> bool {
self.is_optional == other.is_optional && self.local == other.local &&
self.name == other.name && self.ty == other.ty &&
self.default == other.default
}
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirParameter {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"HirParameter", false as usize + 1 + 1 + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"local", &self.local)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"name", &self.name)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"ty", &self.ty)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"is_optional", &self.is_optional)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"default", &self.default)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirParameter {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field {
__field0,
__field1,
__field2,
__field3,
__field4,
__ignore,
}
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
3u64 => _serde::__private228::Ok(__Field::__field3),
4u64 => _serde::__private228::Ok(__Field::__field4),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"local" => _serde::__private228::Ok(__Field::__field0),
"name" => _serde::__private228::Ok(__Field::__field1),
"ty" => _serde::__private228::Ok(__Field::__field2),
"is_optional" =>
_serde::__private228::Ok(__Field::__field3),
"default" => _serde::__private228::Ok(__Field::__field4),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"local" => _serde::__private228::Ok(__Field::__field0),
b"name" => _serde::__private228::Ok(__Field::__field1),
b"ty" => _serde::__private228::Ok(__Field::__field2),
b"is_optional" =>
_serde::__private228::Ok(__Field::__field3),
b"default" => _serde::__private228::Ok(__Field::__field4),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirParameter>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirParameter;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct HirParameter")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<HirLocalId>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct HirParameter with 5 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<String>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct HirParameter with 5 elements")),
};
let __field2 =
match _serde::de::SeqAccess::next_element::<SemanticType>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
&"struct HirParameter with 5 elements")),
};
let __field3 =
match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(3usize,
&"struct HirParameter with 5 elements")),
};
let __field4 =
match _serde::de::SeqAccess::next_element::<Option<HirExpr>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(4usize,
&"struct HirParameter with 5 elements")),
};
_serde::__private228::Ok(HirParameter {
local: __field0,
name: __field1,
ty: __field2,
is_optional: __field3,
default: __field4,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0: _serde::__private228::Option<HirLocalId> =
_serde::__private228::None;
let mut __field1: _serde::__private228::Option<String> =
_serde::__private228::None;
let mut __field2:
_serde::__private228::Option<SemanticType> =
_serde::__private228::None;
let mut __field3: _serde::__private228::Option<bool> =
_serde::__private228::None;
let mut __field4:
_serde::__private228::Option<Option<HirExpr>> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("local"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<HirLocalId>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("name"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<String>(&mut __map)?);
}
__Field::__field2 => {
if _serde::__private228::Option::is_some(&__field2) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("ty"));
}
__field2 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<SemanticType>(&mut __map)?);
}
__Field::__field3 => {
if _serde::__private228::Option::is_some(&__field3) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("is_optional"));
}
__field3 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
}
__Field::__field4 => {
if _serde::__private228::Option::is_some(&__field4) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("default"));
}
__field4 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<HirExpr>>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("local")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("name")?,
};
let __field2 =
match __field2 {
_serde::__private228::Some(__field2) => __field2,
_serde::__private228::None =>
_serde::__private228::de::missing_field("ty")?,
};
let __field3 =
match __field3 {
_serde::__private228::Some(__field3) => __field3,
_serde::__private228::None =>
_serde::__private228::de::missing_field("is_optional")?,
};
let __field4 =
match __field4 {
_serde::__private228::Some(__field4) => __field4,
_serde::__private228::None =>
_serde::__private228::de::missing_field("default")?,
};
_serde::__private228::Ok(HirParameter {
local: __field0,
name: __field1,
ty: __field2,
is_optional: __field3,
default: __field4,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["local", "name", "ty", "is_optional", "default"];
_serde::Deserializer::deserialize_struct(__deserializer,
"HirParameter", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirParameter>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
80pub struct HirParameter {
81 pub local: HirLocalId,
83 pub name: String,
85 pub ty: SemanticType,
87 pub is_optional: bool,
89 pub default: Option<HirExpr>,
91}
92
93#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirLocal {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field4_finish(f, "HirLocal",
"id", &self.id, "name", &self.name, "ty", &self.ty, "kind",
&&self.kind)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirLocal {
#[inline]
fn clone(&self) -> HirLocal {
HirLocal {
id: ::core::clone::Clone::clone(&self.id),
name: ::core::clone::Clone::clone(&self.name),
ty: ::core::clone::Clone::clone(&self.ty),
kind: ::core::clone::Clone::clone(&self.kind),
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirLocal {
#[inline]
fn eq(&self, other: &HirLocal) -> bool {
self.id == other.id && self.name == other.name && self.ty == other.ty
&& self.kind == other.kind
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for HirLocal {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<HirLocalId>;
let _: ::core::cmp::AssertParamIsEq<String>;
let _: ::core::cmp::AssertParamIsEq<SemanticType>;
let _: ::core::cmp::AssertParamIsEq<HirLocalKind>;
}
}Eq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirLocal {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"HirLocal", false as usize + 1 + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"id", &self.id)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"name", &self.name)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"ty", &self.ty)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"kind", &self.kind)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirLocal {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field {
__field0,
__field1,
__field2,
__field3,
__ignore,
}
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
3u64 => _serde::__private228::Ok(__Field::__field3),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"id" => _serde::__private228::Ok(__Field::__field0),
"name" => _serde::__private228::Ok(__Field::__field1),
"ty" => _serde::__private228::Ok(__Field::__field2),
"kind" => _serde::__private228::Ok(__Field::__field3),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"id" => _serde::__private228::Ok(__Field::__field0),
b"name" => _serde::__private228::Ok(__Field::__field1),
b"ty" => _serde::__private228::Ok(__Field::__field2),
b"kind" => _serde::__private228::Ok(__Field::__field3),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirLocal>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirLocal;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct HirLocal")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<HirLocalId>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct HirLocal with 4 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<String>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct HirLocal with 4 elements")),
};
let __field2 =
match _serde::de::SeqAccess::next_element::<SemanticType>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
&"struct HirLocal with 4 elements")),
};
let __field3 =
match _serde::de::SeqAccess::next_element::<HirLocalKind>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(3usize,
&"struct HirLocal with 4 elements")),
};
_serde::__private228::Ok(HirLocal {
id: __field0,
name: __field1,
ty: __field2,
kind: __field3,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0: _serde::__private228::Option<HirLocalId> =
_serde::__private228::None;
let mut __field1: _serde::__private228::Option<String> =
_serde::__private228::None;
let mut __field2:
_serde::__private228::Option<SemanticType> =
_serde::__private228::None;
let mut __field3:
_serde::__private228::Option<HirLocalKind> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("id"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<HirLocalId>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("name"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<String>(&mut __map)?);
}
__Field::__field2 => {
if _serde::__private228::Option::is_some(&__field2) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("ty"));
}
__field2 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<SemanticType>(&mut __map)?);
}
__Field::__field3 => {
if _serde::__private228::Option::is_some(&__field3) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("kind"));
}
__field3 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<HirLocalKind>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("id")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("name")?,
};
let __field2 =
match __field2 {
_serde::__private228::Some(__field2) => __field2,
_serde::__private228::None =>
_serde::__private228::de::missing_field("ty")?,
};
let __field3 =
match __field3 {
_serde::__private228::Some(__field3) => __field3,
_serde::__private228::None =>
_serde::__private228::de::missing_field("kind")?,
};
_serde::__private228::Ok(HirLocal {
id: __field0,
name: __field1,
ty: __field2,
kind: __field3,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["id", "name", "ty", "kind"];
_serde::Deserializer::deserialize_struct(__deserializer,
"HirLocal", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirLocal>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
95pub struct HirLocal {
96 pub id: HirLocalId,
98 pub name: String,
100 pub ty: SemanticType,
102 pub kind: HirLocalKind,
104}
105
106#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirLocalKind {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::write_str(f,
match self {
HirLocalKind::Parameter => "Parameter",
HirLocalKind::Local => "Local",
})
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirLocalKind {
#[inline]
fn clone(&self) -> HirLocalKind { *self }
}Clone, #[automatically_derived]
impl ::core::marker::Copy for HirLocalKind { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for HirLocalKind {
#[inline]
fn eq(&self, other: &HirLocalKind) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for HirLocalKind {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {}
}Eq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirLocalKind {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
HirLocalKind::Parameter =>
_serde::Serializer::serialize_unit_variant(__serializer,
"HirLocalKind", 0u32, "Parameter"),
HirLocalKind::Local =>
_serde::Serializer::serialize_unit_variant(__serializer,
"HirLocalKind", 1u32, "Local"),
}
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirLocalKind {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"variant identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
_ =>
_serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
&"variant index 0 <= i < 2")),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"Parameter" => _serde::__private228::Ok(__Field::__field0),
"Local" => _serde::__private228::Ok(__Field::__field1),
_ => {
_serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
VARIANTS))
}
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"Parameter" => _serde::__private228::Ok(__Field::__field0),
b"Local" => _serde::__private228::Ok(__Field::__field1),
_ => {
let __value =
&_serde::__private228::from_utf8_lossy(__value);
_serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
VARIANTS))
}
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirLocalKind>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirLocalKind;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"enum HirLocalKind")
}
fn visit_enum<__A>(self, __data: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::EnumAccess<'de> {
match _serde::de::EnumAccess::variant(__data)? {
(__Field::__field0, __variant) => {
_serde::de::VariantAccess::unit_variant(__variant)?;
_serde::__private228::Ok(HirLocalKind::Parameter)
}
(__Field::__field1, __variant) => {
_serde::de::VariantAccess::unit_variant(__variant)?;
_serde::__private228::Ok(HirLocalKind::Local)
}
}
}
}
#[doc(hidden)]
const VARIANTS: &'static [&'static str] =
&["Parameter", "Local"];
_serde::Deserializer::deserialize_enum(__deserializer,
"HirLocalKind", VARIANTS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirLocalKind>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
108pub enum HirLocalKind {
109 Parameter,
111 Local,
113}
114
115#[derive(
117 #[automatically_derived]
impl ::core::fmt::Debug for HirLocalId {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_tuple_field1_finish(f, "HirLocalId",
&&self.0)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirLocalId {
#[inline]
fn clone(&self) -> HirLocalId {
let _: ::core::clone::AssertParamIsClone<u32>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for HirLocalId { }Copy, #[automatically_derived]
impl ::core::cmp::PartialEq for HirLocalId {
#[inline]
fn eq(&self, other: &HirLocalId) -> bool { self.0 == other.0 }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for HirLocalId {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<u32>;
}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialOrd for HirLocalId {
#[inline]
fn partial_cmp(&self, other: &HirLocalId)
-> ::core::option::Option<::core::cmp::Ordering> {
::core::cmp::PartialOrd::partial_cmp(&self.0, &other.0)
}
}PartialOrd, #[automatically_derived]
impl ::core::cmp::Ord for HirLocalId {
#[inline]
fn cmp(&self, other: &HirLocalId) -> ::core::cmp::Ordering {
::core::cmp::Ord::cmp(&self.0, &other.0)
}
}Ord, #[automatically_derived]
impl ::core::hash::Hash for HirLocalId {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.0, state)
}
}Hash, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirLocalId {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
_serde::Serializer::serialize_newtype_struct(__serializer,
"HirLocalId", &self.0)
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirLocalId {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirLocalId>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirLocalId;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"tuple struct HirLocalId")
}
#[inline]
fn visit_newtype_struct<__E>(self, __e: __E)
-> _serde::__private228::Result<Self::Value, __E::Error>
where __E: _serde::Deserializer<'de> {
let __field0: u32 =
<u32 as _serde::Deserialize>::deserialize(__e)?;
_serde::__private228::Ok(HirLocalId(__field0))
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<u32>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"tuple struct HirLocalId with 1 element")),
};
_serde::__private228::Ok(HirLocalId(__field0))
}
}
_serde::Deserializer::deserialize_newtype_struct(__deserializer,
"HirLocalId",
__Visitor {
marker: _serde::__private228::PhantomData::<HirLocalId>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize, #[automatically_derived]
impl ::core::default::Default for HirLocalId {
#[inline]
fn default() -> HirLocalId {
HirLocalId(::core::default::Default::default())
}
}Default,
118)]
119pub struct HirLocalId(pub u32);
120
121#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirBlock {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f, "HirBlock",
"span", &self.span, "statements", &&self.statements)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirBlock {
#[inline]
fn clone(&self) -> HirBlock {
HirBlock {
span: ::core::clone::Clone::clone(&self.span),
statements: ::core::clone::Clone::clone(&self.statements),
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirBlock {
#[inline]
fn eq(&self, other: &HirBlock) -> bool {
self.span == other.span && self.statements == other.statements
}
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirBlock {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"HirBlock", false as usize + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"span", &self.span)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"statements", &self.statements)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirBlock {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"span" => _serde::__private228::Ok(__Field::__field0),
"statements" => _serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"span" => _serde::__private228::Ok(__Field::__field0),
b"statements" =>
_serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirBlock>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirBlock;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct HirBlock")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<crate::Span>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct HirBlock with 2 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<Vec<HirStmt>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct HirBlock with 2 elements")),
};
_serde::__private228::Ok(HirBlock {
span: __field0,
statements: __field1,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0:
_serde::__private228::Option<crate::Span> =
_serde::__private228::None;
let mut __field1:
_serde::__private228::Option<Vec<HirStmt>> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("span"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<crate::Span>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("statements"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<HirStmt>>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("span")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("statements")?,
};
_serde::__private228::Ok(HirBlock {
span: __field0,
statements: __field1,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["span", "statements"];
_serde::Deserializer::deserialize_struct(__deserializer,
"HirBlock", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirBlock>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
123pub struct HirBlock {
124 pub span: crate::Span,
126 pub statements: Vec<HirStmt>,
128}
129
130#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirStmt {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
HirStmt::Block(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Block",
&__self_0),
HirStmt::Declare(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"Declare", &__self_0),
HirStmt::Expr(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Expr",
&__self_0),
HirStmt::If(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "If",
&__self_0),
HirStmt::Switch(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Switch",
&__self_0),
HirStmt::Return(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Return",
&__self_0),
HirStmt::While(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "While",
&__self_0),
HirStmt::DoWhile(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"DoWhile", &__self_0),
HirStmt::For(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "For",
&__self_0),
HirStmt::Case(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Case",
&__self_0),
HirStmt::Default(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"Default", &__self_0),
HirStmt::Break(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Break",
&__self_0),
HirStmt::Continue(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"Continue", &__self_0),
HirStmt::Empty(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Empty",
&__self_0),
}
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirStmt {
#[inline]
fn clone(&self) -> HirStmt {
match self {
HirStmt::Block(__self_0) =>
HirStmt::Block(::core::clone::Clone::clone(__self_0)),
HirStmt::Declare(__self_0) =>
HirStmt::Declare(::core::clone::Clone::clone(__self_0)),
HirStmt::Expr(__self_0) =>
HirStmt::Expr(::core::clone::Clone::clone(__self_0)),
HirStmt::If(__self_0) =>
HirStmt::If(::core::clone::Clone::clone(__self_0)),
HirStmt::Switch(__self_0) =>
HirStmt::Switch(::core::clone::Clone::clone(__self_0)),
HirStmt::Return(__self_0) =>
HirStmt::Return(::core::clone::Clone::clone(__self_0)),
HirStmt::While(__self_0) =>
HirStmt::While(::core::clone::Clone::clone(__self_0)),
HirStmt::DoWhile(__self_0) =>
HirStmt::DoWhile(::core::clone::Clone::clone(__self_0)),
HirStmt::For(__self_0) =>
HirStmt::For(::core::clone::Clone::clone(__self_0)),
HirStmt::Case(__self_0) =>
HirStmt::Case(::core::clone::Clone::clone(__self_0)),
HirStmt::Default(__self_0) =>
HirStmt::Default(::core::clone::Clone::clone(__self_0)),
HirStmt::Break(__self_0) =>
HirStmt::Break(::core::clone::Clone::clone(__self_0)),
HirStmt::Continue(__self_0) =>
HirStmt::Continue(::core::clone::Clone::clone(__self_0)),
HirStmt::Empty(__self_0) =>
HirStmt::Empty(::core::clone::Clone::clone(__self_0)),
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirStmt {
#[inline]
fn eq(&self, other: &HirStmt) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(HirStmt::Block(__self_0), HirStmt::Block(__arg1_0)) =>
__self_0 == __arg1_0,
(HirStmt::Declare(__self_0), HirStmt::Declare(__arg1_0)) =>
__self_0 == __arg1_0,
(HirStmt::Expr(__self_0), HirStmt::Expr(__arg1_0)) =>
__self_0 == __arg1_0,
(HirStmt::If(__self_0), HirStmt::If(__arg1_0)) =>
__self_0 == __arg1_0,
(HirStmt::Switch(__self_0), HirStmt::Switch(__arg1_0)) =>
__self_0 == __arg1_0,
(HirStmt::Return(__self_0), HirStmt::Return(__arg1_0)) =>
__self_0 == __arg1_0,
(HirStmt::While(__self_0), HirStmt::While(__arg1_0)) =>
__self_0 == __arg1_0,
(HirStmt::DoWhile(__self_0), HirStmt::DoWhile(__arg1_0)) =>
__self_0 == __arg1_0,
(HirStmt::For(__self_0), HirStmt::For(__arg1_0)) =>
__self_0 == __arg1_0,
(HirStmt::Case(__self_0), HirStmt::Case(__arg1_0)) =>
__self_0 == __arg1_0,
(HirStmt::Default(__self_0), HirStmt::Default(__arg1_0)) =>
__self_0 == __arg1_0,
(HirStmt::Break(__self_0), HirStmt::Break(__arg1_0)) =>
__self_0 == __arg1_0,
(HirStmt::Continue(__self_0), HirStmt::Continue(__arg1_0)) =>
__self_0 == __arg1_0,
(HirStmt::Empty(__self_0), HirStmt::Empty(__arg1_0)) =>
__self_0 == __arg1_0,
_ => unsafe { ::core::intrinsics::unreachable() }
}
}
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirStmt {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
HirStmt::Block(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirStmt", 0u32, "Block", __field0),
HirStmt::Declare(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirStmt", 1u32, "Declare", __field0),
HirStmt::Expr(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirStmt", 2u32, "Expr", __field0),
HirStmt::If(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirStmt", 3u32, "If", __field0),
HirStmt::Switch(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirStmt", 4u32, "Switch", __field0),
HirStmt::Return(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirStmt", 5u32, "Return", __field0),
HirStmt::While(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirStmt", 6u32, "While", __field0),
HirStmt::DoWhile(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirStmt", 7u32, "DoWhile", __field0),
HirStmt::For(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirStmt", 8u32, "For", __field0),
HirStmt::Case(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirStmt", 9u32, "Case", __field0),
HirStmt::Default(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirStmt", 10u32, "Default", __field0),
HirStmt::Break(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirStmt", 11u32, "Break", __field0),
HirStmt::Continue(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirStmt", 12u32, "Continue", __field0),
HirStmt::Empty(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirStmt", 13u32, "Empty", __field0),
}
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirStmt {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field {
__field0,
__field1,
__field2,
__field3,
__field4,
__field5,
__field6,
__field7,
__field8,
__field9,
__field10,
__field11,
__field12,
__field13,
}
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"variant identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
3u64 => _serde::__private228::Ok(__Field::__field3),
4u64 => _serde::__private228::Ok(__Field::__field4),
5u64 => _serde::__private228::Ok(__Field::__field5),
6u64 => _serde::__private228::Ok(__Field::__field6),
7u64 => _serde::__private228::Ok(__Field::__field7),
8u64 => _serde::__private228::Ok(__Field::__field8),
9u64 => _serde::__private228::Ok(__Field::__field9),
10u64 => _serde::__private228::Ok(__Field::__field10),
11u64 => _serde::__private228::Ok(__Field::__field11),
12u64 => _serde::__private228::Ok(__Field::__field12),
13u64 => _serde::__private228::Ok(__Field::__field13),
_ =>
_serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
&"variant index 0 <= i < 14")),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"Block" => _serde::__private228::Ok(__Field::__field0),
"Declare" => _serde::__private228::Ok(__Field::__field1),
"Expr" => _serde::__private228::Ok(__Field::__field2),
"If" => _serde::__private228::Ok(__Field::__field3),
"Switch" => _serde::__private228::Ok(__Field::__field4),
"Return" => _serde::__private228::Ok(__Field::__field5),
"While" => _serde::__private228::Ok(__Field::__field6),
"DoWhile" => _serde::__private228::Ok(__Field::__field7),
"For" => _serde::__private228::Ok(__Field::__field8),
"Case" => _serde::__private228::Ok(__Field::__field9),
"Default" => _serde::__private228::Ok(__Field::__field10),
"Break" => _serde::__private228::Ok(__Field::__field11),
"Continue" => _serde::__private228::Ok(__Field::__field12),
"Empty" => _serde::__private228::Ok(__Field::__field13),
_ => {
_serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
VARIANTS))
}
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"Block" => _serde::__private228::Ok(__Field::__field0),
b"Declare" => _serde::__private228::Ok(__Field::__field1),
b"Expr" => _serde::__private228::Ok(__Field::__field2),
b"If" => _serde::__private228::Ok(__Field::__field3),
b"Switch" => _serde::__private228::Ok(__Field::__field4),
b"Return" => _serde::__private228::Ok(__Field::__field5),
b"While" => _serde::__private228::Ok(__Field::__field6),
b"DoWhile" => _serde::__private228::Ok(__Field::__field7),
b"For" => _serde::__private228::Ok(__Field::__field8),
b"Case" => _serde::__private228::Ok(__Field::__field9),
b"Default" => _serde::__private228::Ok(__Field::__field10),
b"Break" => _serde::__private228::Ok(__Field::__field11),
b"Continue" => _serde::__private228::Ok(__Field::__field12),
b"Empty" => _serde::__private228::Ok(__Field::__field13),
_ => {
let __value =
&_serde::__private228::from_utf8_lossy(__value);
_serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
VARIANTS))
}
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirStmt>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirStmt;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"enum HirStmt")
}
fn visit_enum<__A>(self, __data: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::EnumAccess<'de> {
match _serde::de::EnumAccess::variant(__data)? {
(__Field::__field0, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<Box<HirBlock>>(__variant),
HirStmt::Block),
(__Field::__field1, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<Box<HirDeclareStmt>>(__variant),
HirStmt::Declare),
(__Field::__field2, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<Box<HirExpr>>(__variant),
HirStmt::Expr),
(__Field::__field3, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<Box<HirIfStmt>>(__variant),
HirStmt::If),
(__Field::__field4, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<Box<HirSwitchStmt>>(__variant),
HirStmt::Switch),
(__Field::__field5, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<Box<HirReturnStmt>>(__variant),
HirStmt::Return),
(__Field::__field6, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<Box<HirWhileStmt>>(__variant),
HirStmt::While),
(__Field::__field7, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<Box<HirDoWhileStmt>>(__variant),
HirStmt::DoWhile),
(__Field::__field8, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<Box<HirForStmt>>(__variant),
HirStmt::For),
(__Field::__field9, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<Box<HirExpr>>(__variant),
HirStmt::Case),
(__Field::__field10, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<crate::Span>(__variant),
HirStmt::Default),
(__Field::__field11, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<crate::Span>(__variant),
HirStmt::Break),
(__Field::__field12, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<crate::Span>(__variant),
HirStmt::Continue),
(__Field::__field13, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<crate::Span>(__variant),
HirStmt::Empty),
}
}
}
#[doc(hidden)]
const VARIANTS: &'static [&'static str] =
&["Block", "Declare", "Expr", "If", "Switch", "Return",
"While", "DoWhile", "For", "Case", "Default", "Break",
"Continue", "Empty"];
_serde::Deserializer::deserialize_enum(__deserializer,
"HirStmt", VARIANTS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirStmt>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
132pub enum HirStmt {
133 Block(Box<HirBlock>),
135 Declare(Box<HirDeclareStmt>),
137 Expr(Box<HirExpr>),
139 If(Box<HirIfStmt>),
141 Switch(Box<HirSwitchStmt>),
143 Return(Box<HirReturnStmt>),
145 While(Box<HirWhileStmt>),
147 DoWhile(Box<HirDoWhileStmt>),
149 For(Box<HirForStmt>),
151 Case(Box<HirExpr>),
153 Default(crate::Span),
155 Break(crate::Span),
157 Continue(crate::Span),
159 Empty(crate::Span),
161}
162
163#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirDeclareStmt {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"HirDeclareStmt", "span", &self.span, "ty", &self.ty,
"declarators", &&self.declarators)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirDeclareStmt {
#[inline]
fn clone(&self) -> HirDeclareStmt {
HirDeclareStmt {
span: ::core::clone::Clone::clone(&self.span),
ty: ::core::clone::Clone::clone(&self.ty),
declarators: ::core::clone::Clone::clone(&self.declarators),
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirDeclareStmt {
#[inline]
fn eq(&self, other: &HirDeclareStmt) -> bool {
self.span == other.span && self.ty == other.ty &&
self.declarators == other.declarators
}
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirDeclareStmt {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"HirDeclareStmt", false as usize + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"span", &self.span)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"ty", &self.ty)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"declarators", &self.declarators)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirDeclareStmt {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __field2, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"span" => _serde::__private228::Ok(__Field::__field0),
"ty" => _serde::__private228::Ok(__Field::__field1),
"declarators" =>
_serde::__private228::Ok(__Field::__field2),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"span" => _serde::__private228::Ok(__Field::__field0),
b"ty" => _serde::__private228::Ok(__Field::__field1),
b"declarators" =>
_serde::__private228::Ok(__Field::__field2),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirDeclareStmt>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirDeclareStmt;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct HirDeclareStmt")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<crate::Span>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct HirDeclareStmt with 3 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<SemanticType>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct HirDeclareStmt with 3 elements")),
};
let __field2 =
match _serde::de::SeqAccess::next_element::<Vec<HirDeclarator>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
&"struct HirDeclareStmt with 3 elements")),
};
_serde::__private228::Ok(HirDeclareStmt {
span: __field0,
ty: __field1,
declarators: __field2,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0:
_serde::__private228::Option<crate::Span> =
_serde::__private228::None;
let mut __field1:
_serde::__private228::Option<SemanticType> =
_serde::__private228::None;
let mut __field2:
_serde::__private228::Option<Vec<HirDeclarator>> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("span"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<crate::Span>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("ty"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<SemanticType>(&mut __map)?);
}
__Field::__field2 => {
if _serde::__private228::Option::is_some(&__field2) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("declarators"));
}
__field2 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<HirDeclarator>>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("span")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("ty")?,
};
let __field2 =
match __field2 {
_serde::__private228::Some(__field2) => __field2,
_serde::__private228::None =>
_serde::__private228::de::missing_field("declarators")?,
};
_serde::__private228::Ok(HirDeclareStmt {
span: __field0,
ty: __field1,
declarators: __field2,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["span", "ty", "declarators"];
_serde::Deserializer::deserialize_struct(__deserializer,
"HirDeclareStmt", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirDeclareStmt>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
165pub struct HirDeclareStmt {
166 pub span: crate::Span,
168 pub ty: SemanticType,
170 pub declarators: Vec<HirDeclarator>,
172}
173
174#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirDeclarator {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f, "HirDeclarator",
"local", &self.local, "initializer", &&self.initializer)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirDeclarator {
#[inline]
fn clone(&self) -> HirDeclarator {
HirDeclarator {
local: ::core::clone::Clone::clone(&self.local),
initializer: ::core::clone::Clone::clone(&self.initializer),
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirDeclarator {
#[inline]
fn eq(&self, other: &HirDeclarator) -> bool {
self.local == other.local && self.initializer == other.initializer
}
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirDeclarator {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"HirDeclarator", false as usize + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"local", &self.local)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"initializer", &self.initializer)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirDeclarator {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"local" => _serde::__private228::Ok(__Field::__field0),
"initializer" =>
_serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"local" => _serde::__private228::Ok(__Field::__field0),
b"initializer" =>
_serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirDeclarator>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirDeclarator;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct HirDeclarator")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<HirLocalId>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct HirDeclarator with 2 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<Option<HirExpr>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct HirDeclarator with 2 elements")),
};
_serde::__private228::Ok(HirDeclarator {
local: __field0,
initializer: __field1,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0: _serde::__private228::Option<HirLocalId> =
_serde::__private228::None;
let mut __field1:
_serde::__private228::Option<Option<HirExpr>> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("local"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<HirLocalId>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("initializer"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<HirExpr>>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("local")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("initializer")?,
};
_serde::__private228::Ok(HirDeclarator {
local: __field0,
initializer: __field1,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["local", "initializer"];
_serde::Deserializer::deserialize_struct(__deserializer,
"HirDeclarator", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirDeclarator>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
176pub struct HirDeclarator {
177 pub local: HirLocalId,
179 pub initializer: Option<HirExpr>,
181}
182
183#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirIfStmt {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field4_finish(f, "HirIfStmt",
"span", &self.span, "condition", &self.condition, "then_branch",
&self.then_branch, "else_branch", &&self.else_branch)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirIfStmt {
#[inline]
fn clone(&self) -> HirIfStmt {
HirIfStmt {
span: ::core::clone::Clone::clone(&self.span),
condition: ::core::clone::Clone::clone(&self.condition),
then_branch: ::core::clone::Clone::clone(&self.then_branch),
else_branch: ::core::clone::Clone::clone(&self.else_branch),
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirIfStmt {
#[inline]
fn eq(&self, other: &HirIfStmt) -> bool {
self.span == other.span && self.condition == other.condition &&
self.then_branch == other.then_branch &&
self.else_branch == other.else_branch
}
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirIfStmt {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"HirIfStmt", false as usize + 1 + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"span", &self.span)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"condition", &self.condition)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"then_branch", &self.then_branch)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"else_branch", &self.else_branch)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirIfStmt {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field {
__field0,
__field1,
__field2,
__field3,
__ignore,
}
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
3u64 => _serde::__private228::Ok(__Field::__field3),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"span" => _serde::__private228::Ok(__Field::__field0),
"condition" => _serde::__private228::Ok(__Field::__field1),
"then_branch" =>
_serde::__private228::Ok(__Field::__field2),
"else_branch" =>
_serde::__private228::Ok(__Field::__field3),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"span" => _serde::__private228::Ok(__Field::__field0),
b"condition" => _serde::__private228::Ok(__Field::__field1),
b"then_branch" =>
_serde::__private228::Ok(__Field::__field2),
b"else_branch" =>
_serde::__private228::Ok(__Field::__field3),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirIfStmt>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirIfStmt;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct HirIfStmt")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<crate::Span>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct HirIfStmt with 4 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<HirExpr>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct HirIfStmt with 4 elements")),
};
let __field2 =
match _serde::de::SeqAccess::next_element::<Box<HirStmt>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
&"struct HirIfStmt with 4 elements")),
};
let __field3 =
match _serde::de::SeqAccess::next_element::<Option<Box<HirStmt>>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(3usize,
&"struct HirIfStmt with 4 elements")),
};
_serde::__private228::Ok(HirIfStmt {
span: __field0,
condition: __field1,
then_branch: __field2,
else_branch: __field3,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0:
_serde::__private228::Option<crate::Span> =
_serde::__private228::None;
let mut __field1: _serde::__private228::Option<HirExpr> =
_serde::__private228::None;
let mut __field2:
_serde::__private228::Option<Box<HirStmt>> =
_serde::__private228::None;
let mut __field3:
_serde::__private228::Option<Option<Box<HirStmt>>> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("span"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<crate::Span>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("condition"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<HirExpr>(&mut __map)?);
}
__Field::__field2 => {
if _serde::__private228::Option::is_some(&__field2) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("then_branch"));
}
__field2 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<HirStmt>>(&mut __map)?);
}
__Field::__field3 => {
if _serde::__private228::Option::is_some(&__field3) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("else_branch"));
}
__field3 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<Box<HirStmt>>>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("span")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("condition")?,
};
let __field2 =
match __field2 {
_serde::__private228::Some(__field2) => __field2,
_serde::__private228::None =>
_serde::__private228::de::missing_field("then_branch")?,
};
let __field3 =
match __field3 {
_serde::__private228::Some(__field3) => __field3,
_serde::__private228::None =>
_serde::__private228::de::missing_field("else_branch")?,
};
_serde::__private228::Ok(HirIfStmt {
span: __field0,
condition: __field1,
then_branch: __field2,
else_branch: __field3,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["span", "condition", "then_branch", "else_branch"];
_serde::Deserializer::deserialize_struct(__deserializer,
"HirIfStmt", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirIfStmt>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
185pub struct HirIfStmt {
186 pub span: crate::Span,
188 pub condition: HirExpr,
190 pub then_branch: Box<HirStmt>,
192 pub else_branch: Option<Box<HirStmt>>,
194}
195
196#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirSwitchStmt {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f, "HirSwitchStmt",
"span", &self.span, "condition", &self.condition, "body",
&&self.body)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirSwitchStmt {
#[inline]
fn clone(&self) -> HirSwitchStmt {
HirSwitchStmt {
span: ::core::clone::Clone::clone(&self.span),
condition: ::core::clone::Clone::clone(&self.condition),
body: ::core::clone::Clone::clone(&self.body),
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirSwitchStmt {
#[inline]
fn eq(&self, other: &HirSwitchStmt) -> bool {
self.span == other.span && self.condition == other.condition &&
self.body == other.body
}
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirSwitchStmt {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"HirSwitchStmt", false as usize + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"span", &self.span)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"condition", &self.condition)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"body", &self.body)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirSwitchStmt {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __field2, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"span" => _serde::__private228::Ok(__Field::__field0),
"condition" => _serde::__private228::Ok(__Field::__field1),
"body" => _serde::__private228::Ok(__Field::__field2),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"span" => _serde::__private228::Ok(__Field::__field0),
b"condition" => _serde::__private228::Ok(__Field::__field1),
b"body" => _serde::__private228::Ok(__Field::__field2),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirSwitchStmt>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirSwitchStmt;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct HirSwitchStmt")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<crate::Span>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct HirSwitchStmt with 3 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<HirExpr>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct HirSwitchStmt with 3 elements")),
};
let __field2 =
match _serde::de::SeqAccess::next_element::<Box<HirStmt>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
&"struct HirSwitchStmt with 3 elements")),
};
_serde::__private228::Ok(HirSwitchStmt {
span: __field0,
condition: __field1,
body: __field2,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0:
_serde::__private228::Option<crate::Span> =
_serde::__private228::None;
let mut __field1: _serde::__private228::Option<HirExpr> =
_serde::__private228::None;
let mut __field2:
_serde::__private228::Option<Box<HirStmt>> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("span"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<crate::Span>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("condition"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<HirExpr>(&mut __map)?);
}
__Field::__field2 => {
if _serde::__private228::Option::is_some(&__field2) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("body"));
}
__field2 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<HirStmt>>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("span")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("condition")?,
};
let __field2 =
match __field2 {
_serde::__private228::Some(__field2) => __field2,
_serde::__private228::None =>
_serde::__private228::de::missing_field("body")?,
};
_serde::__private228::Ok(HirSwitchStmt {
span: __field0,
condition: __field1,
body: __field2,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["span", "condition", "body"];
_serde::Deserializer::deserialize_struct(__deserializer,
"HirSwitchStmt", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirSwitchStmt>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
198pub struct HirSwitchStmt {
199 pub span: crate::Span,
201 pub condition: HirExpr,
203 pub body: Box<HirStmt>,
205}
206
207#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirReturnStmt {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f, "HirReturnStmt",
"span", &self.span, "value", &&self.value)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirReturnStmt {
#[inline]
fn clone(&self) -> HirReturnStmt {
HirReturnStmt {
span: ::core::clone::Clone::clone(&self.span),
value: ::core::clone::Clone::clone(&self.value),
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirReturnStmt {
#[inline]
fn eq(&self, other: &HirReturnStmt) -> bool {
self.span == other.span && self.value == other.value
}
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirReturnStmt {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"HirReturnStmt", false as usize + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"span", &self.span)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"value", &self.value)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirReturnStmt {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"span" => _serde::__private228::Ok(__Field::__field0),
"value" => _serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"span" => _serde::__private228::Ok(__Field::__field0),
b"value" => _serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirReturnStmt>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirReturnStmt;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct HirReturnStmt")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<crate::Span>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct HirReturnStmt with 2 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<Option<HirExpr>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct HirReturnStmt with 2 elements")),
};
_serde::__private228::Ok(HirReturnStmt {
span: __field0,
value: __field1,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0:
_serde::__private228::Option<crate::Span> =
_serde::__private228::None;
let mut __field1:
_serde::__private228::Option<Option<HirExpr>> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("span"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<crate::Span>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("value"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<HirExpr>>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("span")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("value")?,
};
_serde::__private228::Ok(HirReturnStmt {
span: __field0,
value: __field1,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] = &["span", "value"];
_serde::Deserializer::deserialize_struct(__deserializer,
"HirReturnStmt", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirReturnStmt>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
209pub struct HirReturnStmt {
210 pub span: crate::Span,
212 pub value: Option<HirExpr>,
214}
215
216#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirWhileStmt {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f, "HirWhileStmt",
"span", &self.span, "condition", &self.condition, "body",
&&self.body)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirWhileStmt {
#[inline]
fn clone(&self) -> HirWhileStmt {
HirWhileStmt {
span: ::core::clone::Clone::clone(&self.span),
condition: ::core::clone::Clone::clone(&self.condition),
body: ::core::clone::Clone::clone(&self.body),
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirWhileStmt {
#[inline]
fn eq(&self, other: &HirWhileStmt) -> bool {
self.span == other.span && self.condition == other.condition &&
self.body == other.body
}
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirWhileStmt {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"HirWhileStmt", false as usize + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"span", &self.span)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"condition", &self.condition)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"body", &self.body)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirWhileStmt {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __field2, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"span" => _serde::__private228::Ok(__Field::__field0),
"condition" => _serde::__private228::Ok(__Field::__field1),
"body" => _serde::__private228::Ok(__Field::__field2),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"span" => _serde::__private228::Ok(__Field::__field0),
b"condition" => _serde::__private228::Ok(__Field::__field1),
b"body" => _serde::__private228::Ok(__Field::__field2),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirWhileStmt>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirWhileStmt;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct HirWhileStmt")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<crate::Span>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct HirWhileStmt with 3 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<HirExpr>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct HirWhileStmt with 3 elements")),
};
let __field2 =
match _serde::de::SeqAccess::next_element::<Box<HirStmt>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
&"struct HirWhileStmt with 3 elements")),
};
_serde::__private228::Ok(HirWhileStmt {
span: __field0,
condition: __field1,
body: __field2,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0:
_serde::__private228::Option<crate::Span> =
_serde::__private228::None;
let mut __field1: _serde::__private228::Option<HirExpr> =
_serde::__private228::None;
let mut __field2:
_serde::__private228::Option<Box<HirStmt>> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("span"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<crate::Span>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("condition"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<HirExpr>(&mut __map)?);
}
__Field::__field2 => {
if _serde::__private228::Option::is_some(&__field2) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("body"));
}
__field2 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<HirStmt>>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("span")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("condition")?,
};
let __field2 =
match __field2 {
_serde::__private228::Some(__field2) => __field2,
_serde::__private228::None =>
_serde::__private228::de::missing_field("body")?,
};
_serde::__private228::Ok(HirWhileStmt {
span: __field0,
condition: __field1,
body: __field2,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["span", "condition", "body"];
_serde::Deserializer::deserialize_struct(__deserializer,
"HirWhileStmt", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirWhileStmt>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
218pub struct HirWhileStmt {
219 pub span: crate::Span,
221 pub condition: HirExpr,
223 pub body: Box<HirStmt>,
225}
226
227#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirDoWhileStmt {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"HirDoWhileStmt", "span", &self.span, "body", &self.body,
"condition", &&self.condition)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirDoWhileStmt {
#[inline]
fn clone(&self) -> HirDoWhileStmt {
HirDoWhileStmt {
span: ::core::clone::Clone::clone(&self.span),
body: ::core::clone::Clone::clone(&self.body),
condition: ::core::clone::Clone::clone(&self.condition),
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirDoWhileStmt {
#[inline]
fn eq(&self, other: &HirDoWhileStmt) -> bool {
self.span == other.span && self.body == other.body &&
self.condition == other.condition
}
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirDoWhileStmt {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"HirDoWhileStmt", false as usize + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"span", &self.span)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"body", &self.body)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"condition", &self.condition)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirDoWhileStmt {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __field2, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"span" => _serde::__private228::Ok(__Field::__field0),
"body" => _serde::__private228::Ok(__Field::__field1),
"condition" => _serde::__private228::Ok(__Field::__field2),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"span" => _serde::__private228::Ok(__Field::__field0),
b"body" => _serde::__private228::Ok(__Field::__field1),
b"condition" => _serde::__private228::Ok(__Field::__field2),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirDoWhileStmt>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirDoWhileStmt;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct HirDoWhileStmt")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<crate::Span>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct HirDoWhileStmt with 3 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<Box<HirStmt>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct HirDoWhileStmt with 3 elements")),
};
let __field2 =
match _serde::de::SeqAccess::next_element::<HirExpr>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
&"struct HirDoWhileStmt with 3 elements")),
};
_serde::__private228::Ok(HirDoWhileStmt {
span: __field0,
body: __field1,
condition: __field2,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0:
_serde::__private228::Option<crate::Span> =
_serde::__private228::None;
let mut __field1:
_serde::__private228::Option<Box<HirStmt>> =
_serde::__private228::None;
let mut __field2: _serde::__private228::Option<HirExpr> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("span"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<crate::Span>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("body"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<HirStmt>>(&mut __map)?);
}
__Field::__field2 => {
if _serde::__private228::Option::is_some(&__field2) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("condition"));
}
__field2 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<HirExpr>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("span")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("body")?,
};
let __field2 =
match __field2 {
_serde::__private228::Some(__field2) => __field2,
_serde::__private228::None =>
_serde::__private228::de::missing_field("condition")?,
};
_serde::__private228::Ok(HirDoWhileStmt {
span: __field0,
body: __field1,
condition: __field2,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["span", "body", "condition"];
_serde::Deserializer::deserialize_struct(__deserializer,
"HirDoWhileStmt", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirDoWhileStmt>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
229pub struct HirDoWhileStmt {
230 pub span: crate::Span,
232 pub body: Box<HirStmt>,
234 pub condition: HirExpr,
236}
237
238#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirForStmt {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field5_finish(f, "HirForStmt",
"span", &self.span, "initializer", &self.initializer, "condition",
&self.condition, "update", &self.update, "body", &&self.body)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirForStmt {
#[inline]
fn clone(&self) -> HirForStmt {
HirForStmt {
span: ::core::clone::Clone::clone(&self.span),
initializer: ::core::clone::Clone::clone(&self.initializer),
condition: ::core::clone::Clone::clone(&self.condition),
update: ::core::clone::Clone::clone(&self.update),
body: ::core::clone::Clone::clone(&self.body),
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirForStmt {
#[inline]
fn eq(&self, other: &HirForStmt) -> bool {
self.span == other.span && self.initializer == other.initializer &&
self.condition == other.condition &&
self.update == other.update && self.body == other.body
}
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirForStmt {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"HirForStmt", false as usize + 1 + 1 + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"span", &self.span)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"initializer", &self.initializer)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"condition", &self.condition)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"update", &self.update)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"body", &self.body)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirForStmt {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field {
__field0,
__field1,
__field2,
__field3,
__field4,
__ignore,
}
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
3u64 => _serde::__private228::Ok(__Field::__field3),
4u64 => _serde::__private228::Ok(__Field::__field4),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"span" => _serde::__private228::Ok(__Field::__field0),
"initializer" =>
_serde::__private228::Ok(__Field::__field1),
"condition" => _serde::__private228::Ok(__Field::__field2),
"update" => _serde::__private228::Ok(__Field::__field3),
"body" => _serde::__private228::Ok(__Field::__field4),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"span" => _serde::__private228::Ok(__Field::__field0),
b"initializer" =>
_serde::__private228::Ok(__Field::__field1),
b"condition" => _serde::__private228::Ok(__Field::__field2),
b"update" => _serde::__private228::Ok(__Field::__field3),
b"body" => _serde::__private228::Ok(__Field::__field4),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirForStmt>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirForStmt;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct HirForStmt")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<crate::Span>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct HirForStmt with 5 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<Option<HirExpr>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct HirForStmt with 5 elements")),
};
let __field2 =
match _serde::de::SeqAccess::next_element::<Option<HirExpr>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
&"struct HirForStmt with 5 elements")),
};
let __field3 =
match _serde::de::SeqAccess::next_element::<Option<HirExpr>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(3usize,
&"struct HirForStmt with 5 elements")),
};
let __field4 =
match _serde::de::SeqAccess::next_element::<Box<HirStmt>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(4usize,
&"struct HirForStmt with 5 elements")),
};
_serde::__private228::Ok(HirForStmt {
span: __field0,
initializer: __field1,
condition: __field2,
update: __field3,
body: __field4,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0:
_serde::__private228::Option<crate::Span> =
_serde::__private228::None;
let mut __field1:
_serde::__private228::Option<Option<HirExpr>> =
_serde::__private228::None;
let mut __field2:
_serde::__private228::Option<Option<HirExpr>> =
_serde::__private228::None;
let mut __field3:
_serde::__private228::Option<Option<HirExpr>> =
_serde::__private228::None;
let mut __field4:
_serde::__private228::Option<Box<HirStmt>> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("span"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<crate::Span>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("initializer"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<HirExpr>>(&mut __map)?);
}
__Field::__field2 => {
if _serde::__private228::Option::is_some(&__field2) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("condition"));
}
__field2 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<HirExpr>>(&mut __map)?);
}
__Field::__field3 => {
if _serde::__private228::Option::is_some(&__field3) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("update"));
}
__field3 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Option<HirExpr>>(&mut __map)?);
}
__Field::__field4 => {
if _serde::__private228::Option::is_some(&__field4) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("body"));
}
__field4 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<HirStmt>>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("span")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("initializer")?,
};
let __field2 =
match __field2 {
_serde::__private228::Some(__field2) => __field2,
_serde::__private228::None =>
_serde::__private228::de::missing_field("condition")?,
};
let __field3 =
match __field3 {
_serde::__private228::Some(__field3) => __field3,
_serde::__private228::None =>
_serde::__private228::de::missing_field("update")?,
};
let __field4 =
match __field4 {
_serde::__private228::Some(__field4) => __field4,
_serde::__private228::None =>
_serde::__private228::de::missing_field("body")?,
};
_serde::__private228::Ok(HirForStmt {
span: __field0,
initializer: __field1,
condition: __field2,
update: __field3,
body: __field4,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["span", "initializer", "condition", "update", "body"];
_serde::Deserializer::deserialize_struct(__deserializer,
"HirForStmt", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirForStmt>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
240pub struct HirForStmt {
241 pub span: crate::Span,
243 pub initializer: Option<HirExpr>,
245 pub condition: Option<HirExpr>,
247 pub update: Option<HirExpr>,
249 pub body: Box<HirStmt>,
251}
252
253#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirExpr {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f, "HirExpr",
"span", &self.span, "ty", &self.ty, "kind", &&self.kind)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirExpr {
#[inline]
fn clone(&self) -> HirExpr {
HirExpr {
span: ::core::clone::Clone::clone(&self.span),
ty: ::core::clone::Clone::clone(&self.ty),
kind: ::core::clone::Clone::clone(&self.kind),
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirExpr {
#[inline]
fn eq(&self, other: &HirExpr) -> bool {
self.span == other.span && self.ty == other.ty &&
self.kind == other.kind
}
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirExpr {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"HirExpr", false as usize + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"span", &self.span)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"ty", &self.ty)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"kind", &self.kind)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirExpr {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __field2, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"span" => _serde::__private228::Ok(__Field::__field0),
"ty" => _serde::__private228::Ok(__Field::__field1),
"kind" => _serde::__private228::Ok(__Field::__field2),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"span" => _serde::__private228::Ok(__Field::__field0),
b"ty" => _serde::__private228::Ok(__Field::__field1),
b"kind" => _serde::__private228::Ok(__Field::__field2),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirExpr>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirExpr;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct HirExpr")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<crate::Span>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct HirExpr with 3 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<SemanticType>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct HirExpr with 3 elements")),
};
let __field2 =
match _serde::de::SeqAccess::next_element::<HirExprKind>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
&"struct HirExpr with 3 elements")),
};
_serde::__private228::Ok(HirExpr {
span: __field0,
ty: __field1,
kind: __field2,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0:
_serde::__private228::Option<crate::Span> =
_serde::__private228::None;
let mut __field1:
_serde::__private228::Option<SemanticType> =
_serde::__private228::None;
let mut __field2:
_serde::__private228::Option<HirExprKind> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("span"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<crate::Span>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("ty"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<SemanticType>(&mut __map)?);
}
__Field::__field2 => {
if _serde::__private228::Option::is_some(&__field2) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("kind"));
}
__field2 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<HirExprKind>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("span")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("ty")?,
};
let __field2 =
match __field2 {
_serde::__private228::Some(__field2) => __field2,
_serde::__private228::None =>
_serde::__private228::de::missing_field("kind")?,
};
_serde::__private228::Ok(HirExpr {
span: __field0,
ty: __field1,
kind: __field2,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["span", "ty", "kind"];
_serde::Deserializer::deserialize_struct(__deserializer,
"HirExpr", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirExpr>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
255pub struct HirExpr {
256 pub span: crate::Span,
258 pub ty: SemanticType,
260 pub kind: HirExprKind,
262}
263
264#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirExprKind {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
HirExprKind::Literal(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"Literal", &__self_0),
HirExprKind::Value(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Value",
&__self_0),
HirExprKind::Call { target: __self_0, arguments: __self_1 } =>
::core::fmt::Formatter::debug_struct_field2_finish(f, "Call",
"target", __self_0, "arguments", &__self_1),
HirExprKind::FieldAccess { base: __self_0, field: __self_1 } =>
::core::fmt::Formatter::debug_struct_field2_finish(f,
"FieldAccess", "base", __self_0, "field", &__self_1),
HirExprKind::Unary { op: __self_0, expr: __self_1 } =>
::core::fmt::Formatter::debug_struct_field2_finish(f, "Unary",
"op", __self_0, "expr", &__self_1),
HirExprKind::Binary {
op: __self_0, left: __self_1, right: __self_2 } =>
::core::fmt::Formatter::debug_struct_field3_finish(f,
"Binary", "op", __self_0, "left", __self_1, "right",
&__self_2),
HirExprKind::Conditional {
condition: __self_0, when_true: __self_1, when_false: __self_2
} =>
::core::fmt::Formatter::debug_struct_field3_finish(f,
"Conditional", "condition", __self_0, "when_true", __self_1,
"when_false", &__self_2),
HirExprKind::Assignment {
op: __self_0, left: __self_1, right: __self_2 } =>
::core::fmt::Formatter::debug_struct_field3_finish(f,
"Assignment", "op", __self_0, "left", __self_1, "right",
&__self_2),
}
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirExprKind {
#[inline]
fn clone(&self) -> HirExprKind {
match self {
HirExprKind::Literal(__self_0) =>
HirExprKind::Literal(::core::clone::Clone::clone(__self_0)),
HirExprKind::Value(__self_0) =>
HirExprKind::Value(::core::clone::Clone::clone(__self_0)),
HirExprKind::Call { target: __self_0, arguments: __self_1 } =>
HirExprKind::Call {
target: ::core::clone::Clone::clone(__self_0),
arguments: ::core::clone::Clone::clone(__self_1),
},
HirExprKind::FieldAccess { base: __self_0, field: __self_1 } =>
HirExprKind::FieldAccess {
base: ::core::clone::Clone::clone(__self_0),
field: ::core::clone::Clone::clone(__self_1),
},
HirExprKind::Unary { op: __self_0, expr: __self_1 } =>
HirExprKind::Unary {
op: ::core::clone::Clone::clone(__self_0),
expr: ::core::clone::Clone::clone(__self_1),
},
HirExprKind::Binary {
op: __self_0, left: __self_1, right: __self_2 } =>
HirExprKind::Binary {
op: ::core::clone::Clone::clone(__self_0),
left: ::core::clone::Clone::clone(__self_1),
right: ::core::clone::Clone::clone(__self_2),
},
HirExprKind::Conditional {
condition: __self_0, when_true: __self_1, when_false: __self_2
} =>
HirExprKind::Conditional {
condition: ::core::clone::Clone::clone(__self_0),
when_true: ::core::clone::Clone::clone(__self_1),
when_false: ::core::clone::Clone::clone(__self_2),
},
HirExprKind::Assignment {
op: __self_0, left: __self_1, right: __self_2 } =>
HirExprKind::Assignment {
op: ::core::clone::Clone::clone(__self_0),
left: ::core::clone::Clone::clone(__self_1),
right: ::core::clone::Clone::clone(__self_2),
},
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirExprKind {
#[inline]
fn eq(&self, other: &HirExprKind) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(HirExprKind::Literal(__self_0),
HirExprKind::Literal(__arg1_0)) => __self_0 == __arg1_0,
(HirExprKind::Value(__self_0), HirExprKind::Value(__arg1_0))
=> __self_0 == __arg1_0,
(HirExprKind::Call { target: __self_0, arguments: __self_1 },
HirExprKind::Call { target: __arg1_0, arguments: __arg1_1 })
=> __self_0 == __arg1_0 && __self_1 == __arg1_1,
(HirExprKind::FieldAccess { base: __self_0, field: __self_1 },
HirExprKind::FieldAccess { base: __arg1_0, field: __arg1_1
}) => __self_0 == __arg1_0 && __self_1 == __arg1_1,
(HirExprKind::Unary { op: __self_0, expr: __self_1 },
HirExprKind::Unary { op: __arg1_0, expr: __arg1_1 }) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1,
(HirExprKind::Binary {
op: __self_0, left: __self_1, right: __self_2 },
HirExprKind::Binary {
op: __arg1_0, left: __arg1_1, right: __arg1_2 }) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1 &&
__self_2 == __arg1_2,
(HirExprKind::Conditional {
condition: __self_0,
when_true: __self_1,
when_false: __self_2 }, HirExprKind::Conditional {
condition: __arg1_0,
when_true: __arg1_1,
when_false: __arg1_2 }) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1 &&
__self_2 == __arg1_2,
(HirExprKind::Assignment {
op: __self_0, left: __self_1, right: __self_2 },
HirExprKind::Assignment {
op: __arg1_0, left: __arg1_1, right: __arg1_2 }) =>
__self_0 == __arg1_0 && __self_1 == __arg1_1 &&
__self_2 == __arg1_2,
_ => unsafe { ::core::intrinsics::unreachable() }
}
}
}PartialEq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirExprKind {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
HirExprKind::Literal(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirExprKind", 0u32, "Literal", __field0),
HirExprKind::Value(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirExprKind", 1u32, "Value", __field0),
HirExprKind::Call { ref target, ref arguments } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"HirExprKind", 2u32, "Call", 0 + 1 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"target", target)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"arguments", arguments)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
HirExprKind::FieldAccess { ref base, ref field } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"HirExprKind", 3u32, "FieldAccess", 0 + 1 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"base", base)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"field", field)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
HirExprKind::Unary { ref op, ref expr } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"HirExprKind", 4u32, "Unary", 0 + 1 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"op", op)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"expr", expr)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
HirExprKind::Binary { ref op, ref left, ref right } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"HirExprKind", 5u32, "Binary", 0 + 1 + 1 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"op", op)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"left", left)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"right", right)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
HirExprKind::Conditional {
ref condition, ref when_true, ref when_false } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"HirExprKind", 6u32, "Conditional", 0 + 1 + 1 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"condition", condition)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"when_true", when_true)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"when_false", when_false)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
HirExprKind::Assignment { ref op, ref left, ref right } => {
let mut __serde_state =
_serde::Serializer::serialize_struct_variant(__serializer,
"HirExprKind", 7u32, "Assignment", 0 + 1 + 1 + 1)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"op", op)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"left", left)?;
_serde::ser::SerializeStructVariant::serialize_field(&mut __serde_state,
"right", right)?;
_serde::ser::SerializeStructVariant::end(__serde_state)
}
}
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirExprKind {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field {
__field0,
__field1,
__field2,
__field3,
__field4,
__field5,
__field6,
__field7,
}
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"variant identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
3u64 => _serde::__private228::Ok(__Field::__field3),
4u64 => _serde::__private228::Ok(__Field::__field4),
5u64 => _serde::__private228::Ok(__Field::__field5),
6u64 => _serde::__private228::Ok(__Field::__field6),
7u64 => _serde::__private228::Ok(__Field::__field7),
_ =>
_serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
&"variant index 0 <= i < 8")),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"Literal" => _serde::__private228::Ok(__Field::__field0),
"Value" => _serde::__private228::Ok(__Field::__field1),
"Call" => _serde::__private228::Ok(__Field::__field2),
"FieldAccess" =>
_serde::__private228::Ok(__Field::__field3),
"Unary" => _serde::__private228::Ok(__Field::__field4),
"Binary" => _serde::__private228::Ok(__Field::__field5),
"Conditional" =>
_serde::__private228::Ok(__Field::__field6),
"Assignment" => _serde::__private228::Ok(__Field::__field7),
_ => {
_serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
VARIANTS))
}
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"Literal" => _serde::__private228::Ok(__Field::__field0),
b"Value" => _serde::__private228::Ok(__Field::__field1),
b"Call" => _serde::__private228::Ok(__Field::__field2),
b"FieldAccess" =>
_serde::__private228::Ok(__Field::__field3),
b"Unary" => _serde::__private228::Ok(__Field::__field4),
b"Binary" => _serde::__private228::Ok(__Field::__field5),
b"Conditional" =>
_serde::__private228::Ok(__Field::__field6),
b"Assignment" =>
_serde::__private228::Ok(__Field::__field7),
_ => {
let __value =
&_serde::__private228::from_utf8_lossy(__value);
_serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
VARIANTS))
}
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirExprKind>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirExprKind;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"enum HirExprKind")
}
fn visit_enum<__A>(self, __data: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::EnumAccess<'de> {
match _serde::de::EnumAccess::variant(__data)? {
(__Field::__field0, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<Literal>(__variant),
HirExprKind::Literal),
(__Field::__field1, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<HirValueRef>(__variant),
HirExprKind::Value),
(__Field::__field2, __variant) => {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"target" => _serde::__private228::Ok(__Field::__field0),
"arguments" => _serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"target" => _serde::__private228::Ok(__Field::__field0),
b"arguments" => _serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirExprKind>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirExprKind;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct variant HirExprKind::Call")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<HirCallTarget>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct variant HirExprKind::Call with 2 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<Vec<HirExpr>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct variant HirExprKind::Call with 2 elements")),
};
_serde::__private228::Ok(HirExprKind::Call {
target: __field0,
arguments: __field1,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0:
_serde::__private228::Option<HirCallTarget> =
_serde::__private228::None;
let mut __field1:
_serde::__private228::Option<Vec<HirExpr>> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("target"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<HirCallTarget>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("arguments"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<HirExpr>>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("target")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("arguments")?,
};
_serde::__private228::Ok(HirExprKind::Call {
target: __field0,
arguments: __field1,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["target", "arguments"];
_serde::de::VariantAccess::struct_variant(__variant, FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirExprKind>,
lifetime: _serde::__private228::PhantomData,
})
}
(__Field::__field3, __variant) => {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"base" => _serde::__private228::Ok(__Field::__field0),
"field" => _serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"base" => _serde::__private228::Ok(__Field::__field0),
b"field" => _serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirExprKind>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirExprKind;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct variant HirExprKind::FieldAccess")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<Box<HirExpr>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct variant HirExprKind::FieldAccess with 2 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<String>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct variant HirExprKind::FieldAccess with 2 elements")),
};
_serde::__private228::Ok(HirExprKind::FieldAccess {
base: __field0,
field: __field1,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0:
_serde::__private228::Option<Box<HirExpr>> =
_serde::__private228::None;
let mut __field1: _serde::__private228::Option<String> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("base"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<HirExpr>>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("field"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<String>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("base")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("field")?,
};
_serde::__private228::Ok(HirExprKind::FieldAccess {
base: __field0,
field: __field1,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] = &["base", "field"];
_serde::de::VariantAccess::struct_variant(__variant, FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirExprKind>,
lifetime: _serde::__private228::PhantomData,
})
}
(__Field::__field4, __variant) => {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"op" => _serde::__private228::Ok(__Field::__field0),
"expr" => _serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"op" => _serde::__private228::Ok(__Field::__field0),
b"expr" => _serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirExprKind>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirExprKind;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct variant HirExprKind::Unary")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<UnaryOp>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct variant HirExprKind::Unary with 2 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<Box<HirExpr>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct variant HirExprKind::Unary with 2 elements")),
};
_serde::__private228::Ok(HirExprKind::Unary {
op: __field0,
expr: __field1,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0: _serde::__private228::Option<UnaryOp> =
_serde::__private228::None;
let mut __field1:
_serde::__private228::Option<Box<HirExpr>> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("op"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<UnaryOp>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("expr"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<HirExpr>>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("op")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("expr")?,
};
_serde::__private228::Ok(HirExprKind::Unary {
op: __field0,
expr: __field1,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] = &["op", "expr"];
_serde::de::VariantAccess::struct_variant(__variant, FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirExprKind>,
lifetime: _serde::__private228::PhantomData,
})
}
(__Field::__field5, __variant) => {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __field2, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"op" => _serde::__private228::Ok(__Field::__field0),
"left" => _serde::__private228::Ok(__Field::__field1),
"right" => _serde::__private228::Ok(__Field::__field2),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"op" => _serde::__private228::Ok(__Field::__field0),
b"left" => _serde::__private228::Ok(__Field::__field1),
b"right" => _serde::__private228::Ok(__Field::__field2),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirExprKind>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirExprKind;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct variant HirExprKind::Binary")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<BinaryOp>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct variant HirExprKind::Binary with 3 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<Box<HirExpr>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct variant HirExprKind::Binary with 3 elements")),
};
let __field2 =
match _serde::de::SeqAccess::next_element::<Box<HirExpr>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
&"struct variant HirExprKind::Binary with 3 elements")),
};
_serde::__private228::Ok(HirExprKind::Binary {
op: __field0,
left: __field1,
right: __field2,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0: _serde::__private228::Option<BinaryOp> =
_serde::__private228::None;
let mut __field1:
_serde::__private228::Option<Box<HirExpr>> =
_serde::__private228::None;
let mut __field2:
_serde::__private228::Option<Box<HirExpr>> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("op"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<BinaryOp>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("left"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<HirExpr>>(&mut __map)?);
}
__Field::__field2 => {
if _serde::__private228::Option::is_some(&__field2) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("right"));
}
__field2 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<HirExpr>>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("op")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("left")?,
};
let __field2 =
match __field2 {
_serde::__private228::Some(__field2) => __field2,
_serde::__private228::None =>
_serde::__private228::de::missing_field("right")?,
};
_serde::__private228::Ok(HirExprKind::Binary {
op: __field0,
left: __field1,
right: __field2,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["op", "left", "right"];
_serde::de::VariantAccess::struct_variant(__variant, FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirExprKind>,
lifetime: _serde::__private228::PhantomData,
})
}
(__Field::__field6, __variant) => {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __field2, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"condition" => _serde::__private228::Ok(__Field::__field0),
"when_true" => _serde::__private228::Ok(__Field::__field1),
"when_false" => _serde::__private228::Ok(__Field::__field2),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"condition" => _serde::__private228::Ok(__Field::__field0),
b"when_true" => _serde::__private228::Ok(__Field::__field1),
b"when_false" =>
_serde::__private228::Ok(__Field::__field2),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirExprKind>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirExprKind;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct variant HirExprKind::Conditional")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<Box<HirExpr>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct variant HirExprKind::Conditional with 3 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<Box<HirExpr>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct variant HirExprKind::Conditional with 3 elements")),
};
let __field2 =
match _serde::de::SeqAccess::next_element::<Box<HirExpr>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
&"struct variant HirExprKind::Conditional with 3 elements")),
};
_serde::__private228::Ok(HirExprKind::Conditional {
condition: __field0,
when_true: __field1,
when_false: __field2,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0:
_serde::__private228::Option<Box<HirExpr>> =
_serde::__private228::None;
let mut __field1:
_serde::__private228::Option<Box<HirExpr>> =
_serde::__private228::None;
let mut __field2:
_serde::__private228::Option<Box<HirExpr>> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("condition"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<HirExpr>>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("when_true"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<HirExpr>>(&mut __map)?);
}
__Field::__field2 => {
if _serde::__private228::Option::is_some(&__field2) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("when_false"));
}
__field2 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<HirExpr>>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("condition")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("when_true")?,
};
let __field2 =
match __field2 {
_serde::__private228::Some(__field2) => __field2,
_serde::__private228::None =>
_serde::__private228::de::missing_field("when_false")?,
};
_serde::__private228::Ok(HirExprKind::Conditional {
condition: __field0,
when_true: __field1,
when_false: __field2,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["condition", "when_true", "when_false"];
_serde::de::VariantAccess::struct_variant(__variant, FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirExprKind>,
lifetime: _serde::__private228::PhantomData,
})
}
(__Field::__field7, __variant) => {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __field2, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"op" => _serde::__private228::Ok(__Field::__field0),
"left" => _serde::__private228::Ok(__Field::__field1),
"right" => _serde::__private228::Ok(__Field::__field2),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"op" => _serde::__private228::Ok(__Field::__field0),
b"left" => _serde::__private228::Ok(__Field::__field1),
b"right" => _serde::__private228::Ok(__Field::__field2),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirExprKind>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirExprKind;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct variant HirExprKind::Assignment")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<AssignmentOp>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct variant HirExprKind::Assignment with 3 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<Box<HirExpr>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct variant HirExprKind::Assignment with 3 elements")),
};
let __field2 =
match _serde::de::SeqAccess::next_element::<Box<HirExpr>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
&"struct variant HirExprKind::Assignment with 3 elements")),
};
_serde::__private228::Ok(HirExprKind::Assignment {
op: __field0,
left: __field1,
right: __field2,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0:
_serde::__private228::Option<AssignmentOp> =
_serde::__private228::None;
let mut __field1:
_serde::__private228::Option<Box<HirExpr>> =
_serde::__private228::None;
let mut __field2:
_serde::__private228::Option<Box<HirExpr>> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("op"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<AssignmentOp>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("left"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<HirExpr>>(&mut __map)?);
}
__Field::__field2 => {
if _serde::__private228::Option::is_some(&__field2) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("right"));
}
__field2 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Box<HirExpr>>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("op")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("left")?,
};
let __field2 =
match __field2 {
_serde::__private228::Some(__field2) => __field2,
_serde::__private228::None =>
_serde::__private228::de::missing_field("right")?,
};
_serde::__private228::Ok(HirExprKind::Assignment {
op: __field0,
left: __field1,
right: __field2,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["op", "left", "right"];
_serde::de::VariantAccess::struct_variant(__variant, FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirExprKind>,
lifetime: _serde::__private228::PhantomData,
})
}
}
}
}
#[doc(hidden)]
const VARIANTS: &'static [&'static str] =
&["Literal", "Value", "Call", "FieldAccess", "Unary",
"Binary", "Conditional", "Assignment"];
_serde::Deserializer::deserialize_enum(__deserializer,
"HirExprKind", VARIANTS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirExprKind>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
266pub enum HirExprKind {
267 Literal(Literal),
269 Value(HirValueRef),
271 Call {
273 target: HirCallTarget,
275 arguments: Vec<HirExpr>,
277 },
278 FieldAccess {
280 base: Box<HirExpr>,
282 field: String,
284 },
285 Unary {
287 op: UnaryOp,
289 expr: Box<HirExpr>,
291 },
292 Binary {
294 op: BinaryOp,
296 left: Box<HirExpr>,
298 right: Box<HirExpr>,
300 },
301 Conditional {
303 condition: Box<HirExpr>,
305 when_true: Box<HirExpr>,
307 when_false: Box<HirExpr>,
309 },
310 Assignment {
312 op: AssignmentOp,
314 left: Box<HirExpr>,
316 right: Box<HirExpr>,
318 },
319}
320
321#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirValueRef {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
HirValueRef::Local(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Local",
&__self_0),
HirValueRef::Global(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "Global",
&__self_0),
HirValueRef::ConstGlobal(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"ConstGlobal", &__self_0),
HirValueRef::BuiltinConstant(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"BuiltinConstant", &__self_0),
}
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirValueRef {
#[inline]
fn clone(&self) -> HirValueRef {
match self {
HirValueRef::Local(__self_0) =>
HirValueRef::Local(::core::clone::Clone::clone(__self_0)),
HirValueRef::Global(__self_0) =>
HirValueRef::Global(::core::clone::Clone::clone(__self_0)),
HirValueRef::ConstGlobal(__self_0) =>
HirValueRef::ConstGlobal(::core::clone::Clone::clone(__self_0)),
HirValueRef::BuiltinConstant(__self_0) =>
HirValueRef::BuiltinConstant(::core::clone::Clone::clone(__self_0)),
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirValueRef {
#[inline]
fn eq(&self, other: &HirValueRef) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(HirValueRef::Local(__self_0), HirValueRef::Local(__arg1_0))
=> __self_0 == __arg1_0,
(HirValueRef::Global(__self_0), HirValueRef::Global(__arg1_0))
=> __self_0 == __arg1_0,
(HirValueRef::ConstGlobal(__self_0),
HirValueRef::ConstGlobal(__arg1_0)) => __self_0 == __arg1_0,
(HirValueRef::BuiltinConstant(__self_0),
HirValueRef::BuiltinConstant(__arg1_0)) =>
__self_0 == __arg1_0,
_ => unsafe { ::core::intrinsics::unreachable() }
}
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for HirValueRef {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<HirLocalId>;
let _: ::core::cmp::AssertParamIsEq<String>;
}
}Eq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirValueRef {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
HirValueRef::Local(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirValueRef", 0u32, "Local", __field0),
HirValueRef::Global(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirValueRef", 1u32, "Global", __field0),
HirValueRef::ConstGlobal(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirValueRef", 2u32, "ConstGlobal", __field0),
HirValueRef::BuiltinConstant(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirValueRef", 3u32, "BuiltinConstant", __field0),
}
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirValueRef {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __field2, __field3, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"variant identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
3u64 => _serde::__private228::Ok(__Field::__field3),
_ =>
_serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
&"variant index 0 <= i < 4")),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"Local" => _serde::__private228::Ok(__Field::__field0),
"Global" => _serde::__private228::Ok(__Field::__field1),
"ConstGlobal" =>
_serde::__private228::Ok(__Field::__field2),
"BuiltinConstant" =>
_serde::__private228::Ok(__Field::__field3),
_ => {
_serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
VARIANTS))
}
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"Local" => _serde::__private228::Ok(__Field::__field0),
b"Global" => _serde::__private228::Ok(__Field::__field1),
b"ConstGlobal" =>
_serde::__private228::Ok(__Field::__field2),
b"BuiltinConstant" =>
_serde::__private228::Ok(__Field::__field3),
_ => {
let __value =
&_serde::__private228::from_utf8_lossy(__value);
_serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
VARIANTS))
}
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirValueRef>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirValueRef;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"enum HirValueRef")
}
fn visit_enum<__A>(self, __data: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::EnumAccess<'de> {
match _serde::de::EnumAccess::variant(__data)? {
(__Field::__field0, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<HirLocalId>(__variant),
HirValueRef::Local),
(__Field::__field1, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<String>(__variant),
HirValueRef::Global),
(__Field::__field2, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<String>(__variant),
HirValueRef::ConstGlobal),
(__Field::__field3, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<String>(__variant),
HirValueRef::BuiltinConstant),
}
}
}
#[doc(hidden)]
const VARIANTS: &'static [&'static str] =
&["Local", "Global", "ConstGlobal", "BuiltinConstant"];
_serde::Deserializer::deserialize_enum(__deserializer,
"HirValueRef", VARIANTS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirValueRef>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
323pub enum HirValueRef {
324 Local(HirLocalId),
326 Global(String),
328 ConstGlobal(String),
330 BuiltinConstant(String),
332}
333
334#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirCallTarget {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
HirCallTarget::Function(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"Function", &__self_0),
HirCallTarget::Builtin(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"Builtin", &__self_0),
}
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirCallTarget {
#[inline]
fn clone(&self) -> HirCallTarget {
match self {
HirCallTarget::Function(__self_0) =>
HirCallTarget::Function(::core::clone::Clone::clone(__self_0)),
HirCallTarget::Builtin(__self_0) =>
HirCallTarget::Builtin(::core::clone::Clone::clone(__self_0)),
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirCallTarget {
#[inline]
fn eq(&self, other: &HirCallTarget) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(HirCallTarget::Function(__self_0),
HirCallTarget::Function(__arg1_0)) => __self_0 == __arg1_0,
(HirCallTarget::Builtin(__self_0),
HirCallTarget::Builtin(__arg1_0)) => __self_0 == __arg1_0,
_ => unsafe { ::core::intrinsics::unreachable() }
}
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for HirCallTarget {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<String>;
}
}Eq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirCallTarget {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
HirCallTarget::Function(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirCallTarget", 0u32, "Function", __field0),
HirCallTarget::Builtin(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"HirCallTarget", 1u32, "Builtin", __field0),
}
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirCallTarget {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"variant identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
_ =>
_serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
&"variant index 0 <= i < 2")),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"Function" => _serde::__private228::Ok(__Field::__field0),
"Builtin" => _serde::__private228::Ok(__Field::__field1),
_ => {
_serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
VARIANTS))
}
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"Function" => _serde::__private228::Ok(__Field::__field0),
b"Builtin" => _serde::__private228::Ok(__Field::__field1),
_ => {
let __value =
&_serde::__private228::from_utf8_lossy(__value);
_serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
VARIANTS))
}
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirCallTarget>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirCallTarget;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"enum HirCallTarget")
}
fn visit_enum<__A>(self, __data: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::EnumAccess<'de> {
match _serde::de::EnumAccess::variant(__data)? {
(__Field::__field0, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<String>(__variant),
HirCallTarget::Function),
(__Field::__field1, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<String>(__variant),
HirCallTarget::Builtin),
}
}
}
#[doc(hidden)]
const VARIANTS: &'static [&'static str] =
&["Function", "Builtin"];
_serde::Deserializer::deserialize_enum(__deserializer,
"HirCallTarget", VARIANTS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirCallTarget>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
336pub enum HirCallTarget {
337 Function(String),
339 Builtin(String),
341}
342
343#[derive(#[automatically_derived]
impl ::core::fmt::Debug for HirLowerError {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f, "HirLowerError",
"span", &self.span, "message", &&self.message)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for HirLowerError {
#[inline]
fn clone(&self) -> HirLowerError {
HirLowerError {
span: ::core::clone::Clone::clone(&self.span),
message: ::core::clone::Clone::clone(&self.message),
}
}
}Clone, #[automatically_derived]
impl ::core::cmp::PartialEq for HirLowerError {
#[inline]
fn eq(&self, other: &HirLowerError) -> bool {
self.span == other.span && self.message == other.message
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for HirLowerError {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<crate::Span>;
let _: ::core::cmp::AssertParamIsEq<String>;
}
}Eq, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl _serde::Serialize for HirLowerError {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"HirLowerError", false as usize + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"span", &self.span)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"message", &self.message)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
{
#[allow(unused_extern_crates, clippy :: useless_attribute)]
extern crate serde as _serde;
;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for HirLowerError {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"span" => _serde::__private228::Ok(__Field::__field0),
"message" => _serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"span" => _serde::__private228::Ok(__Field::__field0),
b"message" => _serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<HirLowerError>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = HirLowerError;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct HirLowerError")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<crate::Span>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct HirLowerError with 2 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<String>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct HirLowerError with 2 elements")),
};
_serde::__private228::Ok(HirLowerError {
span: __field0,
message: __field1,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0:
_serde::__private228::Option<crate::Span> =
_serde::__private228::None;
let mut __field1: _serde::__private228::Option<String> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("span"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<crate::Span>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("message"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<String>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("span")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("message")?,
};
_serde::__private228::Ok(HirLowerError {
span: __field0,
message: __field1,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] = &["span", "message"];
_serde::Deserializer::deserialize_struct(__deserializer,
"HirLowerError", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<HirLowerError>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
345pub struct HirLowerError {
346 pub span: crate::Span,
348 pub message: String,
350}
351
352impl HirLowerError {
353 fn new(span: crate::Span, message: impl Into<String>) -> Self {
354 Self {
355 span,
356 message: message.into(),
357 }
358 }
359}
360
361impl fmt::Display for HirLowerError {
362 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
363 f.write_fmt(format_args!("{0}", self.message))write!(f, "{}", self.message)
364 }
365}
366
367impl Error for HirLowerError {}
368
369pub fn lower_to_hir(
375 script: &Script,
376 semantic: &SemanticModel,
377 langspec: Option<&LangSpec>,
378) -> Result<HirModule, HirLowerError> {
379 HirLowerer::new(script, semantic, langspec).lower()
380}
381
382struct HirLowerer<'a> {
383 script: &'a Script,
384 semantic: &'a SemanticModel,
385 builtin_constants: BTreeMap<String, SemanticType>,
386}
387
388impl<'a> HirLowerer<'a> {
389 fn new(script: &'a Script, semantic: &'a SemanticModel, langspec: Option<&LangSpec>) -> Self {
390 let mut builtin_constants = BTreeMap::new();
391 if let Some(langspec) = langspec {
392 for constant in &langspec.constants {
393 if let Some(ty) = semantic_type_from_builtin_value(&constant.value) {
394 builtin_constants.insert(constant.name.clone(), ty);
395 }
396 }
397 }
398
399 Self {
400 script,
401 semantic,
402 builtin_constants,
403 }
404 }
405
406 fn lower(self) -> Result<HirModule, HirLowerError> {
407 let mut includes = Vec::new();
408 let mut structs = Vec::new();
409 let mut globals = Vec::new();
410 let mut functions = Vec::new();
411
412 for item in &self.script.items {
413 match item {
414 crate::TopLevelItem::Include(include) => includes.push(include.clone()),
415 crate::TopLevelItem::Struct(definition) => {
416 structs.push(self.lower_struct(definition)?);
417 }
418 crate::TopLevelItem::Global(declaration) => {
419 globals.extend(self.lower_global_declaration(declaration)?);
420 }
421 crate::TopLevelItem::Function(function) => {
422 functions.push(self.lower_function(function)?);
423 }
424 }
425 }
426
427 Ok(HirModule {
428 includes,
429 structs,
430 globals,
431 functions,
432 })
433 }
434
435 fn lower_struct(&self, definition: &StructDecl) -> Result<HirStruct, HirLowerError> {
436 let resolved = self
437 .semantic
438 .structs
439 .get(&definition.name)
440 .ok_or_else(|| HirLowerError::new(definition.span, "missing semantic struct"))?;
441 Ok(HirStruct {
442 span: definition.span,
443 name: resolved.name.clone(),
444 fields: resolved
445 .fields
446 .iter()
447 .map(|field| HirField {
448 name: field.name.clone(),
449 ty: field.ty.clone(),
450 })
451 .collect(),
452 })
453 }
454
455 fn lower_global_declaration(
456 &self,
457 declaration: &crate::Declaration,
458 ) -> Result<Vec<HirGlobal>, HirLowerError> {
459 let mut globals = Vec::new();
460 for declarator in &declaration.declarators {
461 let resolved =
462 self.semantic.globals.get(&declarator.name).ok_or_else(|| {
463 HirLowerError::new(declarator.span, "missing semantic global")
464 })?;
465 let initializer = declarator
466 .initializer
467 .as_ref()
468 .map(|initializer| {
469 let mut ctx = FunctionLoweringContext::default();
470 self.lower_expr(initializer, &mut ctx)
471 })
472 .transpose()?;
473 globals.push(HirGlobal {
474 span: declarator.span,
475 name: resolved.name.clone(),
476 ty: resolved.ty.clone(),
477 is_const: resolved.is_const,
478 initializer,
479 });
480 }
481 Ok(globals)
482 }
483
484 fn lower_function(&self, function: &FunctionDecl) -> Result<HirFunction, HirLowerError> {
485 let resolved = self
486 .semantic
487 .functions
488 .get(&function.name)
489 .ok_or_else(|| HirLowerError::new(function.span, "missing semantic function"))?;
490 let mut ctx = FunctionLoweringContext::default();
491 ctx.push_scope();
492 let mut parameters = Vec::new();
493 if true {
match (&resolved.parameters.len(), &function.parameters.len()) {
(left_val, right_val) => {
if !(*left_val == *right_val) {
let kind = ::core::panicking::AssertKind::Eq;
::core::panicking::assert_failed(kind, &*left_val,
&*right_val, ::core::option::Option::None);
}
}
};
};debug_assert_eq!(resolved.parameters.len(), function.parameters.len());
494
495 for (parameter, parsed) in resolved.parameters.iter().zip(&function.parameters) {
496 let local = ctx.push_local(&parsed.name, parameter.ty.clone(), HirLocalKind::Parameter);
497 let default = if let Some(default) = &parsed.default {
498 Some(self.lower_expr(default, &mut ctx)?)
499 } else {
500 parameter.default.as_ref().map(|literal| HirExpr {
501 span: function.span,
502 ty: parameter.ty.clone(),
503 kind: HirExprKind::Literal(literal.clone()),
504 })
505 };
506 parameters.push(HirParameter {
507 local,
508 name: parsed.name.clone(),
509 ty: parameter.ty.clone(),
510 is_optional: parameter.is_optional,
511 default,
512 });
513 }
514 ctx.push_scope();
515
516 let body = function
517 .body
518 .as_ref()
519 .map(|body| self.lower_block(body, &mut ctx, true))
520 .transpose()?;
521
522 Ok(HirFunction {
523 span: function.span,
524 name: resolved.name.clone(),
525 return_type: resolved.return_type.clone(),
526 parameters,
527 locals: ctx.locals,
528 body,
529 is_builtin: resolved.is_builtin,
530 })
531 }
532
533 fn lower_block(
534 &self,
535 block: &BlockStmt,
536 ctx: &mut FunctionLoweringContext,
537 is_function_body: bool,
538 ) -> Result<HirBlock, HirLowerError> {
539 if !is_function_body {
540 ctx.push_scope();
541 }
542
543 let mut statements = Vec::new();
544 for statement in &block.statements {
545 statements.push(self.lower_stmt(statement, ctx)?);
546 }
547
548 if !is_function_body {
549 ctx.pop_scope();
550 }
551
552 Ok(HirBlock {
553 span: block.span,
554 statements,
555 })
556 }
557
558 fn lower_stmt(
559 &self,
560 statement: &Stmt,
561 ctx: &mut FunctionLoweringContext,
562 ) -> Result<HirStmt, HirLowerError> {
563 match statement {
564 Stmt::Block(block) => Ok(HirStmt::Block(Box::new(
565 self.lower_block(block, ctx, false)?,
566 ))),
567 Stmt::Declaration(declaration) => {
568 let ty = lower_decl_type(&declaration.ty, self.semantic)?;
569 let mut declarators = Vec::new();
570 for declarator in &declaration.declarators {
571 let initializer = declarator
572 .initializer
573 .as_ref()
574 .map(|initializer| self.lower_expr(initializer, ctx))
575 .transpose()?;
576 let local = ctx.push_local(&declarator.name, ty.clone(), HirLocalKind::Local);
577 declarators.push(HirDeclarator {
578 local,
579 initializer,
580 });
581 }
582 Ok(HirStmt::Declare(Box::new(HirDeclareStmt {
583 span: declaration.span,
584 ty,
585 declarators,
586 })))
587 }
588 Stmt::Expression(statement) => Ok(HirStmt::Expr(Box::new(
589 self.lower_expr(&statement.expr, ctx)?,
590 ))),
591 Stmt::If(statement) => Ok(HirStmt::If(Box::new(HirIfStmt {
592 span: statement.span,
593 condition: self.lower_expr(&statement.condition, ctx)?,
594 then_branch: Box::new(self.lower_stmt(&statement.then_branch, ctx)?),
595 else_branch: statement
596 .else_branch
597 .as_ref()
598 .map(|branch| self.lower_stmt(branch, ctx).map(Box::new))
599 .transpose()?,
600 }))),
601 Stmt::Switch(statement) => Ok(HirStmt::Switch(Box::new(HirSwitchStmt {
602 span: statement.span,
603 condition: self.lower_expr(&statement.condition, ctx)?,
604 body: Box::new(self.lower_stmt(&statement.body, ctx)?),
605 }))),
606 Stmt::Return(statement) => Ok(HirStmt::Return(Box::new(HirReturnStmt {
607 span: statement.span,
608 value: statement
609 .value
610 .as_ref()
611 .map(|value| self.lower_expr(value, ctx))
612 .transpose()?,
613 }))),
614 Stmt::While(statement) => Ok(HirStmt::While(Box::new(HirWhileStmt {
615 span: statement.span,
616 condition: self.lower_expr(&statement.condition, ctx)?,
617 body: Box::new(self.lower_stmt(&statement.body, ctx)?),
618 }))),
619 Stmt::DoWhile(statement) => Ok(HirStmt::DoWhile(Box::new(HirDoWhileStmt {
620 span: statement.span,
621 body: Box::new(self.lower_stmt(&statement.body, ctx)?),
622 condition: self.lower_expr(&statement.condition, ctx)?,
623 }))),
624 Stmt::For(statement) => Ok(HirStmt::For(Box::new(HirForStmt {
625 span: statement.span,
626 initializer: statement
627 .initializer
628 .as_ref()
629 .map(|expr| self.lower_expr(expr, ctx))
630 .transpose()?,
631 condition: statement
632 .condition
633 .as_ref()
634 .map(|expr| self.lower_expr(expr, ctx))
635 .transpose()?,
636 update: statement
637 .update
638 .as_ref()
639 .map(|expr| self.lower_expr(expr, ctx))
640 .transpose()?,
641 body: Box::new(self.lower_stmt(&statement.body, ctx)?),
642 }))),
643 Stmt::Case(statement) => Ok(HirStmt::Case(Box::new(
644 self.lower_expr(&statement.value, ctx)?,
645 ))),
646 Stmt::Default(statement) => Ok(HirStmt::Default(statement.span)),
647 Stmt::Break(statement) => Ok(HirStmt::Break(statement.span)),
648 Stmt::Continue(statement) => Ok(HirStmt::Continue(statement.span)),
649 Stmt::Empty(statement) => Ok(HirStmt::Empty(statement.span)),
650 }
651 }
652
653 fn lower_expr(
654 &self,
655 expr: &Expr,
656 ctx: &mut FunctionLoweringContext,
657 ) -> Result<HirExpr, HirLowerError> {
658 let lowered = match &expr.kind {
659 ExprKind::Literal(literal) => HirExpr {
660 span: expr.span,
661 ty: semantic_type_from_literal(literal),
662 kind: HirExprKind::Literal(literal.clone()),
663 },
664 ExprKind::Identifier(name) => {
665 if let Some(local) = ctx.lookup_local(name) {
666 HirExpr {
667 span: expr.span,
668 ty: local.ty.clone(),
669 kind: HirExprKind::Value(HirValueRef::Local(local.id)),
670 }
671 } else if let Some(global) = self.semantic.globals.get(name) {
672 HirExpr {
673 span: expr.span,
674 ty: global.ty.clone(),
675 kind: HirExprKind::Value(if global.is_const {
676 HirValueRef::ConstGlobal(name.clone())
677 } else {
678 HirValueRef::Global(name.clone())
679 }),
680 }
681 } else if let Some(ty) = self.builtin_constants.get(name) {
682 HirExpr {
683 span: expr.span,
684 ty: ty.clone(),
685 kind: HirExprKind::Value(HirValueRef::BuiltinConstant(name.clone())),
686 }
687 } else {
688 return Err(HirLowerError::new(
689 expr.span,
690 ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("unresolved value reference {0:?}",
name))
})format!("unresolved value reference {name:?}"),
691 ));
692 }
693 }
694 ExprKind::Call {
695 callee,
696 arguments,
697 } => {
698 let ExprKind::Identifier(name) = &callee.kind else {
699 return Err(HirLowerError::new(
700 callee.span,
701 "HIR lowering only supports direct identifier calls",
702 ));
703 };
704 let function = self.semantic.functions.get(name).ok_or_else(|| {
705 HirLowerError::new(callee.span, "missing semantic call target")
706 })?;
707 HirExpr {
708 span: expr.span,
709 ty: function.return_type.clone(),
710 kind: HirExprKind::Call {
711 target: if function.is_builtin {
712 HirCallTarget::Builtin(name.clone())
713 } else {
714 HirCallTarget::Function(name.clone())
715 },
716 arguments: arguments
717 .iter()
718 .map(|argument| self.lower_expr(argument, ctx))
719 .collect::<Result<Vec<_>, _>>()?,
720 },
721 }
722 }
723 ExprKind::FieldAccess {
724 base,
725 field,
726 } => {
727 let base = self.lower_expr(base, ctx)?;
728 let ty = field_result_type(&base.ty, field, self.semantic, expr.span)?;
729 HirExpr {
730 span: expr.span,
731 ty,
732 kind: HirExprKind::FieldAccess {
733 base: Box::new(base),
734 field: field.clone(),
735 },
736 }
737 }
738 ExprKind::Unary {
739 op,
740 expr: inner,
741 } => {
742 let inner = self.lower_expr(inner, ctx)?;
743 let ty = unary_result_type(*op, &inner.ty, expr.span)?;
744 HirExpr {
745 span: expr.span,
746 ty,
747 kind: HirExprKind::Unary {
748 op: *op,
749 expr: Box::new(inner),
750 },
751 }
752 }
753 ExprKind::Binary {
754 op,
755 left,
756 right,
757 } => {
758 let left = self.lower_expr(left, ctx)?;
759 let right = self.lower_expr(right, ctx)?;
760 let ty = binary_result_type(*op, &left.ty, &right.ty, expr.span)?;
761 HirExpr {
762 span: expr.span,
763 ty,
764 kind: HirExprKind::Binary {
765 op: *op,
766 left: Box::new(left),
767 right: Box::new(right),
768 },
769 }
770 }
771 ExprKind::Conditional {
772 condition,
773 when_true,
774 when_false,
775 } => {
776 let condition = self.lower_expr(condition, ctx)?;
777 let when_true = self.lower_expr(when_true, ctx)?;
778 let when_false = self.lower_expr(when_false, ctx)?;
779 HirExpr {
780 span: expr.span,
781 ty: when_true.ty.clone(),
782 kind: HirExprKind::Conditional {
783 condition: Box::new(condition),
784 when_true: Box::new(when_true),
785 when_false: Box::new(when_false),
786 },
787 }
788 }
789 ExprKind::Assignment {
790 op,
791 left,
792 right,
793 } => {
794 let left = self.lower_expr(left, ctx)?;
795 let right = self.lower_expr(right, ctx)?;
796 HirExpr {
797 span: expr.span,
798 ty: assignment_result_type(*op, &left.ty, &right.ty, expr.span)?,
799 kind: HirExprKind::Assignment {
800 op: *op,
801 left: Box::new(left),
802 right: Box::new(right),
803 },
804 }
805 }
806 };
807
808 Ok(lowered)
809 }
810}
811
812#[derive(#[automatically_derived]
impl ::core::default::Default for FunctionLoweringContext {
#[inline]
fn default() -> FunctionLoweringContext {
FunctionLoweringContext {
locals: ::core::default::Default::default(),
scopes: ::core::default::Default::default(),
}
}
}Default)]
813struct FunctionLoweringContext {
814 locals: Vec<HirLocal>,
815 scopes: Vec<BTreeMap<String, HirLocalBinding>>,
816}
817
818#[derive(#[automatically_derived]
impl ::core::clone::Clone for HirLocalBinding {
#[inline]
fn clone(&self) -> HirLocalBinding {
HirLocalBinding {
id: ::core::clone::Clone::clone(&self.id),
ty: ::core::clone::Clone::clone(&self.ty),
}
}
}Clone)]
819struct HirLocalBinding {
820 id: HirLocalId,
821 ty: SemanticType,
822}
823
824impl FunctionLoweringContext {
825 fn push_scope(&mut self) {
826 self.scopes.push(BTreeMap::new());
827 }
828
829 fn pop_scope(&mut self) {
830 self.scopes.pop();
831 }
832
833 fn push_local(&mut self, name: &str, ty: SemanticType, kind: HirLocalKind) -> HirLocalId {
834 if self.scopes.is_empty() {
835 self.push_scope();
836 }
837
838 let id = HirLocalId(u32::try_from(self.locals.len()).ok().unwrap_or(u32::MAX));
839 self.locals.push(HirLocal {
840 id,
841 name: name.to_string(),
842 ty: ty.clone(),
843 kind,
844 });
845 if let Some(scope) = self.scopes.last_mut() {
846 scope.insert(
847 name.to_string(),
848 HirLocalBinding {
849 id,
850 ty,
851 },
852 );
853 }
854 id
855 }
856
857 fn lookup_local(&self, name: &str) -> Option<&HirLocalBinding> {
858 self.scopes.iter().rev().find_map(|scope| scope.get(name))
859 }
860}
861
862fn lower_decl_type(ty: &TypeSpec, semantic: &SemanticModel) -> Result<SemanticType, HirLowerError> {
863 match &ty.kind {
864 crate::TypeKind::Void => Ok(SemanticType::Void),
865 crate::TypeKind::Int => Ok(SemanticType::Int),
866 crate::TypeKind::Float => Ok(SemanticType::Float),
867 crate::TypeKind::String => Ok(SemanticType::String),
868 crate::TypeKind::Object => Ok(SemanticType::Object),
869 crate::TypeKind::Vector => Ok(SemanticType::Vector),
870 crate::TypeKind::Struct(name) => semantic
871 .structs
872 .contains_key(name)
873 .then(|| SemanticType::Struct(name.clone()))
874 .ok_or_else(|| HirLowerError::new(ty.span, "missing semantic struct type")),
875 crate::TypeKind::EngineStructure(name) => Ok(SemanticType::EngineStructure(name.clone())),
876 }
877}
878
879fn semantic_type_from_literal(literal: &Literal) -> SemanticType {
880 match literal {
881 Literal::Integer(_) | Literal::Magic(crate::MagicLiteral::Line) => SemanticType::Int,
882 Literal::Float(_) => SemanticType::Float,
883 Literal::String(_)
884 | Literal::Magic(
885 crate::MagicLiteral::Function
886 | crate::MagicLiteral::File
887 | crate::MagicLiteral::Date
888 | crate::MagicLiteral::Time,
889 ) => SemanticType::String,
890 Literal::ObjectSelf | Literal::ObjectInvalid => SemanticType::Object,
891 Literal::LocationInvalid => SemanticType::EngineStructure("location".to_string()),
892 Literal::Json(_) => SemanticType::EngineStructure("json".to_string()),
893 Literal::Vector(_) => SemanticType::Vector,
894 }
895}
896
897fn semantic_type_from_builtin_value(value: &BuiltinValue) -> Option<SemanticType> {
898 match value {
899 BuiltinValue::Int(_) => Some(SemanticType::Int),
900 BuiltinValue::Float(_) => Some(SemanticType::Float),
901 BuiltinValue::String(_) => Some(SemanticType::String),
902 BuiltinValue::ObjectId(_) | BuiltinValue::ObjectSelf | BuiltinValue::ObjectInvalid => {
903 Some(SemanticType::Object)
904 }
905 BuiltinValue::LocationInvalid => {
906 Some(SemanticType::EngineStructure("location".to_string()))
907 }
908 BuiltinValue::Json(_) => Some(SemanticType::EngineStructure("json".to_string())),
909 BuiltinValue::Vector(_) => Some(SemanticType::Vector),
910 BuiltinValue::Raw(_) => None,
911 }
912}
913
914fn unary_result_type(
915 op: UnaryOp,
916 operand: &SemanticType,
917 span: crate::Span,
918) -> Result<SemanticType, HirLowerError> {
919 match op {
920 UnaryOp::Negate => match operand {
921 SemanticType::Int | SemanticType::Float => Ok(operand.clone()),
922 _ => Err(HirLowerError::new(
923 span,
924 "negation requires an int or float operand",
925 )),
926 },
927 UnaryOp::OnesComplement
928 | UnaryOp::BooleanNot
929 | UnaryOp::PreIncrement
930 | UnaryOp::PreDecrement
931 | UnaryOp::PostIncrement
932 | UnaryOp::PostDecrement => Ok(SemanticType::Int),
933 }
934}
935
936fn binary_result_type(
937 op: BinaryOp,
938 left: &SemanticType,
939 right: &SemanticType,
940 span: crate::Span,
941) -> Result<SemanticType, HirLowerError> {
942 match op {
943 BinaryOp::LogicalAnd
944 | BinaryOp::LogicalOr
945 | BinaryOp::InclusiveOr
946 | BinaryOp::ExclusiveOr
947 | BinaryOp::BooleanAnd
948 | BinaryOp::ShiftLeft
949 | BinaryOp::ShiftRight
950 | BinaryOp::UnsignedShiftRight
951 | BinaryOp::Modulus
952 if left == &SemanticType::Int && right == &SemanticType::Int =>
953 {
954 Ok(SemanticType::Int)
955 }
956 BinaryOp::EqualEqual | BinaryOp::NotEqual
957 if left == right
958 && #[allow(non_exhaustive_omitted_patterns)] match left {
SemanticType::Int | SemanticType::Float | SemanticType::String |
SemanticType::Object | SemanticType::Vector | SemanticType::Struct(_)
| SemanticType::EngineStructure(_) => true,
_ => false,
}matches!(
959 left,
960 SemanticType::Int
961 | SemanticType::Float
962 | SemanticType::String
963 | SemanticType::Object
964 | SemanticType::Vector
965 | SemanticType::Struct(_)
966 | SemanticType::EngineStructure(_)
967 ) =>
968 {
969 Ok(SemanticType::Int)
970 }
971 BinaryOp::GreaterEqual
972 | BinaryOp::GreaterThan
973 | BinaryOp::LessThan
974 | BinaryOp::LessEqual
975 if #[allow(non_exhaustive_omitted_patterns)] match (left, right) {
(SemanticType::Int, SemanticType::Int) |
(SemanticType::Float, SemanticType::Float) => true,
_ => false,
}matches!(
976 (left, right),
977 (SemanticType::Int, SemanticType::Int) | (SemanticType::Float, SemanticType::Float)
978 ) =>
979 {
980 Ok(SemanticType::Int)
981 }
982 BinaryOp::Add | BinaryOp::Subtract | BinaryOp::Multiply | BinaryOp::Divide => {
983 match (left, right) {
984 (SemanticType::Int, SemanticType::Int) => Ok(SemanticType::Int),
985 (SemanticType::Float, SemanticType::Int | SemanticType::Float)
986 | (SemanticType::Int, SemanticType::Float) => Ok(SemanticType::Float),
987 (SemanticType::String, SemanticType::String) if op == BinaryOp::Add => {
988 Ok(SemanticType::String)
989 }
990 (SemanticType::Vector, SemanticType::Vector)
991 if #[allow(non_exhaustive_omitted_patterns)] match op {
BinaryOp::Add | BinaryOp::Subtract => true,
_ => false,
}matches!(op, BinaryOp::Add | BinaryOp::Subtract) =>
992 {
993 Ok(SemanticType::Vector)
994 }
995 (SemanticType::Vector, SemanticType::Float)
996 if #[allow(non_exhaustive_omitted_patterns)] match op {
BinaryOp::Multiply | BinaryOp::Divide => true,
_ => false,
}matches!(op, BinaryOp::Multiply | BinaryOp::Divide) =>
997 {
998 Ok(SemanticType::Vector)
999 }
1000 (SemanticType::Float, SemanticType::Vector) if op == BinaryOp::Multiply => {
1001 Ok(SemanticType::Vector)
1002 }
1003 _ => Err(HirLowerError::new(
1004 span,
1005 ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("cannot lower binary operation {0:?} for {1:?} and {2:?}",
op, left, right))
})format!("cannot lower binary operation {op:?} for {left:?} and {right:?}"),
1006 )),
1007 }
1008 }
1009 _ => Err(HirLowerError::new(
1010 span,
1011 ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("cannot lower binary operation {0:?} for {1:?} and {2:?}",
op, left, right))
})format!("cannot lower binary operation {op:?} for {left:?} and {right:?}"),
1012 )),
1013 }
1014}
1015
1016fn assignment_result_type(
1017 op: AssignmentOp,
1018 left: &SemanticType,
1019 right: &SemanticType,
1020 span: crate::Span,
1021) -> Result<SemanticType, HirLowerError> {
1022 match op {
1023 AssignmentOp::Assign => Ok(left.clone()),
1024 AssignmentOp::AssignMinus => binary_result_type(BinaryOp::Subtract, left, right, span),
1025 AssignmentOp::AssignPlus => binary_result_type(BinaryOp::Add, left, right, span),
1026 AssignmentOp::AssignMultiply => binary_result_type(BinaryOp::Multiply, left, right, span),
1027 AssignmentOp::AssignDivide => binary_result_type(BinaryOp::Divide, left, right, span),
1028 AssignmentOp::AssignModulus => binary_result_type(BinaryOp::Modulus, left, right, span),
1029 AssignmentOp::AssignAnd => binary_result_type(BinaryOp::BooleanAnd, left, right, span),
1030 AssignmentOp::AssignXor => binary_result_type(BinaryOp::ExclusiveOr, left, right, span),
1031 AssignmentOp::AssignOr => binary_result_type(BinaryOp::InclusiveOr, left, right, span),
1032 AssignmentOp::AssignShiftLeft => binary_result_type(BinaryOp::ShiftLeft, left, right, span),
1033 AssignmentOp::AssignShiftRight => {
1034 binary_result_type(BinaryOp::ShiftRight, left, right, span)
1035 }
1036 AssignmentOp::AssignUnsignedShiftRight => {
1037 binary_result_type(BinaryOp::UnsignedShiftRight, left, right, span)
1038 }
1039 }
1040}
1041
1042fn field_result_type(
1043 base: &SemanticType,
1044 field: &str,
1045 semantic: &SemanticModel,
1046 span: crate::Span,
1047) -> Result<SemanticType, HirLowerError> {
1048 match base {
1049 SemanticType::Vector => match field {
1050 "x" | "y" | "z" => Ok(SemanticType::Float),
1051 _ => Err(HirLowerError::new(
1052 span,
1053 ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("field {0:?} does not exist on vector",
field))
})format!("field {field:?} does not exist on vector"),
1054 )),
1055 },
1056 SemanticType::Struct(name) => semantic
1057 .structs
1058 .get(name)
1059 .and_then(|structure| {
1060 structure
1061 .fields
1062 .iter()
1063 .find(|candidate| candidate.name == field)
1064 .map(|candidate| candidate.ty.clone())
1065 })
1066 .ok_or_else(|| {
1067 HirLowerError::new(
1068 span,
1069 ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("field {0:?} does not exist on structure {1:?}",
field, name))
})format!("field {field:?} does not exist on structure {name:?}"),
1070 )
1071 }),
1072 _ => Err(HirLowerError::new(
1073 span,
1074 "left side of field access must be a structure",
1075 )),
1076 }
1077}
1078
1079#[cfg(test)]
1080mod tests {
1081 use super::{HirCallTarget, HirExprKind, HirLocalKind, HirStmt, HirValueRef, lower_to_hir};
1082 use crate::{
1083 BuiltinConstant, BuiltinFunction, BuiltinParameter, BuiltinType, BuiltinValue, LangSpec,
1084 SourceId, analyze_script, parse_text,
1085 };
1086
1087 fn test_langspec() -> LangSpec {
1088 LangSpec {
1089 engine_num_structures: 3,
1090 engine_structures: vec![
1091 "effect".to_string(),
1092 "location".to_string(),
1093 "json".to_string(),
1094 ],
1095 constants: vec![
1096 BuiltinConstant {
1097 name: "TRUE".to_string(),
1098 ty: BuiltinType::Int,
1099 value: BuiltinValue::Int(1),
1100 },
1101 BuiltinConstant {
1102 name: "OBJECT_INVALID".to_string(),
1103 ty: BuiltinType::Object,
1104 value: BuiltinValue::ObjectInvalid,
1105 },
1106 ],
1107 functions: vec![BuiltinFunction {
1108 name: "DelayCommand".to_string(),
1109 return_type: BuiltinType::Void,
1110 parameters: vec![
1111 BuiltinParameter {
1112 name: "fSeconds".to_string(),
1113 ty: BuiltinType::Float,
1114 default: None,
1115 },
1116 BuiltinParameter {
1117 name: "aAction".to_string(),
1118 ty: BuiltinType::Action,
1119 default: None,
1120 },
1121 ],
1122 }],
1123 }
1124 }
1125
1126 #[test]
1127 fn lowers_globals_and_locals_to_resolved_value_refs() -> Result<(), Box<dyn std::error::Error>>
1128 {
1129 let script = parse_text(
1130 SourceId::new(70),
1131 r#"
1132 int g = TRUE;
1133 void main() {
1134 int x = g;
1135 int y = x;
1136 }
1137 "#,
1138 Some(&test_langspec()),
1139 )?;
1140 let semantic = analyze_script(&script, Some(&test_langspec()))?;
1141 let hir = lower_to_hir(&script, &semantic, Some(&test_langspec()))?;
1142
1143 assert_eq!(hir.globals.len(), 1);
1144 match hir
1145 .globals
1146 .first()
1147 .and_then(|global| global.initializer.as_ref())
1148 {
1149 Some(initializer) => {
1150 assert_eq!(
1151 initializer.kind,
1152 HirExprKind::Value(HirValueRef::BuiltinConstant("TRUE".to_string()))
1153 );
1154 }
1155 None => return Err(std::io::Error::other("expected global initializer").into()),
1156 }
1157
1158 let main = hir
1159 .functions
1160 .iter()
1161 .find(|function| function.name == "main")
1162 .ok_or_else(|| std::io::Error::other("main should be lowered"))?;
1163 assert_eq!(main.locals.len(), 2);
1164 assert_eq!(
1165 main.locals.first().map(|local| local.kind),
1166 Some(HirLocalKind::Local)
1167 );
1168 assert_eq!(
1169 main.locals.get(1).map(|local| local.kind),
1170 Some(HirLocalKind::Local)
1171 );
1172
1173 let body = main
1174 .body
1175 .as_ref()
1176 .ok_or_else(|| std::io::Error::other("main should have a body"))?;
1177
1178 match body.statements.first() {
1179 Some(HirStmt::Declare(statement)) => match statement
1180 .declarators
1181 .first()
1182 .and_then(|declarator| declarator.initializer.as_ref())
1183 {
1184 Some(initializer) => {
1185 assert_eq!(
1186 initializer.kind,
1187 HirExprKind::Value(HirValueRef::Global("g".to_string()))
1188 );
1189 }
1190 None => return Err(std::io::Error::other("expected local initializer").into()),
1191 },
1192 other => {
1193 return Err(
1194 std::io::Error::other(format!("expected declaration, got {other:?}")).into(),
1195 );
1196 }
1197 }
1198
1199 match body.statements.get(1) {
1200 Some(HirStmt::Declare(statement)) => match statement
1201 .declarators
1202 .first()
1203 .and_then(|declarator| declarator.initializer.as_ref())
1204 {
1205 Some(initializer) => {
1206 let first_local = main
1207 .locals
1208 .first()
1209 .ok_or_else(|| std::io::Error::other("missing first local"))?;
1210 assert_eq!(
1211 initializer.kind,
1212 HirExprKind::Value(HirValueRef::Local(first_local.id))
1213 );
1214 }
1215 None => return Err(std::io::Error::other("expected local initializer").into()),
1216 },
1217 other => {
1218 return Err(
1219 std::io::Error::other(format!("expected declaration, got {other:?}")).into(),
1220 );
1221 }
1222 }
1223 Ok(())
1224 }
1225
1226 #[test]
1227 fn lowers_builtin_and_user_calls_to_explicit_targets() -> Result<(), Box<dyn std::error::Error>>
1228 {
1229 let script = parse_text(
1230 SourceId::new(71),
1231 r#"
1232 void helper() {}
1233 void main() {
1234 helper();
1235 DelayCommand(1.0, helper());
1236 }
1237 "#,
1238 Some(&test_langspec()),
1239 )?;
1240 let semantic = analyze_script(&script, Some(&test_langspec()))?;
1241 let hir = lower_to_hir(&script, &semantic, Some(&test_langspec()))?;
1242
1243 let main = hir
1244 .functions
1245 .iter()
1246 .find(|function| function.name == "main")
1247 .ok_or_else(|| std::io::Error::other("main should be lowered"))?;
1248 let body = main
1249 .body
1250 .as_ref()
1251 .ok_or_else(|| std::io::Error::other("main should have a body"))?;
1252
1253 match body.statements.first() {
1254 Some(HirStmt::Expr(expr)) => match &expr.kind {
1255 HirExprKind::Call {
1256 target, ..
1257 } => {
1258 assert_eq!(target, &HirCallTarget::Function("helper".to_string()));
1259 }
1260 other => {
1261 return Err(std::io::Error::other(format!(
1262 "expected direct call, got {other:?}"
1263 ))
1264 .into());
1265 }
1266 },
1267 other => {
1268 return Err(std::io::Error::other(format!(
1269 "expected expression statement, got {other:?}"
1270 ))
1271 .into());
1272 }
1273 }
1274
1275 match body.statements.get(1) {
1276 Some(HirStmt::Expr(expr)) => match &expr.kind {
1277 HirExprKind::Call {
1278 target,
1279 arguments,
1280 } => {
1281 assert_eq!(target, &HirCallTarget::Builtin("DelayCommand".to_string()));
1282 assert_eq!(arguments.len(), 2);
1283 }
1284 other => {
1285 return Err(std::io::Error::other(format!(
1286 "expected builtin call, got {other:?}"
1287 ))
1288 .into());
1289 }
1290 },
1291 other => {
1292 return Err(std::io::Error::other(format!(
1293 "expected expression statement, got {other:?}"
1294 ))
1295 .into());
1296 }
1297 }
1298 Ok(())
1299 }
1300
1301 #[test]
1302 fn lowers_function_body_locals_that_shadow_parameter_names()
1303 -> Result<(), Box<dyn std::error::Error>> {
1304 let script = parse_text(
1305 SourceId::new(72),
1306 r#"
1307 int helper(object oSpellTarget) {
1308 object oSpellTarget = OBJECT_SELF;
1309 return TRUE;
1310 }
1311 void main() {}
1312 "#,
1313 Some(&test_langspec()),
1314 )?;
1315 let semantic = analyze_script(&script, Some(&test_langspec()))?;
1316 let hir = lower_to_hir(&script, &semantic, Some(&test_langspec()))?;
1317
1318 let helper = hir
1319 .functions
1320 .iter()
1321 .find(|function| function.name == "helper")
1322 .ok_or_else(|| std::io::Error::other("helper should be lowered"))?;
1323 assert_eq!(helper.locals.len(), 2);
1324 assert_eq!(
1325 helper.locals.first().map(|local| local.kind),
1326 Some(HirLocalKind::Parameter)
1327 );
1328 assert_eq!(
1329 helper.locals.get(1).map(|local| local.kind),
1330 Some(HirLocalKind::Local)
1331 );
1332 Ok(())
1333 }
1334}