IncludeCPP 3.7.22__tar.gz → 3.7.23__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.
- {includecpp-3.7.22 → includecpp-3.7.23}/IncludeCPP.egg-info/PKG-INFO +1 -1
- {includecpp-3.7.22 → includecpp-3.7.23}/PKG-INFO +1 -1
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/__init__.py +1 -1
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/cssl/cssl_parser.py +31 -21
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/cssl/cssl_runtime.py +56 -2
- {includecpp-3.7.22 → includecpp-3.7.23}/pyproject.toml +1 -1
- {includecpp-3.7.22 → includecpp-3.7.23}/IncludeCPP.egg-info/SOURCES.txt +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/IncludeCPP.egg-info/dependency_links.txt +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/IncludeCPP.egg-info/entry_points.txt +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/IncludeCPP.egg-info/requires.txt +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/IncludeCPP.egg-info/top_level.txt +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/LICENSE +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/MANIFEST.in +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/README.md +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/__init__.pyi +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/__main__.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/cli/__init__.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/cli/commands.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/cli/config_parser.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/__init__.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/ai_integration.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/build_manager.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/cpp_api.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/cpp_api.pyi +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/cppy_converter.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/cssl/CSSL_DOCUMENTATION.md +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/cssl/__init__.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/cssl/cssl_builtins.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/cssl/cssl_builtins.pyi +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/cssl/cssl_events.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/cssl/cssl_modules.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/cssl/cssl_syntax.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/cssl/cssl_types.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/cssl_bridge.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/cssl_bridge.pyi +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/error_catalog.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/error_formatter.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/exceptions.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/path_discovery.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/project_ui.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/core/settings_ui.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/generator/__init__.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/generator/parser.cpp +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/generator/parser.h +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/generator/type_resolver.cpp +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/generator/type_resolver.h +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/py.typed +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/templates/cpp.proj.template +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/vscode/__init__.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/vscode/cssl/__init__.py +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/vscode/cssl/images/cssl.png +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/vscode/cssl/images/cssl_pl.png +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/vscode/cssl/language-configuration.json +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/vscode/cssl/package.json +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/vscode/cssl/snippets/cssl.snippets.json +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/includecpp/vscode/cssl/syntaxes/cssl.tmLanguage.json +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/requirements.txt +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/setup.cfg +0 -0
- {includecpp-3.7.22 → includecpp-3.7.23}/setup.py +0 -0
|
@@ -1919,32 +1919,42 @@ class CSSLParser:
|
|
|
1919
1919
|
self._expect(TokenType.BLOCK_END)
|
|
1920
1920
|
return node
|
|
1921
1921
|
|
|
1922
|
-
def _parse_injection_filter(self) -> Optional[
|
|
1923
|
-
"""Parse injection filter: [type::helper=value]
|
|
1924
|
-
|
|
1922
|
+
def _parse_injection_filter(self) -> Optional[list]:
|
|
1923
|
+
"""Parse injection filter(s): [type::helper=value] or [f1][f2][f3]...
|
|
1924
|
+
|
|
1925
|
+
Returns a list of filter dictionaries to support chained filters.
|
|
1926
|
+
"""
|
|
1927
|
+
if not self._check(TokenType.BRACKET_START):
|
|
1925
1928
|
return None
|
|
1926
1929
|
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1930
|
+
filters = []
|
|
1931
|
+
|
|
1932
|
+
# Parse multiple consecutive filter brackets
|
|
1933
|
+
while self._match(TokenType.BRACKET_START):
|
|
1934
|
+
filter_info = {}
|
|
1935
|
+
# Parse type::helper=value patterns within this bracket
|
|
1936
|
+
while not self._check(TokenType.BRACKET_END) and not self._is_at_end():
|
|
1937
|
+
if self._check(TokenType.IDENTIFIER) or self._check(TokenType.KEYWORD):
|
|
1938
|
+
filter_type = self._advance().value
|
|
1939
|
+
if self._match(TokenType.DOUBLE_COLON):
|
|
1940
|
+
helper = self._advance().value
|
|
1941
|
+
if self._match(TokenType.EQUALS):
|
|
1942
|
+
value = self._parse_expression()
|
|
1943
|
+
filter_info[f'{filter_type}::{helper}'] = value
|
|
1944
|
+
else:
|
|
1945
|
+
filter_info[f'{filter_type}::{helper}'] = True
|
|
1937
1946
|
else:
|
|
1938
|
-
filter_info[
|
|
1947
|
+
filter_info['type'] = filter_type
|
|
1948
|
+
elif self._check(TokenType.COMMA):
|
|
1949
|
+
self._advance()
|
|
1939
1950
|
else:
|
|
1940
|
-
|
|
1941
|
-
elif self._check(TokenType.COMMA):
|
|
1942
|
-
self._advance()
|
|
1943
|
-
else:
|
|
1944
|
-
break
|
|
1951
|
+
break
|
|
1945
1952
|
|
|
1946
|
-
|
|
1947
|
-
|
|
1953
|
+
self._expect(TokenType.BRACKET_END)
|
|
1954
|
+
if filter_info:
|
|
1955
|
+
filters.append(filter_info)
|
|
1956
|
+
|
|
1957
|
+
return filters if filters else None
|
|
1948
1958
|
|
|
1949
1959
|
def _parse_expression_statement(self) -> Optional[ASTNode]:
|
|
1950
1960
|
expr = self._parse_expression()
|
|
@@ -1331,8 +1331,11 @@ class CSSLRuntime:
|
|
|
1331
1331
|
|
|
1332
1332
|
return command_name
|
|
1333
1333
|
|
|
1334
|
-
def _apply_injection_filter(self, source: Any, filter_info
|
|
1335
|
-
"""Apply injection filter to extract specific data from source.
|
|
1334
|
+
def _apply_injection_filter(self, source: Any, filter_info) -> Any:
|
|
1335
|
+
"""Apply injection filter(s) to extract specific data from source.
|
|
1336
|
+
|
|
1337
|
+
Supports both single filter dict and list of filter dicts for chained filters.
|
|
1338
|
+
Example: [dynamic::content=10][dynamic::content=100] applies both filters.
|
|
1336
1339
|
|
|
1337
1340
|
All BruteInjector Helpers:
|
|
1338
1341
|
- string::where=VALUE - Filter strings containing VALUE
|
|
@@ -1359,6 +1362,21 @@ class CSSLRuntime:
|
|
|
1359
1362
|
if not filter_info:
|
|
1360
1363
|
return source
|
|
1361
1364
|
|
|
1365
|
+
# Handle list of filters (chained filters)
|
|
1366
|
+
if isinstance(filter_info, list):
|
|
1367
|
+
result = source
|
|
1368
|
+
for single_filter in filter_info:
|
|
1369
|
+
result = self._apply_single_filter(result, single_filter)
|
|
1370
|
+
return result
|
|
1371
|
+
|
|
1372
|
+
# Single filter (dict)
|
|
1373
|
+
return self._apply_single_filter(source, filter_info)
|
|
1374
|
+
|
|
1375
|
+
def _apply_single_filter(self, source: Any, filter_info: dict) -> Any:
|
|
1376
|
+
"""Apply a single injection filter to extract specific data from source."""
|
|
1377
|
+
if not filter_info:
|
|
1378
|
+
return source
|
|
1379
|
+
|
|
1362
1380
|
result = source
|
|
1363
1381
|
|
|
1364
1382
|
for filter_key, filter_value in filter_info.items():
|
|
@@ -2004,6 +2022,42 @@ class CSSLRuntime:
|
|
|
2004
2022
|
self.global_scope.set(f'${name}', SharedObjectProxy(name, final_value))
|
|
2005
2023
|
elif target.type == 'member_access':
|
|
2006
2024
|
self._set_member(target, final_value)
|
|
2025
|
+
elif target.type == 'typed_declaration':
|
|
2026
|
+
# Handle typed target: source ==> datastruct<dynamic> Output
|
|
2027
|
+
var_name = target.value.get('name')
|
|
2028
|
+
type_name = target.value.get('type_name')
|
|
2029
|
+
element_type = target.value.get('element_type', 'dynamic')
|
|
2030
|
+
|
|
2031
|
+
# Create appropriate container with final_value
|
|
2032
|
+
from .cssl_types import (create_datastruct, create_vector, create_array,
|
|
2033
|
+
create_stack, create_list, create_dictionary, create_map)
|
|
2034
|
+
|
|
2035
|
+
container = None
|
|
2036
|
+
if type_name == 'datastruct':
|
|
2037
|
+
container = create_datastruct(element_type)
|
|
2038
|
+
elif type_name == 'vector':
|
|
2039
|
+
container = create_vector(element_type)
|
|
2040
|
+
elif type_name == 'array':
|
|
2041
|
+
container = create_array(element_type)
|
|
2042
|
+
elif type_name == 'stack':
|
|
2043
|
+
container = create_stack(element_type)
|
|
2044
|
+
elif type_name == 'list':
|
|
2045
|
+
container = create_list(element_type)
|
|
2046
|
+
elif type_name == 'dictionary':
|
|
2047
|
+
container = create_dictionary()
|
|
2048
|
+
elif type_name == 'map':
|
|
2049
|
+
container = create_map()
|
|
2050
|
+
|
|
2051
|
+
if container is not None:
|
|
2052
|
+
# Add final_value to container
|
|
2053
|
+
if isinstance(final_value, (list, tuple)):
|
|
2054
|
+
container.extend(final_value)
|
|
2055
|
+
elif final_value is not None:
|
|
2056
|
+
container.append(final_value)
|
|
2057
|
+
self.scope.set(var_name, container)
|
|
2058
|
+
else:
|
|
2059
|
+
# Unknown type, just set the value directly
|
|
2060
|
+
self.scope.set(var_name, final_value)
|
|
2007
2061
|
|
|
2008
2062
|
return final_value
|
|
2009
2063
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "IncludeCPP"
|
|
7
|
-
version = "3.7.
|
|
7
|
+
version = "3.7.23"
|
|
8
8
|
description = "Professional C++ Python bindings with type-generic templates, pystubs and native threading"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
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
|
|
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
|
{includecpp-3.7.22 → includecpp-3.7.23}/includecpp/vscode/cssl/syntaxes/cssl.tmLanguage.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|