def accept_arg(self, frame, anchor, i, arg1): if i == 0: BuiltinConstMethod.accept_arg(self, frame, anchor, i, arg1) else: BuiltinSequenceObject.SequenceAppender.accept_arg( self, frame, anchor, i, arg1) return
def create_attr(self, frame, anchor, name): if name == 'append': return self.SequenceAppender('list.append', self, args=[ANY]) elif name == 'count': return BuiltinConstMethod('list.count', IntType.get_object(), [ANY]) elif name == 'extend': return self.SequenceExtender('list.extend', self, args=[ANY]) elif name == 'index': return BuiltinConstMethod( 'list.index', IntType.get_object(), [ANY], [IntType, IntType], expts=[ErrorConfig.MaybeElementNotFound()]) elif name == 'insert': return self.InsertMethod('list.insert', self, [IntType, ANY]) elif name == 'pop': return BuiltinConstMethod( 'list.pop', self.elemall, [], [IntType], expts=[ErrorConfig.MaybeElementNotRemovable()]) elif name == 'remove': return BuiltinConstMethod( 'list.remove', NoneType.get_object(), [ANY], expts=[ErrorConfig.MaybeElementNotRemovable()]) elif name == 'reverse': return BuiltinConstMethod('list.remove', NoneType.get_object()) elif name == 'sort': return self.SortMethod('list.sort', self) raise NodeAttrError(name)
def get_attr(self, frame, anchor, name, write=False): if write: raise NodeAssignError(name) if name == 'isdecimal': return BuiltinConstMethod('unicode.isdecimal', BoolType.get_object()) elif name == 'isnumeric': return BuiltinConstMethod('unicode.isnumeric', BoolType.get_object()) elif name == 'translate': return self.TranslateFunc('unicode.translate', self.get_object(), [ANY]) return BaseStringType.get_attr(self, frame, anchor, name, write=write)
def __init__(self, name, target, retobj=NoneType.get_object(), args=None, expts=None): self.target = target BuiltinConstMethod.__init__(self, name, retobj, args=args, expts=expts) return
def __init__(self, name, target, retobj=NoneType.get_object(), args=None, optargs=None): self.target = target self.cache_extend = {} BuiltinConstMethod.__init__(self, name, retobj, args=args, optargs=optargs) return
def create_attr(self, frame, anchor, name): if name == 'next': return BuiltinConstMethod( 'iter.next', self.elemall, expts=[StopIterationType.maybe('might raise StopIteration')]) raise NodeAttrError(name)
def get_attr(self, frame, anchor, name, write=False): if write: raise NodeAssignError(name) if name == 'translate': return BuiltinConstMethod('str.translate', self.get_object(), [BaseStringType], [BaseStringType], [ErrorConfig.MaybeTableInvalid()]) return BaseStringType.get_attr(self, frame, anchor, name, write=write)
def create_attr(self, frame, anchor, name): if name == 'clear': return BuiltinConstMethod('dict.clear', NoneType.get_object()) elif name == 'copy': dictobj = self.get_type().create_copy(frame, anchor, self) return BuiltinConstMethod('dict.copy', dictobj) elif name == 'fromkeys': return DictType.FromKeys('dict.fromkeys') elif name == 'get': return DictObject.Get(self, 'dict.get') elif name == 'has_key': return BuiltinConstMethod('dict.has_key', BoolType.get_object(), [ANY]) elif name == 'keys': return BuiltinConstMethod('dict.keys', ListType.create_list(self.key)) elif name == 'values': return BuiltinConstMethod('dict.values', ListType.create_list(self.value)) elif name == 'items': return BuiltinConstMethod( 'dict.items', ListType.create_list( TupleType.create_tuple([self.key, self.value]))) elif name == 'iterkeys': return BuiltinConstMethod('dict.iterkeys', IterType.create_iter(self.key)) elif name == 'itervalues': return BuiltinConstMethod('dict.itervalues', IterType.create_iter(self.value)) elif name == 'iteritems': return BuiltinConstMethod( 'dict.iteritems', IterType.create_iter( TupleType.create_tuple([self.key, self.value]))) elif name == 'pop': return DictObject.Pop(self, 'dict.pop') elif name == 'popitem': return BuiltinConstMethod( 'dict.popitem', TupleType.create_tuple([self.key, self.value]), expts=[ErrorConfig.MaybeElementNotFound()]) elif name == 'setdefault': return DictObject.SetDefault(self, 'dict.setdefault') elif name == 'update': return DictObject.Update(self, 'dict.update') raise NodeAttrError(name)
def create_attr(self, frame, anchor, name): if name == 'add': return self.SequenceAppender('set.add', self, args=[ANY]) elif name == 'clear': return BuiltinConstMethod('set.clear', NoneType.get_object()) elif name == 'difference_update': return BuiltinConstMethod('set.difference_update', NoneType.get_object(), [[ANY]]) elif name == 'discard': return BuiltinConstMethod('set.discard', NoneType.get_object(), [ANY]) elif name == 'intersection_update': return BuiltinConstMethod('set.intersection_update', NoneType.get_object(), [[ANY]]) elif name == 'pop': return BuiltinConstMethod( 'set.pop', NoneType.get_object(), expts=[ErrorConfig.MaybeElementNotRemovable()]) elif name == 'remove': return BuiltinConstMethod( 'set.remove', NoneType.get_object(), [ANY], expts=[ErrorConfig.MaybeElementNotFound()]) elif name == 'symmetric_difference_update': return self.SequenceExtender('set.symmetric_difference_update', self, args=[ANY]) elif name == 'update': return self.SequenceExtender('set.update', self, self, [ANY]) return FrozenSetObject.create_attr(self, frame, anchor, name)
def create_attr(self, frame, anchor, name): if name == 'copy': setobj = self.get_type().create_copy(frame, anchor, self) return BuiltinConstMethod('set.copy', setobj) elif name == 'difference': setobj = self.get_type().create_copy(frame, anchor, self) return BuiltinConstMethod('set.difference', setobj, [[ANY]]) elif name == 'intersection': return SetObject.Intersection('set.intersection', self) elif name == 'issubset': return BuiltinConstMethod('set.issubset', BoolType.get_object(), [[ANY]]) elif name == 'issuperset': return BuiltinConstMethod('set.issuperset', BoolType.get_object(), [[ANY]]) elif name == 'symmetric_difference': setobj = self.get_type().create_copy(frame, anchor, self) return self.SequenceExtender('set.symmetric_difference', setobj, setobj, [ANY]) elif name == 'union': setobj = self.get_type().create_copy(frame, anchor, self) return self.SequenceExtender('set.union', setobj, setobj, [ANY]) raise NodeAttrError(name)
def create_attr(self, frame, anchor, name): if name == 'send': return self.Send( 'generator.send', self, self.elemall, [ANY], expts=[StopIterationType.maybe('might raise StopIteration')]) if name == 'next': NoneType.get_object().connect(self.sent.recv) return self.Send( 'generator.next', self, self.elemall, expts=[StopIterationType.maybe('might raise StopIteration')]) if name == 'throw': # XXX do nothing for now return BuiltinConstMethod('generator.throw', NoneType.get_object(), [ANY], [ANY, ANY]) if name == 'close': return self.Send('generator.close', self, NoneType.get_object(), [ANY]) return IterObject.create_attr(self, frame, anchor, name)
def accept_arg(self, frame, anchor, i, arg1): if i == 0: BuiltinConstMethod.accept_arg(self, frame, anchor, i, arg1) else: BuiltinSequenceObject.SequenceAppender.accept_arg(self, frame, anchor, i, arg1) return
def __init__(self, name): self.cache_fromkeys = {} self.dictobj = DictType.create_dict() BuiltinConstMethod.__init__(self, name, self.dictobj, [ANY], [ANY]) return
def __init__(self, name, src1): self.src1 = src1 BuiltinConstMethod.__init__(self, name, SetType.create_set(), [ANY]) return
def __init__(self, name, target): self.target = target BuiltinConstMethod.__init__(self, name, NoneType.get_object(), [], [ANY,ANY,ANY]) return
def process_args(self, frame, anchor, args, kwargs): if kwargs or len(args) != 1: return BuiltinConstMethod.process_args(self, frame, anchor, args, kwargs) self.TypeMixer(frame, anchor, self.retobj, self.src1, args[0]) return self.retobj
def __init__(self, name, target): self.target = target BuiltinConstMethod.__init__(self, name, NoneType.get_object(), [], [ANY, ANY, ANY]) return
def __init__(self, dictobj, name): self.dictobj = dictobj self.found = CompoundTypeNode([dictobj.value]) BuiltinConstMethod.__init__(self, name, self.found, [ANY], [ANY]) return
def process_args(self, frame, anchor, args, kwargs): if len(args) == 1: self.found.update_type(NoneType.get_object()) return BuiltinConstMethod.process_args(self, frame, anchor, args, kwargs)
def process_args(self, frame, anchor, args, kwargs): if len(args) == 1: frame.raise_expt(ErrorConfig.MaybeKeyNotFound()) return BuiltinConstMethod.process_args(self, frame, anchor, args, kwargs)
def get_attr(self, frame, anchor, name, write=False): from pyntch.aggregate_types import ListType if write: raise NodeAssignError(name) if name == 'close': return BuiltinConstMethod('file.close', NoneType.get_object()) elif name == 'closed': return BoolType.get_object() elif name == 'encoding': return StrType.get_object() elif name == 'fileno': return BuiltinConstMethod('file.fileno', IntType.get_object()) elif name == 'flush': return BuiltinConstMethod('file.flush', NoneType.get_object()) elif name == 'isatty': return BuiltinConstMethod('file.isatty', BoolType.get_object()) elif name == 'mode': return StrType.get_object() elif name == 'name': return StrType.get_object() elif name == 'newlines': return NoneType.get_object() elif name == 'next': return BuiltinConstMethod('file.next', StrType.get_object()) elif name == 'read': return BuiltinConstMethod('file.read', StrType.get_object(), [], [IntType], [ErrorConfig.MaybeEOFError()]) elif name == 'readline': return BuiltinConstMethod('file.readline', StrType.get_object(), [], [IntType], [ErrorConfig.MaybeEOFError()]) elif name == 'readlines': return BuiltinConstMethod( 'file.readlines', ListType.create_list(StrType.get_object()), [], [IntType], [ErrorConfig.MaybeEOFError()]) elif name == 'seek': return BuiltinConstMethod('file.seek', NoneType.get_object(), [IntType], [IntType], [ErrorConfig.MaybeEOFError()]) elif name == 'softspace': return IntType.get_object() elif name == 'tell': return BuiltinConstMethod( 'file.tell', IntType.get_object(), expts=[ErrorConfig.MaybeFileIllegalSeek()]) elif name == 'truncate': return BuiltinConstMethod('file.truncate', NoneType.get_object(), [], [IntType]) elif name == 'write': return BuiltinConstMethod('file.write', NoneType.get_object(), [BaseStringType]) elif name == 'writelines': return BuiltinConstMethod('file.writestrings', NoneType.get_object(), [[BaseStringType]]) elif name == 'xreadlines': return self raise NodeAttrError(name)
def __init__(self, dictobj, name): self.cache_update = {} self.dictobj = dictobj BuiltinConstMethod.__init__(self, name, NoneType.get_object(), [ANY]) return
def get_attr(self, frame, anchor, name, write=False): from pyntch.aggregate_types import TupleType, ListType if write: raise NodeAssignError(name) if name == 'capitalize': return BuiltinConstMethod('str.capitalize', self.get_object()) elif name == 'center': return BuiltinConstMethod('str.center', self.get_object(), [IntType], [BaseStringType]) elif name == 'count': return BuiltinConstMethod('str.count', IntType.get_object(), [BaseStringType], [IntType, IntType]) elif name == 'decode': return BuiltinConstMethod('str.decode', UnicodeType.get_object(), [], [BaseStringType, BaseStringType], [ErrorConfig.MaybeNotDecodable()]) elif name == 'encode': return BuiltinConstMethod('str.encode', StrType.get_object(), [], [BaseStringType, BaseStringType], [ErrorConfig.MaybeNotEncodable()]) elif name == 'endswith': return BuiltinConstMethod('str.endswith', BoolType.get_object(), [BaseStringType], [IntType, IntType]) elif name == 'expandtabs': return BuiltinConstMethod('str.expandtabs', self.get_object(), [], [IntType]) elif name == 'find': return BuiltinConstMethod('str.find', IntType.get_object(), [BaseStringType], [IntType, IntType]) elif name == 'index': return BuiltinConstMethod('str.index', IntType.get_object(), [BaseStringType], [IntType, IntType], [ErrorConfig.MaybeSubstringNotFound()]) elif name == 'isalnum': return BuiltinConstMethod('str.isalnum', BoolType.get_object()) elif name == 'isalpha': return BuiltinConstMethod('str.isalpha', BoolType.get_object()) elif name == 'isdigit': return BuiltinConstMethod('str.isdigit', BoolType.get_object()) elif name == 'islower': return BuiltinConstMethod('str.islower', BoolType.get_object()) elif name == 'isspace': return BuiltinConstMethod('str.isspace', BoolType.get_object()) elif name == 'istitle': return BuiltinConstMethod('str.istitle', BoolType.get_object()) elif name == 'isupper': return BuiltinConstMethod('str.isupper', BoolType.get_object()) elif name == 'join': return BuiltinConstMethod('str.join', self.get_object(), [[BaseStringType]]) elif name == 'ljust': return BuiltinConstMethod('str.ljust', self.get_object(), [IntType], [BaseStringType]) elif name == 'lower': return BuiltinConstMethod('str.lower', self.get_object()) elif name == 'lstrip': return BuiltinConstMethod('str.lstrip', self.get_object(), [], [BaseStringType]) elif name == 'partition': return BuiltinConstMethod( 'str.partiion', TupleType.create_tuple( [self.get_object(), self.get_object(), self.get_object()]), [BaseStringType]) elif name == 'replace': return BuiltinConstMethod('str.replace', self.get_object(), [BaseStringType, BaseStringType], [IntType]) elif name == 'rfind': return BuiltinConstMethod('str.rfind', IntType.get_object(), [BaseStringType], [IntType, IntType]) elif name == 'rindex': return BuiltinConstMethod('str.rindex', IntType.get_object(), [BaseStringType], [IntType, IntType], [ErrorConfig.MaybeSubstringNotFound()]) elif name == 'rjust': return BuiltinConstMethod('str.rjust', self.get_object(), [IntType], [BaseStringType]) elif name == 'rpartition': return BuiltinConstMethod( 'str.rpartiion', TupleType.create_tuple( [self.get_object(), self.get_object(), self.get_object()]), [BaseStringType]) elif name == 'rsplit': return BuiltinConstMethod('str.rsplit', ListType.create_list(self.get_object()), [], [BaseStringType, IntType]) elif name == 'rstrip': return BuiltinConstMethod('str.rstrip', self.get_object(), [], [BaseStringType]) elif name == 'split': return BuiltinConstMethod('str.split', ListType.create_list(self.get_object()), [], [BaseStringType, IntType]) elif name == 'splitlines': return BuiltinConstMethod('str.splitlines', ListType.create_list(self.get_object()), [], [ANY]) elif name == 'startswith': return BuiltinConstMethod('str.startswith', BoolType.get_object(), [BaseStringType], [IntType, IntType]) elif name == 'strip': return BuiltinConstMethod('str.strip', self.get_object(), [], [BaseStringType]) elif name == 'swapcase': return BuiltinConstMethod('str.swapcase', self.get_object()) elif name == 'title': return BuiltinConstMethod('str.title', self.get_object()) elif name == 'upper': return BuiltinConstMethod('str.upper', self.get_object()) elif name == 'zfill': return BuiltinConstMethod('str.zfill', self.get_object(), [IntType]) raise NodeAttrError(name)