coconut-develop 3.2.0.post0.dev5__tar.gz → 3.2.0.post0.dev7__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.
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/PKG-INFO +1 -1
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/compiler/compiler.py +55 -32
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/compiler/grammar.py +56 -30
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/compiler/util.py +4 -1
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/root.py +1 -1
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/main_test.py +1 -1
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/extras.coco +9 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/.claude/CLAUDE.md +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/.claude/settings.local.json +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/CONTRIBUTING.md +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/DOCS.md +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/FAQ.md +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/HELP.md +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/LICENSE.txt +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/MANIFEST.in +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/README.rst +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/__coconut__/__init__.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/__coconut__/__init__.pyi +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/__coconut__/py.typed +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/_coconut/__init__.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/_coconut/__init__.pyi +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/_coconut/py.typed +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/__coconut__.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/__coconut__.pyi +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/__init__.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/__init__.pyi +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/__main__.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/_pyparsing.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/api.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/api.pyi +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/command/__init__.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/command/__init__.pyi +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/command/cli.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/command/command.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/command/command.pyi +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/command/mypy.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/command/resources/zcoconut.pth +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/command/util.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/command/watch.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/compiler/__init__.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/compiler/header.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/compiler/matching.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/compiler/templates/header.py_template +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/constants.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/convenience.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/convenience.pyi +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/exceptions.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/highlighter.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/icoconut/__init__.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/icoconut/__main__.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/icoconut/coconut/kernel.json +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/icoconut/coconut_py/kernel.json +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/icoconut/coconut_py2/kernel.json +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/icoconut/coconut_py3/kernel.json +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/icoconut/embed.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/icoconut/root.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/integrations.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/main.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/py.typed +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/requirements.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/terminal.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/__init__.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/__main__.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/constants_test.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/cocotest/agnostic/__init__.coco +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/cocotest/agnostic/__main__.coco +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/cocotest/agnostic/main.coco +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/cocotest/agnostic/primary_1.coco +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/cocotest/agnostic/primary_2.coco +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/cocotest/agnostic/specific.coco +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/cocotest/agnostic/suite.coco +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/cocotest/agnostic/tutorial.coco +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/cocotest/agnostic/util.coco +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/cocotest/non_strict/non_strict_test.coco +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/cocotest/target_2/py2_test.coco +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/cocotest/target_3/py3_test.coco +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/cocotest/target_311/py311_test.coco +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/cocotest/target_314/py314_test.coco +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/cocotest/target_35/py35_test.coco +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/cocotest/target_36/py36_test.coco +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/cocotest/target_38/py38_test.coco +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/cocotest/target_sys/target_sys_test.coco +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/importable.coco +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/runnable.coco +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/runner.coco +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/util.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut_develop.egg-info/SOURCES.txt +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/conf.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/pyproject.toml +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/setup.cfg +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/setup.py +0 -0
- {coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/xontrib/coconut.py +0 -0
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/compiler/compiler.py
RENAMED
|
@@ -105,6 +105,7 @@ from coconut.constants import (
|
|
|
105
105
|
incremental_cache_limit,
|
|
106
106
|
use_line_by_line_parser,
|
|
107
107
|
coconut_cache_dir,
|
|
108
|
+
wildcard,
|
|
108
109
|
)
|
|
109
110
|
from coconut.util import (
|
|
110
111
|
pickle,
|
|
@@ -785,7 +786,7 @@ class Compiler(Grammar, pickleable_obj):
|
|
|
785
786
|
cls.type_alias_stmt <<= handle_and_manage(
|
|
786
787
|
cls.type_alias_stmt_ref,
|
|
787
788
|
cls.method("type_alias_stmt_handle"),
|
|
788
|
-
cls.method("
|
|
789
|
+
cls.method("scope_manage"),
|
|
789
790
|
include_in_packrat_context=False,
|
|
790
791
|
)
|
|
791
792
|
|
|
@@ -869,6 +870,7 @@ class Compiler(Grammar, pickleable_obj):
|
|
|
869
870
|
cls.no_partial_trailer_atom <<= attach(cls.no_partial_trailer_atom_ref, cls.method("item_handle"))
|
|
870
871
|
cls.simple_assign <<= attach(cls.simple_assign_ref, cls.method("item_handle"))
|
|
871
872
|
cls.expr_simple_assign <<= attach(cls.expr_simple_assign_ref, cls.method("item_handle"))
|
|
873
|
+
cls.unsafe_simple_assign <<= attach(cls.unsafe_simple_assign_ref, cls.method("item_handle"))
|
|
872
874
|
|
|
873
875
|
# handle all star assignments with star_assign_item_check
|
|
874
876
|
cls.star_assign_item <<= attach(cls.star_assign_item_ref, cls.method("star_assign_item_check"))
|
|
@@ -903,6 +905,16 @@ class Compiler(Grammar, pickleable_obj):
|
|
|
903
905
|
cls.name_match_funcdef <<= attach(cls.name_match_funcdef_ref, cls.method("name_match_funcdef_handle"))
|
|
904
906
|
cls.op_match_funcdef <<= attach(cls.op_match_funcdef_ref, cls.method("op_match_funcdef_handle"))
|
|
905
907
|
cls.base_case_funcdef <<= attach(cls.base_case_funcdef_ref, cls.method("base_case_funcdef_handle"))
|
|
908
|
+
cls.case_funcdef_case <<= manage(
|
|
909
|
+
cls.case_funcdef_case_ref,
|
|
910
|
+
cls.method("case_funcdef_clause_manage"),
|
|
911
|
+
include_in_packrat_context=False,
|
|
912
|
+
)
|
|
913
|
+
cls.case_funcdef_type <<= manage(
|
|
914
|
+
cls.case_funcdef_type_ref,
|
|
915
|
+
cls.method("case_funcdef_clause_manage"),
|
|
916
|
+
include_in_packrat_context=False,
|
|
917
|
+
)
|
|
906
918
|
cls.yield_from <<= attach(cls.yield_from_ref, cls.method("yield_from_handle"))
|
|
907
919
|
cls.typedef <<= attach(cls.typedef_ref, cls.method("typedef_handle"))
|
|
908
920
|
cls.typedef_default <<= attach(cls.typedef_default_ref, cls.method("typedef_handle"))
|
|
@@ -5196,19 +5208,6 @@ class {protocol_var}({tokens}, _coconut.typing.Protocol): pass
|
|
|
5196
5208
|
raise CoconutInternalException("invalid TypeVarFunc", TypeVarFunc, "(", name, ")")
|
|
5197
5209
|
return "_coconut.typing.Generic[" + ", ".join(generics) + "]"
|
|
5198
5210
|
|
|
5199
|
-
@contextmanager
|
|
5200
|
-
def type_alias_stmt_manage(self, original=None, loc=None, item=None):
|
|
5201
|
-
"""Manage the typevars parsing context."""
|
|
5202
|
-
prev_typevar_info = self.current_parsing_context("typevars")
|
|
5203
|
-
with self.add_to_parsing_context({
|
|
5204
|
-
"typevars": {
|
|
5205
|
-
"all_typevars": {} if prev_typevar_info is None else prev_typevar_info["all_typevars"].copy(),
|
|
5206
|
-
"new_typevars": [],
|
|
5207
|
-
"typevar_locs": {},
|
|
5208
|
-
},
|
|
5209
|
-
}):
|
|
5210
|
-
yield
|
|
5211
|
-
|
|
5212
5211
|
def type_alias_stmt_handle(self, tokens):
|
|
5213
5212
|
"""Handle type alias statements."""
|
|
5214
5213
|
if len(tokens) == 2:
|
|
@@ -5276,6 +5275,26 @@ class {protocol_var}({tokens}, _coconut.typing.Protocol): pass
|
|
|
5276
5275
|
|
|
5277
5276
|
return self.wrap_passthrough(out, early=True)
|
|
5278
5277
|
|
|
5278
|
+
@property
|
|
5279
|
+
def in_method(self):
|
|
5280
|
+
"""Determine if currently in a method."""
|
|
5281
|
+
cls_context = self.current_parsing_context("class")
|
|
5282
|
+
return cls_context is not None and cls_context["name"] is not None and cls_context["in_method"]
|
|
5283
|
+
|
|
5284
|
+
@contextmanager
|
|
5285
|
+
def scope_manage(self, original=None, loc=None, item=None):
|
|
5286
|
+
"""Manage a context that opens a new scope."""
|
|
5287
|
+
prev_typevar_info = self.current_parsing_context("typevars")
|
|
5288
|
+
with self.add_to_parsing_context({
|
|
5289
|
+
"scope": self.get_empty_scope(),
|
|
5290
|
+
"typevars": {
|
|
5291
|
+
"all_typevars": {} if prev_typevar_info is None else prev_typevar_info["all_typevars"].copy(),
|
|
5292
|
+
"new_typevars": [],
|
|
5293
|
+
"typevar_locs": {},
|
|
5294
|
+
},
|
|
5295
|
+
}):
|
|
5296
|
+
yield
|
|
5297
|
+
|
|
5279
5298
|
@contextmanager
|
|
5280
5299
|
def class_manage(self, original, loc, item):
|
|
5281
5300
|
"""Manage the class parsing context."""
|
|
@@ -5296,12 +5315,9 @@ class {protocol_var}({tokens}, _coconut.typing.Protocol): pass
|
|
|
5296
5315
|
"in_method": False,
|
|
5297
5316
|
})
|
|
5298
5317
|
try:
|
|
5299
|
-
# handles support for class type variables
|
|
5300
|
-
with self.
|
|
5301
|
-
|
|
5302
|
-
"scope": self.get_empty_scope(),
|
|
5303
|
-
}):
|
|
5304
|
-
yield
|
|
5318
|
+
# handles support for class type variables and opens a new scope
|
|
5319
|
+
with self.scope_manage():
|
|
5320
|
+
yield
|
|
5305
5321
|
finally:
|
|
5306
5322
|
cls_stack.pop()
|
|
5307
5323
|
|
|
@@ -5312,21 +5328,20 @@ class {protocol_var}({tokens}, _coconut.typing.Protocol): pass
|
|
|
5312
5328
|
if cls_context is not None:
|
|
5313
5329
|
in_method, cls_context["in_method"] = cls_context["in_method"], True
|
|
5314
5330
|
try:
|
|
5315
|
-
# handles support for function type variables
|
|
5316
|
-
with self.
|
|
5317
|
-
|
|
5318
|
-
"scope": self.get_empty_scope(),
|
|
5319
|
-
}):
|
|
5320
|
-
yield
|
|
5331
|
+
# handles support for function type variables and opens a new scope
|
|
5332
|
+
with self.scope_manage():
|
|
5333
|
+
yield
|
|
5321
5334
|
finally:
|
|
5322
5335
|
if cls_context is not None:
|
|
5323
5336
|
cls_context["in_method"] = in_method
|
|
5324
5337
|
|
|
5325
|
-
@
|
|
5326
|
-
def
|
|
5327
|
-
"""
|
|
5328
|
-
|
|
5329
|
-
|
|
5338
|
+
@contextmanager
|
|
5339
|
+
def case_funcdef_clause_manage(self, original, loc, item):
|
|
5340
|
+
"""Manage the scope for each case clause in a case def."""
|
|
5341
|
+
with self.add_to_parsing_context({
|
|
5342
|
+
"scope": self.get_empty_scope(),
|
|
5343
|
+
}):
|
|
5344
|
+
yield
|
|
5330
5345
|
|
|
5331
5346
|
@contextmanager
|
|
5332
5347
|
def has_expr_setname_manage(self, original, loc, item):
|
|
@@ -5519,7 +5534,15 @@ class {protocol_var}({tokens}, _coconut.typing.Protocol): pass
|
|
|
5519
5534
|
# only mark as final after all checks pass
|
|
5520
5535
|
if is_final:
|
|
5521
5536
|
final_vars[name] = loc
|
|
5522
|
-
if
|
|
5537
|
+
if (
|
|
5538
|
+
self.pure
|
|
5539
|
+
and assign
|
|
5540
|
+
and not escaped
|
|
5541
|
+
and not expr_setname
|
|
5542
|
+
# wildcard matching uses setname but doesn't actually assign the name,
|
|
5543
|
+
# so we need this to avoid false positives
|
|
5544
|
+
and name != wildcard
|
|
5545
|
+
):
|
|
5523
5546
|
pure_vars[name] = loc
|
|
5524
5547
|
|
|
5525
5548
|
if name == "exec":
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/compiler/grammar.py
RENAMED
|
@@ -1511,9 +1511,27 @@ class Grammar(object):
|
|
|
1511
1511
|
expr_assign_item = expr_base_assign_item | expr_star_assign_item
|
|
1512
1512
|
expr_assignlist <<= itemlist(expr_assign_item, comma, suppress_trailing=False)
|
|
1513
1513
|
|
|
1514
|
+
# must be kept in sync with assignlist block above (but with unsafe_name)
|
|
1515
|
+
unsafe_simple_assign = Forward()
|
|
1516
|
+
unsafe_simple_assign_ref = maybeparens(
|
|
1517
|
+
lparen,
|
|
1518
|
+
(
|
|
1519
|
+
# refname if there's a trailer, unsafe_name if not
|
|
1520
|
+
(refname | passthrough_atom) + OneOrMore(ZeroOrMore(complex_trailer) + OneOrMore(simple_trailer))
|
|
1521
|
+
| unsafe_name
|
|
1522
|
+
| passthrough_atom
|
|
1523
|
+
),
|
|
1524
|
+
rparen,
|
|
1525
|
+
)
|
|
1526
|
+
|
|
1514
1527
|
simple_assignlist = maybeparens(lparen, itemlist(simple_assign, comma, suppress_trailing=False), rparen)
|
|
1515
1528
|
typed_assign_stmt = Forward()
|
|
1516
|
-
typed_assign_stmt_ref =
|
|
1529
|
+
typed_assign_stmt_ref = (
|
|
1530
|
+
# with assignment value, use simple_assign
|
|
1531
|
+
simple_assign + colon.suppress() + typedef_test + equals.suppress() + test_expr
|
|
1532
|
+
# bare annotation, use unsafe_simple_assign
|
|
1533
|
+
| unsafe_simple_assign + colon.suppress() + typedef_test
|
|
1534
|
+
)
|
|
1517
1535
|
basic_stmt = addspace(ZeroOrMore(assignlist + equals) + test_expr)
|
|
1518
1536
|
|
|
1519
1537
|
type_param = Forward()
|
|
@@ -2369,6 +2387,41 @@ class Grammar(object):
|
|
|
2369
2387
|
)
|
|
2370
2388
|
|
|
2371
2389
|
base_case_funcdef = Forward()
|
|
2390
|
+
case_funcdef_case = Forward()
|
|
2391
|
+
case_funcdef_case_ref = (
|
|
2392
|
+
keyword("case").suppress()
|
|
2393
|
+
+ lparen.suppress()
|
|
2394
|
+
+ match_args_list
|
|
2395
|
+
+ match_guard
|
|
2396
|
+
+ rparen.suppress()
|
|
2397
|
+
+ (
|
|
2398
|
+
colon.suppress()
|
|
2399
|
+
+ (
|
|
2400
|
+
newline.suppress()
|
|
2401
|
+
+ indent.suppress()
|
|
2402
|
+
+ attach(condense(OneOrMore(stmt)), make_suite_handle)
|
|
2403
|
+
+ dedent.suppress()
|
|
2404
|
+
| attach(simple_stmt, make_suite_handle)
|
|
2405
|
+
)
|
|
2406
|
+
| equals.suppress()
|
|
2407
|
+
+ (
|
|
2408
|
+
(
|
|
2409
|
+
newline.suppress()
|
|
2410
|
+
+ indent.suppress()
|
|
2411
|
+
+ attach(math_funcdef_body, make_suite_handle)
|
|
2412
|
+
+ dedent.suppress()
|
|
2413
|
+
)
|
|
2414
|
+
| attach(implicit_return_stmt, make_suite_handle)
|
|
2415
|
+
)
|
|
2416
|
+
)
|
|
2417
|
+
)
|
|
2418
|
+
case_funcdef_type = Forward()
|
|
2419
|
+
case_funcdef_type_ref = (
|
|
2420
|
+
keyword("type").suppress()
|
|
2421
|
+
+ parameters
|
|
2422
|
+
+ return_typedef
|
|
2423
|
+
+ newline.suppress()
|
|
2424
|
+
)
|
|
2372
2425
|
base_case_funcdef_ref = (
|
|
2373
2426
|
keyword("def").suppress()
|
|
2374
2427
|
+ Group(
|
|
@@ -2381,38 +2434,11 @@ class Grammar(object):
|
|
|
2381
2434
|
- Optional(docstring)
|
|
2382
2435
|
- Group(OneOrMore(
|
|
2383
2436
|
labeled_group(
|
|
2384
|
-
|
|
2385
|
-
+ lparen.suppress()
|
|
2386
|
-
+ match_args_list
|
|
2387
|
-
+ match_guard
|
|
2388
|
-
+ rparen.suppress()
|
|
2389
|
-
+ (
|
|
2390
|
-
colon.suppress()
|
|
2391
|
-
+ (
|
|
2392
|
-
newline.suppress()
|
|
2393
|
-
+ indent.suppress()
|
|
2394
|
-
+ attach(condense(OneOrMore(stmt)), make_suite_handle)
|
|
2395
|
-
+ dedent.suppress()
|
|
2396
|
-
| attach(simple_stmt, make_suite_handle)
|
|
2397
|
-
)
|
|
2398
|
-
| equals.suppress()
|
|
2399
|
-
+ (
|
|
2400
|
-
(
|
|
2401
|
-
newline.suppress()
|
|
2402
|
-
+ indent.suppress()
|
|
2403
|
-
+ attach(math_funcdef_body, make_suite_handle)
|
|
2404
|
-
+ dedent.suppress()
|
|
2405
|
-
)
|
|
2406
|
-
| attach(implicit_return_stmt, make_suite_handle)
|
|
2407
|
-
)
|
|
2408
|
-
),
|
|
2437
|
+
case_funcdef_case,
|
|
2409
2438
|
"match",
|
|
2410
2439
|
)
|
|
2411
2440
|
| labeled_group(
|
|
2412
|
-
|
|
2413
|
-
+ parameters
|
|
2414
|
-
+ return_typedef
|
|
2415
|
-
+ newline.suppress(),
|
|
2441
|
+
case_funcdef_type,
|
|
2416
2442
|
"type",
|
|
2417
2443
|
)
|
|
2418
2444
|
))
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/compiler/util.py
RENAMED
|
@@ -1393,7 +1393,10 @@ class Wrap(ParseElementEnhance):
|
|
|
1393
1393
|
|
|
1394
1394
|
|
|
1395
1395
|
def manage(item, manager, include_in_packrat_context, greedy=True):
|
|
1396
|
-
"""Attach a manager to the given parse item.
|
|
1396
|
+
"""Attach a manager to the given parse item.
|
|
1397
|
+
|
|
1398
|
+
include_in_packrat_context should be True if the manager changes whether a parse can succeed and False otherwise.
|
|
1399
|
+
"""
|
|
1397
1400
|
return Wrap(item, manager, include_in_packrat_context=include_in_packrat_context, greedy=greedy)
|
|
1398
1401
|
|
|
1399
1402
|
|
|
@@ -26,7 +26,7 @@ import sys as _coconut_sys
|
|
|
26
26
|
VERSION = "3.2.0"
|
|
27
27
|
VERSION_NAME = None
|
|
28
28
|
# False for release, int >= 1 for develop
|
|
29
|
-
DEVELOP =
|
|
29
|
+
DEVELOP = 7
|
|
30
30
|
ALPHA = False # for pre releases rather than post releases
|
|
31
31
|
|
|
32
32
|
assert DEVELOP is False or DEVELOP >= 1, "DEVELOP must be False or an int >= 1"
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/main_test.py
RENAMED
|
@@ -1113,7 +1113,7 @@ if TEST_ALL:
|
|
|
1113
1113
|
if not PYPY or PY2:
|
|
1114
1114
|
def test_prelude(self):
|
|
1115
1115
|
with using_paths(prelude):
|
|
1116
|
-
comp_prelude(expect_retcode=None)
|
|
1116
|
+
comp_prelude(["--strict", "--pure"], expect_retcode=None)
|
|
1117
1117
|
if MYPY and PY38:
|
|
1118
1118
|
run_prelude()
|
|
1119
1119
|
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/extras.coco
RENAMED
|
@@ -572,6 +572,15 @@ class A:
|
|
|
572
572
|
class A:
|
|
573
573
|
def mk_int(x) = int(x)
|
|
574
574
|
""".strip())
|
|
575
|
+
assert parse("""
|
|
576
|
+
x: int
|
|
577
|
+
x = 1
|
|
578
|
+
""".strip())
|
|
579
|
+
assert parse("""
|
|
580
|
+
case def f:
|
|
581
|
+
case(x) = x
|
|
582
|
+
case(x, y) = x + y
|
|
583
|
+
""".strip())
|
|
575
584
|
assert_raises(-> parse("""
|
|
576
585
|
def f():
|
|
577
586
|
global x
|
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/.claude/settings.local.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/__coconut__/__init__.py
RENAMED
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/__coconut__/__init__.pyi
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/__coconut__.py
RENAMED
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/__coconut__.pyi
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/command/__init__.py
RENAMED
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/command/__init__.pyi
RENAMED
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/command/cli.py
RENAMED
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/command/command.py
RENAMED
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/command/command.pyi
RENAMED
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/command/mypy.py
RENAMED
|
File without changes
|
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/command/util.py
RENAMED
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/command/watch.py
RENAMED
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/compiler/__init__.py
RENAMED
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/compiler/header.py
RENAMED
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/compiler/matching.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/convenience.py
RENAMED
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/convenience.pyi
RENAMED
|
File without changes
|
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/highlighter.py
RENAMED
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/icoconut/__init__.py
RENAMED
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/icoconut/__main__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/icoconut/embed.py
RENAMED
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/icoconut/root.py
RENAMED
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/integrations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/requirements.py
RENAMED
|
File without changes
|
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/__init__.py
RENAMED
|
File without changes
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/__main__.py
RENAMED
|
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
|
{coconut_develop-3.2.0.post0.dev5 → coconut_develop-3.2.0.post0.dev7}/coconut/tests/src/runner.coco
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|