From 5cd18f220a42d3d4072566b6e0424c5edf692860 Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Sun, 3 Mar 2019 00:37:16 +0100 Subject: Parse builtins --- dhall/src/parser.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'dhall/src/parser.rs') diff --git a/dhall/src/parser.rs b/dhall/src/parser.rs index 40272e0..7a4919e 100644 --- a/dhall/src/parser.rs +++ b/dhall/src/parser.rs @@ -3,7 +3,7 @@ use lalrpop_util; use crate::grammar; use crate::grammar_util::{BoxExpr, ParsedExpr}; use crate::lexer::{Lexer, LexicalError, Tok}; -use crate::core::{bx, Expr, V}; +use crate::core::{bx, Expr, Builtin, V}; pub type ParseError<'i> = lalrpop_util::ParseError, LexicalError>; @@ -127,7 +127,14 @@ fn parse_expression(pair: Pair) -> BoxExpr { Rule::identifier_raw => parse!(pair; (name: str, idx?: natural) => { - bx(Expr::Var(V(name, idx.unwrap_or(0)))) + match Builtin::parse(name) { + Some(b) => bx(Expr::Builtin(b)), + None => match name { + "True" => bx(Expr::BoolLit(true)), + "False" => bx(Expr::BoolLit(false)), + name => bx(Expr::Var(V(name, idx.unwrap_or(0)))), + } + } }), Rule::ifthenelse_expression => -- cgit v1.2.3