forked from pixie-lang/pixie
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstring_builder.py
More file actions
37 lines (27 loc) · 836 Bytes
/
string_builder.py
File metadata and controls
37 lines (27 loc) · 836 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import pixie.vm.rt as rt
from pixie.vm.object import Object, Type
from pixie.vm.code import as_var, extend
import pixie.vm.stdlib as proto
class StringBuilder(Object):
_type = Type(u"pixie.stdlib.StringBuilder")
def type(self):
return StringBuilder._type
def __init__(self):
self._strs = []
def add_str(self, s):
self._strs.append(s)
return self
def to_string(self):
return u"".join(self._strs)
@extend(proto._conj_BANG_, StringBuilder)
def _conj(self, val):
return self.add_str(rt.name(rt._str(val)))
@extend(proto._persistent_BANG_, StringBuilder)
def _persistent(self):
return rt._str(self)
@extend(proto._str, StringBuilder)
def _str(self):
return rt.wrap(self.to_string())
@as_var("-string-builder")
def _string_builder():
return StringBuilder()