From 5b137e0983051bf72759cea9c4af1c4bc7a24e1f Mon Sep 17 00:00:00 2001
From: David Li
Date: Mon, 6 Nov 2017 09:26:23 -0500
Subject: Type check record definitions
---
src/ast.rs | 4 ++--
src/semantic/translate.rs | 15 +++++++--------
src/taiga.lalrpop | 6 +++---
3 files changed, 12 insertions(+), 13 deletions(-)
diff --git a/src/ast.rs b/src/ast.rs
index 3cc68c1..744397a 100644
--- a/src/ast.rs
+++ b/src/ast.rs
@@ -86,11 +86,11 @@ pub enum Expression {
#[derive(Debug)]
pub struct RecordField {
pub name: WithLocation,
- pub ty: WithLocation,
+ pub ty: WithLocation,
}
impl RecordField {
- pub fn new(name: WithLocation, ty: WithLocation) -> RecordField {
+ pub fn new(name: WithLocation, ty: WithLocation) -> RecordField {
RecordField { name, ty }
}
}
diff --git a/src/semantic/translate.rs b/src/semantic/translate.rs
index 6c7f60c..dfcec68 100644
--- a/src/semantic/translate.rs
+++ b/src/semantic/translate.rs
@@ -43,14 +43,13 @@ fn trans_ty<'a>(
trans_ty(venv, tenv, &inner_ty)
},
ast::Ty::Record(ref fields) => {
- err!(ty, TypeError::Unimplemented)
- // let result = vec![];
- // for field in fields {
- // result.push(types::RecordField::new(
- // *field.name,
- // trans_ty(venv, tenv, field.ty)?));
- // }
- // Ok(Ty::Record(result))
+ let mut result = vec![];
+ for field in fields {
+ result.push(types::RecordField::new(
+ field.name.clone(),
+ trans_ty(venv, tenv, &field.ty)?));
+ }
+ Ok(Ty::Record(result))
},
}
}
diff --git a/src/taiga.lalrpop b/src/taiga.lalrpop
index 0c7fea0..bad60bb 100644
--- a/src/taiga.lalrpop
+++ b/src/taiga.lalrpop
@@ -8,13 +8,13 @@ pub Program: ast::Program = {
};
FieldList: Vec> = {
- ":" "," => {
+ ":" "," => {
let mut rest = rest;
rest.push(WithLocation::new(ast::RecordField::new(n, v), l, r));
rest
},
- ":" "," => vec![WithLocation::new(ast::RecordField::new(n, v), l, r)],
- ":" => vec![WithLocation::new(ast::RecordField::new(n, v), l, r)],
+ ":" "," => vec![WithLocation::new(ast::RecordField::new(n, v), l, r)],
+ ":" => vec![WithLocation::new(ast::RecordField::new(n, v), l, r)],
};
RecordFields: WithLocation>> = {
--
cgit v1.2.3