def next(self, ej): if self._index < self.size: rv = [IntObject(self._index), self.objects[self._index]] self._index += 1 return rv else: throwStr(ej, u"Iterator exhausted")
def extractGuard(self, specimen, ej): if specimen is self: return anyGuard elif isinstance(specimen, VarSlotGuard): return specimen.valueGuard else: throwStr(ej, u"extractGuard/2: Not a VarSlot guard")
def unwrapList(o, ej=None): from typhon.objects.refs import resolution l = resolution(o) if isinstance(l, ConstList): return l.objs if isinstance(l, FlexList): return l.strategy.fetch_all(l) throwStr(ej, u"Not a list!")
def coerce(self, specimen, ej): if specimen.auditedBy(self): return specimen c = specimen.call(u"_conformTo", [self]) if c.auditedBy(self): return c throwStr(ej, u"%s does not conform to %s" % ( specimen.toQuote(), self.toQuote()))
def next(self, ej): if self._index < len(self.s): rv = [IntObject(self._index), IntObject(ord(self.s[self._index]))] self._index += 1 return rv else: from typhon.objects.ejectors import throwStr throwStr(ej, u"next/1: Iterator exhausted")
def next(self, ej): if self._index < len(self.objects): k, v = self.objects[self._index] rv = [k, v] self._index += 1 return rv else: throwStr(ej, u"next/1: Iterator exhausted")
def coerce(self, specimen, ej): for g in self.subguards: with Ejector() as cont: try: return g.call(u"coerce", [specimen, cont]) except Ejecting as e: if e.ejector is cont: continue throwStr(ej, u"No subguards matched")
def fromBytes(self, bs, ej): # Ruby-style underscores are legal here but can't be handled by # RPython, so remove them. bs = ''.join([c for c in bs if c != '_']) try: return rbigint.fromstr(bs, self.radix) except ParseStringError: throwStr(ej, u"_makeInt: Couldn't make int in radix %d from %s" % (self.radix, bytesToString(bs)))
def unsealException(specimen, ej): """ Unseal a specimen. """ if isinstance(specimen, SealedException): trail = wrapList([StrObject(s) for s in specimen.trail]) return wrapList([specimen.value, trail]) throwStr(ej, u"Cannot unseal non-thrown object")
def getCompleteMatcher(self, ej): if self._matchers: matcher = self._matchers[-1] if isinstance(matcher, Matcher): pattern = matcher._pattern if pattern.refutable(): throwStr(ej, u"getCompleteMatcher/1: Ultimate matcher pattern is refutable") return [pattern, matcher._block] throwStr(ej, u"getCompleteMatcher/1: No matchers")
def unsealException(specimen, ej): """ Unseal a specimen. """ if isinstance(specimen, SealedException): ue = specimen.ue trail = wrapList([StrObject(s) for s in ue.formatTrail()]) return wrapList([ue.getPayload(), trail]) throwStr(ej, u"Cannot unseal non-thrown object")
def getCompleteMatcher(self, ej): if self._matchers: matcher = self._matchers[-1] if isinstance(matcher, Matcher): pattern = matcher._pattern if pattern.refutable(): throwStr( ej, u"getCompleteMatcher/1: Ultimate matcher pattern is refutable" ) return [pattern, matcher._block] throwStr(ej, u"getCompleteMatcher/1: No matchers")
def coerce(self, specimen, ej): specimen = resolution(specimen) val = subCoerce(specimen) if val is None: try: newspec = specimen.call(u"_conformTo", [self]) except UserException: msg = u"%s threw exception while conforming to %s" % ( specimen.toQuote(), self.toQuote()) throwStr(ej, msg) else: val = subCoerce(newspec) if val is None: throwStr(ej, u"%s does not conform to %s" % ( specimen.toQuote(), self.toQuote())) else: return val else: return val
def checkDeepFrozen(specimen, seen, ej, root): from typhon.objects.collections.lists import unwrapList from typhon.objects.collections.maps import ConstMap from typhon.objects.ejectors import throwStr from typhon.objects.equality import TraversalKey from typhon.objects.refs import Promise, isBroken key = TraversalKey(specimen) if key in seen: return seen[key] = None if isinstance(specimen, Promise): specimen = specimen.resolution() if specimen.auditedBy(deepFrozenStamp): return elif isBroken(specimen): checkDeepFrozen(specimen.optProblem(), seen, ej, root) return elif (specimen.auditedBy(selfless) and (specimen.auditedBy(transparentStamp)) or specimen.auditedBy(semitransparentStamp)): portrayal = specimen.call(u"_uncall", []) if specimen.auditedBy(semitransparentStamp): if isinstance(portrayal, SealedPortrayal): portrayal = portrayal.portrayal else: throwStr(ej, u"Semitransparent portrayal was not sealed!") portrayalList = unwrapList(portrayal, ej) if len(portrayalList) != 4: throwStr(ej, u"Transparent object gave bad portrayal") return checkDeepFrozen(portrayalList[0], seen, ej, root) checkDeepFrozen(portrayalList[1], seen, ej, root) args = unwrapList(portrayalList[2], ej) for item in args: checkDeepFrozen(item, seen, ej, root) namedArgs = portrayalList[3] if not isinstance(namedArgs, ConstMap): throwStr(ej, u"Transparent object gave bad portrayal") return for k, v in namedArgs.iteritems(): checkDeepFrozen(k, seen, ej, root) checkDeepFrozen(v, seen, ej, root) else: if specimen is root: message = root.toQuote() + u" is not DeepFrozen" else: message = (root.toQuote() + u" is not DeepFrozen because " + specimen.toQuote() + u"is not") throwStr(ej, u"audit/1: " + message)
def checkDeepFrozen(specimen, seen, ej, root): from typhon.objects.collections.lists import unwrapList from typhon.objects.collections.maps import ConstMap from typhon.objects.ejectors import throwStr from typhon.objects.equality import TraversalKey from typhon.objects.refs import Promise, isBroken key = TraversalKey(specimen) if key in seen: return seen[key] = None if isinstance(specimen, Promise): specimen = specimen.resolution() if specimen.auditedBy(deepFrozenStamp): return elif isBroken(specimen): checkDeepFrozen(specimen.optProblem(), seen, ej, root) return elif (specimen.auditedBy(selfless) and specimen.auditedBy(transparentStamp)): portrayal = specimen.call(u"_uncall", []) portrayalList = unwrapList(portrayal, ej) if len(portrayalList) != 4: throwStr(ej, u"Transparent object gave bad portrayal") return checkDeepFrozen(portrayalList[0], seen, ej, root) checkDeepFrozen(portrayalList[1], seen, ej, root) args = unwrapList(portrayalList[2], ej) for item in args: checkDeepFrozen(item, seen, ej, root) namedArgs = portrayalList[3] if not isinstance(namedArgs, ConstMap): throwStr(ej, u"Transparent object gave bad portrayal") return for k, v in namedArgs.iteritems(): checkDeepFrozen(k, seen, ej, root) checkDeepFrozen(v, seen, ej, root) else: if specimen is root: message = root.toQuote() + u" is not DeepFrozen" else: message = (root.toQuote() + u" is not DeepFrozen because " + specimen.toQuote() + u"is not") throwStr(ej, u"audit/1: " + message)
def getMethodNamed(self, name, ej): for meth in self._methods: assert isinstance(meth, Method), "Method wasn't a method!?" if meth._verb == name: return meth throwStr(ej, u"getMethodNamed/2: No method named %s" % name)
def getDefault(self, ej): if self._default is None: throwStr(ej, u"getDefault/1: Parameter has no default") return self._default
def fromBytes(self, bs, ej): try: return unpack_float(bs, True) except ValueError: throwStr(ej, u"Couldn't unpack invalid IEEE 754 double")
def coerce(self, specimen, ej): specimen = resolution(specimen) if isinstance(specimen, Promise): msg = u"Specimen is in non-near state %s" % specimen.state().repr throwStr(ej, msg) return specimen
def coerce(self, specimen, ej): if specimen.auditedBy(self): return specimen throwStr(ej, u"coerce/2: Not a KernelAST node")
def coerce(self, specimen, ej): if specimen.auditedBy(self): return specimen from typhon.objects.ejectors import throwStr throwStr(ej, u"coerce/2: Not DeepFrozen")
def extractValue(self, specimen, ej): if isinstance(specimen, SameGuard): return specimen.value else: throwStr(ej, u"extractValue/2: Not a Same guard")
def run(self, s, ej): try: return float(s.encode("utf-8")) except ValueError: throwStr(ej, u"Couldn't parse floating-point number")
def extractGuards(self, guard, ej): if isinstance(guard, AnyOfGuard): return guard.subguards else: throwStr(ej, u"Not an AnyOf guard")