コード例 #1
0
ファイル: newbool.py プロジェクト: TheDunn/flex-pypy
    def __init__(self, hrtyper):
        self.hrtyper = hrtyper
        RGenOp = hrtyper.RGenOp
        rtyper = hrtyper.rtyper
        bk = rtyper.annotator.bookkeeper
        s_w_bool = annmodel.unionof(bk.immutablevalue(W_BoolObject.w_False),
                                    bk.immutablevalue(W_BoolObject.w_True))
        r_w_bool = rtyper.getrepr(s_w_bool)
        self.ll_False = r_w_bool.convert_const(W_BoolObject.w_False)
        self.ll_True  = r_w_bool.convert_const(W_BoolObject.w_True)

        A = lltype.Array(lltype.typeOf(self.ll_False))
        self.ll_bools = lltype.malloc(A, 2, immortal=True)
        self.ll_bools[0] = self.ll_False
        self.ll_bools[1] = self.ll_True
        self.gv_bools = RGenOp.constPrebuiltGlobal(self.ll_bools)
        self.boolsToken = RGenOp.arrayToken(A)

        self.bools_gv = [RGenOp.constPrebuiltGlobal(self.ll_False),
                         RGenOp.constPrebuiltGlobal(self.ll_True)]

        self.ptrkind = RGenOp.kindToken(r_w_bool.lowleveltype)
        self.boolkind = RGenOp.kindToken(lltype.Bool)

        ll_BoolObject = r_w_bool.rclass.getvtable()
        self.BoolObjectBox = rvalue.redbox_from_prebuilt_value(RGenOp,
                                                               ll_BoolObject)

        self.Falsebox = rvalue.redbox_from_prebuilt_value(RGenOp, False)
        self.Truebox = rvalue.redbox_from_prebuilt_value(RGenOp, True)
        self.boolboxes = [self.Falsebox, self.Truebox]
コード例 #2
0
ファイル: newbool.py プロジェクト: griels/pypy-sc
    def __init__(self, hrtyper):
        self.hrtyper = hrtyper
        RGenOp = hrtyper.RGenOp
        rtyper = hrtyper.rtyper
        bk = rtyper.annotator.bookkeeper
        s_w_bool = annmodel.unionof(bk.immutablevalue(W_BoolObject.w_False),
                                    bk.immutablevalue(W_BoolObject.w_True))
        r_w_bool = rtyper.getrepr(s_w_bool)
        self.ll_False = r_w_bool.convert_const(W_BoolObject.w_False)
        self.ll_True = r_w_bool.convert_const(W_BoolObject.w_True)

        A = lltype.Array(lltype.typeOf(self.ll_False))
        self.ll_bools = lltype.malloc(A, 2, immortal=True)
        self.ll_bools[0] = self.ll_False
        self.ll_bools[1] = self.ll_True
        self.gv_bools = RGenOp.constPrebuiltGlobal(self.ll_bools)
        self.boolsToken = RGenOp.arrayToken(A)

        self.bools_gv = [
            RGenOp.constPrebuiltGlobal(self.ll_False),
            RGenOp.constPrebuiltGlobal(self.ll_True)
        ]

        self.ptrkind = RGenOp.kindToken(r_w_bool.lowleveltype)
        self.boolkind = RGenOp.kindToken(lltype.Bool)

        ll_BoolObject = r_w_bool.rclass.getvtable()
        self.BoolObjectBox = rvalue.redbox_from_prebuilt_value(
            RGenOp, ll_BoolObject)

        self.Falsebox = rvalue.redbox_from_prebuilt_value(RGenOp, False)
        self.Truebox = rvalue.redbox_from_prebuilt_value(RGenOp, True)
        self.boolboxes = [self.Falsebox, self.Truebox]
コード例 #3
0
 def __init__(self):
     self.boolkind = rgenop.kindToken(lltype.Bool)
     self.boolboxes = [
         rvalue.redbox_from_prebuilt_value(rgenop, False),
         rvalue.redbox_from_prebuilt_value(rgenop, True)
     ]
コード例 #4
0
ファイル: oop.py プロジェクト: TheDunn/flex-pypy
    def __init__(self, hrtyper, fnobj, can_raise):
        ll_func = fnobj._callable
        FUNCTYPE = lltype.typeOf(fnobj)
        nb_args = len(FUNCTYPE.ARGS)

        self.can_raise = can_raise

        # parse the oopspec and fill in the arguments
        operation_name, args = ll_func.oopspec.split('(', 1)
        assert args.endswith(')')
        args = args[:-1] + ','     # trailing comma to force tuple syntax
        if args.strip() == ',':
            args = '()'
        argnames = ll_func.func_code.co_varnames[:nb_args]
        d = dict(zip(argnames, [Index(n) for n in range(nb_args)]))
        self.argtuple = eval(args, d)
        # end of rather XXX'edly hackish parsing

        OOPARGTYPES = []
        arg_llsig_to_oopsig = {}
        for i, obj in enumerate(self.argtuple):
            if isinstance(obj, Index):
                arg_llsig_to_oopsig[obj.n] = i
                OOPARG = FUNCTYPE.ARGS[obj.n]
            else:
                OOPARG = lltype.typeOf(obj)
            OOPARGTYPES.append(OOPARG)

        self.residualargsources = []
        for i in range(nb_args):
            ARGTYPE = FUNCTYPE.ARGS[i]
            if ARGTYPE is not lltype.Void:
                self.residualargsources.append(arg_llsig_to_oopsig[i])

        RGenOp = hrtyper.RGenOp
        self.args_gv = [None] * nb_args
        fnptr = fnobj._as_ptr()
        self.gv_fnptr = RGenOp.constPrebuiltGlobal(fnptr)
        result_kind = RGenOp.kindToken(FUNCTYPE.RESULT)
        self.result_kind = result_kind
        if FUNCTYPE.RESULT is lltype.Void:
            self.errorbox = None
        else:
            error_value = exceptiontransform.error_value(FUNCTYPE.RESULT)
            self.errorbox = rvalue.redbox_from_prebuilt_value(RGenOp,
                                                              error_value)
        redboxbuilder = rvalue.ll_redboxbuilder(FUNCTYPE.RESULT)
        self.redboxbuilder = redboxbuilder
        self.sigtoken = RGenOp.sigToken(FUNCTYPE)

        if operation_name == 'newlist':
            typename, method = 'list', 'oop_newlist'
            SELFTYPE = FUNCTYPE.RESULT.TO
            self.is_method = False
        elif operation_name == 'newdict':
            typename, method = 'dict', 'oop_newdict'
            SELFTYPE = FUNCTYPE.RESULT.TO
            self.is_method = False
        else:
            typename, method = operation_name.split('.')
            method = 'oop_%s_%s' % (typename, method)
            SELFTYPE = FUNCTYPE.ARGS[self.argtuple[0].n].TO
            self.is_method = True

        vmodule = __import__('pypy.jit.timeshifter.v%s' % (typename,),
                             None, None, [method])
        self.typedesc = vmodule.TypeDesc(hrtyper, SELFTYPE)
        self.ll_handler = getattr(vmodule, method)
        self.couldfold = getattr(self.ll_handler, 'couldfold', False)

        if self.couldfold:
            oopargcheck = ll_func.oopargcheck    # required if couldfold=True
            # make a copy of the function, for specialization purposes
            oopargcheck = func_with_new_name(oopargcheck,
                                             'argcheck_%s' % (method,))
            ARGS = FUNCTYPE.ARGS
            residualargsources = self.residualargsources
            unrolling_ARGS = unrolling_iterable(ARGS)
            unrolling_OOPARGS = unrolling_iterable(enumerate(OOPARGTYPES))

            def do_call(jitstate, argboxes):
                oopargs = ()
                for i, ARG in unrolling_OOPARGS:
                    v = rvalue.ll_getvalue(argboxes[i], ARG)
                    oopargs += (v,)
                if not oopargcheck(*oopargs):
                    raise SegfaultException
                args = ()
                j = 0
                for ARG in unrolling_ARGS:
                    if ARG == lltype.Void:
                        v = None
                    else:
                        argsrc = residualargsources[j]
                        j = j + 1
                        v = oopargs[argsrc]
                    args += (v,)
                result = fnptr(*args)
                if FUNCTYPE.RESULT == lltype.Void:
                    return None
                return rvalue.ll_fromvalue(jitstate, result)

            self.do_call = do_call

        # hack! to avoid confusion between the .typedesc attribute
        # of oopspecdescs of different types (lists, dicts, etc.)
        # let's use different subclasses for the oopspecdesc too.
        self.__class__ = globals()['OopSpecDesc_%s' % typename]
コード例 #5
0
ファイル: test_newbool.py プロジェクト: TheDunn/flex-pypy
 def __init__(self):
     self.boolkind = rgenop.kindToken(lltype.Bool)
     self.boolboxes = [rvalue.redbox_from_prebuilt_value(rgenop, False),
                       rvalue.redbox_from_prebuilt_value(rgenop, True)]
コード例 #6
0
ファイル: oop.py プロジェクト: chyyuu/pygirl
    def __init__(self, hrtyper, fnobj, can_raise):
        ll_func = fnobj._callable
        FUNCTYPE = lltype.typeOf(fnobj)
        nb_args = len(FUNCTYPE.ARGS)

        self.can_raise = can_raise

        # parse the oopspec and fill in the arguments
        operation_name, args = ll_func.oopspec.split('(', 1)
        assert args.endswith(')')
        args = args[:-1] + ','     # trailing comma to force tuple syntax
        if args.strip() == ',':
            args = '()'
        argnames = ll_func.func_code.co_varnames[:nb_args]
        d = dict(zip(argnames, [Index(n) for n in range(nb_args)]))
        self.argtuple = eval(args, d)
        # end of rather XXX'edly hackish parsing

        OOPARGTYPES = []
        arg_llsig_to_oopsig = {}
        for i, obj in enumerate(self.argtuple):
            if isinstance(obj, Index):
                arg_llsig_to_oopsig[obj.n] = i
                OOPARG = FUNCTYPE.ARGS[obj.n]
            else:
                OOPARG = lltype.typeOf(obj)
            OOPARGTYPES.append(OOPARG)

        self.residualargsources = []
        for i in range(nb_args):
            ARGTYPE = FUNCTYPE.ARGS[i]
            if ARGTYPE is not lltype.Void:
                self.residualargsources.append(arg_llsig_to_oopsig[i])

        RGenOp = hrtyper.RGenOp
        self.args_gv = [None] * nb_args
        fnptr = fnobj._as_ptr()
        self.gv_fnptr = RGenOp.constPrebuiltGlobal(fnptr)
        result_kind = RGenOp.kindToken(FUNCTYPE.RESULT)
        self.result_kind = result_kind
        if FUNCTYPE.RESULT is lltype.Void:
            self.errorbox = None
        else:
            error_value = exceptiontransform.error_value(FUNCTYPE.RESULT)
            self.errorbox = rvalue.redbox_from_prebuilt_value(RGenOp,
                                                              error_value)
        redboxbuilder = rvalue.ll_redboxbuilder(FUNCTYPE.RESULT)
        self.redboxbuilder = redboxbuilder
        self.sigtoken = RGenOp.sigToken(FUNCTYPE)

        if operation_name == 'newlist':
            typename, method = 'list', 'oop_newlist'
            SELFTYPE = FUNCTYPE.RESULT.TO
            self.is_method = False
        elif operation_name == 'newdict':
            typename, method = 'dict', 'oop_newdict'
            SELFTYPE = FUNCTYPE.RESULT.TO
            self.is_method = False
        else:
            typename, method = operation_name.split('.')
            method = 'oop_%s_%s' % (typename, method)
            SELFTYPE = FUNCTYPE.ARGS[self.argtuple[0].n].TO
            self.is_method = True

        vmodule = __import__('pypy.jit.timeshifter.v%s' % (typename,),
                             None, None, [method])
        self.typedesc = vmodule.TypeDesc(hrtyper, SELFTYPE)
        self.ll_handler = getattr(vmodule, method)
        self.couldfold = getattr(self.ll_handler, 'couldfold', False)

        if self.couldfold:
            oopargcheck = ll_func.oopargcheck    # required if couldfold=True
            # make a copy of the function, for specialization purposes
            oopargcheck = func_with_new_name(oopargcheck,
                                             'argcheck_%s' % (method,))
            ARGS = FUNCTYPE.ARGS
            residualargsources = self.residualargsources
            unrolling_ARGS = unrolling_iterable(ARGS)
            unrolling_OOPARGS = unrolling_iterable(enumerate(OOPARGTYPES))

            def do_call(jitstate, argboxes):
                oopargs = ()
                for i, ARG in unrolling_OOPARGS:
                    v = rvalue.ll_getvalue(argboxes[i], ARG)
                    oopargs += (v,)
                if not oopargcheck(*oopargs):
                    raise SegfaultException
                args = ()
                j = 0
                for ARG in unrolling_ARGS:
                    if ARG == lltype.Void:
                        v = None
                    else:
                        argsrc = residualargsources[j]
                        j = j + 1
                        v = oopargs[argsrc]
                    args += (v,)
                result = fnptr(*args)
                if FUNCTYPE.RESULT == lltype.Void:
                    return None
                return rvalue.ll_fromvalue(jitstate, result)

            self.do_call = do_call

        # hack! to avoid confusion between the .typedesc attribute
        # of oopspecdescs of different types (lists, dicts, etc.)
        # let's use different subclasses for the oopspecdesc too.
        self.__class__ = globals()['OopSpecDesc_%s' % typename]