Skip to content

Commit

Permalink
use bytes
Browse files Browse the repository at this point in the history
  • Loading branch information
janmasrovira committed Feb 14, 2025
1 parent 583cd89 commit 00ee4d4
Show file tree
Hide file tree
Showing 21 changed files with 84 additions and 78 deletions.
4 changes: 2 additions & 2 deletions src/Juvix/Compiler/Builtins/Anoma.hs
Original file line number Diff line number Diff line change
Expand Up @@ -234,8 +234,8 @@ checkAnomaRandomGeneratorInit f = do
unless (f ^. axiomType === (nat_ --> gen)) $
builtinsErrorText l "initRandomGenerator must be of type Nat -> AnomaRandomGenerator"

checkAnomaRandomNextBits :: (Members '[Reader BuiltinsTable, Error ScoperError] r) => AxiomDef -> Sem r ()
checkAnomaRandomNextBits f = do
checkAnomaRandomNextBytes :: (Members '[Reader BuiltinsTable, Error ScoperError] r) => AxiomDef -> Sem r ()
checkAnomaRandomNextBytes f = do
let l = getLoc f
gen <- getBuiltinNameScoper l BuiltinAnomaRandomGenerator
nat_ <- getBuiltinNameScoper l BuiltinNat
Expand Down
10 changes: 5 additions & 5 deletions src/Juvix/Compiler/Concrete/Data/Builtins.hs
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,7 @@ data BuiltinAxiom
| BuiltinAnomaProveDelta
| BuiltinAnomaRandomGenerator
| BuiltinAnomaRandomGeneratorInit
| BuiltinAnomaRandomNextBits
| BuiltinAnomaRandomNextBytes
| BuiltinAnomaRandomSplit
| BuiltinAnomaIsCommitment
| BuiltinAnomaIsNullifier
Expand Down Expand Up @@ -345,7 +345,7 @@ instance HasNameKind BuiltinAxiom where
BuiltinAnomaProveDelta -> KNameFunction
BuiltinAnomaRandomGenerator -> KNameInductive
BuiltinAnomaRandomGeneratorInit -> KNameFunction
BuiltinAnomaRandomNextBits -> KNameFunction
BuiltinAnomaRandomNextBytes -> KNameFunction
BuiltinAnomaRandomSplit -> KNameFunction
BuiltinAnomaIsCommitment -> KNameFunction
BuiltinAnomaIsNullifier -> KNameFunction
Expand All @@ -360,8 +360,8 @@ instance HasNameKind BuiltinAxiom where
BuiltinByteArrayFromListByte -> KNameFunction
BuiltinByteArrayLength -> KNameFunction
BuiltinAnomaSet -> KNameInductive
BuiltinAnomaSetToList -> KNameInductive
BuiltinAnomaSetFromList -> KNameInductive
BuiltinAnomaSetToList -> KNameFunction
BuiltinAnomaSetFromList -> KNameFunction
getNameKindPretty :: BuiltinAxiom -> NameKind
getNameKindPretty = getNameKind

Expand Down Expand Up @@ -421,7 +421,7 @@ instance Pretty BuiltinAxiom where
BuiltinAnomaProveAction -> Str.anomaProveAction
BuiltinAnomaRandomGenerator -> Str.anomaRandomGenerator
BuiltinAnomaRandomGeneratorInit -> Str.anomaRandomGeneratorInit
BuiltinAnomaRandomNextBits -> Str.anomaRandomNextBits
BuiltinAnomaRandomNextBytes -> Str.anomaRandomNextBytes
BuiltinAnomaRandomSplit -> Str.anomaRandomSplit
BuiltinAnomaIsCommitment -> Str.anomaIsCommitment
BuiltinAnomaIsNullifier -> Str.anomaIsNullifier
Expand Down
2 changes: 1 addition & 1 deletion src/Juvix/Compiler/Core/Evaluator.hs
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ geval opts herr tab env0 = eval' env0
OpAnomaAddDelta -> normalizeOrUnsupported opcode
OpAnomaSubDelta -> normalizeOrUnsupported opcode
OpAnomaRandomGeneratorInit -> normalizeOrUnsupported opcode
OpAnomaRandomNextBits -> normalizeOrUnsupported opcode
OpAnomaRandomNextBytes -> normalizeOrUnsupported opcode
OpAnomaRandomSplit -> normalizeOrUnsupported opcode
OpAnomaIsCommitment -> normalizeOrUnsupported opcode
OpAnomaIsNullifier -> normalizeOrUnsupported opcode
Expand Down
4 changes: 2 additions & 2 deletions src/Juvix/Compiler/Core/Extra/Utils.hs
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ isDebugOp = \case
OpAnomaAddDelta -> False
OpAnomaSubDelta -> False
OpAnomaRandomGeneratorInit -> False
OpAnomaRandomNextBits -> False
OpAnomaRandomNextBytes -> False
OpAnomaRandomSplit -> False
OpAnomaIsCommitment -> False
OpAnomaIsNullifier -> False
Expand Down Expand Up @@ -536,7 +536,7 @@ builtinOpArgTypes = \case
OpAnomaAddDelta -> [mkDynamic', mkDynamic']
OpAnomaSubDelta -> [mkDynamic', mkDynamic']
OpAnomaRandomGeneratorInit -> [mkTypeInteger']
OpAnomaRandomNextBits -> [mkTypeInteger', mkTypeRandomGenerator']
OpAnomaRandomNextBytes -> [mkTypeInteger', mkTypeRandomGenerator']
OpAnomaRandomSplit -> [mkTypeRandomGenerator']
OpAnomaIsCommitment -> [mkTypeInteger']
OpAnomaIsNullifier -> [mkTypeInteger']
Expand Down
2 changes: 1 addition & 1 deletion src/Juvix/Compiler/Core/Keywords.hs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import Juvix.Data.Keyword.All
kwAnomaProveAction,
kwAnomaProveDelta,
kwAnomaRandomGeneratorInit,
kwAnomaRandomNextBits,
kwAnomaRandomNextBytes,
kwAnomaRandomSplit,
kwAnomaResourceCommitment,
kwAnomaResourceDelta,
Expand Down
8 changes: 4 additions & 4 deletions src/Juvix/Compiler/Core/Language/Builtins.hs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ data BuiltinOp
| OpAnomaAddDelta
| OpAnomaSubDelta
| OpAnomaRandomGeneratorInit
| OpAnomaRandomNextBits
| OpAnomaRandomNextBytes
| OpAnomaRandomSplit
| OpAnomaIsCommitment
| OpAnomaIsNullifier
Expand Down Expand Up @@ -144,7 +144,7 @@ builtinOpArgsNum = \case
OpAnomaAddDelta -> 2
OpAnomaSubDelta -> 2
OpAnomaRandomGeneratorInit -> 1
OpAnomaRandomNextBits -> 2
OpAnomaRandomNextBytes -> 2
OpAnomaRandomSplit -> 1
OpAnomaIsCommitment -> 1
OpAnomaIsNullifier -> 1
Expand Down Expand Up @@ -213,7 +213,7 @@ builtinIsFoldable = \case
OpAnomaSubDelta -> False
OpAnomaSha256 -> False
OpAnomaRandomGeneratorInit -> False
OpAnomaRandomNextBits -> False
OpAnomaRandomNextBytes -> False
OpAnomaRandomSplit -> False
OpAnomaIsCommitment -> False
OpAnomaIsNullifier -> False
Expand Down Expand Up @@ -257,7 +257,7 @@ builtinsAnoma =
OpAnomaAddDelta,
OpAnomaSubDelta,
OpAnomaRandomGeneratorInit,
OpAnomaRandomNextBits,
OpAnomaRandomNextBytes,
OpAnomaRandomSplit,
OpAnomaSetToList,
OpAnomaSetFromList
Expand Down
6 changes: 3 additions & 3 deletions src/Juvix/Compiler/Core/Pretty/Base.hs
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ instance PrettyCode BuiltinOp where
OpAnomaAddDelta -> return primAddDelta
OpAnomaSubDelta -> return primSubDelta
OpAnomaRandomGeneratorInit -> return primRandomGeneratorInit
OpAnomaRandomNextBits -> return primRandomNextBits
OpAnomaRandomNextBytes -> return primRandomNextBytes
OpAnomaRandomSplit -> return primRandomSplit
OpAnomaIsCommitment -> return primIsCommitment
OpAnomaIsNullifier -> return primIsNullifier
Expand Down Expand Up @@ -1003,8 +1003,8 @@ primSubDelta = primitive Str.anomaSubDelta
primRandomGeneratorInit :: Doc Ann
primRandomGeneratorInit = primitive Str.anomaRandomGeneratorInit

primRandomNextBits :: Doc Ann
primRandomNextBits = primitive Str.anomaRandomNextBits
primRandomNextBytes :: Doc Ann
primRandomNextBytes = primitive Str.anomaRandomNextBytes

primRandomSplit :: Doc Ann
primRandomSplit = primitive Str.anomaRandomSplit
Expand Down
2 changes: 1 addition & 1 deletion src/Juvix/Compiler/Core/Transformation/ComputeTypeInfo.hs
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ computeNodeTypeInfo md = umapL go
OpAnomaAddDelta -> mkDynamic'
OpAnomaSubDelta -> mkDynamic'
OpAnomaRandomGeneratorInit -> mkTypeRandomGenerator'
OpAnomaRandomNextBits -> mkDynamic'
OpAnomaRandomNextBytes -> mkDynamic'
OpAnomaRandomSplit -> mkDynamic'
OpAnomaIsCommitment -> mkTypeBool'
OpAnomaIsNullifier -> mkTypeBool'
Expand Down
23 changes: 11 additions & 12 deletions src/Juvix/Compiler/Core/Translation/FromInternal.hs
Original file line number Diff line number Diff line change
Expand Up @@ -693,7 +693,7 @@ builtinInductive a =
Internal.BuiltinAnomaSubDelta -> Nothing
Internal.BuiltinAnomaRandomGenerator -> Just (registerInductiveAxiom (Just BuiltinAnomaRandomGenerator) [])
Internal.BuiltinAnomaRandomGeneratorInit -> Nothing
Internal.BuiltinAnomaRandomNextBits -> Nothing
Internal.BuiltinAnomaRandomNextBytes -> Nothing
Internal.BuiltinAnomaRandomSplit -> Nothing
Internal.BuiltinAnomaIsCommitment -> Nothing
Internal.BuiltinAnomaIsNullifier -> Nothing
Expand Down Expand Up @@ -1008,14 +1008,14 @@ goAxiomDef a = maybe goAxiomNotBuiltin builtinBody (a ^. Internal.axiomBuiltin)
natType
(mkBuiltinApp' OpAnomaRandomGeneratorInit [mkVar' 0])
)
Internal.BuiltinAnomaRandomNextBits -> do
Internal.BuiltinAnomaRandomNextBytes -> do
natType <- getNatType
registerAxiomDef
( mkLambda'
natType
( mkLambda'
mkDynamic'
(mkBuiltinApp' OpAnomaRandomNextBits [mkVar' 1, mkVar' 0])
(mkBuiltinApp' OpAnomaRandomNextBytes [mkVar' 1, mkVar' 0])
)
)
Internal.BuiltinAnomaRandomSplit -> do
Expand Down Expand Up @@ -1454,15 +1454,14 @@ goApplication a = do
Just Internal.BuiltinIOSequence -> do
ioSym <- getIOSymbol
as <- exprArgs
case as of
return $ case as of
(arg1 : arg2 : xs) ->
return $
mkApps'
( mkConstr'
(BuiltinTag TagBind)
[arg1, mkLambda' (mkTypeConstr (setInfoName Str.io mempty) ioSym []) (shift 1 arg2)]
)
xs
mkApps'
( mkConstr'
(BuiltinTag TagBind)
[arg1, mkLambda' (mkTypeConstr (setInfoName Str.io mempty) ioSym []) (shift 1 arg2)]
)
xs
_ -> error "internal to core: >> must be called with 2 arguments"
Just Internal.BuiltinIOReadline -> app
Just Internal.BuiltinStringConcat -> app
Expand Down Expand Up @@ -1510,7 +1509,7 @@ goApplication a = do
Just Internal.BuiltinAnomaProveDelta -> app
Just Internal.BuiltinAnomaRandomGenerator -> app
Just Internal.BuiltinAnomaRandomGeneratorInit -> app
Just Internal.BuiltinAnomaRandomNextBits -> app
Just Internal.BuiltinAnomaRandomNextBytes -> app
Just Internal.BuiltinAnomaRandomSplit -> app
Just Internal.BuiltinAnomaIsCommitment -> app
Just Internal.BuiltinAnomaIsNullifier -> app
Expand Down
2 changes: 1 addition & 1 deletion src/Juvix/Compiler/Core/Translation/FromSource.hs
Original file line number Diff line number Diff line change
Expand Up @@ -607,7 +607,7 @@ builtinAppExpr varsNum vars = do
<|> (kw kwAnomaAddDelta $> OpAnomaAddDelta)
<|> (kw kwAnomaSubDelta $> OpAnomaSubDelta)
<|> (kw kwAnomaRandomGeneratorInit $> OpAnomaRandomGeneratorInit)
<|> (kw kwAnomaRandomNextBits $> OpAnomaRandomNextBits)
<|> (kw kwAnomaRandomNextBytes $> OpAnomaRandomNextBytes)
<|> (kw kwAnomaRandomSplit $> OpAnomaRandomSplit)
<|> (kw kwAnomaIsCommitment $> OpAnomaIsCommitment)
<|> (kw kwAnomaIsNullifier $> OpAnomaIsNullifier)
Expand Down
2 changes: 1 addition & 1 deletion src/Juvix/Compiler/Core/Translation/Stripped/FromCore.hs
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ fromCore fsize tab =
BuiltinAnomaProveDelta -> False
BuiltinAnomaRandomGenerator -> False
BuiltinAnomaRandomGeneratorInit -> False
BuiltinAnomaRandomNextBits -> False
BuiltinAnomaRandomNextBytes -> False
BuiltinAnomaRandomSplit -> False
BuiltinAnomaIsCommitment -> False
BuiltinAnomaIsNullifier -> False
Expand Down
2 changes: 1 addition & 1 deletion src/Juvix/Compiler/Internal/Translation/FromConcrete.hs
Original file line number Diff line number Diff line change
Expand Up @@ -1145,7 +1145,7 @@ checkBuiltinAxiom d b = localBuiltins $ case b of
BuiltinAnomaProveAction -> checkProveAction d
BuiltinAnomaRandomGenerator -> checkAnomaRandomGenerator d
BuiltinAnomaRandomGeneratorInit -> checkAnomaRandomGeneratorInit d
BuiltinAnomaRandomNextBits -> checkAnomaRandomNextBits d
BuiltinAnomaRandomNextBytes -> checkAnomaRandomNextBytes d
BuiltinAnomaRandomSplit -> checkAnomaRandomSplit d
BuiltinAnomaIsCommitment -> checkAnomaIsCommitment d
BuiltinAnomaIsNullifier -> checkAnomaIsNullifier d
Expand Down
60 changes: 35 additions & 25 deletions src/Juvix/Compiler/Nockma/Translation/FromTree.hs
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,13 @@ withTemp value f = do
body' <- local (over compilerStackHeight (+ 1)) $ f (TempRef stackHeight)
return $ OpPush # value # body'

withTempM ::
(Member (Reader CompilerCtx) r) =>
Sem r (Term Natural) ->
(TempRef -> Sem r (Term Natural)) ->
Sem r (Term Natural)
withTempM valueM f = valueM >>= (`withTemp` f)

-- | Pushes a temporary value onto the subject stack, associates the resulting
-- stack reference with the next JuvixTree temporary variable, and continues
-- compilation.
Expand Down Expand Up @@ -560,7 +567,7 @@ compile = \case
Tree.OpAnomaAddDelta -> callRm RmDeltaAdd args
Tree.OpAnomaSubDelta -> callRm RmDeltaSub args
Tree.OpAnomaRandomGeneratorInit -> callStdlib StdlibRandomInitGen args
Tree.OpAnomaRandomNextBits -> goAnomaRandomNextBits args
Tree.OpAnomaRandomNextBytes -> goAnomaRandomNextBytes args
Tree.OpAnomaRandomSplit -> callStdlib StdlibRandomSplit args
Tree.OpAnomaIsCommitment -> callRm RmIsCommitment args
Tree.OpAnomaIsNullifier -> callRm RmIsNullifier args
Expand Down Expand Up @@ -697,36 +704,39 @@ compile = \case
sha256HashLength :: Integer
sha256HashLength = 32

goAnomaRandomNextBits :: [Term Natural] -> Sem r (Term Natural)
goAnomaRandomNextBits args = case args of
goAnomaRandomNextBytes :: [Term Natural] -> Sem r (Term Natural)
goAnomaRandomNextBytes args = case args of
[n, g] -> do
withTemp (n # g) $ \argsRef -> do
argRefAddress <- tempRefPath argsRef
next <-
callStdlib
StdlibRandomNextBits
[ opAddress "args-g" (argRefAddress ++ [R]),
opAddress "numbits" (argRefAddress ++ [L])
]
withTemp next $ \nextRef -> do
argRefAddress'' <- tempRefPath argsRef
numBytes <-
callStdlib
StdlibDiv
[ opAddress "args-n" (argRefAddress'' ++ [L]),
withTempM
( callStdlib
StdlibMul
[ opAddress "args-n" (argRefAddress ++ [L]),
nockNatLiteral 8
]
withTemp numBytes $ \numBytesRef -> do
numBytesRefAddress' <- tempRefPath numBytesRef
nextRefPath <- tempRefPath nextRef
return
( mkPair
( mkByteArray
(opAddress "args-n" numBytesRefAddress')
(opAddress "nextbytes-result-fst" (nextRefPath ++ [L]))
)
(opAddress "nextBytes-result-snd" (nextRefPath ++ [R]))
)
$ \numBitsRef -> do
argRefAddress' <- tempRefPath argsRef
numBits <- tempRefPath numBitsRef
withTempM
( callStdlib
StdlibRandomNextBits
[ opAddress "args-g" numBits,
opAddress "numbits" (argRefAddress' ++ [L])
]
)
$ \nextRef -> do
argRefAddress'' <- tempRefPath argsRef
nextRefPath <- tempRefPath nextRef
return
( mkPair
( mkByteArray
(opAddress "args-n" (argRefAddress'' ++ [L]))
(opAddress "nextbytes-result-fst" (nextRefPath ++ [L]))
)
(opAddress "nextBytes-result-snd" (nextRefPath ++ [R]))
)
_ -> impossible

-- Conceptually this function is:
Expand Down
2 changes: 1 addition & 1 deletion src/Juvix/Compiler/Tree/Keywords.hs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import Juvix.Data.Keyword.All
kwAnomaProveAction,
kwAnomaProveDelta,
kwAnomaRandomGeneratorInit,
kwAnomaRandomNextBits,
kwAnomaRandomNextBytes,
kwAnomaRandomSplit,
kwAnomaResourceCommitment,
kwAnomaResourceDelta,
Expand Down
4 changes: 2 additions & 2 deletions src/Juvix/Compiler/Tree/Language/Builtins.hs
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,8 @@ data AnomaOp
OpAnomaSubDelta
| -- | Initialize a pseudorandom number generator
OpAnomaRandomGeneratorInit
| -- | Generate the n random bytes using the pseudorandom number generator
OpAnomaRandomNextBits
| -- | Generate n random bytes using the pseudorandom number generator
OpAnomaRandomNextBytes
| -- | Split a pseudorandom number generator into two uncorrelated generators
OpAnomaRandomSplit
| -- | Returns true if its argument is a commitment
Expand Down
2 changes: 1 addition & 1 deletion src/Juvix/Compiler/Tree/Pretty/Base.hs
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@ instance PrettyCode AnomaOp where
OpAnomaAddDelta -> Str.anomaAddDelta
OpAnomaSubDelta -> Str.anomaSubDelta
OpAnomaRandomGeneratorInit -> Str.anomaRandomGeneratorInit
OpAnomaRandomNextBits -> Str.anomaRandomNextBits
OpAnomaRandomNextBytes -> Str.anomaRandomNextBytes
OpAnomaRandomSplit -> Str.anomaRandomSplit
OpAnomaIsCommitment -> Str.anomaIsCommitment
OpAnomaIsNullifier -> Str.anomaIsNullifier
Expand Down
2 changes: 1 addition & 1 deletion src/Juvix/Compiler/Tree/Translation/FromCore.hs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ toTreeOp = \case
Core.OpAnomaAddDelta -> TreeAnomaOp OpAnomaAddDelta
Core.OpAnomaSubDelta -> TreeAnomaOp OpAnomaSubDelta
Core.OpAnomaRandomGeneratorInit -> TreeAnomaOp OpAnomaRandomGeneratorInit
Core.OpAnomaRandomNextBits -> TreeAnomaOp OpAnomaRandomNextBits
Core.OpAnomaRandomNextBytes -> TreeAnomaOp OpAnomaRandomNextBytes
Core.OpAnomaRandomSplit -> TreeAnomaOp OpAnomaRandomSplit
Core.OpAnomaIsCommitment -> TreeAnomaOp OpAnomaIsCommitment
Core.OpAnomaIsNullifier -> TreeAnomaOp OpAnomaIsNullifier
Expand Down
2 changes: 1 addition & 1 deletion src/Juvix/Compiler/Tree/Translation/FromSource.hs
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ parseAnoma =
<|> parseAnoma' kwAnomaAddDelta OpAnomaAddDelta
<|> parseAnoma' kwAnomaSubDelta OpAnomaSubDelta
<|> parseAnoma' kwAnomaRandomGeneratorInit OpAnomaRandomGeneratorInit
<|> parseAnoma' kwAnomaRandomNextBits OpAnomaRandomNextBits
<|> parseAnoma' kwAnomaRandomNextBytes OpAnomaRandomNextBytes
<|> parseAnoma' kwAnomaRandomSplit OpAnomaRandomSplit
<|> parseAnoma' kwAnomaIsCommitment OpAnomaIsCommitment
<|> parseAnoma' kwAnomaIsNullifier OpAnomaIsNullifier
Expand Down
4 changes: 2 additions & 2 deletions src/Juvix/Data/Keyword/All.hs
Original file line number Diff line number Diff line change
Expand Up @@ -568,8 +568,8 @@ kwAnomaSubDelta = asciiKw Str.anomaSubDelta
kwAnomaRandomGeneratorInit :: Keyword
kwAnomaRandomGeneratorInit = asciiKw Str.anomaRandomGeneratorInit

kwAnomaRandomNextBits :: Keyword
kwAnomaRandomNextBits = asciiKw Str.anomaRandomNextBits
kwAnomaRandomNextBytes :: Keyword
kwAnomaRandomNextBytes = asciiKw Str.anomaRandomNextBytes

kwAnomaRandomSplit :: Keyword
kwAnomaRandomSplit = asciiKw Str.anomaRandomSplit
Expand Down
4 changes: 2 additions & 2 deletions src/Juvix/Extra/Strings.hs
Original file line number Diff line number Diff line change
Expand Up @@ -440,8 +440,8 @@ anomaRandomGenerator = "anoma-random-generator"
anomaRandomGeneratorInit :: (IsString s) => s
anomaRandomGeneratorInit = "anoma-random-generator-init"

anomaRandomNextBits :: (IsString s) => s
anomaRandomNextBits = "anoma-random-next-bits"
anomaRandomNextBytes :: (IsString s) => s
anomaRandomNextBytes = "anoma-random-next-bytes"

anomaRandomSplit :: (IsString s) => s
anomaRandomSplit = "anoma-random-generator-split"
Expand Down
Loading

0 comments on commit 00ee4d4

Please sign in to comment.