@effekt-lang/effekt 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/effekt CHANGED
Binary file
@@ -38,8 +38,7 @@ namespace js {
38
38
  jsNode "${console}.close()"
39
39
 
40
40
  extern async def readLine(console: JSConsole): String =
41
- jsNode "$effekt.callcc(callback => ${console}.once('line', callback))"
42
-
41
+ jsNode "$effekt.capture(k => ${console}.once('line', k))"
43
42
  extern io def writeLine(console: JSConsole, message: String): Unit =
44
43
  jsNode "${console}.output.write(${message} + '\\n')"
45
44
  }
@@ -208,28 +208,28 @@ namespace internal {
208
208
  """
209
209
 
210
210
  extern async def open(path: String, mode: Mode): Int =
211
- jsNode "$effekt.callcc(callback => open(${path}, ${mode}, callback))"
211
+ jsNode "$effekt.capture(k => open(${path}, ${mode}, k))"
212
212
  llvm """
213
213
  call void @c_fs_open(%Pos ${path}, %Pos ${mode}, %Stack %stack)
214
214
  ret void
215
215
  """
216
216
 
217
217
  extern async def read(fd: Int, buffer: Bytes, offset: Int): Int =
218
- jsNode "$effekt.callcc(callback => read(${fd}, ${buffer}, ${offset}, callback))"
218
+ jsNode "$effekt.capture(k => read(${fd}, ${buffer}, ${offset}, k))"
219
219
  llvm """
220
220
  call void @c_fs_read(%Int ${fd}, %Pos ${buffer}, %Int ${offset}, %Stack %stack)
221
221
  ret void
222
222
  """
223
223
 
224
224
  extern async def write(fd: Int, buffer: Bytes, offset: Int): Int =
225
- jsNode "$effekt.callcc(callback => write(${fd}, ${buffer}, ${offset}, callback))"
225
+ jsNode "$effekt.capture(k => write(${fd}, ${buffer}, ${offset}, k))"
226
226
  llvm """
227
227
  call void @c_fs_write(%Int ${fd}, %Pos ${buffer}, %Int ${offset}, %Stack %stack)
228
228
  ret void
229
229
  """
230
230
 
231
231
  extern async def close(fd: Int): Int =
232
- jsNode "$effekt.callcc(callback => close(${fd}, callback))"
232
+ jsNode "$effekt.capture(k => close(${fd}, k))"
233
233
  llvm """
234
234
  call void @c_fs_close(%Int ${fd}, %Stack %stack)
235
235
  ret void
@@ -18,16 +18,16 @@ namespace js {
18
18
  extern io def server(): JSServer =
19
19
  jsNode "net.createServer()"
20
20
  extern io def listen(server: JSServer, port: Int, host: String, listener: JSSocket => Unit at {io, async, global}): Unit =
21
- jsNode "listen(${server}, ${port}, ${host}, (socket) => (${listener})(socket).run())"
21
+ jsNode "listen(${server}, ${port}, ${host}, (socket) => $effekt.runToplevel((ks, k) => (${listener})(socket, ks, k)))"
22
22
 
23
23
  extern async def send(socket: JSSocket, data: Bytes): Unit =
24
- jsNode "$effekt.callcc(callback => ${socket}.write(${data}, callback))"
24
+ jsNode "$effekt.capture(k => ${socket}.write(${data}, k))"
25
25
 
26
26
  extern async def receive(socket: JSSocket): Bytes =
27
- jsNode "$effekt.callcc(callback => ${socket}.once('data', callback))"
27
+ jsNode "$effekt.capture(k => ${socket}.once('data', k))"
28
28
 
29
29
  extern async def end(socket: JSSocket): Unit =
30
- jsNode "$effekt.callcc(callback => ${socket}.end(callback))"
30
+ jsNode "$effekt.capture(k => ${socket}.end(k))"
31
31
  }
32
32
 
33
33
  interface Socket {
@@ -5,7 +5,7 @@ extern llvm """
5
5
  """
6
6
 
7
7
  extern async def wait(millis: Int): Unit =
8
- js "$effekt.callcc(callback => setTimeout(() => callback($effekt.unit), ${millis}))"
8
+ js "$effekt.capture(k => setTimeout(() => k($effekt.unit), ${millis}))"
9
9
  llvm """
10
10
  call void @c_timer_start(%Int ${millis}, %Stack %stack)
11
11
  ret void
@@ -13,7 +13,7 @@ extern llvm """
13
13
  """
14
14
 
15
15
  extern async def spawn(task: Task[Unit]): Unit =
16
- js "$effekt.callcc(callback => { setTimeout(() => callback($effekt.unit), 0); ${task}().run()})"
16
+ js "$effekt.capture(k => { setTimeout(() => k($effekt.unit), 0); return $effekt.run(${task}) })"
17
17
  llvm """
18
18
  call void @c_yield(%Stack %stack)
19
19
  call void @run(%Neg ${task})
@@ -21,14 +21,14 @@ extern async def spawn(task: Task[Unit]): Unit =
21
21
  """
22
22
 
23
23
  extern async def yield(): Unit =
24
- js "$effekt.callcc(callback => setTimeout(() => callback($effekt.unit), 0))"
24
+ js "$effekt.capture(k => setTimeout(() => k($effekt.unit), 0))"
25
25
  llvm """
26
26
  call void @c_yield(%Stack %stack)
27
27
  ret void
28
28
  """
29
29
 
30
30
  extern async def abort(): Nothing =
31
- js "$effekt.callcc(callback => { return })"
31
+ js "$effekt.capture(k => undefined)"
32
32
  llvm """
33
33
  call void @eraseStack(%Stack %stack)
34
34
  ret void
@@ -55,14 +55,14 @@ extern llvm """
55
55
  """
56
56
 
57
57
  extern async def await[T](promise: Promise[T]): T =
58
- js "$effekt.callcc(callback => ${promise}.promise.then(res => callback(res)))"
58
+ js "$effekt.capture(k => ${promise}.promise.then(k))"
59
59
  llvm """
60
60
  call void @c_promise_await(%Pos ${promise}, %Stack %stack)
61
61
  ret void
62
62
  """
63
63
 
64
64
  extern async def resolve[T](promise: Promise[T], value: T): Unit =
65
- js "$effekt.callcc(callback => { ${promise}.resolve(${value}); callback($effekt.unit)})"
65
+ js "$effekt.capture(k => { ${promise}.resolve(${value}); return k($effekt.unit) })"
66
66
  llvm """
67
67
  call void @c_promise_resolve(%Pos ${promise}, %Pos ${value}, %Stack %stack)
68
68
  ret void
@@ -54,4 +54,8 @@ $effekt.println = function println$impl(str) {
54
54
  console.log(str); return $effekt.unit;
55
55
  }
56
56
 
57
- $effekt.unit = { __unit: true }
57
+ $effekt.unit = { __unit: true }
58
+
59
+ $effekt.emptyMatch = function() { throw "empty match" }
60
+
61
+ $effekt.hole = function() { throw "not implemented, yet" }