IncludeCPP 4.9.4__tar.gz → 4.9.5__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-4.9.4 → includecpp-4.9.5}/IncludeCPP.egg-info/PKG-INFO +1 -1
- {includecpp-4.9.4 → includecpp-4.9.5}/PKG-INFO +1 -1
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/CHANGELOG.md +44 -1
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/__init__.py +1 -1
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/CSSL_DOCUMENTATION.md +40 -1
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/cssl_builtins.py +84 -9
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/cssl_parser.py +278 -12
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/cssl_runtime.py +60 -6
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/snippets/cssl.snippets.json +25 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/syntaxes/cssl.tmLanguage.json +1 -1
- {includecpp-4.9.4 → includecpp-4.9.5}/pyproject.toml +1 -1
- {includecpp-4.9.4 → includecpp-4.9.5}/IncludeCPP.egg-info/SOURCES.txt +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/IncludeCPP.egg-info/dependency_links.txt +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/IncludeCPP.egg-info/entry_points.txt +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/IncludeCPP.egg-info/requires.txt +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/IncludeCPP.egg-info/top_level.txt +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/LICENSE +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/MANIFEST.in +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/README.md +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/DOCUMENTATION.md +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/__init__.pyi +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/__main__.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/cli/__init__.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/cli/commands.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/cli/config_parser.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/__init__.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/ai_integration.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/build_manager.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cpp_api.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cpp_api.pyi +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cpp_api_extensions.pyi +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cppy_converter.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/CSSL_DOCUMENTATION_NEW.md +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/__init__.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/cpp/build/api.pyd +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/cpp/build/api.pyi +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/cpp/build/cssl_core.pyi +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/cpp/build/libgcc_s_seh-1.dll +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/cpp/build/libstdc++-6.dll +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/cpp/build/libwinpthread-1.dll +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/cpp/cssl_core.cp +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/cpp/cssl_lexer.hpp +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/cssl_builtins.pyi +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/cssl_compiler.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/cssl_events.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/cssl_languages.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/cssl_modules.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/cssl_optimizer.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/cssl_syntax.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl/cssl_types.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl_bridge.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/cssl_bridge.pyi +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/error_catalog.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/error_formatter.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/exceptions.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/homeserver.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/path_discovery.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/project_ui.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/core/settings_ui.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/generator/__init__.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/generator/parser.cpp +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/generator/parser.h +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/generator/type_resolver.cpp +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/generator/type_resolver.h +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/gui/__init__.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/gui/exe_wizard.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/py.typed +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/templates/cpp.proj.template +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/__init__.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/__init__.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/extension.js +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/images/cssl.png +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/images/cssl_pl.png +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/language-configuration.json +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/.package-lock.json +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/@types/node/README.md +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/@types/node/package.json +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/@types/vscode/README.md +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/@types/vscode/package.json +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/balanced-match/LICENSE.md +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/balanced-match/README.md +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/balanced-match/package.json +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/brace-expansion/README.md +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/brace-expansion/package.json +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/minimatch/README.md +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/minimatch/package.json +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/semver/README.md +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/semver/package.json +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/undici-types/README.md +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/undici-types/package.json +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/vscode-jsonrpc/README.md +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/vscode-jsonrpc/package.json +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/vscode-languageclient/README.md +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/vscode-languageclient/package.json +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/vscode-languageserver-protocol/README.md +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/vscode-languageserver-protocol/metaModel.schema.json +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/vscode-languageserver-protocol/package.json +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/vscode-languageserver-types/README.md +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/vscode-languageserver-types/lib/esm/package.json +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/node_modules/vscode-languageserver-types/package.json +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/package-lock.json +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/package.json +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/server/__init__.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/server/__main__.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/server/analysis/__init__.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/server/analysis/diagnostic_provider.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/server/analysis/document_manager.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/server/analysis/semantic_analyzer.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/server/providers/__init__.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/server/providers/completion_provider.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/server/providers/definition_provider.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/server/providers/hover_provider.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/server/server.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/server/utils/__init__.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/server/utils/position_utils.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/includecpp/vscode/cssl/server/utils/symbol_table.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/requirements.txt +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/setup.cfg +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/setup.py +0 -0
- {includecpp-4.9.4 → includecpp-4.9.5}/tests/test_multilang.py +0 -0
|
@@ -1,6 +1,49 @@
|
|
|
1
1
|
# IncludeCPP Changelog
|
|
2
2
|
|
|
3
|
-
## v4.9.
|
|
3
|
+
## v4.9.5 (2026-01-27)
|
|
4
|
+
|
|
5
|
+
### Variable Modifiers
|
|
6
|
+
|
|
7
|
+
#### `local`, `static`, `freezed` Keywords
|
|
8
|
+
- **`local`**: Forbids global reference access (`@var` returns null), allows snapshots (`%var`)
|
|
9
|
+
```cssl
|
|
10
|
+
local int privateCounter = 0;
|
|
11
|
+
@privateCounter; // Returns null (cannot access via @)
|
|
12
|
+
snapshot(privateCounter);
|
|
13
|
+
%privateCounter; // Works normally
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
- **`static`**: Allows global reference access (`@var`), forbids snapshots (`%var` returns null)
|
|
17
|
+
```cssl
|
|
18
|
+
static int cachedValue = 42;
|
|
19
|
+
@cachedValue; // Works normally
|
|
20
|
+
%cachedValue; // Returns null (cannot snapshot)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
- **`local static`**: Forbids both `@` and `%` access
|
|
24
|
+
```cssl
|
|
25
|
+
local static int internalOnly = 100;
|
|
26
|
+
@internalOnly; // Returns null
|
|
27
|
+
%internalOnly; // Returns null
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
- **`freezed`**: Creates immutable variables (reassignment returns null)
|
|
31
|
+
```cssl
|
|
32
|
+
freezed string constant = "immutable";
|
|
33
|
+
constant = "new value"; // Returns null (no change made)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Function Modifier Fixes
|
|
37
|
+
|
|
38
|
+
#### `undefined` and `super` Error Handling
|
|
39
|
+
- **Per-statement error handling**: `undefined` and `super` modifiers now catch errors on each statement and continue execution
|
|
40
|
+
```cssl
|
|
41
|
+
undefined define SafeFunc() {
|
|
42
|
+
d = ?nonexistent; // Error swallowed, continues
|
|
43
|
+
x = 2; // Executes
|
|
44
|
+
return x; // Returns 2
|
|
45
|
+
}
|
|
46
|
+
```
|
|
4
47
|
|
|
5
48
|
### Generator Enhancements
|
|
6
49
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CSSL - C-Style Scripting Language
|
|
2
2
|
|
|
3
|
-
> Version 4.9.
|
|
3
|
+
> Version 4.9.5 | A modern scripting language with C++-style syntax featuring async/await, generators, CodeInfusion, BruteInjection, Snapshots, Variable Modifiers (local/static/freezed), Python/C++ Interop, Multi-Language Support, and 330+ built-in functions.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -368,6 +368,45 @@ snapshot(myVar);
|
|
|
368
368
|
printl(%myVar); // Access snapshotted value
|
|
369
369
|
```
|
|
370
370
|
|
|
371
|
+
### Variable Modifiers (v4.9.4)
|
|
372
|
+
|
|
373
|
+
Control how variables can be accessed and modified with special modifiers:
|
|
374
|
+
|
|
375
|
+
```cssl
|
|
376
|
+
// local - forbids global reference (@), allows snapshot (%)
|
|
377
|
+
local int privateCounter = 0;
|
|
378
|
+
@privateCounter; // Returns null (cannot access via @)
|
|
379
|
+
snapshot(privateCounter);
|
|
380
|
+
%privateCounter; // Works normally
|
|
381
|
+
|
|
382
|
+
// static - allows global reference (@), forbids snapshot (%)
|
|
383
|
+
static int cachedValue = 42;
|
|
384
|
+
@cachedValue; // Works normally
|
|
385
|
+
snapshot(cachedValue);
|
|
386
|
+
%cachedValue; // Returns null (cannot snapshot)
|
|
387
|
+
|
|
388
|
+
// local static - forbids both @ and % access
|
|
389
|
+
local static int internalOnly = 100;
|
|
390
|
+
@internalOnly; // Returns null
|
|
391
|
+
%internalOnly; // Returns null
|
|
392
|
+
|
|
393
|
+
// freezed - creates immutable variable (cannot be reassigned)
|
|
394
|
+
freezed string constant = "immutable";
|
|
395
|
+
constant = "new value"; // Returns null (cannot reassign)
|
|
396
|
+
|
|
397
|
+
// Combine modifiers
|
|
398
|
+
freezed local int secretConst = 999; // Immutable and no global access
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
**Modifier Summary:**
|
|
402
|
+
| Modifier | `@var` (global) | `%var` (snapshot) | Reassignment |
|
|
403
|
+
|----------|-----------------|-------------------|--------------|
|
|
404
|
+
| (none) | ✓ allowed | ✓ allowed | ✓ allowed |
|
|
405
|
+
| `local` | ✗ returns null | ✓ allowed | ✓ allowed |
|
|
406
|
+
| `static` | ✓ allowed | ✗ returns null | ✓ allowed |
|
|
407
|
+
| `local static` | ✗ returns null | ✗ returns null | ✓ allowed |
|
|
408
|
+
| `freezed`| ✓ allowed | ✓ allowed | ✗ returns null |
|
|
409
|
+
|
|
371
410
|
---
|
|
372
411
|
|
|
373
412
|
## Operators
|
|
@@ -243,6 +243,7 @@ class CSSLBuiltins:
|
|
|
243
243
|
|
|
244
244
|
# Type checking
|
|
245
245
|
self._functions['typeof'] = self.builtin_typeof
|
|
246
|
+
self._functions['nameof'] = self.builtin_nameof # v4.9.4: Get name of function/class/object
|
|
246
247
|
self._functions['memory'] = self.builtin_memory # v4.8.9: Python repr() for debugging
|
|
247
248
|
self._functions['address'] = self.builtin_address # v4.9.0: Get address of object
|
|
248
249
|
self._functions['reflect'] = self.builtin_reflect # v4.9.0: Reflect address to object
|
|
@@ -879,6 +880,65 @@ class CSSLBuiltins:
|
|
|
879
880
|
}
|
|
880
881
|
return type_map.get(type(value), type(value).__name__)
|
|
881
882
|
|
|
883
|
+
def builtin_nameof(self, value: Any) -> str:
|
|
884
|
+
"""Get the name of a function, class, or object.
|
|
885
|
+
|
|
886
|
+
v4.9.4: Returns the identifier name for reflection/debugging.
|
|
887
|
+
|
|
888
|
+
For functions: returns the function name
|
|
889
|
+
For classes: returns the class name
|
|
890
|
+
For instances: returns the class name
|
|
891
|
+
For AST nodes: returns the name from the node value
|
|
892
|
+
For other objects: returns the type name
|
|
893
|
+
|
|
894
|
+
Example:
|
|
895
|
+
define myFunc() { }
|
|
896
|
+
printl(nameof(myFunc)); // "myFunc"
|
|
897
|
+
|
|
898
|
+
class MyClass { }
|
|
899
|
+
printl(nameof(MyClass)); // "MyClass"
|
|
900
|
+
|
|
901
|
+
MyClass obj = new MyClass();
|
|
902
|
+
printl(nameof(obj)); // "MyClass"
|
|
903
|
+
"""
|
|
904
|
+
from .cssl_parser import ASTNode
|
|
905
|
+
from .cssl_types import CSSLInstance
|
|
906
|
+
|
|
907
|
+
# AST function node
|
|
908
|
+
if isinstance(value, ASTNode):
|
|
909
|
+
if value.type == 'function':
|
|
910
|
+
func_info = value.value
|
|
911
|
+
if isinstance(func_info, dict):
|
|
912
|
+
return func_info.get('name', '<anonymous>')
|
|
913
|
+
return str(func_info) if func_info else '<anonymous>'
|
|
914
|
+
elif value.type == 'class':
|
|
915
|
+
class_info = value.value
|
|
916
|
+
if isinstance(class_info, dict):
|
|
917
|
+
return class_info.get('name', '<anonymous>')
|
|
918
|
+
return str(class_info) if class_info else '<anonymous>'
|
|
919
|
+
elif value.type == 'identifier':
|
|
920
|
+
return value.value
|
|
921
|
+
return value.type
|
|
922
|
+
|
|
923
|
+
# CSSL class instance
|
|
924
|
+
if isinstance(value, CSSLInstance):
|
|
925
|
+
return value._class.name if hasattr(value, '_class') else type(value).__name__
|
|
926
|
+
|
|
927
|
+
# CSSL class definition (stored as dict with 'name' key)
|
|
928
|
+
if isinstance(value, dict) and 'name' in value:
|
|
929
|
+
return value['name']
|
|
930
|
+
|
|
931
|
+
# Python callable (function)
|
|
932
|
+
if callable(value):
|
|
933
|
+
if hasattr(value, '__name__'):
|
|
934
|
+
return value.__name__
|
|
935
|
+
if hasattr(value, 'name'):
|
|
936
|
+
return value.name
|
|
937
|
+
return type(value).__name__
|
|
938
|
+
|
|
939
|
+
# Fallback to type name
|
|
940
|
+
return type(value).__name__
|
|
941
|
+
|
|
882
942
|
def builtin_memory(self, value: Any) -> dict:
|
|
883
943
|
"""Get memory/introspection info about a value as a dictionary.
|
|
884
944
|
|
|
@@ -1069,7 +1129,8 @@ class CSSLBuiltins:
|
|
|
1069
1129
|
Returns:
|
|
1070
1130
|
The result of the last expression or explicit return
|
|
1071
1131
|
"""
|
|
1072
|
-
|
|
1132
|
+
# v4.9.4: Fix attribute name - use self.runtime not self._runtime
|
|
1133
|
+
if not self.runtime:
|
|
1073
1134
|
return None
|
|
1074
1135
|
|
|
1075
1136
|
try:
|
|
@@ -1083,17 +1144,17 @@ class CSSLBuiltins:
|
|
|
1083
1144
|
# Inject context variables into scope if provided
|
|
1084
1145
|
if context and isinstance(context, dict):
|
|
1085
1146
|
for name, value in context.items():
|
|
1086
|
-
self.
|
|
1147
|
+
self.runtime.scope.set(name, value)
|
|
1087
1148
|
|
|
1088
1149
|
# Execute each statement
|
|
1089
1150
|
result = None
|
|
1090
1151
|
for node in ast.children:
|
|
1091
|
-
result = self.
|
|
1152
|
+
result = self.runtime._execute_node(node)
|
|
1092
1153
|
# Check for early return
|
|
1093
|
-
if self.
|
|
1094
|
-
result = self.
|
|
1095
|
-
self.
|
|
1096
|
-
self.
|
|
1154
|
+
if self.runtime._return_triggered:
|
|
1155
|
+
result = self.runtime._return_value
|
|
1156
|
+
self.runtime._return_triggered = False
|
|
1157
|
+
self.runtime._return_value = None
|
|
1097
1158
|
break
|
|
1098
1159
|
|
|
1099
1160
|
return result
|
|
@@ -1503,10 +1564,18 @@ class CSSLBuiltins:
|
|
|
1503
1564
|
# ============= Time Functions =============
|
|
1504
1565
|
|
|
1505
1566
|
def builtin_now(self) -> float:
|
|
1506
|
-
|
|
1567
|
+
import sys
|
|
1568
|
+
result = time.time()
|
|
1569
|
+
sys.stderr.write(f"[DEBUG] builtin_now() called, returning {result}\n")
|
|
1570
|
+
sys.stderr.flush()
|
|
1571
|
+
return result
|
|
1507
1572
|
|
|
1508
1573
|
def builtin_timestamp(self) -> int:
|
|
1509
|
-
|
|
1574
|
+
import sys
|
|
1575
|
+
result = int(time.time())
|
|
1576
|
+
sys.stderr.write(f"[DEBUG] builtin_timestamp() called, returning {result}\n")
|
|
1577
|
+
sys.stderr.flush()
|
|
1578
|
+
return result
|
|
1510
1579
|
|
|
1511
1580
|
def builtin_sleep(self, seconds: float) -> None:
|
|
1512
1581
|
time.sleep(seconds)
|
|
@@ -4701,6 +4770,8 @@ class CSSLBuiltins:
|
|
|
4701
4770
|
|
|
4702
4771
|
After snapshotting, access the value with %name syntax.
|
|
4703
4772
|
|
|
4773
|
+
v4.9.4: Variables marked as 'static' cannot be snapshotted (returns False, no error)
|
|
4774
|
+
|
|
4704
4775
|
Example:
|
|
4705
4776
|
string version = "1.0";
|
|
4706
4777
|
snapshot(version);
|
|
@@ -4739,6 +4810,10 @@ class CSSLBuiltins:
|
|
|
4739
4810
|
# Use a generic name based on type and hash
|
|
4740
4811
|
name = f"_snap_{type(value).__name__}_{id(value)}"
|
|
4741
4812
|
|
|
4813
|
+
# v4.9.4: Check if variable is marked as 'static' - cannot be snapshotted
|
|
4814
|
+
if self.runtime and name in self.runtime._var_meta and self.runtime._var_meta[name].get('is_static', False):
|
|
4815
|
+
return False # static variables cannot be snapshotted
|
|
4816
|
+
|
|
4742
4817
|
# Deep copy to preserve the state
|
|
4743
4818
|
try:
|
|
4744
4819
|
snapped_value = copy.deepcopy(value)
|