/var/opt/nydus/ops/pycparser/__pycache__
Edit: /var/opt/nydus/ops/pycparser/__pycache__/ast_transforms.cpython-312.pyc (6131B)
Nj d dl mZmZmZmZ ddlmZ dej dej fdZdej ej z deej dd fd
Zdej ej z dej ej z fdZdej ej z deej ej z ef fd
Zy ) )AnyListTuplecast )c_astswitch_nodereturnc v t | t j sJ t | j t j s| S t j g | j j
}d}| j j xs g D ] }t |t j t j f rA|j j | t ||j |j d }n||j j | |j j | || _ | S )a3 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 SwitchstmtCompoundcoordblock_itemsCaseDefaultappend_extract_nested_casestmts)r new_compound last_casechilds I/opt/nydus/tmp/pip-target-a90h98xg/lib/python/pycparser/ast_transforms.pyfix_switch_casesr s f k5<<000k&&7 >>"k&6&6&<&<=L 48I
!!--33eejj%--89
$$++E2 (@(@A$004I ((//6&&u- 4" $K case_node
stmts_listNc t | j d t j t j f rF| j j }|j
| t t t | | yy)z{Recursively extract consecutive Case statements that are made nested
by the parser and add them to the stmts_list.
r N)
r
r r r r popr r r r )r r nesteds r r r e s[ )//!$uzz5==&AB$$&&!T#v.
; Cr declc ~ t | \ } }|sn| }t |t j s( |j }t |t j s(d|j v r)d| j vr| j j d |j | j |_ | S # t
$ r | cY S w xY w)a: 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_oncer
r TypeDecltypeAttributeErrorqualsr declnamename)r# foundtyps r fix_atomic_specifiersr/ q s 1$7e Cenn- ((C enn-
CII)4::"=
)$
||yyK K s B. .B<;B<c | }d}| j }|=t |t j rd|j v rn |}|}|j }|=t |t j sJ |J |j t t | _ d|j j vr%|j j j d | dfS # t
$ r | dfcY S w xY w)z~Performs one 'fix' round of atomic specifiers.
Returns (modified_decl, found) where found is True iff a fix was made.
Nr% FT)
r( r
r Typenamer* r) r' r r r )r# parentgrandparentnodes r r&