Dolda2000 GitWeb
/
coe.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
data: Replace usymbol/string equivalence with obj __getattr__ implementation.
[coe.git]
/
coe
/
data.py
diff --git
a/coe/data.py
b/coe/data.py
index
05e129b
..
aaa862d
100644
(file)
--- a/
coe/data.py
+++ b/
coe/data.py
@@
-1,4
+1,5
@@
class symbol(object):
class symbol(object):
+ __slots__ = []
isafe = set("abcdefghijklmnopqrstuvwxyz" +
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
"$%^&*_=/.")
isafe = set("abcdefghijklmnopqrstuvwxyz" +
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
"$%^&*_=/.")
@@
-47,23
+48,26
@@
class symbol(object):
return "%s:%s" % (self.quote(self.ns), self.quote(self.name))
class usymbol(symbol):
return "%s:%s" % (self.quote(self.ns), self.quote(self.name))
class usymbol(symbol):
+ __slots__ = ["name"]
ns = ""
ns = ""
+
def __init__(self, name):
self.name = name
def __init__(self, name):
self.name = name
- def __hash__(self):
- return hash(self.name)
- def __eq__(s, o):
- if isinstance(o, str):
- return s.name == o
- return super().__eq__(o)
-
class nssymbol(symbol):
class nssymbol(symbol):
+ __slots__ = ["ns", "name"]
+
def __init__(self, ns, name, *args, **kw):
super().__init__(*args, **kw)
self.name = name
self.ns = ns
def __init__(self, ns, name, *args, **kw):
super().__init__(*args, **kw)
self.name = name
self.ns = ns
+class namedtype(type):
+ def __new__(cls, *args, typename=None, **kwargs):
+ self = super().__new__(cls, *args, **kwargs)
+ self.typename = typename
+ return self
+
class obj(object):
def __getitem__(self, key):
return self.__dict__[key]
class obj(object):
def __getitem__(self, key):
return self.__dict__[key]
@@
-71,3
+75,8
@@
class obj(object):
self.__dict__[key] = val
def __delitem__(self, key):
del self.__dict__[key]
self.__dict__[key] = val
def __delitem__(self, key):
del self.__dict__[key]
+ def __getattr__(self, name):
+ try:
+ return self.__dict__[symbol.get("", name)]
+ except KeyError:
+ raise AttributeError(name) from None