mirror of
https://github.com/unisonweb/unison.git
synced 2024-10-03 21:28:01 +03:00
Split off unison-runtime package
This commit is contained in:
parent
b6e12d086c
commit
2fa330b92e
5
hie.yaml
5
hie.yaml
@ -98,6 +98,11 @@ cradle:
|
||||
|
||||
- path: "parser-typechecker/tests"
|
||||
component: "unison-parser-typechecker:test:parser-typechecker-tests"
|
||||
- path: "unison-runtime/src"
|
||||
component: "unison-runtime:lib"
|
||||
|
||||
- path: "unison-runtime/tests"
|
||||
component: "unison-runtime:test:runtime-tests"
|
||||
|
||||
- path: "unison-cli/src"
|
||||
component: "unison-cli:lib"
|
||||
|
@ -8,15 +8,10 @@ flags:
|
||||
optimized:
|
||||
manual: true
|
||||
default: true
|
||||
arraychecks:
|
||||
manual: true
|
||||
default: false
|
||||
|
||||
when:
|
||||
- condition: flag(optimized)
|
||||
ghc-options: -funbox-strict-fields -O2
|
||||
- condition: flag(arraychecks)
|
||||
cpp-options: -DARRAY_CHECK
|
||||
|
||||
dependencies:
|
||||
- ListLike
|
||||
|
@ -110,7 +110,6 @@ module Unison.Codebase
|
||||
addDefsToCodebase,
|
||||
componentReferencesForReference,
|
||||
installUcmDependencies,
|
||||
toCodeLookup,
|
||||
typeLookupForDependencies,
|
||||
unsafeGetComponentLength,
|
||||
SqliteCodebase.Operations.emptyCausalHash,
|
||||
@ -132,7 +131,6 @@ import Unison.Builtin.Terms qualified as Builtin
|
||||
import Unison.Codebase.Branch (Branch)
|
||||
import Unison.Codebase.Branch qualified as Branch
|
||||
import Unison.Codebase.BuiltinAnnotation (BuiltinAnnotation (builtinAnnotation))
|
||||
import Unison.Codebase.CodeLookup qualified as CL
|
||||
import Unison.Codebase.Path
|
||||
import Unison.Codebase.Path qualified as Path
|
||||
import Unison.Codebase.ProjectPath qualified as PP
|
||||
@ -153,7 +151,6 @@ import Unison.Project (ProjectAndBranch (ProjectAndBranch), ProjectBranchName, P
|
||||
import Unison.Reference (Reference, TermReference, TermReferenceId, TypeReference)
|
||||
import Unison.Reference qualified as Reference
|
||||
import Unison.Referent qualified as Referent
|
||||
import Unison.Runtime.IOSource qualified as IOSource
|
||||
import Unison.Sqlite qualified as Sqlite
|
||||
import Unison.Symbol (Symbol)
|
||||
import Unison.Term (Term)
|
||||
@ -418,12 +415,6 @@ typeLookupForDependencies codebase s = do
|
||||
<|> Map.lookup r (TL.effectDecls tl) $> ()
|
||||
)
|
||||
|
||||
toCodeLookup :: (MonadIO m) => Codebase m Symbol Parser.Ann -> CL.CodeLookup Symbol m Parser.Ann
|
||||
toCodeLookup c =
|
||||
CL.CodeLookup (runTransaction c . getTerm c) (runTransaction c . getTypeDeclaration c)
|
||||
<> Builtin.codeLookup
|
||||
<> IOSource.codeLookupM
|
||||
|
||||
-- | Get the type of a term.
|
||||
--
|
||||
-- Note that it is possible to call 'putTerm', then 'getTypeOfTerm', and receive @Nothing@, per the semantics of
|
||||
|
@ -9,13 +9,11 @@ import System.IO
|
||||
import System.IO.CodePage (withCP65001)
|
||||
import Unison.Core.Test.Name qualified as Name
|
||||
import Unison.Test.ABT qualified as ABT
|
||||
import Unison.Test.ANF qualified as ANF
|
||||
import Unison.Test.Codebase.Branch qualified as Branch
|
||||
import Unison.Test.Codebase.Causal qualified as Causal
|
||||
import Unison.Test.Codebase.Path qualified as Path
|
||||
import Unison.Test.CodebaseInit qualified as CodebaseInit
|
||||
import Unison.Test.DataDeclaration qualified as DataDeclaration
|
||||
import Unison.Test.MCode qualified as MCode
|
||||
import Unison.Test.Referent qualified as Referent
|
||||
import Unison.Test.Syntax.FileParser qualified as FileParser
|
||||
import Unison.Test.Syntax.TermParser qualified as TermParser
|
||||
@ -25,7 +23,6 @@ import Unison.Test.Type qualified as Type
|
||||
import Unison.Test.Typechecker qualified as Typechecker
|
||||
import Unison.Test.Typechecker.Context qualified as Context
|
||||
import Unison.Test.Typechecker.TypeError qualified as TypeError
|
||||
import Unison.Test.UnisonSources qualified as UnisonSources
|
||||
import Unison.Test.Util.Relation qualified as Relation
|
||||
import Unison.Test.Util.Text qualified as Text
|
||||
import Unison.Test.Var qualified as Var
|
||||
@ -38,7 +35,6 @@ test =
|
||||
Type.test,
|
||||
TypeError.test,
|
||||
TypePrinter.test,
|
||||
UnisonSources.test,
|
||||
FileParser.test,
|
||||
DataDeclaration.test,
|
||||
Text.test,
|
||||
@ -47,8 +43,6 @@ test =
|
||||
Causal.test,
|
||||
Referent.test,
|
||||
ABT.test,
|
||||
ANF.test,
|
||||
MCode.test,
|
||||
Var.test,
|
||||
Typechecker.test,
|
||||
Context.test,
|
||||
|
@ -17,10 +17,6 @@ source-repository head
|
||||
type: git
|
||||
location: https://github.com/unisonweb/unison
|
||||
|
||||
flag arraychecks
|
||||
manual: True
|
||||
default: False
|
||||
|
||||
flag optimized
|
||||
manual: True
|
||||
default: True
|
||||
@ -48,7 +44,6 @@ library
|
||||
Unison.Codebase.CodeLookup.Util
|
||||
Unison.Codebase.Editor.DisplayObject
|
||||
Unison.Codebase.Editor.RemoteRepo
|
||||
Unison.Codebase.Execute
|
||||
Unison.Codebase.FileCodebase
|
||||
Unison.Codebase.Init
|
||||
Unison.Codebase.Init.CreateCodebaseError
|
||||
@ -133,27 +128,6 @@ library
|
||||
Unison.PrettyPrintEnvDecl.Sqlite
|
||||
Unison.PrintError
|
||||
Unison.Result
|
||||
Unison.Runtime.ANF
|
||||
Unison.Runtime.ANF.Rehash
|
||||
Unison.Runtime.ANF.Serialize
|
||||
Unison.Runtime.Array
|
||||
Unison.Runtime.Builtin
|
||||
Unison.Runtime.Crypto.Rsa
|
||||
Unison.Runtime.Debug
|
||||
Unison.Runtime.Decompile
|
||||
Unison.Runtime.Exception
|
||||
Unison.Runtime.Foreign
|
||||
Unison.Runtime.Foreign.Function
|
||||
Unison.Runtime.Interface
|
||||
Unison.Runtime.IOSource
|
||||
Unison.Runtime.Machine
|
||||
Unison.Runtime.MCode
|
||||
Unison.Runtime.MCode.Serialize
|
||||
Unison.Runtime.Pattern
|
||||
Unison.Runtime.Serialize
|
||||
Unison.Runtime.SparseVector
|
||||
Unison.Runtime.Stack
|
||||
Unison.Runtime.Vector
|
||||
Unison.Share.Types
|
||||
Unison.Syntax.DeclParser
|
||||
Unison.Syntax.DeclPrinter
|
||||
@ -350,8 +324,6 @@ library
|
||||
default-language: Haskell2010
|
||||
if flag(optimized)
|
||||
ghc-options: -funbox-strict-fields -O2
|
||||
if flag(arraychecks)
|
||||
cpp-options: -DARRAY_CHECK
|
||||
|
||||
test-suite parser-typechecker-tests
|
||||
type: exitcode-stdio-1.0
|
||||
@ -359,16 +331,13 @@ test-suite parser-typechecker-tests
|
||||
other-modules:
|
||||
Unison.Core.Test.Name
|
||||
Unison.Test.ABT
|
||||
Unison.Test.ANF
|
||||
Unison.Test.Codebase.Branch
|
||||
Unison.Test.Codebase.Causal
|
||||
Unison.Test.Codebase.Path
|
||||
Unison.Test.CodebaseInit
|
||||
Unison.Test.Common
|
||||
Unison.Test.DataDeclaration
|
||||
Unison.Test.MCode
|
||||
Unison.Test.Referent
|
||||
Unison.Test.Runtime.Crypto.Rsa
|
||||
Unison.Test.Syntax.FileParser
|
||||
Unison.Test.Syntax.TermParser
|
||||
Unison.Test.Syntax.TypePrinter
|
||||
@ -378,7 +347,6 @@ test-suite parser-typechecker-tests
|
||||
Unison.Test.Typechecker.Components
|
||||
Unison.Test.Typechecker.Context
|
||||
Unison.Test.Typechecker.TypeError
|
||||
Unison.Test.UnisonSources
|
||||
Unison.Test.Util.Pretty
|
||||
Unison.Test.Util.Relation
|
||||
Unison.Test.Util.Text
|
||||
@ -549,5 +517,3 @@ test-suite parser-typechecker-tests
|
||||
default-language: Haskell2010
|
||||
if flag(optimized)
|
||||
ghc-options: -funbox-strict-fields -O2
|
||||
if flag(arraychecks)
|
||||
cpp-options: -DARRAY_CHECK
|
||||
|
@ -43,6 +43,7 @@ packages:
|
||||
- unison-core
|
||||
- unison-hashing-v2
|
||||
- unison-merge
|
||||
- unison-runtime
|
||||
- unison-share-api
|
||||
- unison-share-projects-api
|
||||
- unison-syntax
|
||||
|
@ -89,6 +89,7 @@ dependencies:
|
||||
- unison-parser-typechecker
|
||||
- unison-prelude
|
||||
- unison-pretty-printer
|
||||
- unison-runtime
|
||||
- unison-share-api
|
||||
- unison-share-projects-api
|
||||
- unison-sqlite
|
||||
|
@ -102,6 +102,7 @@ import Unison.Codebase.Editor.RemoteRepo qualified as RemoteRepo
|
||||
import Unison.Codebase.Editor.Slurp qualified as Slurp
|
||||
import Unison.Codebase.Editor.SlurpResult qualified as SlurpResult
|
||||
import Unison.Codebase.Editor.StructuredArgument qualified as SA
|
||||
import Unison.Codebase.Execute qualified as Codebase
|
||||
import Unison.Codebase.IntegrityCheck qualified as IntegrityCheck (integrityCheckFullCodebase)
|
||||
import Unison.Codebase.Metadata qualified as Metadata
|
||||
import Unison.Codebase.Path (Path, Path' (..))
|
||||
@ -1446,7 +1447,7 @@ doCompile native output main = do
|
||||
| native = nativeRuntime
|
||||
| otherwise = runtime
|
||||
(ref, ppe) <- resolveMainRef main
|
||||
let codeLookup = () <$ Codebase.toCodeLookup codebase
|
||||
let codeLookup = () <$ Codebase.codebaseToCodeLookup codebase
|
||||
outf
|
||||
| native = output
|
||||
| otherwise = output <> ".uc"
|
||||
|
@ -24,6 +24,7 @@ import Unison.Codebase qualified as Codebase
|
||||
import Unison.Codebase.Editor.HandleInput.RuntimeUtils qualified as RuntimeUtils
|
||||
import Unison.Codebase.Editor.Output qualified as Output
|
||||
import Unison.Codebase.Editor.Slurp qualified as Slurp
|
||||
import Unison.Codebase.Execute qualified as Codebase
|
||||
import Unison.Codebase.Runtime qualified as Runtime
|
||||
import Unison.FileParsers qualified as FileParsers
|
||||
import Unison.Names (Names)
|
||||
@ -192,7 +193,7 @@ evalUnisonFile mode ppe unisonFile args = do
|
||||
|
||||
Cli.with_ (withArgs args) do
|
||||
(nts, errs, map) <-
|
||||
Cli.ioE (Runtime.evaluateWatches (Codebase.toCodeLookup codebase) ppe watchCache theRuntime unisonFile) \err -> do
|
||||
Cli.ioE (Runtime.evaluateWatches (Codebase.codebaseToCodeLookup codebase) ppe watchCache theRuntime unisonFile) \err -> do
|
||||
Cli.returnEarly (Output.EvaluationFailure err)
|
||||
when (not $ null errs) (RuntimeUtils.displayDecompileErrors errs)
|
||||
for_ (Map.elems map) \(_loc, kind, hash, _src, value, isHit) -> do
|
||||
|
@ -13,6 +13,7 @@ import Unison.Cli.Monad (Cli)
|
||||
import Unison.Cli.Monad qualified as Cli
|
||||
import Unison.Codebase qualified as Codebase
|
||||
import Unison.Codebase.Editor.Output
|
||||
import Unison.Codebase.Execute qualified as Codebase
|
||||
import Unison.Codebase.Runtime qualified as Runtime
|
||||
import Unison.Hashing.V2.Convert qualified as Hashing
|
||||
import Unison.Parser.Ann (Ann (..))
|
||||
@ -55,7 +56,7 @@ evalUnisonTermE sandbox ppe useCache tm = do
|
||||
pure (Term.amap (\(_ :: Ann) -> ()) <$> maybeTerm)
|
||||
|
||||
let cache = if useCache then watchCache else Runtime.noCache
|
||||
r <- liftIO (Runtime.evaluateTerm' (Codebase.toCodeLookup codebase) cache ppe theRuntime tm)
|
||||
r <- liftIO (Runtime.evaluateTerm' (Codebase.codebaseToCodeLookup codebase) cache ppe theRuntime tm)
|
||||
when useCache do
|
||||
case r of
|
||||
Right (errs, tmr)
|
||||
|
@ -271,6 +271,7 @@ library
|
||||
, unison-parser-typechecker
|
||||
, unison-prelude
|
||||
, unison-pretty-printer
|
||||
, unison-runtime
|
||||
, unison-share-api
|
||||
, unison-share-projects-api
|
||||
, unison-sqlite
|
||||
@ -415,6 +416,7 @@ executable transcripts
|
||||
, unison-parser-typechecker
|
||||
, unison-prelude
|
||||
, unison-pretty-printer
|
||||
, unison-runtime
|
||||
, unison-share-api
|
||||
, unison-share-projects-api
|
||||
, unison-sqlite
|
||||
@ -563,6 +565,7 @@ test-suite cli-tests
|
||||
, unison-parser-typechecker
|
||||
, unison-prelude
|
||||
, unison-pretty-printer
|
||||
, unison-runtime
|
||||
, unison-share-api
|
||||
, unison-share-projects-api
|
||||
, unison-sqlite
|
||||
|
19
unison-runtime/LICENSE
Normal file
19
unison-runtime/LICENSE
Normal file
@ -0,0 +1,19 @@
|
||||
Copyright (c) 2013-2021, Unison Computing, public benefit corp and contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
198
unison-runtime/package.yaml
Normal file
198
unison-runtime/package.yaml
Normal file
@ -0,0 +1,198 @@
|
||||
name: unison-runtime
|
||||
github: unisonweb/unison
|
||||
copyright: Copyright (C) 2013-2024 Unison Computing, PBC and contributors
|
||||
|
||||
ghc-options: -Wall -O0
|
||||
|
||||
flags:
|
||||
optimized:
|
||||
manual: true
|
||||
default: true
|
||||
arraychecks:
|
||||
manual: true
|
||||
default: false
|
||||
|
||||
when:
|
||||
- condition: flag(optimized)
|
||||
ghc-options: -funbox-strict-fields -O2
|
||||
- condition: flag(arraychecks)
|
||||
cpp-options: -DARRAY_CHECK
|
||||
|
||||
dependencies:
|
||||
- ListLike
|
||||
- aeson
|
||||
- ansi-terminal
|
||||
- asn1-encoding
|
||||
- asn1-types
|
||||
- async
|
||||
- atomic-primops
|
||||
- base
|
||||
- base16 >= 0.2.1.0
|
||||
- base64-bytestring
|
||||
- basement
|
||||
- binary
|
||||
- bytes
|
||||
- bytestring
|
||||
- bytestring-to-vector
|
||||
- cereal
|
||||
- clock
|
||||
- concurrent-output
|
||||
- containers >= 0.6.3
|
||||
- cryptonite
|
||||
- data-default
|
||||
- data-memocombinators
|
||||
- deepseq
|
||||
- directory
|
||||
- either
|
||||
- errors
|
||||
- exceptions
|
||||
- extra
|
||||
- filelock
|
||||
- filepath
|
||||
- fingertree
|
||||
- fuzzyfind
|
||||
- free
|
||||
- generic-lens
|
||||
- hashable
|
||||
- hashtables
|
||||
- haskeline
|
||||
- http-client
|
||||
- http-media
|
||||
- http-types
|
||||
- IntervalMap
|
||||
- iproute
|
||||
- lens
|
||||
- lucid
|
||||
- megaparsec
|
||||
- memory
|
||||
- mmorph
|
||||
- monad-validate
|
||||
- mtl
|
||||
- mutable-containers
|
||||
- murmur-hash
|
||||
- mwc-random
|
||||
- natural-transformation
|
||||
- network
|
||||
- network-simple
|
||||
- network-udp
|
||||
- network-uri
|
||||
- nonempty-containers
|
||||
- open-browser
|
||||
- openapi3
|
||||
- optparse-applicative
|
||||
- pem
|
||||
- pretty-simple
|
||||
- primitive
|
||||
- process
|
||||
- random >= 1.2.0
|
||||
- raw-strings-qq
|
||||
- recover-rtti
|
||||
- regex-base
|
||||
- regex-tdfa
|
||||
- safe
|
||||
- safe-exceptions
|
||||
- semialign
|
||||
- semigroups
|
||||
- servant
|
||||
- servant-client
|
||||
- servant-docs
|
||||
- servant-openapi3
|
||||
- servant-server
|
||||
- shellmet
|
||||
- stm
|
||||
- tagged
|
||||
- temporary
|
||||
- terminal-size >= 0.3.3
|
||||
- text
|
||||
- text-short
|
||||
- these
|
||||
- time
|
||||
- tls
|
||||
- transformers
|
||||
- unicode-show
|
||||
- unison-codebase
|
||||
- unison-codebase-sqlite
|
||||
- unison-codebase-sqlite-hashing-v2
|
||||
- unison-codebase-sync
|
||||
- unison-core
|
||||
- unison-core1
|
||||
- unison-hash
|
||||
- unison-hashing-v2
|
||||
- unison-parser-typechecker
|
||||
- unison-prelude
|
||||
- unison-pretty-printer
|
||||
- unison-sqlite
|
||||
- unison-syntax
|
||||
- unison-util-base32hex
|
||||
- unison-util-bytes
|
||||
- unison-util-cache
|
||||
- unison-util-relation
|
||||
- unison-util-rope
|
||||
- unison-util-serialization
|
||||
- unliftio
|
||||
- uuid
|
||||
- uri-encode
|
||||
- utf8-string
|
||||
- vector
|
||||
- wai
|
||||
- warp
|
||||
- witch
|
||||
- witherable
|
||||
- crypton-x509
|
||||
- crypton-x509-store
|
||||
- crypton-x509-system
|
||||
- yaml
|
||||
- zlib
|
||||
|
||||
library:
|
||||
source-dirs: src
|
||||
when:
|
||||
- condition: false
|
||||
other-modules: Paths_unison_runtime
|
||||
|
||||
tests:
|
||||
runtime-tests:
|
||||
source-dirs: tests
|
||||
main: Suite.hs
|
||||
ghc-options: -W -threaded -rtsopts "-with-rtsopts=-N -T" -v0
|
||||
dependencies:
|
||||
- code-page
|
||||
- easytest
|
||||
- filemanip
|
||||
- split
|
||||
- hex-text
|
||||
- unison-runtime
|
||||
when:
|
||||
- condition: false
|
||||
other-modules: Paths_unison_parser_typechecker
|
||||
|
||||
default-extensions:
|
||||
- ApplicativeDo
|
||||
- BangPatterns
|
||||
- BlockArguments
|
||||
- DeriveAnyClass
|
||||
- DeriveFunctor
|
||||
- DeriveGeneric
|
||||
- DeriveTraversable
|
||||
- DerivingStrategies
|
||||
- DerivingVia
|
||||
- DoAndIfThenElse
|
||||
- DuplicateRecordFields
|
||||
- FlexibleContexts
|
||||
- FlexibleInstances
|
||||
- GeneralizedNewtypeDeriving
|
||||
- ImportQualifiedPost
|
||||
- LambdaCase
|
||||
- MultiParamTypeClasses
|
||||
- NamedFieldPuns
|
||||
- OverloadedLabels
|
||||
- OverloadedRecordDot
|
||||
- OverloadedStrings
|
||||
- PatternSynonyms
|
||||
- RankNTypes
|
||||
- ScopedTypeVariables
|
||||
- StandaloneDeriving
|
||||
- TupleSections
|
||||
- TypeApplications
|
||||
- TypeFamilies
|
||||
- ViewPatterns
|
@ -3,16 +3,22 @@
|
||||
--
|
||||
-- This allows one to run standalone applications implemented in the Unison
|
||||
-- language.
|
||||
module Unison.Codebase.Execute where
|
||||
module Unison.Codebase.Execute
|
||||
( execute,
|
||||
codebaseToCodeLookup,
|
||||
)
|
||||
where
|
||||
|
||||
import Control.Exception (finally)
|
||||
import Control.Monad.Except
|
||||
import U.Codebase.Sqlite.Project (Project (..))
|
||||
import U.Codebase.Sqlite.ProjectBranch (ProjectBranch (..))
|
||||
import U.Codebase.Sqlite.Queries qualified as Q
|
||||
import Unison.Builtin qualified as Builtin
|
||||
import Unison.Codebase qualified as Codebase
|
||||
import Unison.Codebase.Branch qualified as Branch
|
||||
import Unison.Codebase.Branch.Names qualified as Branch
|
||||
import Unison.Codebase.CodeLookup qualified as CL
|
||||
import Unison.Codebase.MainTerm (getMainTerm)
|
||||
import Unison.Codebase.MainTerm qualified as MainTerm
|
||||
import Unison.Codebase.Path qualified as Path
|
||||
@ -20,10 +26,13 @@ import Unison.Codebase.ProjectPath (ProjectPathG (..))
|
||||
import Unison.Codebase.ProjectPath qualified as PP
|
||||
import Unison.Codebase.Runtime (Runtime)
|
||||
import Unison.Codebase.Runtime qualified as Runtime
|
||||
import Unison.Codebase.Type (Codebase (..))
|
||||
import Unison.HashQualified qualified as HQ
|
||||
import Unison.Parser.Ann (Ann)
|
||||
import Unison.Parser.Ann qualified as Parser
|
||||
import Unison.Prelude
|
||||
import Unison.PrettyPrintEnv qualified as PPE
|
||||
import Unison.Runtime.IOSource qualified as IOSource
|
||||
import Unison.Symbol (Symbol)
|
||||
import Unison.Syntax.HashQualified qualified as HQ (toText)
|
||||
import Unison.Util.Pretty qualified as P
|
||||
@ -51,8 +60,14 @@ execute codebase runtime mainPath =
|
||||
MainTerm.NotFound s -> throwError ("Not found: " <> P.text (HQ.toText s))
|
||||
MainTerm.BadType s _ -> throwError (P.text (HQ.toText s) <> " is not of type '{IO} ()")
|
||||
MainTerm.Success _ tm _ -> do
|
||||
let codeLookup = Codebase.toCodeLookup codebase
|
||||
let codeLookup = codebaseToCodeLookup codebase
|
||||
ppe = PPE.empty
|
||||
(liftIO $ Runtime.evaluateTerm codeLookup ppe runtime tm) >>= \case
|
||||
Left err -> throwError err
|
||||
Right _ -> pure ()
|
||||
|
||||
codebaseToCodeLookup :: (MonadIO m) => Codebase m Symbol Parser.Ann -> CL.CodeLookup Symbol m Parser.Ann
|
||||
codebaseToCodeLookup c =
|
||||
CL.CodeLookup (Codebase.runTransaction c . getTerm c) (Codebase.runTransaction c . getTypeDeclaration c)
|
||||
<> Builtin.codeLookup
|
||||
<> IOSource.codeLookupM
|
31
unison-runtime/tests/Suite.hs
Normal file
31
unison-runtime/tests/Suite.hs
Normal file
@ -0,0 +1,31 @@
|
||||
{-# OPTIONS_GHC -Wno-unused-imports #-}
|
||||
{-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}
|
||||
|
||||
module Main where
|
||||
|
||||
import EasyTest
|
||||
import System.Environment (getArgs)
|
||||
import System.IO
|
||||
import System.IO.CodePage (withCP65001)
|
||||
import Unison.Test.Runtime.ANF qualified as ANF
|
||||
import Unison.Test.Runtime.Crypto.Rsa qualified as Rsa
|
||||
import Unison.Test.Runtime.MCode qualified as MCode
|
||||
import Unison.Test.UnisonSources qualified as UnisonSources
|
||||
|
||||
test :: Test ()
|
||||
test =
|
||||
tests
|
||||
[ ANF.test,
|
||||
MCode.test,
|
||||
Rsa.test,
|
||||
UnisonSources.test
|
||||
]
|
||||
|
||||
main :: IO ()
|
||||
main = withCP65001 do
|
||||
args <- getArgs
|
||||
mapM_ (`hSetEncoding` utf8) [stdout, stdin, stderr]
|
||||
case args of
|
||||
[] -> runOnly "" test
|
||||
[prefix] -> runOnly prefix test
|
||||
[seed, prefix] -> rerunOnly (read seed) prefix test
|
93
unison-runtime/tests/Unison/Test/Common.hs
Normal file
93
unison-runtime/tests/Unison/Test/Common.hs
Normal file
@ -0,0 +1,93 @@
|
||||
module Unison.Test.Common
|
||||
( hqLength,
|
||||
t,
|
||||
tm,
|
||||
parseAndSynthesizeAsFile,
|
||||
parsingEnv,
|
||||
)
|
||||
where
|
||||
|
||||
import Control.Monad.Writer (tell)
|
||||
import Data.Functor.Identity (Identity (..))
|
||||
import Data.Sequence (Seq)
|
||||
import Text.Megaparsec.Error qualified as MPE
|
||||
import Unison.ABT qualified as ABT
|
||||
import Unison.Builtin qualified as B
|
||||
import Unison.FileParsers qualified as FP
|
||||
import Unison.Parser.Ann (Ann (..))
|
||||
import Unison.Parsers qualified as Parsers
|
||||
import Unison.PrintError (prettyParseError)
|
||||
import Unison.Result (Note, Result)
|
||||
import Unison.Result qualified as Result
|
||||
import Unison.Symbol (Symbol)
|
||||
import Unison.Syntax.Parser qualified as Parser
|
||||
import Unison.Syntax.TermParser qualified as TermParser
|
||||
import Unison.Syntax.TypeParser qualified as TypeParser
|
||||
import Unison.Term qualified as Term
|
||||
import Unison.Type qualified as Type
|
||||
import Unison.UnisonFile (TypecheckedUnisonFile, UnisonFile)
|
||||
import Unison.Util.Pretty qualified as Pr
|
||||
import Unison.Var (Var)
|
||||
|
||||
type Term v = Term.Term v Ann
|
||||
|
||||
type Type v = Type.Type v Ann
|
||||
|
||||
hqLength :: Int
|
||||
hqLength = 10
|
||||
|
||||
t :: String -> Type Symbol
|
||||
t s =
|
||||
ABT.amap (const Intrinsic)
|
||||
-- . either (error . show ) id
|
||||
-- . Type.bindSomeNames B.names0
|
||||
. either (error . showParseError s) tweak
|
||||
. runIdentity
|
||||
$ Parser.run (Parser.root TypeParser.valueType) s parsingEnv
|
||||
where
|
||||
tweak = Type.generalizeLowercase mempty
|
||||
|
||||
tm :: String -> Term Symbol
|
||||
tm s =
|
||||
either (error . showParseError s) id
|
||||
-- . Term.bindSomeNames mempty B.names0
|
||||
-- . either (error . showParseError s) id
|
||||
. runIdentity
|
||||
$ Parser.run (Parser.root TermParser.term) s parsingEnv
|
||||
|
||||
showParseError ::
|
||||
(Var v) =>
|
||||
String ->
|
||||
MPE.ParseError Parser.Input (Parser.Error v) ->
|
||||
String
|
||||
showParseError s = Pr.toANSI 60 . prettyParseError s
|
||||
|
||||
parseAndSynthesizeAsFile ::
|
||||
[Type Symbol] ->
|
||||
FilePath ->
|
||||
String ->
|
||||
Result
|
||||
(Seq (Note Symbol Ann))
|
||||
(Either (UnisonFile Symbol Ann) (TypecheckedUnisonFile Symbol Ann))
|
||||
parseAndSynthesizeAsFile ambient filename s = do
|
||||
file <- Result.fromParsing (runIdentity (Parsers.parseFile filename s parsingEnv))
|
||||
let typecheckingEnv =
|
||||
runIdentity $
|
||||
FP.computeTypecheckingEnvironment
|
||||
(FP.ShouldUseTndr'Yes parsingEnv)
|
||||
ambient
|
||||
(\_deps -> pure B.typeLookup)
|
||||
file
|
||||
case FP.synthesizeFile typecheckingEnv file of
|
||||
Result.Result notes Nothing -> tell notes >> pure (Left file)
|
||||
Result.Result _ (Just typecheckedFile) -> pure (Right typecheckedFile)
|
||||
|
||||
parsingEnv :: Parser.ParsingEnv Identity
|
||||
parsingEnv =
|
||||
Parser.ParsingEnv
|
||||
{ uniqueNames = mempty,
|
||||
uniqueTypeGuid = \_ -> pure Nothing,
|
||||
names = B.names,
|
||||
maybeNamespace = Nothing,
|
||||
localNamespacePrefixedTypesAndConstructors = mempty
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
{-# LANGUAGE BangPatterns #-}
|
||||
{-# LANGUAGE PatternGuards #-}
|
||||
|
||||
module Unison.Test.ANF where
|
||||
module Unison.Test.Runtime.ANF where
|
||||
|
||||
import Control.Monad.Reader (ReaderT (..))
|
||||
import Control.Monad.State (evalState)
|
||||
@ -17,7 +17,7 @@ import Unison.Reference (Reference, Reference' (Builtin))
|
||||
import Unison.Runtime.ANF as ANF
|
||||
import Unison.Runtime.MCode (RefNums (..), emitCombs)
|
||||
import Unison.Term qualified as Term
|
||||
import Unison.Test.Common (tm)
|
||||
import Unison.Test.Common
|
||||
import Unison.Type as Ty
|
||||
import Unison.Util.EnumContainers as EC
|
||||
import Unison.Util.Text qualified as Util.Text
|
@ -3,7 +3,7 @@
|
||||
{-# LANGUAGE PatternGuards #-}
|
||||
{-# LANGUAGE TypeApplications #-}
|
||||
|
||||
module Unison.Test.MCode where
|
||||
module Unison.Test.Runtime.MCode where
|
||||
|
||||
import Control.Concurrent.STM
|
||||
import Data.Map.Strict qualified as Map
|
394
unison-runtime/unison-runtime.cabal
Normal file
394
unison-runtime/unison-runtime.cabal
Normal file
@ -0,0 +1,394 @@
|
||||
cabal-version: 1.12
|
||||
|
||||
-- This file has been generated from package.yaml by hpack version 0.36.0.
|
||||
--
|
||||
-- see: https://github.com/sol/hpack
|
||||
|
||||
name: unison-runtime
|
||||
version: 0.0.0
|
||||
homepage: https://github.com/unisonweb/unison#readme
|
||||
bug-reports: https://github.com/unisonweb/unison/issues
|
||||
copyright: Copyright (C) 2013-2024 Unison Computing, PBC and contributors
|
||||
license: MIT
|
||||
license-file: LICENSE
|
||||
build-type: Simple
|
||||
|
||||
source-repository head
|
||||
type: git
|
||||
location: https://github.com/unisonweb/unison
|
||||
|
||||
flag arraychecks
|
||||
manual: True
|
||||
default: False
|
||||
|
||||
flag optimized
|
||||
manual: True
|
||||
default: True
|
||||
|
||||
library
|
||||
exposed-modules:
|
||||
Unison.Codebase.Execute
|
||||
Unison.Runtime.ANF
|
||||
Unison.Runtime.ANF.Rehash
|
||||
Unison.Runtime.ANF.Serialize
|
||||
Unison.Runtime.Array
|
||||
Unison.Runtime.Builtin
|
||||
Unison.Runtime.Crypto.Rsa
|
||||
Unison.Runtime.Debug
|
||||
Unison.Runtime.Decompile
|
||||
Unison.Runtime.Exception
|
||||
Unison.Runtime.Foreign
|
||||
Unison.Runtime.Foreign.Function
|
||||
Unison.Runtime.Interface
|
||||
Unison.Runtime.IOSource
|
||||
Unison.Runtime.Machine
|
||||
Unison.Runtime.MCode
|
||||
Unison.Runtime.MCode.Serialize
|
||||
Unison.Runtime.Pattern
|
||||
Unison.Runtime.Serialize
|
||||
Unison.Runtime.SparseVector
|
||||
Unison.Runtime.Stack
|
||||
Unison.Runtime.Vector
|
||||
hs-source-dirs:
|
||||
src
|
||||
default-extensions:
|
||||
ApplicativeDo
|
||||
BangPatterns
|
||||
BlockArguments
|
||||
DeriveAnyClass
|
||||
DeriveFunctor
|
||||
DeriveGeneric
|
||||
DeriveTraversable
|
||||
DerivingStrategies
|
||||
DerivingVia
|
||||
DoAndIfThenElse
|
||||
DuplicateRecordFields
|
||||
FlexibleContexts
|
||||
FlexibleInstances
|
||||
GeneralizedNewtypeDeriving
|
||||
ImportQualifiedPost
|
||||
LambdaCase
|
||||
MultiParamTypeClasses
|
||||
NamedFieldPuns
|
||||
OverloadedLabels
|
||||
OverloadedRecordDot
|
||||
OverloadedStrings
|
||||
PatternSynonyms
|
||||
RankNTypes
|
||||
ScopedTypeVariables
|
||||
StandaloneDeriving
|
||||
TupleSections
|
||||
TypeApplications
|
||||
TypeFamilies
|
||||
ViewPatterns
|
||||
ghc-options: -Wall -O0
|
||||
build-depends:
|
||||
IntervalMap
|
||||
, ListLike
|
||||
, aeson
|
||||
, ansi-terminal
|
||||
, asn1-encoding
|
||||
, asn1-types
|
||||
, async
|
||||
, atomic-primops
|
||||
, base
|
||||
, base16 >=0.2.1.0
|
||||
, base64-bytestring
|
||||
, basement
|
||||
, binary
|
||||
, bytes
|
||||
, bytestring
|
||||
, bytestring-to-vector
|
||||
, cereal
|
||||
, clock
|
||||
, concurrent-output
|
||||
, containers >=0.6.3
|
||||
, crypton-x509
|
||||
, crypton-x509-store
|
||||
, crypton-x509-system
|
||||
, cryptonite
|
||||
, data-default
|
||||
, data-memocombinators
|
||||
, deepseq
|
||||
, directory
|
||||
, either
|
||||
, errors
|
||||
, exceptions
|
||||
, extra
|
||||
, filelock
|
||||
, filepath
|
||||
, fingertree
|
||||
, free
|
||||
, fuzzyfind
|
||||
, generic-lens
|
||||
, hashable
|
||||
, hashtables
|
||||
, haskeline
|
||||
, http-client
|
||||
, http-media
|
||||
, http-types
|
||||
, iproute
|
||||
, lens
|
||||
, lucid
|
||||
, megaparsec
|
||||
, memory
|
||||
, mmorph
|
||||
, monad-validate
|
||||
, mtl
|
||||
, murmur-hash
|
||||
, mutable-containers
|
||||
, mwc-random
|
||||
, natural-transformation
|
||||
, network
|
||||
, network-simple
|
||||
, network-udp
|
||||
, network-uri
|
||||
, nonempty-containers
|
||||
, open-browser
|
||||
, openapi3
|
||||
, optparse-applicative
|
||||
, pem
|
||||
, pretty-simple
|
||||
, primitive
|
||||
, process
|
||||
, random >=1.2.0
|
||||
, raw-strings-qq
|
||||
, recover-rtti
|
||||
, regex-base
|
||||
, regex-tdfa
|
||||
, safe
|
||||
, safe-exceptions
|
||||
, semialign
|
||||
, semigroups
|
||||
, servant
|
||||
, servant-client
|
||||
, servant-docs
|
||||
, servant-openapi3
|
||||
, servant-server
|
||||
, shellmet
|
||||
, stm
|
||||
, tagged
|
||||
, temporary
|
||||
, terminal-size >=0.3.3
|
||||
, text
|
||||
, text-short
|
||||
, these
|
||||
, time
|
||||
, tls
|
||||
, transformers
|
||||
, unicode-show
|
||||
, unison-codebase
|
||||
, unison-codebase-sqlite
|
||||
, unison-codebase-sqlite-hashing-v2
|
||||
, unison-codebase-sync
|
||||
, unison-core
|
||||
, unison-core1
|
||||
, unison-hash
|
||||
, unison-hashing-v2
|
||||
, unison-parser-typechecker
|
||||
, unison-prelude
|
||||
, unison-pretty-printer
|
||||
, unison-sqlite
|
||||
, unison-syntax
|
||||
, unison-util-base32hex
|
||||
, unison-util-bytes
|
||||
, unison-util-cache
|
||||
, unison-util-relation
|
||||
, unison-util-rope
|
||||
, unison-util-serialization
|
||||
, unliftio
|
||||
, uri-encode
|
||||
, utf8-string
|
||||
, uuid
|
||||
, vector
|
||||
, wai
|
||||
, warp
|
||||
, witch
|
||||
, witherable
|
||||
, yaml
|
||||
, zlib
|
||||
default-language: Haskell2010
|
||||
if flag(optimized)
|
||||
ghc-options: -funbox-strict-fields -O2
|
||||
if flag(arraychecks)
|
||||
cpp-options: -DARRAY_CHECK
|
||||
|
||||
test-suite runtime-tests
|
||||
type: exitcode-stdio-1.0
|
||||
main-is: Suite.hs
|
||||
other-modules:
|
||||
Unison.Test.Common
|
||||
Unison.Test.Runtime.ANF
|
||||
Unison.Test.Runtime.Crypto.Rsa
|
||||
Unison.Test.Runtime.MCode
|
||||
Unison.Test.UnisonSources
|
||||
Paths_unison_runtime
|
||||
hs-source-dirs:
|
||||
tests
|
||||
default-extensions:
|
||||
ApplicativeDo
|
||||
BangPatterns
|
||||
BlockArguments
|
||||
DeriveAnyClass
|
||||
DeriveFunctor
|
||||
DeriveGeneric
|
||||
DeriveTraversable
|
||||
DerivingStrategies
|
||||
DerivingVia
|
||||
DoAndIfThenElse
|
||||
DuplicateRecordFields
|
||||
FlexibleContexts
|
||||
FlexibleInstances
|
||||
GeneralizedNewtypeDeriving
|
||||
ImportQualifiedPost
|
||||
LambdaCase
|
||||
MultiParamTypeClasses
|
||||
NamedFieldPuns
|
||||
OverloadedLabels
|
||||
OverloadedRecordDot
|
||||
OverloadedStrings
|
||||
PatternSynonyms
|
||||
RankNTypes
|
||||
ScopedTypeVariables
|
||||
StandaloneDeriving
|
||||
TupleSections
|
||||
TypeApplications
|
||||
TypeFamilies
|
||||
ViewPatterns
|
||||
ghc-options: -Wall -O0 -W -threaded -rtsopts "-with-rtsopts=-N -T" -v0
|
||||
build-depends:
|
||||
IntervalMap
|
||||
, ListLike
|
||||
, aeson
|
||||
, ansi-terminal
|
||||
, asn1-encoding
|
||||
, asn1-types
|
||||
, async
|
||||
, atomic-primops
|
||||
, base
|
||||
, base16 >=0.2.1.0
|
||||
, base64-bytestring
|
||||
, basement
|
||||
, binary
|
||||
, bytes
|
||||
, bytestring
|
||||
, bytestring-to-vector
|
||||
, cereal
|
||||
, clock
|
||||
, code-page
|
||||
, concurrent-output
|
||||
, containers >=0.6.3
|
||||
, crypton-x509
|
||||
, crypton-x509-store
|
||||
, crypton-x509-system
|
||||
, cryptonite
|
||||
, data-default
|
||||
, data-memocombinators
|
||||
, deepseq
|
||||
, directory
|
||||
, easytest
|
||||
, either
|
||||
, errors
|
||||
, exceptions
|
||||
, extra
|
||||
, filelock
|
||||
, filemanip
|
||||
, filepath
|
||||
, fingertree
|
||||
, free
|
||||
, fuzzyfind
|
||||
, generic-lens
|
||||
, hashable
|
||||
, hashtables
|
||||
, haskeline
|
||||
, hex-text
|
||||
, http-client
|
||||
, http-media
|
||||
, http-types
|
||||
, iproute
|
||||
, lens
|
||||
, lucid
|
||||
, megaparsec
|
||||
, memory
|
||||
, mmorph
|
||||
, monad-validate
|
||||
, mtl
|
||||
, murmur-hash
|
||||
, mutable-containers
|
||||
, mwc-random
|
||||
, natural-transformation
|
||||
, network
|
||||
, network-simple
|
||||
, network-udp
|
||||
, network-uri
|
||||
, nonempty-containers
|
||||
, open-browser
|
||||
, openapi3
|
||||
, optparse-applicative
|
||||
, pem
|
||||
, pretty-simple
|
||||
, primitive
|
||||
, process
|
||||
, random >=1.2.0
|
||||
, raw-strings-qq
|
||||
, recover-rtti
|
||||
, regex-base
|
||||
, regex-tdfa
|
||||
, safe
|
||||
, safe-exceptions
|
||||
, semialign
|
||||
, semigroups
|
||||
, servant
|
||||
, servant-client
|
||||
, servant-docs
|
||||
, servant-openapi3
|
||||
, servant-server
|
||||
, shellmet
|
||||
, split
|
||||
, stm
|
||||
, tagged
|
||||
, temporary
|
||||
, terminal-size >=0.3.3
|
||||
, text
|
||||
, text-short
|
||||
, these
|
||||
, time
|
||||
, tls
|
||||
, transformers
|
||||
, unicode-show
|
||||
, unison-codebase
|
||||
, unison-codebase-sqlite
|
||||
, unison-codebase-sqlite-hashing-v2
|
||||
, unison-codebase-sync
|
||||
, unison-core
|
||||
, unison-core1
|
||||
, unison-hash
|
||||
, unison-hashing-v2
|
||||
, unison-parser-typechecker
|
||||
, unison-prelude
|
||||
, unison-pretty-printer
|
||||
, unison-runtime
|
||||
, unison-sqlite
|
||||
, unison-syntax
|
||||
, unison-util-base32hex
|
||||
, unison-util-bytes
|
||||
, unison-util-cache
|
||||
, unison-util-relation
|
||||
, unison-util-rope
|
||||
, unison-util-serialization
|
||||
, unliftio
|
||||
, uri-encode
|
||||
, utf8-string
|
||||
, uuid
|
||||
, vector
|
||||
, wai
|
||||
, warp
|
||||
, witch
|
||||
, witherable
|
||||
, yaml
|
||||
, zlib
|
||||
default-language: Haskell2010
|
||||
if flag(optimized)
|
||||
ghc-options: -funbox-strict-fields -O2
|
||||
if flag(arraychecks)
|
||||
cpp-options: -DARRAY_CHECK
|
@ -53,6 +53,7 @@ dependencies:
|
||||
- unison-parser-typechecker
|
||||
- unison-prelude
|
||||
- unison-pretty-printer
|
||||
- unison-runtime
|
||||
- unison-util-base32hex
|
||||
- unison-util-relation
|
||||
- unison-share-projects-api
|
||||
|
@ -111,6 +111,7 @@ import Unison.Codebase.Branch qualified as Branch
|
||||
import Unison.Codebase.Branch.Names qualified as Branch
|
||||
import Unison.Codebase.Editor.DisplayObject
|
||||
import Unison.Codebase.Editor.DisplayObject qualified as DisplayObject
|
||||
import Unison.Codebase.Execute qualified as Codebase
|
||||
import Unison.Codebase.Path (Path)
|
||||
import Unison.Codebase.Path qualified as Path
|
||||
import Unison.Codebase.Runtime qualified as Rt
|
||||
@ -801,7 +802,7 @@ evalDocRef rt codebase r = do
|
||||
eval errsVar (Term.amap (const mempty) -> tm) = do
|
||||
-- We use an empty ppe for evalutation, it's only used for adding additional context to errors.
|
||||
let evalPPE = PPE.empty
|
||||
let codeLookup = Codebase.toCodeLookup codebase
|
||||
let codeLookup = Codebase.codebaseToCodeLookup codebase
|
||||
let cache r = fmap Term.unannotate <$> Codebase.runTransaction codebase (Codebase.lookupWatchCache codebase r)
|
||||
r <- fmap hush . liftIO $ Rt.evaluateTerm' codeLookup cache evalPPE rt tm
|
||||
-- Only cache watches when we're not in readonly mode
|
||||
|
@ -127,6 +127,7 @@ library
|
||||
, unison-parser-typechecker
|
||||
, unison-prelude
|
||||
, unison-pretty-printer
|
||||
, unison-runtime
|
||||
, unison-share-projects-api
|
||||
, unison-sqlite
|
||||
, unison-syntax
|
||||
|
Loading…
Reference in New Issue
Block a user