Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
4288b42
thesis-pbt-effekt: add property-based testing support to stdlib testi…
Mar 26, 2025
28e8d45
Fix: Splices with non-String type break if there is no splice (#901)
dvdvgt Mar 28, 2025
e1b92bb
Add lambda calculus NbE example/benchmark (#898)
marvinborner Mar 28, 2025
fe047ce
Run tests without optimization (#851)
marvinborner Mar 28, 2025
6f8b155
Fix inferring effectful while header (#902)
PhictionalOne Mar 28, 2025
9195bbe
Allow trailing comma in list literals (#900)
mattisboeckle Mar 28, 2025
7219512
Standalone language server (#885)
timsueberkrueb Mar 28, 2025
d2bdb9f
Fix: make type pretty printer less confusing for boxed types (#906)
dvdvgt Mar 28, 2025
3773ff2
Add test for cyclic imports (#903)
marzipankaiser Mar 28, 2025
ee78f84
Bump to llvm version 18 in CI (#887)
mattisboeckle Mar 28, 2025
67f47cb
Improve performance of state (#907)
b-studios Mar 28, 2025
9ba3cfa
Fix lsp caching issues (#894)
timsueberkrueb Mar 28, 2025
86ebd77
Fix: ufcs integer lexing (#912)
dvdvgt Mar 28, 2025
1a71751
Add binary search benchmark (#904)
jiribenes Mar 28, 2025
9b9266c
Properly represent existentials in core (#880)
phischu Mar 28, 2025
87a080d
Allow lambda case patterns for multiple parameters (#914)
marzipankaiser Mar 28, 2025
4b8434e
Fix failing tests without optimization (#890)
marvinborner Mar 28, 2025
739914c
Go via trampoline in machine transformer (#917)
phischu Mar 28, 2025
8460593
Fix: dot notation using block params (#918)
dvdvgt Mar 29, 2025
895cafb
Bump version to 0.25.0
effekt-updater[bot] Mar 31, 2025
387b3e7
CI: Fix npm provenance
jiribenes Apr 4, 2025
2a9a36c
CI: Add a way to publish manually to npm
jiribenes Apr 4, 2025
717940a
Fix invalid links (#927)
dvdvgt Apr 8, 2025
a8d3b93
Reimplement C utilities in llvm (#910)
mattisboeckle Apr 10, 2025
e417c07
JSWeb: report all collected errors upon aborting (#931)
dvdvgt Apr 11, 2025
6d9b29b
Bump version to 0.26.0
effekt-updater[bot] Apr 14, 2025
f669047
Remove debug print in Normalizer (#937)
jiribenes Apr 16, 2025
70fb283
Simplify core.Renamer to produce smaller symbols (#938)
jiribenes Apr 17, 2025
d6472ec
Don't reallocate StringBuffer when flushing (#939)
jiribenes Apr 17, 2025
73edfdc
Renamer: Add infrastructure for Checking Uniqueness of Generated Name…
marzipankaiser Apr 17, 2025
28edaf2
Make 'core.Renamer' quicker by simplifying scope handling (#940)
jiribenes Apr 17, 2025
62b505f
Add tailrec annotations wherever possible (#945)
jiribenes Apr 19, 2025
d305794
Bump version to 0.27.0
effekt-updater[bot] Apr 21, 2025
1ba0939
Cache substitutions (#954)
b-studios Apr 22, 2025
28200a2
Specific info message for equally named effect operations (#956)
JakubSchwenkbeck Apr 23, 2025
16f0ce8
Bump version to 0.28.0
effekt-updater[bot] Apr 28, 2025
990fe10
Add wellformedness check for type of `var ... in ...` (#961)
marzipankaiser Apr 28, 2025
298d186
LLVM: Emit most declared definitions as private (#946)
mattisboeckle Apr 28, 2025
d42294b
Add bytestream-based 'random' module with PRNG and /dev/urandom handl…
jiribenes Apr 29, 2025
2f58c0d
use the random effect instead of FFI
Apr 30, 2025
539a8ae
added check files for golden tests, removed leftover debug print
Apr 30, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/actions/run-effekt-tests/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,12 @@ runs:
timeout_minutes: ${{ inputs.retry-timeout }}
max_attempts: ${{ inputs.retry-max-attempts }}
retry_on: error
command: EFFEKT_VALGRIND=1 EFFEKT_DEBUG=1 sbt -J-Xss1G clean test
command: EFFEKT_VALGRIND=1 EFFEKT_DEBUG=1 sbt clean test
new_command_on_retry: sbt testQuick

- name: Run full test suite without retry
if: ${{ inputs.full-test == 'true' && runner.os != 'Windows' && inputs.use-retry != 'true' }}
run: EFFEKT_VALGRIND=1 EFFEKT_DEBUG=1 sbt -J-Xss1G clean test
run: EFFEKT_VALGRIND=1 EFFEKT_DEBUG=1 sbt clean test
shell: bash

- name: Assemble fully optimized js file
Expand Down
2 changes: 1 addition & 1 deletion .github/actions/setup-effekt/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ inputs:
llvm-version:
description: 'LLVM version to install'
required: false
default: '15'
default: '18'
install-dependencies:
description: 'Whether to install system dependencies (Linux only)'
required: false
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
name: Release Artifacts

permissions:
id-token: write

on:
push:
tags:
Expand Down
69 changes: 69 additions & 0 deletions .github/workflows/manual-npm-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Do not use this, please. This is just for manual NPM publishing in a time of great need.
name: Publish to NPM manually

permissions:
id-token: write

on:
workflow_dispatch: # For manual triggering

jobs:
build-jar:
name: Build and assemble the Effekt compiler
runs-on: ubuntu-latest
outputs:
version: ${{ steps.get_version.outputs.VERSION }}

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: 'true'

- uses: ./.github/actions/setup-effekt

- name: Get the version
id: get_version
run: |
git fetch --tags
LATEST_TAG=$(git describe --tags --abbrev=0)
echo "VERSION=${LATEST_TAG#v}" >> $GITHUB_OUTPUT

- name: Assemble jar file
run: sbt clean deploy

- name: Generate npm package
run: mv $(npm pack) effekt.tgz

- name: Upload Effekt binary
uses: actions/upload-artifact@v4
with:
name: effekt
path: bin/effekt

- name: Upload the npm package
uses: actions/upload-artifact@v4
with:
name: effekt-npm-package
path: effekt.tgz

publish-npm:
name: Publish NPM Package
runs-on: ubuntu-latest
needs: [build-jar]
steps:
- name: Download npm package
uses: actions/download-artifact@v4
with:
name: effekt-npm-package

- name: Set up NodeJS ${{ env.NODE_VERSION }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
registry-url: 'https://registry.npmjs.org'

- name: Publish to NPM as @effekt-lang/effekt
run: npm publish effekt.tgz --provenance --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
16 changes: 5 additions & 11 deletions effekt/js/src/main/scala/effekt/LanguageServer.scala
Original file line number Diff line number Diff line change
Expand Up @@ -98,18 +98,12 @@ class LanguageServer extends Intelligence {
file(path).lastModified

@JSExport
def compileFile(path: String): String = {
val mainOutputPath = compileCached(VirtualFileSource(path)).getOrElseAborting {
throw js.JavaScriptException(s"Cannot compile ${path}")
def compileFile(path: String): String =
compileCached(VirtualFileSource(path)).getOrElseAborting {
// report all collected error messages
val formattedErrors = context.messaging.formatMessages(context.messaging.get)
throw js.JavaScriptException(formattedErrors)
}
try {
mainOutputPath
} catch {
case FatalPhaseError(msg) =>
val formattedError = context.messaging.formatMessage(msg)
throw js.JavaScriptException(formattedError)
}
}

@JSExport
def showCore(path: String): String = {
Expand Down
4 changes: 2 additions & 2 deletions effekt/jvm/src/main/scala/effekt/EffektConfig.scala
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,8 @@ class EffektConfig(args: Seq[String]) extends REPLConfig(args.takeWhile(_ != "--

val llvmVersion: ScallopOption[String] = opt[String](
"llvm-version",
descr = "the llvm version that should be used to compile the generated programs (only necessary if backend is llvm, defaults to 15)",
default = Some(sys.env.getOrElse("EFFEKT_LLVM_VERSION", "15")),
descr = "the llvm version that should be used to compile the generated programs (only necessary if backend is llvm, defaults to 18)",
default = Some(sys.env.getOrElse("EFFEKT_LLVM_VERSION", "18")),
noshort = true,
group = advanced
)
Expand Down
14 changes: 10 additions & 4 deletions effekt/jvm/src/main/scala/effekt/Main.scala
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,19 @@ object Main {
parseArgs(args)
} catch {
case e: ScallopException =>
System.err.println(e.getMessage())
System.err.println(e.getMessage)
return
}

if (config.server()) {
Server.launch(config)
val serverConfig = ServerConfig(
debug = config.debug(),
debugPort = config.debugPort()
)
val server = new Server(config)
server.launch(serverConfig)
} else if (config.repl()) {
new Repl(Server).run(config)
new Repl(new Driver {}).run(config)
} else {
compileFiles(config)
}
Expand All @@ -43,8 +48,9 @@ object Main {
* Compile files specified in the configuration.
*/
private def compileFiles(config: EffektConfig): Unit = {
val driver = new Driver {}
for (filename <- config.filenames()) {
Server.compileFile(filename, config)
driver.compileFile(filename, config)
}
}
}
4 changes: 2 additions & 2 deletions effekt/jvm/src/main/scala/effekt/Runner.scala
Original file line number Diff line number Diff line change
Expand Up @@ -267,8 +267,8 @@ object LLVMRunner extends Runner[String] {
override def includes(path: File): List[File] = List(path / ".." / "llvm")

lazy val gccCmd = discoverExecutable(List("cc", "clang", "gcc"), List("--version"))
lazy val llcCmd = discoverExecutable(List("llc", "llc-15", "llc-16"), List("--version"))
lazy val optCmd = discoverExecutable(List("opt", "opt-15", "opt-16"), List("--version"))
lazy val llcCmd = discoverExecutable(List("llc", "llc-18"), List("--version"))
lazy val optCmd = discoverExecutable(List("opt", "opt-18"), List("--version"))

def checkSetup(): Either[String, Unit] =
gccCmd.getOrElseAborting { return Left("Cannot find gcc. This is required to use the LLVM backend.") }
Expand Down
Loading
Loading