Skip to content

Commit 41b0ae9

Browse files
committed
[ds] Allow variable deletion via rem
1 parent 38df367 commit 41b0ae9

File tree

3 files changed

+23
-3
lines changed

3 files changed

+23
-3
lines changed

main.xpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
jmp run
2+
3+
:woah a b c
4+
prt "Hello, world!"
5+
prt a b c
6+
ret b
7+
8+
:run
9+
prt "Hi. How are you?"
10+
jmp woah 1 2 3 ?response
11+
prt response "should be 2"
12+
rem response
13+
prt response "should be None"

xpp/core/datastore.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def __init__(self, **kwargs) -> None:
2121
# Datastore class
2222
class Datastore(object):
2323
def __init__(self, mem: Memory, raw: str) -> None:
24-
self.mem, self.raw = mem, raw
24+
self.mem, self.raw, self.id_ = mem, raw, raw.lstrip("@?")
2525

2626
# Handle variables
2727
last_stack = self.mem.interpreter.stack[-1]
@@ -62,11 +62,15 @@ def _parse(self) -> Any:
6262
return int(self.raw)
6363

6464
# Handle variable
65-
return self.store.get(self.raw.lstrip("@"))
65+
return self.store.get(self.id_)
6666

6767
def set(self, value: Any) -> None:
68-
self.store[self.raw.lstrip("@")] = value
68+
self.store[self.id_] = value
6969
self.value = value
7070

71+
def delete(self) -> None:
72+
if self.id_ in self.store:
73+
del self.store[self.id_]
74+
7175
def refresh(self) -> None:
7276
self.value = self._parse()

xpp/modules/ops/stdlib/implib.py renamed to xpp/modules/ops/stdlib/internal.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,6 @@ def ret(ctx) -> None:
8383
section.active = False # Make it return next line tick
8484
if ctx.args:
8585
section.return_value = [a.value for a in ctx.args]
86+
87+
def rem(ctx) -> None:
88+
[arg.delete() for arg in ctx.args]

0 commit comments

Comments
 (0)