mirror of https://github.com/exaloop/codon.git
Add "_" files back
parent
398ef2b328
commit
bf57a4bd48
stdlib
test
parser/a
python
|
@ -0,0 +1,36 @@
|
|||
# Core library
|
||||
|
||||
from internal.attributes import *
|
||||
from internal.types.ptr import *
|
||||
from internal.types.str import *
|
||||
from internal.types.int import *
|
||||
from internal.types.bool import *
|
||||
from internal.types.array import *
|
||||
from internal.types.error import *
|
||||
from internal.types.intn import *
|
||||
from internal.types.float import *
|
||||
from internal.types.byte import *
|
||||
from internal.types.generator import *
|
||||
from internal.types.optional import *
|
||||
from internal.types.slice import *
|
||||
from internal.types.range import *
|
||||
from internal.internal import *
|
||||
|
||||
from internal.types.collections.list import *
|
||||
from internal.types.collections.set import *
|
||||
from internal.types.collections.dict import *
|
||||
|
||||
# Extended core library
|
||||
|
||||
import internal.c_stubs as _C
|
||||
from internal.builtin import *
|
||||
from internal.box import Box
|
||||
from internal.str import *
|
||||
|
||||
from internal.sort import sorted
|
||||
|
||||
from openmp import Ident as __OMPIdent, for_par
|
||||
from internal.file import File, gzFile, open, gzopen
|
||||
from pickle import pickle, unpickle
|
||||
from internal.dlopen import dlsym as _dlsym
|
||||
import internal.python
|
|
@ -0,0 +1,107 @@
|
|||
# Core library
|
||||
|
||||
from internal.attributes import *
|
||||
from internal.types.ptr import *
|
||||
from internal.types.str import *
|
||||
from internal.types.int import *
|
||||
from internal.types.bool import *
|
||||
from internal.types.array import *
|
||||
from internal.types.error import *
|
||||
from internal.types.intn import *
|
||||
from internal.types.float import *
|
||||
from internal.types.byte import *
|
||||
from internal.types.generator import *
|
||||
from internal.types.optional import *
|
||||
from internal.types.slice import *
|
||||
from internal.types.range import *
|
||||
from internal.internal import *
|
||||
from internal.types.collections.list import *
|
||||
import internal.c_stubs as _C
|
||||
|
||||
def next[T](g: Generator[T], default: Optional[T] = None):
|
||||
if g.done():
|
||||
if default:
|
||||
return ~default
|
||||
else:
|
||||
raise StopIteration()
|
||||
return g.next()
|
||||
|
||||
from C import seq_print_full(str, cobj)
|
||||
|
||||
class Set[T]:
|
||||
items: List[T]
|
||||
def __init__(self):
|
||||
self.items = List[T]()
|
||||
def __iter__(self):
|
||||
yield from self.items
|
||||
def add(self, what: T):
|
||||
if what not in self.items:
|
||||
self.items.append(what)
|
||||
def __str__(self) -> str:
|
||||
s = self.items.__str__()
|
||||
s.ptr[0] = '{'.ptr[0]
|
||||
s.ptr[s.len - 1] = '}'.ptr[0]
|
||||
return s
|
||||
class Dict[K, V]:
|
||||
keys: List[K]
|
||||
values: List[V]
|
||||
def __init__(self):
|
||||
self.keys = List[K]()
|
||||
self.values = List[V]()
|
||||
def __iter__(self):
|
||||
yield from self.keys
|
||||
def items(self):
|
||||
for i in range(self.keys.len):
|
||||
yield (self.keys[i], self.values[i])
|
||||
def __contains__(self, key: K):
|
||||
return self.keys.index(key) != -1
|
||||
def __getitem__(self, key: K):
|
||||
i = self.keys.index(key)
|
||||
return self.values[i]
|
||||
def __setitem__(self, key: K, val: V):
|
||||
i = self.keys.index(key)
|
||||
if i != -1:
|
||||
self.values[i] = val
|
||||
else:
|
||||
self.keys.append(key)
|
||||
self.values.append(val)
|
||||
def __len__(self):
|
||||
return self.keys.len
|
||||
def __str__(self):
|
||||
n = self.__len__()
|
||||
if n == 0:
|
||||
return "{}"
|
||||
else:
|
||||
lst = List[str]()
|
||||
lst.append("{")
|
||||
first = True
|
||||
for k, v in self.items():
|
||||
if not first: lst.append(", ")
|
||||
else: first = False
|
||||
lst.append(str(k))
|
||||
lst.append(": ")
|
||||
lst.append(str(v))
|
||||
lst.append("}")
|
||||
return str.cat(lst)
|
||||
@extend
|
||||
class str:
|
||||
def __getitem__(self, idx: int):
|
||||
if idx < 0:
|
||||
idx += self.len
|
||||
if not (0 <= idx < self.len):
|
||||
raise IndexError("string index out of range")
|
||||
return str(self.ptr + idx, 1)
|
||||
def __getitem__(self, s: Slice):
|
||||
if s.start is None and s.stop is None and s.step is None:
|
||||
return self.__copy__()
|
||||
elif s.step is None:
|
||||
start, stop, step, length = s.adjust_indices(self.len)
|
||||
return str(self.ptr + start, length)
|
||||
else:
|
||||
raise ValueError("nope")
|
||||
|
||||
|
||||
from internal.builtin import *
|
||||
|
||||
from openmp import Ident as __OMPIdent, for_par
|
||||
from internal.dlopen import dlsym as _dlsym
|
|
@ -0,0 +1,63 @@
|
|||
def system(cmd: str) -> int:
|
||||
return _C.system(cmd.c_str())
|
||||
|
||||
SEEK_SET = 0
|
||||
SEEK_CUR = 1
|
||||
SEEK_END = 2
|
||||
|
||||
@tuple
|
||||
class EnvMap:
|
||||
_map: Dict[str,str]
|
||||
|
||||
def __new__() -> EnvMap:
|
||||
return (Dict[str,str](),)
|
||||
|
||||
def _init_if_needed(self):
|
||||
if len(self._map) == 0:
|
||||
env = _C.seq_env()
|
||||
p = env[0]
|
||||
i = 0
|
||||
while p:
|
||||
s = str.from_ptr(p)
|
||||
if s:
|
||||
j = 0
|
||||
found = False
|
||||
while j < len(s):
|
||||
if s[j] == "=":
|
||||
found = True
|
||||
break
|
||||
j += 1
|
||||
k = s[0:j] if found else s
|
||||
v = s[j+1:] if found else ""
|
||||
self._map[k] = v
|
||||
i += 1
|
||||
p = env[i]
|
||||
|
||||
def __getitem__(self, key: str):
|
||||
self._init_if_needed()
|
||||
return self._map[key]
|
||||
|
||||
def __str__(self):
|
||||
self._init_if_needed()
|
||||
return str(self._map)
|
||||
|
||||
def __contains__(self, key: str):
|
||||
self._init_if_needed()
|
||||
return key in self._map
|
||||
|
||||
def __iter__(self):
|
||||
self._init_if_needed()
|
||||
return self._map.items()
|
||||
|
||||
environ = EnvMap()
|
||||
|
||||
def getenv(key: str, default: str = ""):
|
||||
return environ[key] if key in environ else default
|
||||
|
||||
|
||||
def mkdir(name: str, mode: int = 0x1FF) -> int:
|
||||
# TODO: use errno
|
||||
from C import mkdir(cobj, int) -> int
|
||||
ret = mkdir(name.ptr, mode)
|
||||
if ret != 0:
|
||||
raise OSError("mkdir failed")
|
|
@ -0,0 +1,8 @@
|
|||
def foo():
|
||||
print 'a.foo'
|
||||
def bar():
|
||||
print 'a.bar'
|
||||
print 'a'
|
||||
|
||||
zoo = 5
|
||||
_zoo = 3
|
|
@ -0,0 +1,11 @@
|
|||
c = 'a.b.c'
|
||||
def har():
|
||||
print 'a.b.har', __name__[-12:], c
|
||||
|
||||
from .. import foo as fx
|
||||
|
||||
class A:
|
||||
class B:
|
||||
def b_foo():
|
||||
print 'a.b.A.B.b_foo()'
|
||||
return 1
|
Loading…
Reference in New Issue