koatl 0.1.21__tar.gz → 0.1.22__tar.gz

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 (111) hide show
  1. {koatl-0.1.21 → koatl-0.1.22}/Cargo.lock +1 -1
  2. {koatl-0.1.21 → koatl-0.1.22}/PKG-INFO +1 -1
  3. {koatl-0.1.21 → koatl-0.1.22}/koatl/Cargo.toml +1 -1
  4. {koatl-0.1.21 → koatl-0.1.22}/koatl/python/koatl/runtime/helpers.py +1 -1
  5. {koatl-0.1.21 → koatl-0.1.22}/koatl-core/src/resolve_scopes.rs +0 -14
  6. {koatl-0.1.21 → koatl-0.1.22}/koatl-core/src/transform.rs +22 -8
  7. {koatl-0.1.21 → koatl-0.1.22}/python/koatl/runtime/helpers.py +1 -1
  8. {koatl-0.1.21 → koatl-0.1.22}/Cargo.toml +0 -0
  9. {koatl-0.1.21 → koatl-0.1.22}/README.md +0 -0
  10. {koatl-0.1.21 → koatl-0.1.22}/koatl/.github/workflows/CI.yml +0 -0
  11. {koatl-0.1.21 → koatl-0.1.22}/koatl/.gitignore +0 -0
  12. {koatl-0.1.21 → koatl-0.1.22}/koatl/LICENSE +0 -0
  13. {koatl-0.1.21 → koatl-0.1.22}/koatl/README.md +0 -0
  14. {koatl-0.1.21 → koatl-0.1.22}/koatl/python/koatl/__init__.py +0 -0
  15. {koatl-0.1.21 → koatl-0.1.22}/koatl/python/koatl/__main__.py +0 -0
  16. {koatl-0.1.21 → koatl-0.1.22}/koatl/python/koatl/cli.py +0 -0
  17. {koatl-0.1.21 → koatl-0.1.22}/koatl/python/koatl/notebook/__init__.py +0 -0
  18. {koatl-0.1.21 → koatl-0.1.22}/koatl/python/koatl/notebook/magic.py +0 -0
  19. {koatl-0.1.21 → koatl-0.1.22}/koatl/python/koatl/prelude/__init__.tl +0 -0
  20. {koatl-0.1.21 → koatl-0.1.22}/koatl/python/koatl/prelude/functional/__init__.tl +0 -0
  21. {koatl-0.1.21 → koatl-0.1.22}/koatl/python/koatl/prelude/functional/async.tl +0 -0
  22. {koatl-0.1.21 → koatl-0.1.22}/koatl/python/koatl/prelude/functional/async_util.py +0 -0
  23. {koatl-0.1.21 → koatl-0.1.22}/koatl/python/koatl/prelude/functional/memo.tl +0 -0
  24. {koatl-0.1.21 → koatl-0.1.22}/koatl/python/koatl/prelude/functional/monad.tl +0 -0
  25. {koatl-0.1.21 → koatl-0.1.22}/koatl/python/koatl/prelude/functional/reader.tl +0 -0
  26. {koatl-0.1.21 → koatl-0.1.22}/koatl/python/koatl/prelude/functional/result.tl +0 -0
  27. {koatl-0.1.21 → koatl-0.1.22}/koatl/python/koatl/prelude/iterable.tl +0 -0
  28. {koatl-0.1.21 → koatl-0.1.22}/koatl/python/koatl/runtime/__init__.py +0 -0
  29. {koatl-0.1.21 → koatl-0.1.22}/koatl/python/koatl/runtime/meta_finder.py +0 -0
  30. {koatl-0.1.21 → koatl-0.1.22}/koatl/python/koatl/runtime/record.py +0 -0
  31. {koatl-0.1.21 → koatl-0.1.22}/koatl/python/koatl/runtime/virtual.py +0 -0
  32. {koatl-0.1.21 → koatl-0.1.22}/koatl/requirements.txt +0 -0
  33. {koatl-0.1.21 → koatl-0.1.22}/koatl/src/emit_py.rs +0 -0
  34. {koatl-0.1.21 → koatl-0.1.22}/koatl/src/lib.rs +0 -0
  35. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/base/coal.tl +0 -0
  36. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/base/containers.tl +0 -0
  37. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/base/decorators.tl +0 -0
  38. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/base/destructure-for-and-fn.tl +0 -0
  39. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/base/destructure.tl +0 -0
  40. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/base/escape_ident.tl +0 -0
  41. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/base/fstr.tl +0 -0
  42. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/base/functions.tl +0 -0
  43. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/base/generator.tl +0 -0
  44. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/base/if_expr.tl +0 -0
  45. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/base/imports.tl +0 -0
  46. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/base/loops.tl +0 -0
  47. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/base/match.tl +0 -0
  48. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/base/nary-list.tl +0 -0
  49. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/base/placeholder.tl +0 -0
  50. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/base/precedence.tl +0 -0
  51. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/base/scopes.tl +0 -0
  52. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/base/semantic_whitespace.tl +0 -0
  53. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/base/slice.tl +0 -0
  54. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/base/try.tl +0 -0
  55. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/destructure.tl +0 -0
  56. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/prelude/async.tl +0 -0
  57. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/prelude/iterables.tl +0 -0
  58. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/prelude/memo.tl +0 -0
  59. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/prelude/reader.tl +0 -0
  60. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/prelude/result.tl +0 -0
  61. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/prelude/virtual.tl +0 -0
  62. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/util/__init__.py +0 -0
  63. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/util/module0.tl +0 -0
  64. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/util/module1.tl +0 -0
  65. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/e2e/util/module2.tl +0 -0
  66. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/parse/arith.tl +0 -0
  67. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/parse/assign.tl +0 -0
  68. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/parse/block-comments.tl +0 -0
  69. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/parse/deco.tl +0 -0
  70. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/parse/func.tl +0 -0
  71. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/parse/matches.tl +0 -0
  72. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/test_e2e.py +0 -0
  73. {koatl-0.1.21 → koatl-0.1.22}/koatl/tests/test_parse.py +0 -0
  74. {koatl-0.1.21 → koatl-0.1.22}/koatl-core/Cargo.toml +0 -0
  75. {koatl-0.1.21 → koatl-0.1.22}/koatl-core/parser/Cargo.toml +0 -0
  76. {koatl-0.1.21 → koatl-0.1.22}/koatl-core/parser/src/ast.rs +0 -0
  77. {koatl-0.1.21 → koatl-0.1.22}/koatl-core/parser/src/lexer.rs +0 -0
  78. {koatl-0.1.21 → koatl-0.1.22}/koatl-core/parser/src/lib.rs +0 -0
  79. {koatl-0.1.21 → koatl-0.1.22}/koatl-core/parser/src/parser.rs +0 -0
  80. {koatl-0.1.21 → koatl-0.1.22}/koatl-core/parser/src/util.rs +0 -0
  81. {koatl-0.1.21 → koatl-0.1.22}/koatl-core/parser/tests/lexer.rs +0 -0
  82. {koatl-0.1.21 → koatl-0.1.22}/koatl-core/src/inference.rs +0 -0
  83. {koatl-0.1.21 → koatl-0.1.22}/koatl-core/src/lib.rs +0 -0
  84. {koatl-0.1.21 → koatl-0.1.22}/koatl-core/src/main.rs +0 -0
  85. {koatl-0.1.21 → koatl-0.1.22}/koatl-core/src/parse_timer.rs +0 -0
  86. {koatl-0.1.21 → koatl-0.1.22}/koatl-core/src/parser.rs +0 -0
  87. {koatl-0.1.21 → koatl-0.1.22}/koatl-core/src/py/ast.rs +0 -0
  88. {koatl-0.1.21 → koatl-0.1.22}/koatl-core/src/py/emit.rs +0 -0
  89. {koatl-0.1.21 → koatl-0.1.22}/koatl-core/src/py/mod.rs +0 -0
  90. {koatl-0.1.21 → koatl-0.1.22}/koatl-core/src/py/util.rs +0 -0
  91. {koatl-0.1.21 → koatl-0.1.22}/koatl-core/src/types.rs +0 -0
  92. {koatl-0.1.21 → koatl-0.1.22}/koatl-core/src/util.rs +0 -0
  93. {koatl-0.1.21 → koatl-0.1.22}/pyproject.toml +0 -0
  94. {koatl-0.1.21 → koatl-0.1.22}/python/koatl/__init__.py +0 -0
  95. {koatl-0.1.21 → koatl-0.1.22}/python/koatl/__main__.py +0 -0
  96. {koatl-0.1.21 → koatl-0.1.22}/python/koatl/cli.py +0 -0
  97. {koatl-0.1.21 → koatl-0.1.22}/python/koatl/notebook/__init__.py +0 -0
  98. {koatl-0.1.21 → koatl-0.1.22}/python/koatl/notebook/magic.py +0 -0
  99. {koatl-0.1.21 → koatl-0.1.22}/python/koatl/prelude/__init__.tl +0 -0
  100. {koatl-0.1.21 → koatl-0.1.22}/python/koatl/prelude/functional/__init__.tl +0 -0
  101. {koatl-0.1.21 → koatl-0.1.22}/python/koatl/prelude/functional/async.tl +0 -0
  102. {koatl-0.1.21 → koatl-0.1.22}/python/koatl/prelude/functional/async_util.py +0 -0
  103. {koatl-0.1.21 → koatl-0.1.22}/python/koatl/prelude/functional/memo.tl +0 -0
  104. {koatl-0.1.21 → koatl-0.1.22}/python/koatl/prelude/functional/monad.tl +0 -0
  105. {koatl-0.1.21 → koatl-0.1.22}/python/koatl/prelude/functional/reader.tl +0 -0
  106. {koatl-0.1.21 → koatl-0.1.22}/python/koatl/prelude/functional/result.tl +0 -0
  107. {koatl-0.1.21 → koatl-0.1.22}/python/koatl/prelude/iterable.tl +0 -0
  108. {koatl-0.1.21 → koatl-0.1.22}/python/koatl/runtime/__init__.py +0 -0
  109. {koatl-0.1.21 → koatl-0.1.22}/python/koatl/runtime/meta_finder.py +0 -0
  110. {koatl-0.1.21 → koatl-0.1.22}/python/koatl/runtime/record.py +0 -0
  111. {koatl-0.1.21 → koatl-0.1.22}/python/koatl/runtime/virtual.py +0 -0
@@ -99,7 +99,7 @@ checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd"
99
99
 
100
100
  [[package]]
101
101
  name = "koatl"
102
- version = "0.1.21"
102
+ version = "0.1.22"
103
103
  dependencies = [
104
104
  "ariadne",
105
105
  "koatl-core",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: koatl
3
- Version: 0.1.21
3
+ Version: 0.1.22
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Classifier: Programming Language :: Python :: Implementation :: PyPy
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "koatl"
3
- version = "0.1.21"
3
+ version = "0.1.22"
4
4
  edition = "2021"
5
5
 
6
6
  [lib]
@@ -76,7 +76,7 @@ def do(f):
76
76
 
77
77
  try:
78
78
  # TODO: this is a workaround to avoid recursion.
79
- # is it possible to get bind_gen directly from bind_once?
79
+ # is it possible to derive bind_gen directly from bind_once?
80
80
 
81
81
  return vget(m, "bind_gen")(gen)
82
82
  except (NotImplementedError, AttributeError):
@@ -213,13 +213,6 @@ impl<'src> ResolveState<'src> {
213
213
  let placeholder_ctx = self.placeholder_stack.pop().unwrap();
214
214
 
215
215
  if placeholder_ctx.activated {
216
- if ph_fn_ctx.is_async || ph_fn_ctx.is_generator || ph_fn_ctx.is_do {
217
- self.errors.extend(simple_err(
218
- "Await, bind, and yield are not allowed in placeholder functions",
219
- placeholder_ctx.span,
220
- ));
221
- }
222
-
223
216
  ph_fn_ctx.is_placeholder = true;
224
217
 
225
218
  ph_fn_ctx.arg_names.push(placeholder_ctx.arg_decl);
@@ -1323,13 +1316,6 @@ impl<'src> SExprExt<'src> for Indirect<SExpr<'src>> {
1323
1316
 
1324
1317
  let fn_ctx = state.fn_stack.pop().unwrap();
1325
1318
 
1326
- if fn_ctx.is_async || fn_ctx.is_generator || fn_ctx.is_do {
1327
- state.errors.extend(simple_err(
1328
- "Memo expressions cannot be async, generator, or do",
1329
- span,
1330
- ));
1331
- }
1332
-
1333
1319
  state.memo_captures.insert(inner.as_ref().into(), fn_ctx);
1334
1320
 
1335
1321
  Expr::Memo(inner)
@@ -15,6 +15,7 @@ use crate::{
15
15
  use once_cell::sync::Lazy;
16
16
  use parser::ast::*;
17
17
  use slotmap::SlotMap;
18
+ use std::hash::{Hash, Hasher};
18
19
 
19
20
  static PY_KWS: &[&str] = &[
20
21
  "and", "as", "assert", "break", "class", "continue", "def", "del", "elif", "else", "except",
@@ -2279,20 +2280,26 @@ impl<'src, 'ast> SExprExt<'src, 'ast> for SExpr<'src> {
2279
2280
 
2280
2281
  let callback = pre.bind(make_fn_exp(
2281
2282
  ctx,
2282
- FnDef::PyFnDef(vec![], py_body, false, false),
2283
+ FnDef::PyFnDef(vec![], py_body, memo_captures.is_do, memo_captures.is_async),
2283
2284
  &span,
2284
2285
  )?);
2285
2286
 
2286
2287
  let linecol = ctx.line_cache.linecol(span.start);
2287
2288
 
2288
- a.yield_(a.call(
2289
+ let memo_call = a.call(
2289
2290
  a.tl_builtin("memo"),
2290
2291
  vec![
2291
- PyCallItem::Arg(
2292
- a.str(
2293
- format!("{}:{}:{}", ctx.filename, linecol.0, linecol.1)
2294
- )
2295
- ),
2292
+ PyCallItem::Arg(a.str(format!(
2293
+ "{}:{}:{}:{:08x}",
2294
+ ctx.filename,
2295
+ linecol.0,
2296
+ linecol.1,
2297
+ {
2298
+ let mut hasher = std::collections::hash_map::DefaultHasher::new();
2299
+ ctx.source[span.start..span.end].hash(&mut hasher);
2300
+ hasher.finish() as u32
2301
+ }
2302
+ ))),
2296
2303
  PyCallItem::Arg(
2297
2304
  a.tuple(
2298
2305
  nonlocals
@@ -2304,7 +2311,14 @@ impl<'src, 'ast> SExprExt<'src, 'ast> for SExpr<'src> {
2304
2311
  ),
2305
2312
  PyCallItem::Arg(callback),
2306
2313
  ],
2307
- ))
2314
+ );
2315
+
2316
+ if memo_captures.is_do {
2317
+ // TODO should we really automatically bind a monadic expression for convenience?
2318
+ a.yield_(a.yield_(memo_call))
2319
+ } else {
2320
+ a.yield_(memo_call)
2321
+ }
2308
2322
  }
2309
2323
  Expr::Await(expr) => a.await_(pre.bind(expr.transform(ctx)?)),
2310
2324
  Expr::Yield(expr) => a.yield_(pre.bind(expr.transform(ctx)?)),
@@ -76,7 +76,7 @@ def do(f):
76
76
 
77
77
  try:
78
78
  # TODO: this is a workaround to avoid recursion.
79
- # is it possible to get bind_gen directly from bind_once?
79
+ # is it possible to derive bind_gen directly from bind_once?
80
80
 
81
81
  return vget(m, "bind_gen")(gen)
82
82
  except (NotImplementedError, AttributeError):
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes