Rename TypeAnno to TypeName everywhere
This commit is contained in:
parent
40a82d7e25
commit
40696b3cbd
@ -403,7 +403,6 @@ pub enum Statement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type ParamName = Rc<String>;
|
type ParamName = Rc<String>;
|
||||||
type TypeName = Rc<String>; //TODO change TypeName to TypeAnno everywhere
|
|
||||||
type TraitName = Rc<String>;
|
type TraitName = Rc<String>;
|
||||||
type FormalParamList = Vec<(ParamName, Option<TypeName>)>;
|
type FormalParamList = Vec<(ParamName, Option<TypeName>)>;
|
||||||
|
|
||||||
@ -433,19 +432,19 @@ pub struct TypeBody(pub Vec<Variant>);
|
|||||||
#[derive(Debug, PartialEq, Clone)]
|
#[derive(Debug, PartialEq, Clone)]
|
||||||
pub enum Variant {
|
pub enum Variant {
|
||||||
UnitStruct(Rc<String>),
|
UnitStruct(Rc<String>),
|
||||||
TupleStruct(Rc<String>, Vec<TypeAnno>),
|
TupleStruct(Rc<String>, Vec<TypeName>),
|
||||||
Record(Rc<String>, Vec<(Rc<String>, TypeAnno)>),
|
Record(Rc<String>, Vec<(Rc<String>, TypeName)>),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Clone)]
|
#[derive(Debug, PartialEq, Clone)]
|
||||||
pub struct Expression(pub ExpressionType, pub Option<TypeAnno>);
|
pub struct Expression(pub ExpressionType, pub Option<TypeName>);
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Clone)]
|
#[derive(Debug, PartialEq, Clone)]
|
||||||
pub enum TypeAnno {
|
pub enum TypeName {
|
||||||
Tuple(Vec<TypeAnno>),
|
Tuple(Vec<TypeName>),
|
||||||
Singleton {
|
Singleton {
|
||||||
name: Rc<String>,
|
name: Rc<String>,
|
||||||
params: Vec<TypeAnno>,
|
params: Vec<TypeName>,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -636,7 +635,7 @@ impl Parser {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
parse_method!(typed_identifier(&mut self) -> ParseResult<(Rc<String>, TypeAnno)> {
|
parse_method!(typed_identifier(&mut self) -> ParseResult<(Rc<String>, TypeName)> {
|
||||||
let identifier = self.identifier()?;
|
let identifier = self.identifier()?;
|
||||||
expect!(self, Colon, "':'");
|
expect!(self, Colon, "':'");
|
||||||
let type_name = self.type_name()?;
|
let type_name = self.type_name()?;
|
||||||
@ -679,10 +678,10 @@ impl Parser {
|
|||||||
|
|
||||||
parse_method!(impl_declaration(&mut self) -> ParseResult<Declaration> {
|
parse_method!(impl_declaration(&mut self) -> ParseResult<Declaration> {
|
||||||
expect!(self, Keyword(Impl), "'impl'");
|
expect!(self, Keyword(Impl), "'impl'");
|
||||||
let first = self.identifier()?;
|
let first = self.type_name()?;
|
||||||
let second = if let Keyword(For) = self.peek() {
|
let second = if let Keyword(For) = self.peek() {
|
||||||
self.next();
|
self.next();
|
||||||
Some(self.identifier()?)
|
Some(self.type_name()?)
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
@ -690,7 +689,13 @@ impl Parser {
|
|||||||
let block = self.decl_block()?;
|
let block = self.decl_block()?;
|
||||||
|
|
||||||
let result = match (first, second) {
|
let result = match (first, second) {
|
||||||
(first, Some(second)) => Declaration::Impl { type_name: second, trait_name: Some(first), block },
|
(first, Some(second)) => {
|
||||||
|
match first {
|
||||||
|
TypeName::Singleton { ref name, ref params } if params.len() == 0 =>
|
||||||
|
Declaration::Impl { type_name: second, trait_name: Some(name.clone()), block },
|
||||||
|
_ => return ParseError::new(&format!("Invalid name for a trait")),
|
||||||
|
}
|
||||||
|
},
|
||||||
(first, None) => Declaration::Impl { type_name: first, trait_name: None, block }
|
(first, None) => Declaration::Impl { type_name: first, trait_name: None, block }
|
||||||
};
|
};
|
||||||
Ok(result)
|
Ok(result)
|
||||||
@ -713,15 +718,16 @@ impl Parser {
|
|||||||
Ok(expr_body)
|
Ok(expr_body)
|
||||||
});
|
});
|
||||||
|
|
||||||
parse_method!(type_anno(&mut self) -> ParseResult<TypeAnno> {
|
parse_method!(type_anno(&mut self) -> ParseResult<TypeName> {
|
||||||
expect!(self, Colon, "':'");
|
expect!(self, Colon, "':'");
|
||||||
self.type_name()
|
self.type_name()
|
||||||
});
|
});
|
||||||
|
|
||||||
parse_method!(type_name(&mut self) -> ParseResult<TypeAnno> {
|
parse_method!(type_name(&mut self) -> ParseResult<TypeName> {
|
||||||
|
use self::TypeName::*;
|
||||||
Ok(match self.peek() {
|
Ok(match self.peek() {
|
||||||
LParen => TypeAnno::Tuple(delimited!(self, LParen, '(', type_name, Comma, RParen, ')')),
|
LParen => Tuple(delimited!(self, LParen, '(', type_name, Comma, RParen, ')')),
|
||||||
_ => TypeAnno::Singleton {
|
_ => Singleton {
|
||||||
name: self.identifier()?,
|
name: self.identifier()?,
|
||||||
params: match self.peek() {
|
params: match self.peek() {
|
||||||
LAngleBracket => delimited!(self, LAngleBracket, '<', type_name, Comma, RAngleBracket, '>'),
|
LAngleBracket => delimited!(self, LAngleBracket, '<', type_name, Comma, RAngleBracket, '>'),
|
||||||
@ -988,7 +994,7 @@ mod parse_tests {
|
|||||||
use super::{AST, Expression, Statement, Operation, TypeBody, Variant, parse, tokenize};
|
use super::{AST, Expression, Statement, Operation, TypeBody, Variant, parse, tokenize};
|
||||||
use super::Statement::*;
|
use super::Statement::*;
|
||||||
use super::Declaration::*;
|
use super::Declaration::*;
|
||||||
use super::TypeAnno::*;
|
use super::TypeName::*;
|
||||||
use super::ExpressionType::*;
|
use super::ExpressionType::*;
|
||||||
use super::Variant::*;
|
use super::Variant::*;
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
|
||||||
use schala_lang::parsing::{AST, Statement, Declaration, Expression, ExpressionType, Operation, TypeAnno};
|
use schala_lang::parsing::{AST, Statement, Declaration, Expression, ExpressionType, Operation, TypeName};
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Eq, Hash)]
|
#[derive(Debug, PartialEq, Eq, Hash)]
|
||||||
struct PathSpecifier {
|
struct PathSpecifier {
|
||||||
@ -103,7 +103,7 @@ impl TypeContext {
|
|||||||
match (&expr.0, &expr.1) {
|
match (&expr.0, &expr.1) {
|
||||||
(&IntLiteral(_), &Some(ref t)) => {
|
(&IntLiteral(_), &Some(ref t)) => {
|
||||||
match t {
|
match t {
|
||||||
&TypeAnno::Singleton { ref name, ref params } if **name == "Int" && params.len() == 0 => (),
|
&TypeName::Singleton { ref name, ref params } if **name == "Int" && params.len() == 0 => (),
|
||||||
t => return Err(format!("Bad type {:?} for int literal", t)),
|
t => return Err(format!("Bad type {:?} for int literal", t)),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user