Impl ShortenedRecord desugaring

This commit is contained in:
Shunsuke Shibayama 2022-09-02 14:40:01 +09:00
parent 4557690347
commit d2ed277685
6 changed files with 281 additions and 29 deletions

View file

@ -264,7 +264,14 @@ impl Evaluator {
Some(ValueObj::Array(RcArray::from(elems)))
}
fn eval_const_record(&self, record: &NormalRecord, ctx: &Context) -> Option<ValueObj> {
fn eval_const_record(&self, record: &Record, ctx: &Context) -> Option<ValueObj> {
match record {
Record::Normal(rec) => self.eval_const_normal_record(rec, ctx),
Record::Shortened(_rec) => unreachable!(), // should be desugared
}
}
fn eval_const_normal_record(&self, record: &NormalRecord, ctx: &Context) -> Option<ValueObj> {
let mut attrs = vec![];
for attr in record.attrs.iter() {
if let Some(elem) = self.eval_const_block(&attr.body.block, ctx) {

View file

@ -217,7 +217,15 @@ impl ASTLowerer {
Ok(hir::NormalTuple::new(hir::Args::from(new_tuple)))
}
fn lower_record(&mut self, record: ast::NormalRecord) -> LowerResult<hir::Record> {
fn lower_record(&mut self, record: ast::Record) -> LowerResult<hir::Record> {
log!(info "entered {}({record})", fn_name!());
match record {
ast::Record::Normal(rec) => self.lower_normal_record(rec),
ast::Record::Shortened(_rec) => unreachable!(), // should be desugared
}
}
fn lower_normal_record(&mut self, record: ast::NormalRecord) -> LowerResult<hir::Record> {
log!(info "entered {}({record})", fn_name!());
let mut hir_record =
hir::Record::new(record.l_brace, record.r_brace, hir::RecordAttrs::new());