hyb
2025-11-07 cadac0a99d87c53805a07f3b4ca7fd11e524fe4a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
Ë
Iñúh;ãó(—ddlmZd„Zd„Zd„Zd„Zy)é)Úc_astcóv—t|tj«sJ‚t|jtj«s|Stjg|jj
«}d}|jj xsgD]¦}t|tjtjf«rA|j j|«t||j «|j d}Œn|€|j j|«ŒŒ|jj|«Œ¨||_|S)aÜ The 'case' statements in a 'switch' come out of parsing with one
        child node, so subsequent statements are just tucked to the parent
        Compound. Additionally, consecutive (fall-through) case statements
        come out messy. This is a peculiarity of the C grammar. The following:
 
            switch (myvar) {
                case 10:
                    k = 10;
                    p = k + 1;
                    return 10;
                case 20:
                case 30:
                    return 20;
                default:
                    break;
            }
 
        Creates this tree (pseudo-dump):
 
            Switch
                ID: myvar
                Compound:
                    Case 10:
                        k = 10
                    p = k + 1
                    return 10
                    Case 20:
                        Case 30:
                            return 20
                    Default:
                        break
 
        The goal of this transform is to fix this mess, turning it into the
        following:
 
            Switch
                ID: myvar
                Compound:
                    Case 10:
                        k = 10
                        p = k + 1
                        return 10
                    Case 20:
                    Case 30:
                        return 20
                    Default:
                        break
 
        A fixed AST node is returned. The argument may be modified.
    Néÿÿÿÿ) Ú
isinstancerÚSwitchÚstmtÚCompoundÚcoordÚ block_itemsÚCaseÚDefaultÚappendÚ_extract_nested_caseÚstmts)Ú switch_nodeÚ new_compoundÚ    last_caseÚchilds    úKH:\Change_password\venv_build\Lib\site-packages\pycparser/ast_transforms.pyÚfix_switch_casesr s€ôf k¤5§<¡<Ô 0Ð0Ð 0Ü k×&Ñ&¬¯©Ô 7ØÐô—>‘> " k×&6Ñ&6×&<Ñ&<Ó=€Lð€Ið
×"Ñ"×.Ñ.Ò4°"ò.ˆÜ eœeŸj™j¬%¯-©-Ð8Ô 9ð
× $Ñ $× +Ñ +¨EÔ 2Ü   ¨ ×(@Ñ(@Ô AØ$×0Ñ0°Ñ4‰IðРØ×(Ñ(×/Ñ/°Õ6à—‘×&Ñ& uÕ-ð.ð"$€KÔØ Ðócóä—t|jdtjtjf«r9|j |jj ««t|d|«yy)z€ Recursively extract consecutive Case statements that are made nested
        by the parser and add them to the stmts_list.
    érN)rrrr r rÚpopr)Ú    case_nodeÚ
stmts_lists  rrrcsS€ô)—/‘/ !Ñ$¤u§z¡z´5·=±=Ð&AÔBØ×ј)Ÿ/™/×-Ñ-Ó/Ô0ܘZ¨™^¨ZÕ8ðCrcó~—    t|«\}}|snŒ|}t|tj«s(    |j}t|tj«sŒ(d|j vr)d|j vr|j jd«|j€|j|_|S#t
$r|cYSwxYw)aK Atomic specifiers like _Atomic(type) are unusually structured,
        conferring a qualifier upon the contained type.
 
        This function fixes a decl with atomic specifiers to have a sane AST
        structure, by removing spurious Typename->TypeDecl pairs and attaching
        the _Atomic qualifier in the right place.
    Ú_Atomic)
Ú_fix_atomic_specifiers_oncerrÚTypeDeclÚtypeÚAttributeErrorÚqualsrÚdeclnameÚname)ÚdeclÚfoundÚtyps   rÚfix_atomic_specifiersr)ls®€ð Ü1°$Ó7‰ ˆˆeÙØ ð ð €CܘœeŸn™nÔ-ð    Ø—(‘(ˆCô˜œeŸn™nÕ-ð
C—I‘IÑ )°4·:±:Ñ"=Ø 
‰
×ј)Ô$Ø
‡||ÐØ—y‘yˆŒ à €Køôò    ØŠKð    ús± B.Â. B<Â;B<có¢—|}d}|j}|=t|tj«rd|jvrn    |}|}|j}|Œ=t|tj «sJ‚|j|_d|jjvr%|jjjd«|dfS#t
$r|dfcYSwxYw)zƒ Performs one 'fix' round of atomic specifiers.
        Returns (modified_decl, found) where found is True iff a fix was made.
    NrFT)r!rrÚTypenamer#r"r r)r&ÚparentÚ grandparentÚnodes    rrrŒsȀð€FØ€KØ 9‰9€DØ
Ü dœEŸN™NÔ +°    ¸T¿Z¹ZÑ0GØ ð    Ø ˆK؈FØ—9‘9ˆDð Ñ
ô fœeŸn™nÔ -Ð-Ð -Ø—y‘y€KÔØ˜Ÿ    ™    Ÿ™Ñ'Ø     ‰    ‰×јyÔ)Ø ˆ:Ðøôò    ð˜;Ò ð        ús½B>Â> Cà CN)Úrrrr)r©rrú<module>r1s!ðõòSòl9òó@r