place and value expression conversion in ast
This commit is contained in:
parent
1a20acd763
commit
028c74753e
|
@ -86,6 +86,8 @@ pub enum Tag {
|
||||||
AddressOf,
|
AddressOf,
|
||||||
Not,
|
Not,
|
||||||
Negate,
|
Negate,
|
||||||
|
PlaceToValueConversion,
|
||||||
|
ValueToPlaceConversion,
|
||||||
/// data is two indices for `lhs` and `rhs`
|
/// data is two indices for `lhs` and `rhs`
|
||||||
Or,
|
Or,
|
||||||
And,
|
And,
|
||||||
|
@ -370,6 +372,8 @@ impl From<(Tag, Data)> for ExpandedData {
|
||||||
| Tag::AddressOf
|
| Tag::AddressOf
|
||||||
| Tag::Not
|
| Tag::Not
|
||||||
| Tag::Negate
|
| Tag::Negate
|
||||||
|
| Tag::PlaceToValueConversion
|
||||||
|
| Tag::ValueToPlaceConversion
|
||||||
| Tag::ExprStmt => Self::from_index(data),
|
| Tag::ExprStmt => Self::from_index(data),
|
||||||
Tag::FieldAccess
|
Tag::FieldAccess
|
||||||
| Tag::DeclRefUnresolved
|
| Tag::DeclRefUnresolved
|
||||||
|
@ -1370,7 +1374,9 @@ impl Ast {
|
||||||
// TODO: find out of the expression is const, volatile for flags
|
// TODO: find out of the expression is const, volatile for flags
|
||||||
ip.try_get_pointer_type(ty, None).unwrap()
|
ip.try_get_pointer_type(ty, None).unwrap()
|
||||||
}
|
}
|
||||||
Tag::Not | Tag::Negate => self.get_type_of_node(ip, cache, data.as_index()),
|
Tag::ValueToPlaceConversion | Tag::PlaceToValueConversion | Tag::Not | Tag::Negate => {
|
||||||
|
self.get_type_of_node(ip, cache, data.as_index())
|
||||||
|
}
|
||||||
Tag::Or
|
Tag::Or
|
||||||
| Tag::And
|
| Tag::And
|
||||||
| Tag::BitOr
|
| Tag::BitOr
|
||||||
|
@ -1494,7 +1500,12 @@ impl Ast {
|
||||||
let (a, _) = data.as_index_intern();
|
let (a, _) = data.as_index_intern();
|
||||||
vec![a]
|
vec![a]
|
||||||
}
|
}
|
||||||
Tag::Deref | Tag::AddressOf | Tag::Not | Tag::Negate => {
|
Tag::ValueToPlaceConversion
|
||||||
|
| Tag::PlaceToValueConversion
|
||||||
|
| Tag::Deref
|
||||||
|
| Tag::AddressOf
|
||||||
|
| Tag::Not
|
||||||
|
| Tag::Negate => {
|
||||||
let a = data.as_index();
|
let a = data.as_index();
|
||||||
vec![a]
|
vec![a]
|
||||||
}
|
}
|
||||||
|
@ -4471,10 +4482,6 @@ pub trait AstVisitorTrait {
|
||||||
_ = (ast, idx);
|
_ = (ast, idx);
|
||||||
Err(Self::UNIMPL)
|
Err(Self::UNIMPL)
|
||||||
}
|
}
|
||||||
fn visit_return_expr(&mut self, ast: &mut Ast, idx: Index) -> Result<Self::Value, Self::Error> {
|
|
||||||
_ = (ast, idx);
|
|
||||||
Err(Self::UNIMPL)
|
|
||||||
}
|
|
||||||
fn visit_global_decl(&mut self, ast: &mut Ast, idx: Index) -> Result<Self::Value, Self::Error> {
|
fn visit_global_decl(&mut self, ast: &mut Ast, idx: Index) -> Result<Self::Value, Self::Error> {
|
||||||
_ = (ast, idx);
|
_ = (ast, idx);
|
||||||
Err(Self::UNIMPL)
|
Err(Self::UNIMPL)
|
||||||
|
@ -5501,6 +5508,8 @@ pub mod irgen {
|
||||||
Tag::IfElseExpr => todo!(),
|
Tag::IfElseExpr => todo!(),
|
||||||
Tag::Error => todo!(),
|
Tag::Error => todo!(),
|
||||||
Tag::Undefined => todo!(),
|
Tag::Undefined => todo!(),
|
||||||
|
Tag::PlaceToValueConversion => todo!(),
|
||||||
|
Tag::ValueToPlaceConversion => todo!(),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|ast, scopes, i, tag, data| {
|
|ast, scopes, i, tag, data| {
|
||||||
|
@ -5569,6 +5578,8 @@ pub mod irgen {
|
||||||
Tag::IfElseExpr => todo!(),
|
Tag::IfElseExpr => todo!(),
|
||||||
Tag::Error => todo!(),
|
Tag::Error => todo!(),
|
||||||
Tag::Undefined => todo!(),
|
Tag::Undefined => todo!(),
|
||||||
|
Tag::PlaceToValueConversion => todo!(),
|
||||||
|
Tag::ValueToPlaceConversion => todo!(),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in a new issue