Exemple #1
0
 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")
Exemple #2
0
 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")
Exemple #3
0
 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")
Exemple #4
0
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!")
Exemple #5
0
 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()))
Exemple #6
0
 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")
Exemple #7
0
 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")
Exemple #8
0
 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")
Exemple #9
0
 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")
Exemple #10
0
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!")
Exemple #11
0
 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")
Exemple #12
0
 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)))
Exemple #13
0
 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)))
Exemple #14
0
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")
Exemple #15
0
 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")
Exemple #16
0
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")
Exemple #17
0
 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")
Exemple #18
0
 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
Exemple #19
0
 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
Exemple #20
0
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)
Exemple #21
0
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)
Exemple #22
0
 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)
Exemple #23
0
 def getDefault(self, ej):
     if self._default is None:
         throwStr(ej, u"getDefault/1: Parameter has no default")
     return self._default
Exemple #24
0
 def fromBytes(self, bs, ej):
     try:
         return unpack_float(bs, True)
     except ValueError:
         throwStr(ej, u"Couldn't unpack invalid IEEE 754 double")
Exemple #25
0
 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
Exemple #26
0
 def coerce(self, specimen, ej):
     if specimen.auditedBy(self):
         return specimen
     throwStr(ej, u"coerce/2: Not a KernelAST node")
Exemple #27
0
 def fromBytes(self, bs, ej):
     try:
         return unpack_float(bs, True)
     except ValueError:
         throwStr(ej, u"Couldn't unpack invalid IEEE 754 double")
Exemple #28
0
 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
Exemple #29
0
 def coerce(self, specimen, ej):
     if specimen.auditedBy(self):
         return specimen
     throwStr(ej, u"coerce/2: Not a KernelAST node")
Exemple #30
0
 def coerce(self, specimen, ej):
     if specimen.auditedBy(self):
         return specimen
     from typhon.objects.ejectors import throwStr
     throwStr(ej, u"coerce/2: Not DeepFrozen")
Exemple #31
0
 def extractValue(self, specimen, ej):
     if isinstance(specimen, SameGuard):
         return specimen.value
     else:
         throwStr(ej, u"extractValue/2: Not a Same guard")
Exemple #32
0
 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)
Exemple #33
0
 def run(self, s, ej):
     try:
         return float(s.encode("utf-8"))
     except ValueError:
         throwStr(ej, u"Couldn't parse floating-point number")
Exemple #34
0
 def getDefault(self, ej):
     if self._default is None:
         throwStr(ej, u"getDefault/1: Parameter has no default")
     return self._default
Exemple #35
0
 def run(self, s, ej):
     try:
         return float(s.encode("utf-8"))
     except ValueError:
         throwStr(ej, u"Couldn't parse floating-point number")
Exemple #36
0
 def extractGuards(self, guard, ej):
     if isinstance(guard, AnyOfGuard):
         return guard.subguards
     else:
         throwStr(ej, u"Not an AnyOf guard")
Exemple #37
0
 def coerce(self, specimen, ej):
     if specimen.auditedBy(self):
         return specimen
     from typhon.objects.ejectors import throwStr
     throwStr(ej, u"coerce/2: Not DeepFrozen")