Skip to content

Commit 281aab3

Browse files
committed
Merge remote-tracking branch 'origin/bladyjoker/frontend' into bladyjoker/compiler-class-check
2 parents 885c586 + 030b423 commit 281aab3

File tree

9 files changed

+1212
-32
lines changed

9 files changed

+1212
-32
lines changed

flake.nix

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@
9696
import-location = ./lambda-buffers-frontend/build.nix;
9797
additional = {
9898
lambda-buffers-compiler = ./lambda-buffers-compiler;
99-
lambda-buffers-compiler-cli = compilerFlake.packages."lambda-buffers-compiler:exe:lambda-buffers-compiler-cli";
99+
lambda-buffers-compiler-cli = compilerFlake.packages."lambda-buffers-compiler:exe:lbc";
100100
};
101101
};
102102
frontendFlake = flakeAbstraction frontendBuild;

lambda-buffers-compiler/lambda-buffers-compiler.cabal

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,7 @@ library
128128

129129
hs-source-dirs: src
130130

131-
-- NOTE(cstml): should we name this something shorter? lb-cli?
132-
executable lambda-buffers-compiler-cli
131+
executable lbc
133132
import: common-language
134133
import: common-imports
135134
main-is: Main.hs
@@ -154,7 +153,6 @@ test-suite tests
154153
, containers >=0.6
155154
, lambda-buffers-compiler
156155
, lambda-buffers-compiler-pb >=0.1
157-
, mtl >=2.2
158156
, proto-lens >=0.7
159157
, QuickCheck >=2.14
160158
, tasty >=1.4

lambda-buffers-compiler/test/Test/LambdaBuffers/Compiler/Gen.hs

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
11
module Test.LambdaBuffers.Compiler.Gen (genCompilerInput) where
22

33
import Control.Lens ((&), (.~), (^.))
4-
import Control.Monad.Reader (replicateM)
4+
import Data.Foldable (Foldable (toList))
55
import Data.List qualified as List
6+
import Data.List.NonEmpty (NonEmpty ((:|)))
67
import Data.ProtoLens (Message (defMessage))
78
import Data.Text (Text)
89
import Data.Text qualified as Text
910
import Data.Traversable (for)
10-
import Proto.Compiler (ClassName, CompilerInput, ConstrName, Kind'KindRef (Kind'KIND_REF_TYPE), Module, ModuleName, ModuleNamePart, Sum, Sum'Constructor, Ty, TyAbs, TyArg, TyBody, TyDef, TyName, VarName)
11-
import Proto.Compiler_Fields (argKind, argName, constrName, constructors, fields, kindRef, moduleName, modules, name, ntuple, parts, tyAbs, tyArgs, tyBody, tyName, tyVar, typeDefs, varName)
11+
import Proto.Compiler (ClassName, CompilerInput, ConstrName, Kind'KindRef (Kind'KIND_REF_TYPE), Module, ModuleName, ModuleNamePart, Sum, Sum'Constructor, Ty, TyAbs, TyArg, TyBody, TyDef, TyName, TyRef, VarName)
12+
import Proto.Compiler_Fields (argKind, argName, constrName, constructors, fields, kindRef, moduleName, modules, name, ntuple, parts, tyAbs, tyArgs, tyBody, tyName, tyRef, tyVar, typeDefs, varName)
1213
import Proto.Compiler_Fields qualified as P
1314
import Test.QuickCheck qualified as QC (Gen, chooseEnum, chooseInt, elements, oneof, vectorOf)
1415

1516
vecOf :: forall {a}. QC.Gen a -> Int -> QC.Gen [a]
16-
vecOf g n = replicateM n g
17+
vecOf = flip QC.vectorOf
1718

1819
limit :: Int
19-
limit = 10
20+
limit = 4
2021

2122
-- | Names
2223
genAlphaNum :: QC.Gen Char
@@ -73,27 +74,44 @@ genSum args = do
7374
return $ defMessage & constructors .~ ctors
7475

7576
-- TODO(bladyjoker): Add TyRef, TyApp etc.
76-
genTy :: [TyArg] -> QC.Gen Ty
77-
genTy args = do
78-
ar <- QC.elements args
77+
genTy :: [TyRef] -> [TyArg] -> QC.Gen Ty
78+
genTy (r : refs) (a : args) = QC.oneof [genTyVar (a :| args), genTyRef (r :| refs)]
79+
genTy [] (a : args) = QC.oneof [genTyVar (a :| args)]
80+
genTy (r : refs) [] = QC.oneof [genTyRef (r :| refs)]
81+
genTy _ _ = error "TODO(bladyjoker): Not yet implemented"
82+
83+
genTyRef :: NonEmpty TyRef -> QC.Gen Ty
84+
genTyRef refs = do
85+
r <- QC.elements (toList refs)
86+
return $ defMessage & tyRef .~ r
87+
88+
genTyVar :: NonEmpty TyArg -> QC.Gen Ty
89+
genTyVar args = do
90+
ar <- QC.elements (toList args)
7991
return $ defMessage & tyVar . varName .~ (ar ^. argName)
8092

8193
genConstructor :: [TyArg] -> ConstrName -> QC.Gen Sum'Constructor
8294
genConstructor args cn = do
83-
tys <- QC.chooseInt (1, limit) >>= vecOf (genTy args)
95+
tys <- QC.chooseInt (1, limit) >>= vecOf (genTy mempty args)
8496
return $
8597
defMessage
8698
& constrName .~ cn
8799
& P.product . ntuple . fields .~ tys
88100

89-
-- TODO(bladyjoker): Add Opaque.
90101
genTyBody :: [TyArg] -> QC.Gen TyBody
91-
genTyBody args = do
102+
genTyBody args = QC.oneof [genTyBodyOpaque, genTyBodySum args]
103+
104+
genTyBodySum :: [TyArg] -> QC.Gen TyBody
105+
genTyBodySum args = do
92106
b <- genSum args
93107
return $ defMessage & P.sum .~ b
94108

109+
genTyBodyOpaque :: QC.Gen TyBody
110+
genTyBodyOpaque = return $ defMessage & P.opaque .~ defMessage
111+
95112
genTyAbs :: QC.Gen TyAbs
96113
genTyAbs = do
114+
-- TODO(bladyjoker): Allow empty args
97115
vns <- QC.chooseInt (1, limit) >>= vecOf genVarName
98116
args <- for (List.nub vns) genTyArg
99117
body <- genTyBody args

lambda-buffers-frontend/lambda-buffers-frontend.cabal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ library
110110
LambdaBuffers.Frontend.Syntax
111111
LambdaBuffers.Frontend.ToProto
112112

113-
executable lambda-buffers-frontend-cli
113+
executable lbf
114114
import: common-language
115115
build-depends:
116116
, base >=4.16

lambda-buffers-frontend/resources/good/Test.lbf

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ sum Either a b = Left a | Right b
1717

1818
sum List a = Nil | List a (List a)
1919

20-
opaque Int a
20+
opaque Int
21+
2122
opaque Bytes
2223

2324
sum Foo a = MkFoo

0 commit comments

Comments
 (0)