✘✘ GRAYBYTE WORDPRESS FILE MANAGER ✘✘

​🇳​​🇦​​🇲​​🇪♯➤ beluga.o2switch.net ​🇻​♯➤ 4.18.0-553.123.2.lve.el8.x86_64 #1 SMP 🇾​♯➤ 2026

𝗛𝗢𝗠𝗘 𝗜𝗗 ♯➤ 185.154.139.77 ♯➤ 𝗔𝗗𝗠𝗜𝗡 𝗜𝗗 216.73.216.84
𝗢𝗣𝗧𝗜𝗢𝗡𝗦 ♯ CRL ♯➤ 𝗢𝗞 ┃ WGT ♯➤ 𝗢𝗞 ┃ SDO ♯➤ 𝗢𝗙𝗙 ┃ PKEX ♯➤ 𝗢𝗙𝗙
𝗗𝗘𝗔𝗖𝗧𝗜𝗩𝗔𝗧𝗘𝗗 ♯➤ 𝗔𝗟𝗟 𝗪𝗢𝗥𝗞𝗜𝗡𝗚....

𝗛𝗢𝗠𝗘
𝗖𝗨𝗥𝗥𝗘𝗡𝗧 𝗙𝗜𝗟𝗘 : /opt/alt/python37/lib64/python3.7/site-packages/Cython/Compiler//UtilNodes.py
#
# Nodes used as utilities and support for transforms etc.
# These often make up sets including both Nodes and ExprNodes
# so it is convenient to have them in a separate module.
#

from __future__ import absolute_import

from . import Nodes
from . import ExprNodes
from .Nodes import Node
from .ExprNodes import AtomicExprNode
from .PyrexTypes import c_ptr_type


class TempHandle(object):
    # THIS IS DEPRECATED, USE LetRefNode instead
    temp = None
    needs_xdecref = False
    def __init__(self, type, needs_cleanup=None):
        self.type = type
        if needs_cleanup is None:
            self.needs_cleanup = type.is_pyobject
        else:
            self.needs_cleanup = needs_cleanup

    def ref(self, pos):
        return TempRefNode(pos, handle=self, type=self.type)


class TempRefNode(AtomicExprNode):
    # THIS IS DEPRECATED, USE LetRefNode instead
    # handle   TempHandle

    def analyse_types(self, env):
        assert self.type == self.handle.type
        return self

    def analyse_target_types(self, env):
        assert self.type == self.handle.type
        return self

    def analyse_target_declaration(self, env):
        pass

    def calculate_result_code(self):
        result = self.handle.temp
        if result is None: result = "<error>" # might be called and overwritten
        return result

    def generate_result_code(self, code):
        pass

    def generate_assignment_code(self, rhs, code, overloaded_assignment=False):
        if self.type.is_pyobject:
            rhs.make_owned_reference(code)
            # TODO: analyse control flow to see if this is necessary
            code.put_xdecref(self.result(), self.ctype())
        code.putln('%s = %s;' % (
            self.result(),
            rhs.result() if overloaded_assignment else rhs.result_as(self.ctype()),
        ))
        rhs.generate_post_assignment_code(code)
        rhs.free_temps(code)


class TempsBlockNode(Node):
    # THIS IS DEPRECATED, USE LetNode instead

    """
    Creates a block which allocates temporary variables.
    This is used by transforms to output constructs that need
    to make use of a temporary variable. Simply pass the types
    of the needed temporaries to the constructor.

    The variables can be referred to using a TempRefNode
    (which can be constructed by calling get_ref_node).
    """

    # temps   [TempHandle]
    # body    StatNode

    child_attrs = ["body"]

    def generate_execution_code(self, code):
        for handle in self.temps:
            handle.temp = code.funcstate.allocate_temp(
                handle.type, manage_ref=handle.needs_cleanup)
        self.body.generate_execution_code(code)
        for handle in self.temps:
            if handle.needs_cleanup:
                if handle.needs_xdecref:
                    code.put_xdecref_clear(handle.temp, handle.type)
                else:
                    code.put_decref_clear(handle.temp, handle.type)
            code.funcstate.release_temp(handle.temp)

    def analyse_declarations(self, env):
        self.body.analyse_declarations(env)

    def analyse_expressions(self, env):
        self.body = self.body.analyse_expressions(env)
        return self

    def generate_function_definitions(self, env, code):
        self.body.generate_function_definitions(env, code)

    def annotate(self, code):
        self.body.annotate(code)


class ResultRefNode(AtomicExprNode):
    # A reference to the result of an expression.  The result_code
    # must be set externally (usually a temp name).

    subexprs = []
    lhs_of_first_assignment = False

    def __init__(self, expression=None, pos=None, type=None, may_hold_none=True, is_temp=False):
        self.expression = expression
        self.pos = None
        self.may_hold_none = may_hold_none
        if expression is not None:
            self.pos = expression.pos
            if hasattr(expression, "type"):
                self.type = expression.type
        if pos is not None:
            self.pos = pos
        if type is not None:
            self.type = type
        if is_temp:
            self.is_temp = True
        assert self.pos is not None

    def clone_node(self):
        # nothing to do here
        return self

    def type_dependencies(self, env):
        if self.expression:
            return self.expression.type_dependencies(env)
        else:
            return ()

    def update_expression(self, expression):
        self.expression = expression
        if hasattr(expression, "type"):
            self.type = expression.type

    def analyse_types(self, env):
        if self.expression is not None:
            if not self.expression.type:
              self.expression = self.expression.analyse_types(env)
            self.type = self.expression.type
        return self

    def infer_type(self, env):
        if self.type is not None:
            return self.type
        if self.expression is not None:
            if self.expression.type is not None:
                return self.expression.type
            return self.expression.infer_type(env)
        assert False, "cannot infer type of ResultRefNode"

    def may_be_none(self):
        if not self.type.is_pyobject:
            return False
        return self.may_hold_none

    def _DISABLED_may_be_none(self):
        # not sure if this is safe - the expression may not be the
        # only value that gets assigned
        if self.expression is not None:
            return self.expression.may_be_none()
        if self.type is not None:
            return self.type.is_pyobject
        return True # play safe

    def is_simple(self):
        return True

    def result(self):
        try:
            return self.result_code
        except AttributeError:
            if self.expression is not None:
                self.result_code = self.expression.result()
        return self.result_code

    def generate_evaluation_code(self, code):
        pass

    def generate_result_code(self, code):
        pass

    def generate_disposal_code(self, code):
        pass

    def generate_assignment_code(self, rhs, code, overloaded_assignment=False):
        if self.type.is_pyobject:
            rhs.make_owned_reference(code)
            if not self.lhs_of_first_assignment:
                code.put_decref(self.result(), self.ctype())
        code.putln('%s = %s;' % (
            self.result(),
            rhs.result() if overloaded_assignment else rhs.result_as(self.ctype()),
        ))
        rhs.generate_post_assignment_code(code)
        rhs.free_temps(code)

    def allocate_temps(self, env):
        pass

    def release_temp(self, env):
        pass

    def free_temps(self, code):
        pass


class LetNodeMixin:
    def set_temp_expr(self, lazy_temp):
        self.lazy_temp = lazy_temp
        self.temp_expression = lazy_temp.expression

    def setup_temp_expr(self, code):
        self.temp_expression.generate_evaluation_code(code)
        self.temp_type = self.temp_expression.type
        if self.temp_type.is_array:
            self.temp_type = c_ptr_type(self.temp_type.base_type)
        self._result_in_temp = self.temp_expression.result_in_temp()
        if self._result_in_temp:
            self.temp = self.temp_expression.result()
        else:
            self.temp_expression.make_owned_reference(code)
            self.temp = code.funcstate.allocate_temp(
                self.temp_type, manage_ref=True)
            code.putln("%s = %s;" % (self.temp, self.temp_expression.result()))
            self.temp_expression.generate_disposal_code(code)
            self.temp_expression.free_temps(code)
        self.lazy_temp.result_code = self.temp

    def teardown_temp_expr(self, code):
        if self._result_in_temp:
            self.temp_expression.generate_disposal_code(code)
            self.temp_expression.free_temps(code)
        else:
            if self.temp_type.is_pyobject:
                code.put_decref_clear(self.temp, self.temp_type)
            code.funcstate.release_temp(self.temp)


class EvalWithTempExprNode(ExprNodes.ExprNode, LetNodeMixin):
    # A wrapper around a subexpression that moves an expression into a
    # temp variable and provides it to the subexpression.

    subexprs = ['temp_expression', 'subexpression']

    def __init__(self, lazy_temp, subexpression):
        self.set_temp_expr(lazy_temp)
        self.pos = subexpression.pos
        self.subexpression = subexpression
        # if called after type analysis, we already know the type here
        self.type = self.subexpression.type

    def infer_type(self, env):
        return self.subexpression.infer_type(env)

    def may_be_none(self):
        return self.subexpression.may_be_none()

    def result(self):
        return self.subexpression.result()

    def analyse_types(self, env):
        self.temp_expression = self.temp_expression.analyse_types(env)
        self.lazy_temp.update_expression(self.temp_expression)  # overwrite in case it changed
        self.subexpression = self.subexpression.analyse_types(env)
        self.type = self.subexpression.type
        return self

    def free_subexpr_temps(self, code):
        self.subexpression.free_temps(code)

    def generate_subexpr_disposal_code(self, code):
        self.subexpression.generate_disposal_code(code)

    def generate_evaluation_code(self, code):
        self.setup_temp_expr(code)
        self.subexpression.generate_evaluation_code(code)
        self.teardown_temp_expr(code)


LetRefNode = ResultRefNode


class LetNode(Nodes.StatNode, LetNodeMixin):
    # Implements a local temporary variable scope. Imagine this
    # syntax being present:
    # let temp = VALUE:
    #     BLOCK (can modify temp)
    #     if temp is an object, decref
    #
    # Usually used after analysis phase, but forwards analysis methods
    # to its children

    child_attrs = ['temp_expression', 'body']

    def __init__(self, lazy_temp, body):
        self.set_temp_expr(lazy_temp)
        self.pos = body.pos
        self.body = body

    def analyse_declarations(self, env):
        self.temp_expression.analyse_declarations(env)
        self.body.analyse_declarations(env)

    def analyse_expressions(self, env):
        self.temp_expression = self.temp_expression.analyse_expressions(env)
        self.body = self.body.analyse_expressions(env)
        return self

    def generate_execution_code(self, code):
        self.setup_temp_expr(code)
        self.body.generate_execution_code(code)
        self.teardown_temp_expr(code)

    def generate_function_definitions(self, env, code):
        self.temp_expression.generate_function_definitions(env, code)
        self.body.generate_function_definitions(env, code)


class TempResultFromStatNode(ExprNodes.ExprNode):
    # An ExprNode wrapper around a StatNode that executes the StatNode
    # body.  Requires a ResultRefNode that it sets up to refer to its
    # own temp result.  The StatNode must assign a value to the result
    # node, which then becomes the result of this node.

    subexprs = []
    child_attrs = ['body']

    def __init__(self, result_ref, body):
        self.result_ref = result_ref
        self.pos = body.pos
        self.body = body
        self.type = result_ref.type
        self.is_temp = 1

    def analyse_declarations(self, env):
        self.body.analyse_declarations(env)

    def analyse_types(self, env):
        self.body = self.body.analyse_expressions(env)
        return self

    def generate_result_code(self, code):
        self.result_ref.result_code = self.result()
        self.body.generate_execution_code(code)


Current_dir [ 𝗡𝗢𝗧 𝗪𝗥𝗜𝗧𝗘𝗔𝗕𝗟𝗘 ] Document_root [ 𝗪𝗥𝗜𝗧𝗘𝗔𝗕𝗟𝗘 ]


[ Back ]
𝗡𝗔𝗠𝗘
𝗦𝗜𝗭𝗘
𝗟𝗔𝗦𝗧 𝗧𝗢𝗨𝗖𝗛
𝗨𝗦𝗘𝗥
𝗦𝗧𝗔𝗧𝗨𝗦
𝗙𝗨𝗡𝗖𝗧𝗜𝗢𝗡𝗦
..
--
25 Jul 2024 8.44 AM
root / root
0755
Tests
--
25 Jul 2024 8.44 AM
root / linksafe
0755
__pycache__
--
25 Jul 2024 8.44 AM
root / linksafe
0755
AnalysedTreeTransforms.py
3.736 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Annotate.py
12.646 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
AutoDocTransforms.py
7.341 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Buffer.py
28.228 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Builtin.py
22.345 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
CmdLine.py
8.776 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Code.cpython-37m-x86_64-linux-gnu.so
1.36 MB
24 Apr 2023 6.25 PM
root / linksafe
0755
Code.pxd
2.646 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Code.py
91.734 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
CodeGeneration.py
1.082 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
CythonScope.py
5.886 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
DebugFlags.py
0.608 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Errors.py
7.377 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
ExprNodes.py
526.247 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
FlowControl.cpython-37m-x86_64-linux-gnu.so
645.375 KB
24 Apr 2023 6.25 PM
root / linksafe
0755
FlowControl.pxd
2.908 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
FlowControl.py
44.416 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
FusedNode.cpython-37m-x86_64-linux-gnu.so
456.234 KB
24 Apr 2023 6.25 PM
root / linksafe
0755
FusedNode.py
36.635 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Future.py
0.564 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Interpreter.py
2.057 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Lexicon.cpython-37m-x86_64-linux-gnu.so
188.039 KB
24 Apr 2023 6.25 PM
root / linksafe
0755
Lexicon.py
4.724 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Main.py
30.172 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
MemoryView.py
29.067 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
ModuleNode.py
133.313 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Naming.py
5.964 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Nodes.py
375.373 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Optimize.py
202.788 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Options.py
15.499 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
ParseTreeTransforms.pxd
2.391 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
ParseTreeTransforms.py
132.56 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Parsing.cpython-37m-x86_64-linux-gnu.so
937.57 KB
24 Apr 2023 6.25 PM
root / linksafe
0755
Parsing.pxd
8.63 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Parsing.py
123.406 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Pipeline.py
13.685 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
PyrexTypes.py
169.474 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Pythran.cpython-37m-x86_64-linux-gnu.so
135.461 KB
24 Apr 2023 6.25 PM
root / linksafe
0755
Pythran.py
5.576 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Scanning.cpython-37m-x86_64-linux-gnu.so
237.25 KB
24 Apr 2023 6.25 PM
root / linksafe
0755
Scanning.pxd
1.957 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Scanning.py
17.94 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
StringEncoding.py
9.579 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Symtab.py
107.485 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
TreeFragment.py
9.144 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
TreePath.py
7.135 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
TypeInference.py
21.803 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
TypeSlots.py
35.914 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
UtilNodes.py
11.363 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
UtilityCode.py
9.171 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Version.py
0.177 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Visitor.cpython-37m-x86_64-linux-gnu.so
417.008 KB
24 Apr 2023 6.25 PM
root / linksafe
0755
Visitor.pxd
1.583 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
Visitor.py
28.688 KB
18 Mar 2018 6.52 PM
root / linksafe
0644
__init__.py
0.013 KB
18 Mar 2018 6.52 PM
root / linksafe
0644

✘✘ GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME ✘✘
Static GIF Static GIF