sonolus.py 0.1.0__py3-none-any.whl
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.
Potentially problematic release.
This version of sonolus.py might be problematic. Click here for more details.
- sonolus/__init__.py +0 -0
- sonolus/backend/__init__.py +0 -0
- sonolus/backend/allocate.py +51 -0
- sonolus/backend/blocks.py +756 -0
- sonolus/backend/excepthook.py +37 -0
- sonolus/backend/finalize.py +69 -0
- sonolus/backend/flow.py +92 -0
- sonolus/backend/interpret.py +333 -0
- sonolus/backend/ir.py +89 -0
- sonolus/backend/mode.py +24 -0
- sonolus/backend/node.py +40 -0
- sonolus/backend/ops.py +197 -0
- sonolus/backend/optimize.py +9 -0
- sonolus/backend/passes.py +6 -0
- sonolus/backend/place.py +90 -0
- sonolus/backend/simplify.py +30 -0
- sonolus/backend/utils.py +48 -0
- sonolus/backend/visitor.py +880 -0
- sonolus/build/__init__.py +0 -0
- sonolus/build/cli.py +170 -0
- sonolus/build/collection.py +293 -0
- sonolus/build/compile.py +90 -0
- sonolus/build/defaults.py +32 -0
- sonolus/build/engine.py +149 -0
- sonolus/build/level.py +23 -0
- sonolus/build/node.py +43 -0
- sonolus/build/project.py +94 -0
- sonolus/py.typed +0 -0
- sonolus/script/__init__.py +0 -0
- sonolus/script/archetype.py +651 -0
- sonolus/script/array.py +241 -0
- sonolus/script/bucket.py +192 -0
- sonolus/script/callbacks.py +105 -0
- sonolus/script/comptime.py +146 -0
- sonolus/script/containers.py +247 -0
- sonolus/script/debug.py +70 -0
- sonolus/script/effect.py +132 -0
- sonolus/script/engine.py +101 -0
- sonolus/script/globals.py +234 -0
- sonolus/script/graphics.py +141 -0
- sonolus/script/icon.py +73 -0
- sonolus/script/internal/__init__.py +5 -0
- sonolus/script/internal/builtin_impls.py +144 -0
- sonolus/script/internal/context.py +365 -0
- sonolus/script/internal/descriptor.py +17 -0
- sonolus/script/internal/error.py +15 -0
- sonolus/script/internal/generic.py +197 -0
- sonolus/script/internal/impl.py +69 -0
- sonolus/script/internal/introspection.py +14 -0
- sonolus/script/internal/native.py +38 -0
- sonolus/script/internal/value.py +144 -0
- sonolus/script/interval.py +98 -0
- sonolus/script/iterator.py +211 -0
- sonolus/script/level.py +52 -0
- sonolus/script/math.py +92 -0
- sonolus/script/num.py +382 -0
- sonolus/script/options.py +194 -0
- sonolus/script/particle.py +158 -0
- sonolus/script/pointer.py +30 -0
- sonolus/script/project.py +17 -0
- sonolus/script/range.py +58 -0
- sonolus/script/record.py +293 -0
- sonolus/script/runtime.py +526 -0
- sonolus/script/sprite.py +332 -0
- sonolus/script/text.py +404 -0
- sonolus/script/timing.py +42 -0
- sonolus/script/transform.py +118 -0
- sonolus/script/ui.py +160 -0
- sonolus/script/values.py +43 -0
- sonolus/script/vec.py +48 -0
- sonolus_py-0.1.0.dist-info/METADATA +10 -0
- sonolus_py-0.1.0.dist-info/RECORD +75 -0
- sonolus_py-0.1.0.dist-info/WHEEL +4 -0
- sonolus_py-0.1.0.dist-info/entry_points.txt +2 -0
- sonolus_py-0.1.0.dist-info/licenses/LICENSE +21 -0
sonolus/__init__.py
ADDED
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
from sonolus.backend.flow import BasicBlock, traverse_cfg_preorder
|
|
2
|
+
from sonolus.backend.ir import IRConst, IRGet, IRInstr, IRPureInstr, IRSet
|
|
3
|
+
from sonolus.backend.passes import CompilerPass
|
|
4
|
+
from sonolus.backend.place import BlockPlace, TempBlock
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class AllocateBasic(CompilerPass):
|
|
8
|
+
def run(self, entry: BasicBlock):
|
|
9
|
+
offsets = {}
|
|
10
|
+
index = 16
|
|
11
|
+
|
|
12
|
+
def process(stmt):
|
|
13
|
+
nonlocal index
|
|
14
|
+
match stmt:
|
|
15
|
+
case int():
|
|
16
|
+
return stmt
|
|
17
|
+
case IRConst():
|
|
18
|
+
return stmt
|
|
19
|
+
case IRPureInstr(op=op, args=args):
|
|
20
|
+
return IRPureInstr(
|
|
21
|
+
op=op,
|
|
22
|
+
args=[process(arg) for arg in args],
|
|
23
|
+
)
|
|
24
|
+
case IRInstr(op=op, args=args):
|
|
25
|
+
return IRInstr(
|
|
26
|
+
op=op,
|
|
27
|
+
args=[process(arg) for arg in args],
|
|
28
|
+
)
|
|
29
|
+
case IRGet(place=place):
|
|
30
|
+
return IRGet(place=process(place))
|
|
31
|
+
case IRSet(place=place, value=value):
|
|
32
|
+
return IRSet(place=process(place), value=process(value))
|
|
33
|
+
case BlockPlace() as place:
|
|
34
|
+
if isinstance(place.block, TempBlock):
|
|
35
|
+
if place.block not in offsets:
|
|
36
|
+
offsets[place.block] = index
|
|
37
|
+
index += place.block.size
|
|
38
|
+
return BlockPlace(10000, process(place.index), place.offset + offsets[place.block])
|
|
39
|
+
return BlockPlace(
|
|
40
|
+
process(place.block) if isinstance(place.block, BlockPlace) else place.block,
|
|
41
|
+
process(place.index),
|
|
42
|
+
process(place.offset),
|
|
43
|
+
)
|
|
44
|
+
case _:
|
|
45
|
+
raise NotImplementedError
|
|
46
|
+
|
|
47
|
+
for block in traverse_cfg_preorder(entry):
|
|
48
|
+
block.statements = [process(statement) for statement in block.statements]
|
|
49
|
+
block.test = process(block.test)
|
|
50
|
+
|
|
51
|
+
return entry
|