diff --git a/python/builtins.py b/python/builtins.py index 3a578bfd..1d878a58 100644 --- a/python/builtins.py +++ b/python/builtins.py @@ -76,7 +76,7 @@ def sorted(iterable, reverse=False, key=None): return a ##### str ##### -def str@split(self, sep): +def __f(self, sep): if sep == "": return list(self) res = [] @@ -90,8 +90,9 @@ def str@split(self, sep): ++i res.append(self) return res +str.split = __f -def str@format(self, *args): +def __f(self, *args): if '{}' in self: for i in range(len(args)): self = self.replace('{}', str(args[i]), 1) @@ -99,8 +100,9 @@ def str@format(self, *args): for i in range(len(args)): self = self.replace('{'+str(i)+'}', str(args[i])) return self +str.format = __f -def str@strip(self, chars=None): +def __f(self, chars=None): chars = chars or ' \t\n\r' i = 0 while i < len(self) and self[i] in chars: @@ -109,6 +111,7 @@ def str@strip(self, chars=None): while j >= 0 and self[j] in chars: --j return self[i:j+1] +str.strip = __f ##### list ##### list.__repr__ = lambda self: '[' + ', '.join([repr(i) for i in self]) + ']' @@ -130,18 +133,18 @@ def __qsort(a: list, L: int, R: int, key): __qsort(a, L, j, key) __qsort(a, i, R, key) -def list@sort(self, reverse=False, key=None): +def __f(self, reverse=False, key=None): if key is None: key = lambda x:x __qsort(self, 0, len(self)-1, key) if reverse: self.reverse() +list.sort = __f def staticmethod(f): return f # no effect - -def type@__repr__(self): - return "" + +type.__repr__ = lambda self: "" def help(obj): if hasattr(obj, '__func__'): @@ -150,3 +153,6 @@ def help(obj): print(obj.__doc__) else: print("No docstring found") + + +del __f \ No newline at end of file diff --git a/src/compiler.h b/src/compiler.h index bb5d27af..91244b5b 100644 --- a/src/compiler.h +++ b/src/compiler.h @@ -924,15 +924,9 @@ __SUBSCR_END: } void compile_function(const std::vector& decorators={}){ - Str obj_name; Str decl_name; consume(TK("@id")); decl_name = prev().str(); - if(!ctx()->is_compiling_class && match(TK("@"))){ - consume(TK("@id")); - obj_name = decl_name; - decl_name = prev().str(); - } FuncDecl_ decl = push_f_context(decl_name); consume(TK("(")); if (!match(TK(")"))) { @@ -965,14 +959,8 @@ __SUBSCR_END: ctx()->emit(OP_CALL, 1, (*it)->line); } if(!ctx()->is_compiling_class){ - if(obj_name.empty()){ - auto e = make_expr(decl_name, name_scope()); - e->emit_store(ctx()); - } else { - ctx()->emit(OP_LOAD_GLOBAL, StrName(obj_name).index, prev().line); - int index = StrName(decl_name).index; - ctx()->emit(OP_STORE_ATTR, index, prev().line); - } + auto e = make_expr(decl_name, name_scope()); + e->emit_store(ctx()); }else{ int index = StrName(decl_name).index; ctx()->emit(OP_STORE_CLASS_ATTR, index, prev().line);