diff options
-rw-r--r-- | third_party/nixpkgs-exposed/exposed/default.nix | 1 | ||||
-rw-r--r-- | users/glittershark/achilles/default.nix | 21 | ||||
-rw-r--r-- | users/glittershark/achilles/src/main.rs | 3 | ||||
-rw-r--r-- | users/glittershark/achilles/src/parser/expr.rs | 13 | ||||
-rw-r--r-- | users/glittershark/achilles/src/tc/mod.rs | 4 |
5 files changed, 32 insertions, 10 deletions
diff --git a/third_party/nixpkgs-exposed/exposed/default.nix b/third_party/nixpkgs-exposed/exposed/default.nix index 35fd0d21c38c..c8e58d5fc576 100644 --- a/third_party/nixpkgs-exposed/exposed/default.nix +++ b/third_party/nixpkgs-exposed/exposed/default.nix @@ -79,6 +79,7 @@ kontemplate lib libredirect + libffi linuxPackages linuxPackages_5_11 luajit diff --git a/users/glittershark/achilles/default.nix b/users/glittershark/achilles/default.nix index 4a72bac2bac9..8ce6fda5c1c7 100644 --- a/users/glittershark/achilles/default.nix +++ b/users/glittershark/achilles/default.nix @@ -1,3 +1,20 @@ -# TODO(glittershark): Write the actual default.nix +{ pkgs, ... }: -_: "nothing to see yet" +pkgs.naersk.buildPackage { + src = ./.; + + buildInputs = with pkgs; [ + clang_11 + llvmPackages.llvm + llvmPackages.bintools + llvmPackages.clang + llvmPackages.libclang.lib + zlib + ncurses + libxml2 + libffi + pkgconfig + ]; + + doCheck = true; +} diff --git a/users/glittershark/achilles/src/main.rs b/users/glittershark/achilles/src/main.rs index 4ba0aaf33e91..d5b00d6b6c46 100644 --- a/users/glittershark/achilles/src/main.rs +++ b/users/glittershark/achilles/src/main.rs @@ -1,6 +1,3 @@ -#![feature(str_split_once)] -#![feature(or_insert_with_key)] - use clap::Clap; pub mod ast; diff --git a/users/glittershark/achilles/src/parser/expr.rs b/users/glittershark/achilles/src/parser/expr.rs index 12c55df02b80..99c8018fd00c 100644 --- a/users/glittershark/achilles/src/parser/expr.rs +++ b/users/glittershark/achilles/src/parser/expr.rs @@ -165,9 +165,16 @@ named!(bool_(&str) -> Literal, alt!( )); fn string_internal(i: &str) -> nom::IResult<&str, Cow<'_, str>, nom::error::Error<&str>> { - let (s, rem) = i - .split_once('"') - .ok_or_else(|| nom::Err::Error(nom::error::Error::new(i, nom::error::ErrorKind::Tag)))?; + // TODO(grfn): use String::split_once when that's stable + let (s, rem) = if let Some(pos) = i.find('"') { + (&i[..pos], &i[(pos + 1)..]) + } else { + return Err(nom::Err::Error(nom::error::Error::new( + i, + nom::error::ErrorKind::Tag, + ))); + }; + Ok((rem, Cow::Borrowed(s))) } diff --git a/users/glittershark/achilles/src/tc/mod.rs b/users/glittershark/achilles/src/tc/mod.rs index 559ac993cc9b..52c18e6d5329 100644 --- a/users/glittershark/achilles/src/tc/mod.rs +++ b/users/glittershark/achilles/src/tc/mod.rs @@ -358,9 +358,9 @@ impl<'ast> Typechecker<'ast> { let mut universalize_type = move |ty| match ty { Type::Exist(tv) if self.resolve_tv(tv).is_none() => vars .entry(tv) - .or_insert_with_key(|tv| { + .or_insert_with(|| { let ty = self.fresh_univ(); - self.ctx.insert(*tv, ty.clone()); + self.ctx.insert(tv, ty.clone()); ty }) .clone(), |