(array_arg: &Node, integer_arg: &Node, visitor: &Visitor)
| 554 | } |
| 555 | |
| 556 | pub fn is_data_and_size(array_arg: &Node, integer_arg: &Node, visitor: &Visitor) -> bool { |
| 557 | let array_arg = strip_prefix(array_arg); |
| 558 | let integer_arg = strip_prefix(integer_arg); |
| 559 | if let Clang::DeclRefExpr(array_dre) = &array_arg.kind { |
| 560 | let array_name = array_dre.get_name_as_string(); |
| 561 | if let Clang::DeclRefExpr(integer_dre) = &integer_arg.kind { |
| 562 | let integer_name = integer_dre.get_name_as_string(); |
| 563 | if array_name == "data" && integer_name == "size" { |
| 564 | return true; |
| 565 | } |
| 566 | if let Some(integer_init) = integer_dre.get_var_init(visitor) { |
| 567 | if is_data_and_size(array_arg, integer_init, visitor) { |
| 568 | return true; |
| 569 | } |
| 570 | if let Some(array_init) = array_dre.get_var_init(visitor) { |
| 571 | if is_data_and_size(array_init, integer_init, visitor) { |
| 572 | return true; |
| 573 | } |
| 574 | } |
| 575 | } |
| 576 | if let Some(array_init) = array_dre.get_var_init(visitor) { |
| 577 | if is_data_and_size(array_init, integer_arg, visitor) { |
| 578 | return true; |
| 579 | } |
| 580 | } |
| 581 | } |
| 582 | } |
| 583 | false |
| 584 | } |
| 585 | |
| 586 | /// Whether this arg is the sizeof of var_name. |
| 587 | pub fn is_sizeof_expr_of_var(integer_arg: &Node, array_name: &str, visitor: &Visitor) -> bool { |
no test coverage detected