o
    i~7                     @   sD  d dl Z d dlmZ d dlZd dlmZ e jdd Ze Z	dZ
edkr(ededkr:e Z
e
d e	d	 nVed
krLe Z
e
d e	d nDedkr^e Z
e
d e	d n2edkrpe Z
e
d e	d n edkrze	d nedkre	d ndedd  Zeedeej dededdfddZdS )    N)CodeType)Assembly   )      z,This version of CPython is not supported yet)r      z:
            return_generator
            pop_top
        a  
        try                             @stopiter
            copy                        1
            store_fast                  $__ddgen
            load_attr                   $send
            store_fast                  $__ddgensend
            load_const                  next
            push_null
            load_fast_borrow            $__ddgen

        loop:
            call                        1
        tried

        yield:
        try                             @genexit lasti
            yield_value                 0
            resume                      1
            push_null
            load_fast_borrow            $__ddgensend
            swap                        3
            jump_backward               @loop
        tried

        genexit:
        try                             @stopiter
            push_exc_info
            load_const                  GeneratorExit
            check_exc_match
            pop_jump_if_false           @exc
            pop_top
            load_fast                   $__ddgen
            load_method                 $close
            call                        0
            swap                        2
            pop_except
            return_value

        exc:
            pop_top
            load_fast                   $__ddgen
            load_attr                   $throw
            push_null
            load_const                  sys.exc_info
            push_null
            call                        0
            push_null
            call_function_ex
            swap                        2
            pop_except
            jump_backward               @yield
        tried

        stopiter:
            push_exc_info
            load_const                  StopIteration
            check_exc_match
            pop_jump_if_false           @propagate
            pop_top
            pop_except
            load_const                  None
            return_value

        propagate:
            reraise                     0
        )r      a  
        try                             @stopiter
            copy                        1
            store_fast                  $__ddgen
            load_attr                   $send
            store_fast                  $__ddgensend
            load_const                  next
            push_null
            load_fast                   $__ddgen

        loop:
            call                        1
        tried

        yield:
        try                             @genexit lasti
            yield_value                 0
            resume                      1
            push_null
            load_fast                   $__ddgensend
            swap                        3
            jump_backward               @loop
        tried

        genexit:
        try                             @stopiter
            push_exc_info
            load_const                  GeneratorExit
            check_exc_match
            pop_jump_if_false           @exc
            pop_top
            load_fast                   $__ddgen
            load_method                 $close
            call                        0
            swap                        2
            pop_except
            return_value

        exc:
            pop_top
            load_fast                   $__ddgen
            load_attr                   $throw
            push_null
            load_const                  sys.exc_info
            push_null
            call                        0
            call_function_ex            0
            swap                        2
            pop_except
            jump_backward               @yield
        tried

        stopiter:
            push_exc_info
            load_const                  StopIteration
            check_exc_match
            pop_jump_if_false           @propagate
            pop_top
            pop_except
            load_const                  None
            return_value

        propagate:
            reraise                     0
        )r      a  
        try                             @stopiter
            copy                        1
            store_fast                  $__ddgen
            load_attr                   $send
            store_fast                  $__ddgensend
            push_null
            load_const                  next
            load_fast                   $__ddgen

        loop:
            call                        1
        tried

        yield:
        try                             @genexit lasti
            yield_value                 3
            resume                      1
            push_null
            swap                        2
            load_fast                   $__ddgensend
            swap                        2
            jump_backward               @loop
        tried

        genexit:
        try                             @stopiter
            push_exc_info
            load_const                  GeneratorExit
            check_exc_match
            pop_jump_if_false           @exc
            pop_top
            load_fast                   $__ddgen
            load_method                 $close
            call                        0
            swap                        2
            pop_except
            return_value

        exc:
            pop_top
            push_null
            load_fast                   $__ddgen
            load_attr                   $throw
            push_null
            load_const                  sys.exc_info
            call                        0
            call_function_ex            0
            swap                        2
            pop_except
            jump_backward               @yield
        tried

        stopiter:
            push_exc_info
            load_const                  StopIteration
            check_exc_match
            pop_jump_if_false           @propagate
            pop_top
            pop_except
            return_const                None

        propagate:
            reraise                     0
        )r      a  
        try                             @stopiter
            copy                        1
            store_fast                  $__ddgen
            load_attr                   $send
            store_fast                  $__ddgensend
            push_null
            load_const                  next
            load_fast                   $__ddgen

        loop:
            precall                     1
            call                        1
        tried

        yield:
        try                             @genexit lasti
            yield_value
            resume                      1
            push_null
            swap                        2
            load_fast                   $__ddgensend
            swap                        2
            jump_backward               @loop
        tried

        genexit:
        try                             @stopiter
            push_exc_info
            load_const                  GeneratorExit
            check_exc_match
            pop_jump_forward_if_false   @exc
            pop_top
            load_fast                   $__ddgen
            load_method                 $close
            precall                     0
            call                        0
            swap                        2
            pop_except
            return_value

        exc:
            pop_top
            push_null
            load_fast                   $__ddgen
            load_attr                   $throw
            push_null
            load_const                  sys.exc_info
            precall                     0
            call                        0
            call_function_ex            0
            swap                        2
            pop_except
            jump_backward               @yield
        tried

        stopiter:
            push_exc_info
            load_const                  StopIteration
            check_exc_match
            pop_jump_forward_if_false   @propagate
            pop_top
            pop_except
            load_const                  None
            return_value

        propagate:
            reraise                     0
        )r   
   a  
        setup_finally                   @stopiter
            dup_top
            store_fast                  $__ddgen
            load_attr                   $send
            store_fast                  $__ddgensend
            load_const                  next
            load_fast                   $__ddgen

        loop:
            call_function               1

        yield:
        setup_finally                   @genexit
            yield_value
        pop_block
            load_fast                   $__ddgensend
            rot_two
            jump_absolute               @loop

        genexit:
            dup_top
            load_const                  GeneratorExit
            jump_if_not_exc_match       @exc
            pop_top
            pop_top
            pop_top
            pop_top
            load_fast                   $__ddgen
            load_attr                   $close
            call_function               0
            return_value

        exc:
            pop_top
            pop_top
            pop_top
            pop_top
            load_fast                   $__ddgen
            load_attr                   $throw
            load_const                  sys.exc_info
            call_function               0
            call_function_ex            0
            rot_four
        pop_except
            jump_absolute               @yield

        stopiter:
            dup_top
            load_const                  StopIteration
            jump_if_not_exc_match       @propagate
            pop_top
            pop_top
            pop_top
        pop_except
            load_const                  None
            return_value

        propagate:
            reraise                     0
        )r   	   a  
        setup_finally                   @stopiter
            dup_top
            store_fast                  $__ddgen
            load_attr                   $send
            store_fast                  $__ddgensend
            load_const                  next
            load_fast                   $__ddgen

        loop:
            call_function               1

        yield:
        setup_finally                   @genexit
            yield_value
        pop_block
            load_fast                   $__ddgensend
            rot_two
            jump_absolute               @loop

        genexit:
            dup_top
            load_const                  GeneratorExit
            jump_if_not_exc_match       @exc
            pop_top
            pop_top
            pop_top
            pop_top
            load_fast                   $__ddgen
            load_attr                   $close
            call_function               0
            return_value

        exc:
            pop_top
            pop_top
            pop_top
            pop_top
            load_fast                   $__ddgen
            load_attr                   $throw
            load_const                  sys.exc_info
            call_function               0
            call_function_ex            0
            rot_four
        pop_except
            jump_absolute               @yield

        stopiter:
            dup_top
            load_const                  StopIteration
            jump_if_not_exc_match       @propagate
            pop_top
            pop_top
            pop_top
        pop_except
            load_const                  None
            return_value

        propagate:
            reraise
        z.No generator wrapping support for Python %d.%dinstrscodelinenoreturnc                 C   s4   t d urt j|d| dd< tj|d| dd < d S )N)r   r   )GENERATOR_HEAD_ASSEMBLYbindGENERATOR_ASSEMBLY)r   r   r    r   X/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/internal/wrapping/generators.pywrap_generator  s   r   )systypesr   bytecodebcddtrace.internal.assemblyr   version_infoPYr   r   NotImplementedErrorparsemsgRuntimeErrorlistInstrintr   r   r   r   r   <module>   sh    EDDH@A$