zexus 1.6.8 → 1.7.2
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.
- package/README.md +12 -5
- package/package.json +1 -1
- package/src/__init__.py +7 -0
- package/src/zexus/__init__.py +1 -1
- package/src/zexus/__pycache__/__init__.cpython-312.pyc +0 -0
- package/src/zexus/__pycache__/capability_system.cpython-312.pyc +0 -0
- package/src/zexus/__pycache__/debug_sanitizer.cpython-312.pyc +0 -0
- package/src/zexus/__pycache__/environment.cpython-312.pyc +0 -0
- package/src/zexus/__pycache__/error_reporter.cpython-312.pyc +0 -0
- package/src/zexus/__pycache__/input_validation.cpython-312.pyc +0 -0
- package/src/zexus/__pycache__/lexer.cpython-312.pyc +0 -0
- package/src/zexus/__pycache__/module_cache.cpython-312.pyc +0 -0
- package/src/zexus/__pycache__/module_manager.cpython-312.pyc +0 -0
- package/src/zexus/__pycache__/object.cpython-312.pyc +0 -0
- package/src/zexus/__pycache__/security.cpython-312.pyc +0 -0
- package/src/zexus/__pycache__/security_enforcement.cpython-312.pyc +0 -0
- package/src/zexus/__pycache__/syntax_validator.cpython-312.pyc +0 -0
- package/src/zexus/__pycache__/zexus_ast.cpython-312.pyc +0 -0
- package/src/zexus/__pycache__/zexus_token.cpython-312.pyc +0 -0
- package/src/zexus/access_control_system/__pycache__/__init__.cpython-312.pyc +0 -0
- package/src/zexus/access_control_system/__pycache__/access_control.cpython-312.pyc +0 -0
- package/src/zexus/advanced_types.py +17 -2
- package/src/zexus/blockchain/__init__.py +411 -0
- package/src/zexus/blockchain/accelerator.py +1160 -0
- package/src/zexus/blockchain/chain.py +660 -0
- package/src/zexus/blockchain/consensus.py +821 -0
- package/src/zexus/blockchain/contract_vm.py +1019 -0
- package/src/zexus/blockchain/crypto.py +79 -14
- package/src/zexus/blockchain/events.py +526 -0
- package/src/zexus/blockchain/loadtest.py +721 -0
- package/src/zexus/blockchain/monitoring.py +350 -0
- package/src/zexus/blockchain/mpt.py +716 -0
- package/src/zexus/blockchain/multichain.py +951 -0
- package/src/zexus/blockchain/multiprocess_executor.py +338 -0
- package/src/zexus/blockchain/network.py +886 -0
- package/src/zexus/blockchain/node.py +666 -0
- package/src/zexus/blockchain/rpc.py +1203 -0
- package/src/zexus/blockchain/rust_bridge.py +421 -0
- package/src/zexus/blockchain/storage.py +423 -0
- package/src/zexus/blockchain/tokens.py +750 -0
- package/src/zexus/blockchain/upgradeable.py +1004 -0
- package/src/zexus/blockchain/verification.py +1602 -0
- package/src/zexus/blockchain/wallet.py +621 -0
- package/src/zexus/capability_system.py +184 -9
- package/src/zexus/cli/__pycache__/main.cpython-312.pyc +0 -0
- package/src/zexus/cli/main.py +383 -34
- package/src/zexus/cli/zpm.py +1 -1
- package/src/zexus/compiler/__pycache__/bytecode.cpython-312.pyc +0 -0
- package/src/zexus/compiler/__pycache__/lexer.cpython-312.pyc +0 -0
- package/src/zexus/compiler/__pycache__/parser.cpython-312.pyc +0 -0
- package/src/zexus/compiler/__pycache__/semantic.cpython-312.pyc +0 -0
- package/src/zexus/compiler/__pycache__/zexus_ast.cpython-312.pyc +0 -0
- package/src/zexus/compiler/bytecode.py +124 -7
- package/src/zexus/compiler/compat_runtime.py +6 -2
- package/src/zexus/compiler/lexer.py +16 -5
- package/src/zexus/compiler/parser.py +108 -7
- package/src/zexus/compiler/semantic.py +18 -19
- package/src/zexus/compiler/zexus_ast.py +26 -1
- package/src/zexus/concurrency_system.py +79 -0
- package/src/zexus/config.py +54 -0
- package/src/zexus/crypto_bridge.py +244 -8
- package/src/zexus/dap/__init__.py +10 -0
- package/src/zexus/dap/__main__.py +4 -0
- package/src/zexus/dap/dap_server.py +391 -0
- package/src/zexus/dap/debug_engine.py +298 -0
- package/src/zexus/environment.py +112 -9
- package/src/zexus/evaluator/__pycache__/bytecode_compiler.cpython-312.pyc +0 -0
- package/src/zexus/evaluator/__pycache__/core.cpython-312.pyc +0 -0
- package/src/zexus/evaluator/__pycache__/expressions.cpython-312.pyc +0 -0
- package/src/zexus/evaluator/__pycache__/functions.cpython-312.pyc +0 -0
- package/src/zexus/evaluator/__pycache__/resource_limiter.cpython-312.pyc +0 -0
- package/src/zexus/evaluator/__pycache__/statements.cpython-312.pyc +0 -0
- package/src/zexus/evaluator/__pycache__/unified_execution.cpython-312.pyc +0 -0
- package/src/zexus/evaluator/__pycache__/utils.cpython-312.pyc +0 -0
- package/src/zexus/evaluator/bytecode_compiler.py +457 -37
- package/src/zexus/evaluator/core.py +644 -50
- package/src/zexus/evaluator/expressions.py +358 -62
- package/src/zexus/evaluator/functions.py +458 -20
- package/src/zexus/evaluator/resource_limiter.py +4 -4
- package/src/zexus/evaluator/statements.py +774 -122
- package/src/zexus/evaluator/unified_execution.py +573 -72
- package/src/zexus/evaluator/utils.py +14 -2
- package/src/zexus/evaluator_original.py +1 -1
- package/src/zexus/event_loop.py +186 -0
- package/src/zexus/lexer.py +742 -458
- package/src/zexus/lsp/__init__.py +1 -1
- package/src/zexus/lsp/definition_provider.py +163 -9
- package/src/zexus/lsp/server.py +22 -8
- package/src/zexus/lsp/symbol_provider.py +182 -9
- package/src/zexus/module_cache.py +239 -9
- package/src/zexus/module_manager.py +129 -1
- package/src/zexus/object.py +76 -6
- package/src/zexus/parser/__pycache__/parser.cpython-312.pyc +0 -0
- package/src/zexus/parser/__pycache__/strategy_context.cpython-312.pyc +0 -0
- package/src/zexus/parser/__pycache__/strategy_structural.cpython-312.pyc +0 -0
- package/src/zexus/parser/parser.py +1349 -408
- package/src/zexus/parser/strategy_context.py +755 -58
- package/src/zexus/parser/strategy_structural.py +121 -21
- package/src/zexus/persistence.py +15 -1
- package/src/zexus/renderer/__init__.py +61 -0
- package/src/zexus/renderer/__pycache__/__init__.cpython-312.pyc +0 -0
- package/src/zexus/renderer/__pycache__/backend.cpython-312.pyc +0 -0
- package/src/zexus/renderer/__pycache__/canvas.cpython-312.pyc +0 -0
- package/src/zexus/renderer/__pycache__/color_system.cpython-312.pyc +0 -0
- package/src/zexus/renderer/__pycache__/layout.cpython-312.pyc +0 -0
- package/src/zexus/renderer/__pycache__/main_renderer.cpython-312.pyc +0 -0
- package/src/zexus/renderer/__pycache__/painter.cpython-312.pyc +0 -0
- package/src/zexus/renderer/backend.py +261 -0
- package/src/zexus/renderer/canvas.py +78 -0
- package/src/zexus/renderer/color_system.py +201 -0
- package/src/zexus/renderer/graphics.py +31 -0
- package/src/zexus/renderer/layout.py +222 -0
- package/src/zexus/renderer/main_renderer.py +66 -0
- package/src/zexus/renderer/painter.py +30 -0
- package/src/zexus/renderer/tk_backend.py +208 -0
- package/src/zexus/renderer/web_backend.py +260 -0
- package/src/zexus/runtime/__init__.py +10 -2
- package/src/zexus/runtime/__pycache__/__init__.cpython-312.pyc +0 -0
- package/src/zexus/runtime/__pycache__/async_runtime.cpython-312.pyc +0 -0
- package/src/zexus/runtime/__pycache__/load_manager.cpython-312.pyc +0 -0
- package/src/zexus/runtime/file_flags.py +137 -0
- package/src/zexus/runtime/load_manager.py +368 -0
- package/src/zexus/safety/__pycache__/__init__.cpython-312.pyc +0 -0
- package/src/zexus/safety/__pycache__/memory_safety.cpython-312.pyc +0 -0
- package/src/zexus/security.py +424 -34
- package/src/zexus/stdlib/fs.py +23 -18
- package/src/zexus/stdlib/http.py +289 -186
- package/src/zexus/stdlib/sockets.py +207 -163
- package/src/zexus/stdlib/websockets.py +282 -0
- package/src/zexus/stdlib_integration.py +369 -2
- package/src/zexus/strategy_recovery.py +6 -3
- package/src/zexus/type_checker.py +423 -0
- package/src/zexus/virtual_filesystem.py +189 -2
- package/src/zexus/vm/__init__.py +113 -3
- package/src/zexus/vm/__pycache__/async_optimizer.cpython-312.pyc +0 -0
- package/src/zexus/vm/__pycache__/bytecode.cpython-312.pyc +0 -0
- package/src/zexus/vm/__pycache__/bytecode_converter.cpython-312.pyc +0 -0
- package/src/zexus/vm/__pycache__/cache.cpython-312.pyc +0 -0
- package/src/zexus/vm/__pycache__/compiler.cpython-312.pyc +0 -0
- package/src/zexus/vm/__pycache__/gas_metering.cpython-312.pyc +0 -0
- package/src/zexus/vm/__pycache__/jit.cpython-312.pyc +0 -0
- package/src/zexus/vm/__pycache__/parallel_vm.cpython-312.pyc +0 -0
- package/src/zexus/vm/__pycache__/vm.cpython-312.pyc +0 -0
- package/src/zexus/vm/async_optimizer.py +80 -6
- package/src/zexus/vm/binary_bytecode.py +659 -0
- package/src/zexus/vm/bytecode.py +59 -11
- package/src/zexus/vm/bytecode_converter.py +26 -12
- package/src/zexus/vm/cabi.c +1985 -0
- package/src/zexus/vm/cabi.cpython-312-x86_64-linux-gnu.so +0 -0
- package/src/zexus/vm/cabi.h +127 -0
- package/src/zexus/vm/cache.py +561 -17
- package/src/zexus/vm/compiler.py +818 -51
- package/src/zexus/vm/fastops.c +15743 -0
- package/src/zexus/vm/fastops.cpython-312-x86_64-linux-gnu.so +0 -0
- package/src/zexus/vm/fastops.pyx +288 -0
- package/src/zexus/vm/gas_metering.py +50 -9
- package/src/zexus/vm/jit.py +364 -20
- package/src/zexus/vm/native_jit_backend.py +1816 -0
- package/src/zexus/vm/native_runtime.cpp +1388 -0
- package/src/zexus/vm/native_runtime.cpython-312-x86_64-linux-gnu.so +0 -0
- package/src/zexus/vm/optimizer.py +161 -11
- package/src/zexus/vm/parallel_vm.py +140 -45
- package/src/zexus/vm/peephole_optimizer.py +82 -4
- package/src/zexus/vm/profiler.py +38 -18
- package/src/zexus/vm/register_allocator.py +16 -5
- package/src/zexus/vm/register_vm.py +8 -5
- package/src/zexus/vm/vm.py +3581 -531
- package/src/zexus/vm/wasm_compiler.py +658 -0
- package/src/zexus/zexus_ast.py +137 -11
- package/src/zexus/zexus_token.py +16 -5
- package/src/zexus/zpm/installer.py +55 -15
- package/src/zexus/zpm/package_manager.py +1 -1
- package/src/zexus/zpm/registry.py +257 -28
- package/src/zexus.egg-info/PKG-INFO +16 -6
- package/src/zexus.egg-info/SOURCES.txt +129 -17
- package/src/zexus.egg-info/entry_points.txt +1 -0
- package/src/zexus.egg-info/requires.txt +4 -0
package/src/zexus/vm/bytecode.py
CHANGED
|
@@ -62,6 +62,7 @@ class Opcode(IntEnum):
|
|
|
62
62
|
BUILD_SET = 62 # Build set from stack items
|
|
63
63
|
INDEX = 63 # Index into collection
|
|
64
64
|
SLICE = 64 # Slice operation
|
|
65
|
+
GET_ATTR = 65 # Get attribute/property of object
|
|
65
66
|
|
|
66
67
|
# Async/Concurrency
|
|
67
68
|
SPAWN = 70 # Spawn coroutine/task
|
|
@@ -146,7 +147,33 @@ class Opcode(IntEnum):
|
|
|
146
147
|
DEFINE_SCREEN = 120
|
|
147
148
|
DEFINE_COMPONENT = 121
|
|
148
149
|
DEFINE_THEME = 122
|
|
149
|
-
|
|
150
|
+
|
|
151
|
+
# Security & Contracts (130-149)
|
|
152
|
+
REQUIRE = 130 # require(condition, message)
|
|
153
|
+
DEFINE_CONTRACT = 131 # Define smart contract
|
|
154
|
+
DEFINE_ENTITY = 132 # Define entity
|
|
155
|
+
DEFINE_CAPABILITY = 133 # Define capability
|
|
156
|
+
GRANT_CAPABILITY = 134 # Grant capability
|
|
157
|
+
REVOKE_CAPABILITY = 135 # Revoke capability
|
|
158
|
+
|
|
159
|
+
# Audit & Access Control (136-139)
|
|
160
|
+
AUDIT_LOG = 136 # Audit log
|
|
161
|
+
RESTRICT_ACCESS = 137 # Restrict access
|
|
162
|
+
|
|
163
|
+
# Exception Handling (140-149)
|
|
164
|
+
SETUP_TRY = 140 # Start try block
|
|
165
|
+
POP_TRY = 141 # End try block / clean up handler
|
|
166
|
+
THROW = 142 # Throw exception
|
|
167
|
+
|
|
168
|
+
# Iteration (150-159)
|
|
169
|
+
FOR_ITER = 150 # Get next item from iterator
|
|
170
|
+
|
|
171
|
+
# System & Modes (160-169)
|
|
172
|
+
ENABLE_ERROR_MODE = 160 # Enable global continue-on-error mode
|
|
173
|
+
|
|
174
|
+
# Register-based operations (200-299) - Phase 5
|
|
175
|
+
# FOR_ITER removed (duplicate)
|
|
176
|
+
|
|
150
177
|
# Special
|
|
151
178
|
NOP = 255 # No operation
|
|
152
179
|
|
|
@@ -250,12 +277,33 @@ class BytecodeBuilder:
|
|
|
250
277
|
self._label_positions: Dict[str, int] = {}
|
|
251
278
|
self._forward_refs: Dict[str, List[int]] = {}
|
|
252
279
|
|
|
253
|
-
def emit(self, opcode:
|
|
254
|
-
"""Emit an instruction"""
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
280
|
+
def emit(self, opcode: Any, operand: Any = None) -> int:
|
|
281
|
+
"""Emit an instruction, normalizing opcode names to Opcode enum when possible."""
|
|
282
|
+
normalized = opcode
|
|
283
|
+
if isinstance(opcode, str):
|
|
284
|
+
try:
|
|
285
|
+
normalized = Opcode[opcode]
|
|
286
|
+
except KeyError:
|
|
287
|
+
normalized = opcode # Leave custom opcodes untouched
|
|
288
|
+
return self.bytecode.add_instruction(normalized, operand)
|
|
289
|
+
|
|
290
|
+
def emit_constant(self, value: Any, legacy_operand: Any = None) -> int:
|
|
291
|
+
"""Emit LOAD_CONST instruction (legacy-compatible)."""
|
|
292
|
+
# Legacy call signature: emit_constant("LOAD_CONST", actual_value)
|
|
293
|
+
if legacy_operand is not None and isinstance(value, str):
|
|
294
|
+
opcode = value
|
|
295
|
+
operand = legacy_operand
|
|
296
|
+
|
|
297
|
+
if opcode == "LOAD_CONST":
|
|
298
|
+
const_idx = self.bytecode.add_constant(operand)
|
|
299
|
+
return self.emit("LOAD_CONST", const_idx)
|
|
300
|
+
if opcode == "LOAD_NAME":
|
|
301
|
+
# Legacy builder pushed raw identifiers instead of constant indices
|
|
302
|
+
return self.emit("LOAD_NAME", operand)
|
|
303
|
+
if opcode == "STORE_NAME":
|
|
304
|
+
return self.emit("STORE_NAME", operand)
|
|
305
|
+
return self.emit(opcode, operand)
|
|
306
|
+
|
|
259
307
|
const_idx = self.bytecode.add_constant(value)
|
|
260
308
|
return self.emit("LOAD_CONST", const_idx)
|
|
261
309
|
|
|
@@ -317,14 +365,14 @@ class BytecodeBuilder:
|
|
|
317
365
|
"""Emit MERKLE_ROOT - expects leaf_count items on stack"""
|
|
318
366
|
return self.emit("MERKLE_ROOT", leaf_count)
|
|
319
367
|
|
|
320
|
-
def emit_state_read(self, key:
|
|
368
|
+
def emit_state_read(self, key: Any) -> int:
|
|
321
369
|
"""Emit STATE_READ instruction"""
|
|
322
|
-
key_idx = self.bytecode.add_constant(key)
|
|
370
|
+
key_idx = key if isinstance(key, int) else self.bytecode.add_constant(key)
|
|
323
371
|
return self.emit("STATE_READ", key_idx)
|
|
324
372
|
|
|
325
|
-
def emit_state_write(self, key:
|
|
373
|
+
def emit_state_write(self, key: Any) -> int:
|
|
326
374
|
"""Emit STATE_WRITE instruction - expects value on stack"""
|
|
327
|
-
key_idx = self.bytecode.add_constant(key)
|
|
375
|
+
key_idx = key if isinstance(key, int) else self.bytecode.add_constant(key)
|
|
328
376
|
return self.emit("STATE_WRITE", key_idx)
|
|
329
377
|
|
|
330
378
|
def emit_tx_begin(self) -> int:
|
|
@@ -126,49 +126,63 @@ class BytecodeConverter:
|
|
|
126
126
|
if start >= len(instructions):
|
|
127
127
|
return None, 0
|
|
128
128
|
|
|
129
|
+
def _op_name(op):
|
|
130
|
+
return op.name if hasattr(op, "name") else op
|
|
131
|
+
|
|
129
132
|
# Pattern 1: Constant arithmetic (LOAD_CONST, LOAD_CONST, BINARY_OP)
|
|
130
133
|
if start + 2 < len(instructions):
|
|
131
134
|
inst1, inst2, inst3 = instructions[start:start+3]
|
|
132
135
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
+
op1 = _op_name(inst1[0])
|
|
137
|
+
op2 = _op_name(inst2[0])
|
|
138
|
+
op3 = _op_name(inst3[0])
|
|
139
|
+
if (op1 == Opcode.LOAD_CONST.name and
|
|
140
|
+
op2 == Opcode.LOAD_CONST.name and
|
|
141
|
+
op3 in [Opcode.ADD.name, Opcode.SUB.name, Opcode.MUL.name, Opcode.DIV.name, Opcode.MOD.name, Opcode.POW.name]):
|
|
136
142
|
|
|
137
143
|
return {
|
|
138
144
|
'type': 'const_binary_op',
|
|
139
145
|
'const1': inst1[1],
|
|
140
146
|
'const2': inst2[1],
|
|
141
|
-
'operation':
|
|
147
|
+
'operation': Opcode[op3],
|
|
142
148
|
}, 3
|
|
143
149
|
|
|
144
150
|
# Pattern 2: Variable arithmetic (LOAD_NAME, LOAD_CONST, BINARY_OP)
|
|
145
151
|
if start + 2 < len(instructions):
|
|
146
152
|
inst1, inst2, inst3 = instructions[start:start+3]
|
|
147
153
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
154
|
+
op1 = _op_name(inst1[0])
|
|
155
|
+
op2 = _op_name(inst2[0])
|
|
156
|
+
op3 = _op_name(inst3[0])
|
|
157
|
+
if (op1 == Opcode.LOAD_NAME.name and
|
|
158
|
+
op2 == Opcode.LOAD_CONST.name and
|
|
159
|
+
op3 in [Opcode.ADD.name, Opcode.SUB.name, Opcode.MUL.name, Opcode.DIV.name,
|
|
160
|
+
Opcode.MOD.name, Opcode.POW.name]):
|
|
151
161
|
|
|
152
162
|
return {
|
|
153
163
|
'type': 'var_const_binary_op',
|
|
154
164
|
'var_name': inst1[1],
|
|
155
165
|
'const': inst2[1],
|
|
156
|
-
'operation':
|
|
166
|
+
'operation': Opcode[op3],
|
|
157
167
|
}, 3
|
|
158
168
|
|
|
159
169
|
# Pattern 3: Two variables (LOAD_NAME x, LOAD_NAME y, BINARY_OP)
|
|
160
170
|
if start + 2 < len(instructions):
|
|
161
171
|
inst1, inst2, inst3 = instructions[start:start+3]
|
|
162
172
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
173
|
+
op1 = _op_name(inst1[0])
|
|
174
|
+
op2 = _op_name(inst2[0])
|
|
175
|
+
op3 = _op_name(inst3[0])
|
|
176
|
+
if (op1 == Opcode.LOAD_NAME.name and
|
|
177
|
+
op2 == Opcode.LOAD_NAME.name and
|
|
178
|
+
op3 in [Opcode.ADD.name, Opcode.SUB.name, Opcode.MUL.name, Opcode.DIV.name,
|
|
179
|
+
Opcode.MOD.name, Opcode.POW.name]):
|
|
166
180
|
|
|
167
181
|
return {
|
|
168
182
|
'type': 'var_var_binary_op',
|
|
169
183
|
'var1': inst1[1],
|
|
170
184
|
'var2': inst2[1],
|
|
171
|
-
'operation':
|
|
185
|
+
'operation': Opcode[op3],
|
|
172
186
|
}, 3
|
|
173
187
|
|
|
174
188
|
# Pattern 4: Store result (... STORE_NAME)
|