From cc03ada4e713f145f2eb1bbf0f131a4c5746cf74 Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Sat, 3 Aug 2019 22:55:51 +0200 Subject: Inline headers --- dhall/build.rs | 8 ++++++++ dhall/src/phase/binary.rs | 29 ++++++++++++++--------------- dhall/src/phase/resolve.rs | 6 ++++++ dhall/src/phase/typecheck.rs | 1 + 4 files changed, 29 insertions(+), 15 deletions(-) (limited to 'dhall') diff --git a/dhall/build.rs b/dhall/build.rs index 3f09d47..5a99def 100644 --- a/dhall/build.rs +++ b/dhall/build.rs @@ -87,6 +87,9 @@ fn main() -> std::io::Result<()> { |path| { // Too slow in debug mode path == "success/largeExpression" + // TODO: Inline headers are not implemented + || path == "success/unit/import/parenthesizeUsing" + || path == "success/unit/import/inlineUsing" }, )?; @@ -100,6 +103,8 @@ fn main() -> std::io::Result<()> { path.starts_with("failure/") // Too slow in debug mode || path == "success/largeExpression" + // TODO: Inline headers are not implemented + || path == "success/unit/import/inlineUsing" }, )?; @@ -118,6 +123,9 @@ fn main() -> std::io::Result<()> { || path == "success/multilet" // See https://github.com/pyfisch/cbor/issues/109 || path == "success/double" + // TODO: Inline headers are not implemented + || path == "success/unit/import/parenthesizeUsing" + || path == "success/unit/import/inlineUsing" }, )?; diff --git a/dhall/src/phase/binary.rs b/dhall/src/phase/binary.rs index 1812131..874b4fb 100644 --- a/dhall/src/phase/binary.rs +++ b/dhall/src/phase/binary.rs @@ -216,18 +216,19 @@ fn cbor_value_to_dhall( }; let headers = match rest.next() { Some(Null) => None, - Some(x) => { - match cbor_value_to_dhall(&x)?.as_ref() { - Embed(import) => Some(Box::new( - import.location_hashed.clone(), - )), - _ => Err(DecodeError::WrongFormatError( - "import/remote/headers".to_owned(), - ))?, - } - } + // TODO + // Some(x) => { + // match cbor_value_to_dhall(&x)?.as_ref() { + // Embed(import) => Some(Box::new( + // import.location_hashed.clone(), + // )), + // _ => Err(DecodeError::WrongFormatError( + // "import/remote/headers".to_owned(), + // ))?, + // } + // } _ => Err(DecodeError::WrongFormatError( - "import/remote/headers".to_owned(), + "import/remote/headers is unimplemented".to_owned(), ))?, }; let authority = match rest.next() { @@ -378,7 +379,6 @@ enum Serialize<'a> { CBOR(cbor::Value), RecordMap(&'a DupTreeMap), UnionMap(&'a DupTreeMap>), - Import(&'a Import), } macro_rules! count { @@ -566,10 +566,10 @@ where match &url.headers { None => ser_seq.serialize_element(&Null)?, Some(location_hashed) => ser_seq.serialize_element( - &self::Serialize::Import(&Import { + &self::Serialize::Expr(&SubExpr::from_expr_no_note(ExprF::Embed(Import { mode: ImportMode::Code, location_hashed: location_hashed.as_ref().clone(), - }), + }))), )?, }; ser_seq.serialize_element(&url.authority)?; @@ -617,7 +617,6 @@ impl<'a> serde::ser::Serialize for Serialize<'a> { (cbor::Value::String(k.into()), v) })) } - Serialize::Import(import) => serialize_import(ser, import), } } } diff --git a/dhall/src/phase/resolve.rs b/dhall/src/phase/resolve.rs index c4d7e5f..8c561a3 100644 --- a/dhall/src/phase/resolve.rs +++ b/dhall/src/phase/resolve.rs @@ -122,12 +122,18 @@ mod spec_tests { // import_success!(success_alternativeEnvNatural, "alternativeEnvNatural"); // import_success!(success_alternativeEnvSimple, "alternativeEnvSimple"); + // import_success!(success_alternativeHashMismatch, "alternativeHashMismatch"); // import_success!(success_alternativeNatural, "alternativeNatural"); + // import_success!(success_alternativeParseError, "alternativeParseError"); // import_success!(success_asText, "asText"); + // import_success!(success_customHeaders, "customHeaders"); import_success!(success_fieldOrder, "fieldOrder"); + // import_success!(success_headerForwarding, "headerForwarding"); + // import_success!(success_noHeaderForwarding, "noHeaderForwarding"); // import_failure!(failure_alternativeEnv, "alternativeEnv"); // import_failure!(failure_alternativeEnvMissing, "alternativeEnvMissing"); // import_failure!(failure_cycle, "cycle"); + // import_failure!(failure_hashMismatch, "hashMismatch"); // import_failure!(failure_missing, "missing"); // import_failure!(failure_referentiallyInsane, "referentiallyInsane"); } diff --git a/dhall/src/phase/typecheck.rs b/dhall/src/phase/typecheck.rs index a3f676c..efdc2bb 100644 --- a/dhall/src/phase/typecheck.rs +++ b/dhall/src/phase/typecheck.rs @@ -1167,6 +1167,7 @@ mod spec_tests { // tc_failure!(tc_failure_importBoundary, "importBoundary"); tc_failure!(tc_failure_mixedUnions, "mixedUnions"); tc_failure!(tc_failure_preferMixedRecords, "preferMixedRecords"); + // tc_failure!(tc_failure_customHeadersUsingBoundVariable, "customHeadersUsingBoundVariable"); tc_failure!(tc_failure_unit_FunctionApplicationArgumentNotMatch, "unit/FunctionApplicationArgumentNotMatch"); tc_failure!(tc_failure_unit_FunctionApplicationIsNotFunction, "unit/FunctionApplicationIsNotFunction"); tc_failure!(tc_failure_unit_FunctionArgumentTypeNotAType, "unit/FunctionArgumentTypeNotAType"); -- cgit v1.2.3