mt-lang 0.3.14 → 0.3.16

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.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/docs/index.html +8 -8
  4. data/docs/language-design.md +4 -8
  5. data/docs/language-manual.md +17 -5
  6. data/lib/milk_tea/base.rb +1 -1
  7. data/lib/milk_tea/core/ast.rb +2 -2
  8. data/lib/milk_tea/core/control_flow/builder.rb +62 -2
  9. data/lib/milk_tea/core/lowering/async/analysis.rb +3 -9
  10. data/lib/milk_tea/core/lowering/async/lowering.rb +2 -10
  11. data/lib/milk_tea/core/lowering/async/normalization.rb +2 -7
  12. data/lib/milk_tea/core/lowering/block.rb +1 -5
  13. data/lib/milk_tea/core/lowering/proc.rb +1 -5
  14. data/lib/milk_tea/core/lowering/scans.rb +3 -1
  15. data/lib/milk_tea/core/lowering/utils.rb +1 -27
  16. data/lib/milk_tea/core/parser/statements.rb +18 -12
  17. data/lib/milk_tea/core/pretty_printer/ast_formatter.rb +3 -11
  18. data/lib/milk_tea/core/semantic_analyzer/analysis_context.rb +2 -3
  19. data/lib/milk_tea/core/semantic_analyzer/flow_refinement.rb +1 -1
  20. data/lib/milk_tea/core/semantic_analyzer/function_binding.rb +1 -2
  21. data/lib/milk_tea/core/semantic_analyzer/nullability.rb +2 -4
  22. data/lib/milk_tea/core/semantic_analyzer/statements.rb +2 -8
  23. data/lib/milk_tea/tooling/linter/imports_platform.rb +2 -4
  24. data/lib/milk_tea/tooling/linter/release_rules.rb +1 -6
  25. data/lib/milk_tea/tooling/linter/source_helpers.rb +0 -6
  26. data/lib/milk_tea/tooling/linter/visitors.rb +4 -8
  27. data/lib/milk_tea/tooling/sexpr_dumper.rb +2 -0
  28. data/std/asset_pack.mt +1 -1
  29. data/std/async/libuv_runtime.mt +6 -6
  30. data/std/async/mailbox.mt +4 -4
  31. data/std/cookie.mt +2 -2
  32. data/std/crypto.mt +1 -1
  33. data/std/curl/runtime.mt +10 -10
  34. data/std/fs.linux.mt +26 -26
  35. data/std/fs.windows.mt +22 -22
  36. data/std/goap.mt +2 -2
  37. data/std/http/server.mt +21 -21
  38. data/std/http.mt +14 -14
  39. data/std/jobs.mt +4 -4
  40. data/std/json.mt +5 -5
  41. data/std/log.mt +1 -1
  42. data/std/mem/tracking.mt +1 -1
  43. data/std/net/channel.mt +4 -4
  44. data/std/net/clock.mt +6 -6
  45. data/std/net/discovery.mt +7 -7
  46. data/std/net/lobby.mt +10 -10
  47. data/std/net/manager.mt +1 -1
  48. data/std/net/mux.mt +4 -4
  49. data/std/net/nat.mt +4 -4
  50. data/std/net/packet.mt +3 -3
  51. data/std/net/punch.mt +3 -3
  52. data/std/net/rpc.mt +3 -3
  53. data/std/net/session.mt +15 -15
  54. data/std/net/stun.mt +4 -4
  55. data/std/net/turn.mt +4 -4
  56. data/std/oauth2.mt +12 -12
  57. data/std/path.mt +8 -8
  58. data/std/process.mt +4 -4
  59. data/std/raylib/packed_assets.mt +5 -5
  60. data/std/serialize.mt +1 -1
  61. data/std/tar.mt +10 -10
  62. data/std/terminal.mt +18 -18
  63. data/std/tls.mt +8 -8
  64. data/std/uri.mt +1 -1
  65. data/std/utility.mt +1 -1
  66. metadata +2 -2
data/std/net/discovery.mt CHANGED
@@ -130,17 +130,17 @@ public async function announce(
130
130
  return
131
131
  Result.success as addr_p:
132
132
  var announce_addr = addr_p.value
133
- defer announce_addr.release()
133
+ defer: announce_addr.release()
134
134
 
135
135
  match net.udp_bind(announce_addr):
136
136
  Result.failure:
137
137
  return
138
138
  Result.success as bp:
139
139
  var socket = bp.value
140
- defer socket.release()
140
+ defer: socket.release()
141
141
 
142
142
  var response = build_response(game_port, ubyte<-0, max_players, game_name)
143
- defer response.release()
143
+ defer: response.release()
144
144
 
145
145
  while true:
146
146
  let recv_task = socket.recv_from(1500)
@@ -177,7 +177,7 @@ public async function discover_on(
177
177
  )
178
178
  Result.success as la:
179
179
  var local_addr = la.value
180
- defer local_addr.release()
180
+ defer: local_addr.release()
181
181
 
182
182
  match net.udp_bind_on(runtime, local_addr):
183
183
  Result.failure:
@@ -186,7 +186,7 @@ public async function discover_on(
186
186
  )
187
187
  Result.success as bp:
188
188
  var socket = bp.value
189
- defer socket.release()
189
+ defer: socket.release()
190
190
 
191
191
  match socket.set_broadcast(true):
192
192
  0:
@@ -207,10 +207,10 @@ public async function discover_on(
207
207
  )
208
208
  Result.success as broad_addr:
209
209
  var broadcast_addr = broad_addr.value
210
- defer broadcast_addr.release()
210
+ defer: broadcast_addr.release()
211
211
 
212
212
  var probe = build_probe()
213
- defer probe.release()
213
+ defer: probe.release()
214
214
 
215
215
  var results = vec.Vec[ServerInfo].create()
216
216
 
data/std/net/lobby.mt CHANGED
@@ -256,7 +256,7 @@ public async function discover_lobbies_on(
256
256
  return Result[vec.Vec[LobbyInfo], net.Error].failure(error = p.error)
257
257
  Result.success as p:
258
258
  var conn = p.value
259
- defer conn.release()
259
+ defer: conn.release()
260
260
  match await conn.connect_to_peer():
261
261
  Result.failure as pe:
262
262
  return Result[vec.Vec[LobbyInfo], net.Error].failure(error = pe.error)
@@ -389,7 +389,7 @@ async function drain_lobby_client(client: ref[LobbyClient]) -> void:
389
389
  if conn_state == sess.ConnectionState.connected:
390
390
  client.pending_join = false
391
391
  var encoded = encode_string(client.pending_name.as_str())
392
- defer encoded.release()
392
+ defer: encoded.release()
393
393
  let _ = await client.mux.mux_send(lobby_channel, type_join_request, encoded.as_span(), mux.flag_reliable)
394
394
 
395
395
  while true:
@@ -455,7 +455,7 @@ async function handle_join_request(host: ref[LobbyHost], msg: ref[mux.MuxedMessa
455
455
  return
456
456
  Result.success as name_payload:
457
457
  var player_name = name_payload.value
458
- defer player_name.release()
458
+ defer: player_name.release()
459
459
 
460
460
  var first_free: int = -1
461
461
  var slot_index: ubyte = 0
@@ -469,7 +469,7 @@ async function handle_join_request(host: ref[LobbyHost], msg: ref[mux.MuxedMessa
469
469
 
470
470
  if first_free < 0:
471
471
  var reject_data = encode_join_reject(reject_reason_full)
472
- defer reject_data.release()
472
+ defer: reject_data.release()
473
473
  let _ = await host.mux.mux_send(
474
474
  msg.peer_id,
475
475
  lobby_channel,
@@ -489,7 +489,7 @@ async function handle_join_request(host: ref[LobbyHost], msg: ref[mux.MuxedMessa
489
489
  unsafe: read(slot_ptr).occupied = true
490
490
 
491
491
  var accept_data = encode_join_accept(msg.peer_id, slot)
492
- defer accept_data.release()
492
+ defer: accept_data.release()
493
493
  let _ = await host.mux.mux_send(
494
494
  msg.peer_id,
495
495
  lobby_channel,
@@ -516,7 +516,7 @@ async function handle_discover_request(host: ref[LobbyHost], msg: ref[mux.MuxedM
516
516
  var w = bin.Writer.with_capacity(256)
517
517
  encode_lobby_info_payload(ref_of(w), host.info)
518
518
  var payload = w.finish()
519
- defer payload.release()
519
+ defer: payload.release()
520
520
  let _ = await host.mux.mux_send(
521
521
  msg.peer_id,
522
522
  lobby_channel,
@@ -650,7 +650,7 @@ async function broadcast_player_joined(
650
650
  w.write_uint(uint<-new_player_name.len)
651
651
  w.write_bytes(text.as_byte_span(new_player_name))
652
652
  var payload = w.finish()
653
- defer payload.release()
653
+ defer: payload.release()
654
654
 
655
655
  var peer_index: ptr_uint = 0
656
656
  let peer_count = host.mux.peer_count()
@@ -801,11 +801,11 @@ public async function respond_to_beacon(
801
801
  match recv_result:
802
802
  Result.success as dp:
803
803
  var datagram = dp.value
804
- defer datagram.data.release()
805
- defer datagram.source.release()
804
+ defer: datagram.data.release()
805
+ defer: datagram.source.release()
806
806
  if is_beacon_probe(datagram.data.as_span()):
807
807
  var response = build_beacon_response(info)
808
- defer response.release()
808
+ defer: response.release()
809
809
  let _ = await socket.send_to(response.as_span(), datagram.source)
810
810
  Result.failure:
811
811
  pass
data/std/net/manager.mt CHANGED
@@ -418,7 +418,7 @@ async function process_stored_peer_id_events(manager: ref[NetworkManager]) -> vo
418
418
  let player_id = join_event.player_id
419
419
  join_event.release()
420
420
  var assign_data = build_assign_id(player_id)
421
- defer assign_data.release()
421
+ defer: assign_data.release()
422
422
  let _ = await manager.mux_session.mux_send(
423
423
  player_id,
424
424
  channel_system,
data/std/net/mux.mt CHANGED
@@ -382,7 +382,7 @@ async function send_single_conn(
382
382
  send_flags: ubyte
383
383
  ) -> Result[bool, net.Error]:
384
384
  var frame = encode_frame(channel_id, type_id, send_flags, data)
385
- defer frame.release()
385
+ defer: frame.release()
386
386
  if (send_flags & flag_reliable) != 0:
387
387
  let result = await mux.conn.send_reliable(frame.as_span(), 0)
388
388
  return result
@@ -399,7 +399,7 @@ async function send_single_session(
399
399
  send_flags: ubyte
400
400
  ) -> Result[bool, net.Error]:
401
401
  var frame = encode_frame(channel_id, type_id, send_flags, data)
402
- defer frame.release()
402
+ defer: frame.release()
403
403
  if (send_flags & flag_reliable) != 0:
404
404
  let result = await mux.session.send_reliable(peer_id, frame.as_span(), 0)
405
405
  return result
@@ -436,7 +436,7 @@ async function send_fragmented_conn(
436
436
  break
437
437
  let chunk = unsafe: span[ubyte](data = data.data + offset, len = chunk_len)
438
438
  var frame = encode_fragment_frame(channel_id, type_id, frag_flags, group_id, frag_index, total, chunk)
439
- defer frame.release()
439
+ defer: frame.release()
440
440
  if (send_flags & flag_reliable) != 0:
441
441
  let _ = await mux.conn.send_reliable(frame.as_span(), 0)
442
442
  else:
@@ -477,7 +477,7 @@ async function send_fragmented_session(
477
477
  break
478
478
  let chunk = unsafe: span[ubyte](data = data.data + offset, len = chunk_len)
479
479
  var frame = encode_fragment_frame(channel_id, type_id, frag_flags, group_id, frag_index, total, chunk)
480
- defer frame.release()
480
+ defer: frame.release()
481
481
  if (send_flags & flag_reliable) != 0:
482
482
  let _ = await mux.session.send_reliable(peer_id, frame.as_span(), 0)
483
483
  else:
data/std/net/nat.mt CHANGED
@@ -53,7 +53,7 @@ public async function detect(
53
53
  )
54
54
  Result.success as pr:
55
55
  var public_1 = pr.value
56
- defer public_1.release()
56
+ defer: public_1.release()
57
57
 
58
58
  let local_result = socket.local_address()
59
59
  match local_result:
@@ -78,7 +78,7 @@ public async function detect(
78
78
  )
79
79
  Result.success as ar:
80
80
  var public_2 = ar.value
81
- defer public_2.release()
81
+ defer: public_2.release()
82
82
 
83
83
  if not public_1.public_address.equal(public_2.public_address):
84
84
  return Result[NatResult, Error].success(
@@ -107,7 +107,7 @@ public async function detect_default(
107
107
  )
108
108
  Result.success as pp:
109
109
  var primary = pp.value
110
- defer primary.release()
110
+ defer: primary.release()
111
111
 
112
112
  let alt_result = net.ipv4(google_alternate, google_port)
113
113
  match alt_result:
@@ -117,6 +117,6 @@ public async function detect_default(
117
117
  )
118
118
  Result.success as ap:
119
119
  var alternate = ap.value
120
- defer alternate.release()
120
+ defer: alternate.release()
121
121
 
122
122
  return await detect(socket, primary, alternate)
data/std/net/packet.mt CHANGED
@@ -50,7 +50,7 @@ function decode_packet_length(header: bytes.Bytes) -> ptr_uint:
50
50
 
51
51
  function frame_bytes(content: span[ubyte]) -> bytes.Bytes:
52
52
  var framed = vec.Vec[ubyte].with_capacity(frame_header_bytes + content.len)
53
- defer framed.release()
53
+ defer: framed.release()
54
54
 
55
55
  let header = encode_packet_length(content.len)
56
56
  framed.append_array(header)
@@ -157,7 +157,7 @@ extending Stream:
157
157
  return Result[ptr_uint, Error].failure(error = packet_error(-3, "packet exceeds 32-bit frame limit"))
158
158
 
159
159
  var framed = frame_bytes(content)
160
- defer framed.release()
160
+ defer: framed.release()
161
161
 
162
162
  let write_result = await this.stream.write_bytes(framed.as_span())
163
163
  match write_result:
@@ -175,7 +175,7 @@ extending Stream:
175
175
  return Result[bytes.Bytes, Error].failure(error = error_from_net(payload.error))
176
176
  Result.success as payload:
177
177
  var header = payload.value
178
- defer header.release()
178
+ defer: header.release()
179
179
  let packet_length = decode_packet_length(header)
180
180
  if packet_length > this.max_packet_bytes:
181
181
  let discard_result = await discard_exactly(this.stream, packet_length)
data/std/net/punch.mt CHANGED
@@ -104,8 +104,8 @@ function poll_recv(
104
104
  return Option[PunchResult].none()
105
105
  Result.success as dp:
106
106
  var dg = dp.value
107
- defer dg.data.release()
108
- defer dg.source.release()
107
+ defer: dg.data.release()
108
+ defer: dg.source.release()
109
109
  return result_from_datagram(dg, remote_candidates)
110
110
 
111
111
 
@@ -114,7 +114,7 @@ public async function punch(
114
114
  remote_candidates: vec.Vec[Candidate]
115
115
  ) -> Result[PunchResult, Error]:
116
116
  var probe = build_punch_probe()
117
- defer probe.release()
117
+ defer: probe.release()
118
118
  var recv_task = socket.recv_from(512)
119
119
 
120
120
  var c: uint = 0
data/std/net/rpc.mt CHANGED
@@ -63,7 +63,7 @@ public async function call_and_wait(
63
63
  payload: span[ubyte]
64
64
  ) -> Result[bytes.Bytes, Error]:
65
65
  var call_packet = build_call(request_id, payload)
66
- defer call_packet.release()
66
+ defer: call_packet.release()
67
67
 
68
68
  let send_result = await conn.mux_send(channel_id, call_type_id, call_packet.as_span(), mux.flag_reliable)
69
69
  match send_result:
@@ -78,7 +78,7 @@ public async function call_and_wait(
78
78
  match msg_opt:
79
79
  Option.some as mp:
80
80
  var msg = mp.value
81
- defer msg.release()
81
+ defer: msg.release()
82
82
  if msg.type_id == response_type_id and msg.channel_id == channel_id:
83
83
  let id_result = parse_request_id(msg.payload.as_span())
84
84
  match id_result:
@@ -110,7 +110,7 @@ public async function send_reply(
110
110
  payload: span[ubyte]
111
111
  ) -> Result[bool, Error]:
112
112
  var reply_packet = build_reply(request_id, payload)
113
- defer reply_packet.release()
113
+ defer: reply_packet.release()
114
114
  let send_result = await conn.mux_send(channel_id, response_type_id, reply_packet.as_span(), mux.flag_reliable)
115
115
  match send_result:
116
116
  Result.failure:
data/std/net/session.mt CHANGED
@@ -312,7 +312,7 @@ extending Connection:
312
312
  if this.state == ConnectionState.connected:
313
313
  if frame >= this.last_heartbeat_sent + this.heartbeat_interval:
314
314
  var hb = build_heartbeat(frame)
315
- defer hb.release()
315
+ defer: hb.release()
316
316
  let send_result = await this.channel.send(hb.as_span())
317
317
  match send_result:
318
318
  Result.failure:
@@ -395,7 +395,7 @@ extending Connection:
395
395
  ))
396
396
 
397
397
  var framed = build_user_data(data)
398
- defer framed.release()
398
+ defer: framed.release()
399
399
  let send_result = await this.channel.send(framed.as_span())
400
400
  match send_result:
401
401
  Result.failure as payload:
@@ -415,7 +415,7 @@ extending Connection:
415
415
  ))
416
416
 
417
417
  var framed = build_user_data(data)
418
- defer framed.release()
418
+ defer: framed.release()
419
419
  let send_result = await this.channel.send_reliable(framed.as_span(), frame)
420
420
  match send_result:
421
421
  Result.failure as payload:
@@ -444,7 +444,7 @@ extending Connection:
444
444
  Result.success as ksp:
445
445
  key = ksp.value
446
446
  var req = build_connect_request(this.protocol_version, key)
447
- defer req.release()
447
+ defer: req.release()
448
448
  let send_result = await this.channel.send_reliable(req.as_span(), this.last_heartbeat_sent)
449
449
  match send_result:
450
450
  Result.failure as send_payload:
@@ -463,7 +463,7 @@ extending Connection:
463
463
  ))
464
464
 
465
465
  var d = build_disconnect(disconnect_reason_local)
466
- defer d.release()
466
+ defer: d.release()
467
467
  let send_result = await this.channel.send_reliable(d.as_span(), 0)
468
468
  this.state = ConnectionState.disconnected
469
469
  match send_result:
@@ -588,7 +588,7 @@ async function drain_outgoing_conn(conn: ref[Connection]) -> Result[bool, net.Er
588
588
  return Result[bool, net.Error].success(value = true)
589
589
  Option.some as payload:
590
590
  var outgoing = payload.value
591
- defer outgoing.release()
591
+ defer: outgoing.release()
592
592
  if outgoing.reliable:
593
593
  let _ = await conn.channel.send_reliable(
594
594
  outgoing.payload.as_span(),
@@ -648,13 +648,13 @@ extending Session:
648
648
  if unsafe: read(peer_ptr).channel_state == ConnectionState.connected:
649
649
  if frame >= unsafe: read(peer_ptr).last_heartbeat_sent + this.config.heartbeat_interval:
650
650
  var hb = build_heartbeat(frame)
651
- defer hb.release()
651
+ defer: hb.release()
652
652
  let peer_id = unsafe: read(peer_ptr).peer_id
653
653
  let peer_address_result = find_peer_address(ref_of(this), peer_id)
654
654
  match peer_address_result:
655
655
  Result.success as addr_payload:
656
656
  var addr = addr_payload.value
657
- defer addr.release()
657
+ defer: addr.release()
658
658
  let send_result = await this.host.send(addr, hb.as_span())
659
659
  match send_result:
660
660
  Result.failure:
@@ -748,9 +748,9 @@ extending Session:
748
748
  return Result[bool, net.Error].failure(error = payload.error)
749
749
  Result.success as payload:
750
750
  var address = payload.value
751
- defer address.release()
751
+ defer: address.release()
752
752
  var framed = build_user_data(data)
753
- defer framed.release()
753
+ defer: framed.release()
754
754
  let send_result = await this.host.send(address, framed.as_span())
755
755
  match send_result:
756
756
  Result.failure as send_payload:
@@ -773,9 +773,9 @@ extending Session:
773
773
  return Result[bool, net.Error].failure(error = payload.error)
774
774
  Result.success as payload:
775
775
  var address = payload.value
776
- defer address.release()
776
+ defer: address.release()
777
777
  var framed = build_user_data(data)
778
- defer framed.release()
778
+ defer: framed.release()
779
779
  let send_result = await this.host.send_reliable(address, framed.as_span(), frame)
780
780
  match send_result:
781
781
  Result.failure as send_payload:
@@ -794,9 +794,9 @@ extending Session:
794
794
  return Result[bool, net.Error].failure(error = payload.error)
795
795
  Result.success as payload:
796
796
  var address = payload.value
797
- defer address.release()
797
+ defer: address.release()
798
798
  var d = build_disconnect(reason)
799
- defer d.release()
799
+ defer: d.release()
800
800
  let send_result = await this.host.send_reliable(address, d.as_span(), 0)
801
801
  match send_result:
802
802
  Result.failure:
@@ -1054,7 +1054,7 @@ async function drain_outgoing_session(session: ref[Session]) -> Result[bool, net
1054
1054
  return Result[bool, net.Error].success(value = true)
1055
1055
  Option.some as payload:
1056
1056
  var outgoing = payload.value
1057
- defer outgoing.release()
1057
+ defer: outgoing.release()
1058
1058
  if outgoing.reliable:
1059
1059
  let send_result = await session.host.send_reliable(
1060
1060
  outgoing.address,
data/std/net/stun.mt CHANGED
@@ -150,7 +150,7 @@ public function parse_binding_response(
150
150
  let xaddr = read_uint_be(data, offset + 8z)
151
151
  let ip = xaddr ^ stun_magic_cookie
152
152
  var ip_str = format_ipv4(ip)
153
- defer ip_str.release()
153
+ defer: ip_str.release()
154
154
  let addr_result = net.ipv4(ip_str.as_str(), int<-port)
155
155
  match addr_result:
156
156
  Result.failure:
@@ -185,7 +185,7 @@ public async function resolve_public_address(
185
185
  let tid = transaction_id_from_bytes(rp.value)
186
186
  rp.value.release()
187
187
  var request = build_binding_request(tid)
188
- defer request.release()
188
+ defer: request.release()
189
189
  let send_result = await socket.send_to(request.as_span(), stun_server)
190
190
  match send_result:
191
191
  Result.failure:
@@ -233,7 +233,7 @@ public async function resolve_public_address_on(
233
233
  )
234
234
  Result.success as bp:
235
235
  var socket = bp.value
236
- defer socket.release()
236
+ defer: socket.release()
237
237
  return await resolve_public_address(socket, stun_server)
238
238
 
239
239
 
@@ -248,5 +248,5 @@ public async function resolve(
248
248
  )
249
249
  Result.success as la:
250
250
  var local_addr = la.value
251
- defer local_addr.release()
251
+ defer: local_addr.release()
252
252
  return await resolve_public_address_on(aio.current_runtime(), local_addr, stun_server)
data/std/net/turn.mt CHANGED
@@ -188,7 +188,7 @@ public function parse_allocate_response(
188
188
  let xaddr = read_uint_be(data, offset + 8z)
189
189
  let ip = xaddr ^ stun_magic_cookie
190
190
  var ip_str = format_ipv4(ip)
191
- defer ip_str.release()
191
+ defer: ip_str.release()
192
192
  let addr_result = net.ipv4(ip_str.as_str(), int<-port)
193
193
  match addr_result:
194
194
  Result.success as ap:
@@ -220,7 +220,7 @@ public async function allocate(
220
220
  let tid = transaction_id_from_bytes(rp.value)
221
221
  rp.value.release()
222
222
  var request = build_allocate_request(tid)
223
- defer request.release()
223
+ defer: request.release()
224
224
  let send_result = await socket.send_to(request.as_span(), turn_server)
225
225
  match send_result:
226
226
  Result.failure:
@@ -363,7 +363,7 @@ public function parse_data_indication(
363
363
  let xaddr = read_uint_be(data, offset + 8z)
364
364
  let ip = xaddr ^ stun_magic_cookie
365
365
  var ip_str = format_ipv4(ip)
366
- defer ip_str.release()
366
+ defer: ip_str.release()
367
367
  let addr_result = net.ipv4(ip_str.as_str(), int<-port)
368
368
  match addr_result:
369
369
  Result.success as ap:
@@ -417,7 +417,7 @@ public async function send_data(
417
417
  return Result[ptr_uint, Error].failure(error = bp.error)
418
418
  Result.success as bp:
419
419
  var packet = bp.value
420
- defer packet.release()
420
+ defer: packet.release()
421
421
  let send_result = await socket.send_to(packet.as_span(), turn_server)
422
422
  match send_result:
423
423
  Result.failure as sp:
data/std/oauth2.mt CHANGED
@@ -78,7 +78,7 @@ public function generate_pkce() -> Result[PkcePair, Error]:
78
78
  random_data.release()
79
79
 
80
80
  var challenge = crypto.sha256(text.as_byte_span(verifier.as_str()))
81
- defer challenge.release()
81
+ defer: challenge.release()
82
82
 
83
83
  let challenge_b64 = base64.encode_urlsafe(challenge.as_span())
84
84
 
@@ -141,9 +141,9 @@ function append_query_param(target: ref[string.String], key: str, value: str) ->
141
141
  target.push_byte(38)
142
142
 
143
143
  var encoded_key = url.percent_encode(key)
144
- defer encoded_key.release()
144
+ defer: encoded_key.release()
145
145
  var encoded_value = url.percent_encode(value)
146
- defer encoded_value.release()
146
+ defer: encoded_value.release()
147
147
 
148
148
  target.append(encoded_key.as_str())
149
149
  target.push_byte(61)
@@ -156,7 +156,7 @@ public async function exchange_code(
156
156
  pkce_verifier: Option[str]
157
157
  ) -> Result[Tokens, Error]:
158
158
  var body_params = vec.Vec[url.FormField].create()
159
- defer release_form_fields(ref_of(body_params))
159
+ defer: release_form_fields(ref_of(body_params))
160
160
 
161
161
  body_params.push(url.FormField(key = "grant_type", value = "authorization_code"))
162
162
  body_params.push(url.FormField(key = "code", value = code))
@@ -170,10 +170,10 @@ public async function exchange_code(
170
170
  body_params.push(url.FormField(key = "code_verifier", value = payload.value))
171
171
 
172
172
  var form_body = url.encode_form(body_params.as_span())
173
- defer form_body.release()
173
+ defer: form_body.release()
174
174
 
175
175
  var auth_header = build_basic_auth_header(config.client_id.as_str(), config.client_secret.as_str())
176
- defer auth_header.release()
176
+ defer: auth_header.release()
177
177
 
178
178
  var headers = array[http.RequestHeader, 2](
179
179
  http.RequestHeader(name = "Content-Type", value = "application/x-www-form-urlencoded"),
@@ -194,7 +194,7 @@ public async function exchange_code(
194
194
  return Result[Tokens, Error].failure(error = http_error_to_oauth(payload.error))
195
195
  Result.success as payload:
196
196
  var response = payload.value
197
- defer response.release()
197
+ defer: response.release()
198
198
 
199
199
  let body_str = response.body_as_str() else:
200
200
  return Result[Tokens, Error].failure(error = oauth_error("token response body is not valid UTF-8"))
@@ -226,7 +226,7 @@ function parse_token_response(body_str: str, status_code: int) -> Result[Tokens,
226
226
  return Result[Tokens, Error].failure(error = oauth_error("token response is not valid JSON"))
227
227
  Result.success as json_payload:
228
228
  let json_value = json_payload.value
229
- defer json.release_value(json_value)
229
+ defer: json.release_value(json_value)
230
230
 
231
231
  if status_code != 200:
232
232
  let object_ptr = json_value.as_object() else:
@@ -306,17 +306,17 @@ public async function refresh_access_token(
306
306
  refresh_token: str
307
307
  ) -> Result[Tokens, Error]:
308
308
  var body_params = vec.Vec[url.FormField].create()
309
- defer release_form_fields(ref_of(body_params))
309
+ defer: release_form_fields(ref_of(body_params))
310
310
 
311
311
  body_params.push(url.FormField(key = "grant_type", value = "refresh_token"))
312
312
  body_params.push(url.FormField(key = "refresh_token", value = refresh_token))
313
313
  body_params.push(url.FormField(key = "client_id", value = config.client_id.as_str()))
314
314
 
315
315
  var form_body = url.encode_form(body_params.as_span())
316
- defer form_body.release()
316
+ defer: form_body.release()
317
317
 
318
318
  var auth_header = build_basic_auth_header(config.client_id.as_str(), config.client_secret.as_str())
319
- defer auth_header.release()
319
+ defer: auth_header.release()
320
320
 
321
321
  var headers = array[http.RequestHeader, 2](
322
322
  http.RequestHeader(name = "Content-Type", value = "application/x-www-form-urlencoded"),
@@ -337,7 +337,7 @@ public async function refresh_access_token(
337
337
  return Result[Tokens, Error].failure(error = http_error_to_oauth(payload.error))
338
338
  Result.success as payload:
339
339
  var response = payload.value
340
- defer response.release()
340
+ defer: response.release()
341
341
 
342
342
  let body_str = response.body_as_str() else:
343
343
  return Result[Tokens, Error].failure(error = oauth_error("token response body is not valid UTF-8"))
data/std/path.mt CHANGED
@@ -54,9 +54,9 @@ public function join(left: str, right: str) -> string.String:
54
54
 
55
55
  public function relative_path(path: str, base: str) -> Option[string.String]:
56
56
  var normalized_path = normalize_separators(path)
57
- defer normalized_path.release()
57
+ defer: normalized_path.release()
58
58
  var normalized_base = normalize_separators(base)
59
- defer normalized_base.release()
59
+ defer: normalized_base.release()
60
60
 
61
61
  let path_text = normalized_path.as_str()
62
62
  let base_text = normalized_base.as_str()
@@ -66,11 +66,11 @@ public function relative_path(path: str, base: str) -> Option[string.String]:
66
66
  return Option[string.String].none
67
67
 
68
68
  var path_segments = vec.Vec[Segment].create()
69
- defer path_segments.release()
69
+ defer: path_segments.release()
70
70
  collect_normalized_segments(path_text, path_root, ref_of(path_segments))
71
71
 
72
72
  var base_segments = vec.Vec[Segment].create()
73
- defer base_segments.release()
73
+ defer: base_segments.release()
74
74
  collect_normalized_segments(base_text, base_root, ref_of(base_segments))
75
75
 
76
76
  var common: ptr_uint = 0
@@ -111,9 +111,9 @@ public function relative_path(path: str, base: str) -> Option[string.String]:
111
111
 
112
112
  public function is_within_root(path: str, root: str) -> bool:
113
113
  var normalized_path = normalize_separators(path)
114
- defer normalized_path.release()
114
+ defer: normalized_path.release()
115
115
  var normalized_root = normalize_separators(root)
116
- defer normalized_root.release()
116
+ defer: normalized_root.release()
117
117
 
118
118
  let path_text = normalized_path.as_str()
119
119
  let root_text = normalized_root.as_str()
@@ -123,11 +123,11 @@ public function is_within_root(path: str, root: str) -> bool:
123
123
  return false
124
124
 
125
125
  var path_segments = vec.Vec[Segment].create()
126
- defer path_segments.release()
126
+ defer: path_segments.release()
127
127
  collect_normalized_segments(path_text, path_root, ref_of(path_segments))
128
128
 
129
129
  var root_segments = vec.Vec[Segment].create()
130
- defer root_segments.release()
130
+ defer: root_segments.release()
131
131
  collect_normalized_segments(root_text, root_root, ref_of(root_segments))
132
132
 
133
133
  if path_segments.len() < root_segments.len():
data/std/process.mt CHANGED
@@ -437,7 +437,7 @@ function spawn_internal(
437
437
  return Result[ChildProcess, ProcessError].failure(error= payload.error)
438
438
  Result.success as payload:
439
439
  var prepared = payload.value
440
- defer prepared.release()
440
+ defer: prepared.release()
441
441
 
442
442
  var raw_handle = zero[c.mt_process_spawn_handle]
443
443
  var raw_error = zero[c.mt_process_error]
@@ -478,7 +478,7 @@ function spawn_pty_internal(
478
478
  return Result[PtyProcess, ProcessError].failure(error= payload.error)
479
479
  Result.success as payload:
480
480
  var prepared = payload.value
481
- defer prepared.release()
481
+ defer: prepared.release()
482
482
 
483
483
  var raw_handle = zero[c.mt_process_pty_handle]
484
484
  var raw_error = zero[c.mt_process_error]
@@ -512,7 +512,7 @@ function capture_internal(
512
512
  return Result[CaptureResult, ProcessError].failure(error= payload.error)
513
513
  Result.success as payload:
514
514
  var prepared = payload.value
515
- defer prepared.release()
515
+ defer: prepared.release()
516
516
 
517
517
  var raw_result = zero[c.mt_process_capture_result]
518
518
  var raw_error = zero[c.mt_process_error]
@@ -547,7 +547,7 @@ function spawn_detached_internal(
547
547
  return Result[int, ProcessError].failure(error= payload.error)
548
548
  Result.success as payload:
549
549
  var prepared = payload.value
550
- defer prepared.release()
550
+ defer: prepared.release()
551
551
 
552
552
  var pid: int = 0
553
553
  var raw_error = zero[c.mt_process_error]