Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  1/// Device node iterators put the previous value of the index variable, so an
  2/// explicit put causes a double put.
  3///
  4// Confidence: High
  5// Copyright: (C) 2015 Julia Lawall, Inria. GPLv2.
  6// URL: http://coccinelle.lip6.fr/
  7// Options: --no-includes --include-headers
  8// Keywords: for_each_child_of_node, etc.
  9
 10virtual patch
 11virtual context
 12virtual org
 13virtual report
 14
 15@r exists@
 16expression e1,e2;
 17local idexpression n;
 18iterator name for_each_node_by_name, for_each_node_by_type,
 19for_each_compatible_node, for_each_matching_node,
 20for_each_matching_node_and_match, for_each_child_of_node,
 21for_each_available_child_of_node, for_each_node_with_property;
 22iterator i;
 23position p1,p2;
 24statement S;
 25@@
 26
 27(
 28(
 29for_each_node_by_name(n,e1) S
 30|
 31for_each_node_by_type(n,e1) S
 32|
 33for_each_compatible_node(n,e1,e2) S
 34|
 35for_each_matching_node(n,e1) S
 36|
 37for_each_matching_node_and_match(n,e1,e2) S
 38|
 39for_each_child_of_node(e1,n) S
 40|
 41for_each_available_child_of_node(e1,n) S
 42|
 43for_each_node_with_property(n,e1) S
 44)
 45&
 46i@p1(...) {
 47   ... when != of_node_get(n)
 48       when any
 49   of_node_put@p2(n);
 50   ... when any
 51}
 52)
 53
 54@s exists@
 55local idexpression r.n;
 56statement S;
 57position r.p1,r.p2;
 58iterator i;
 59@@
 60
 61 of_node_put@p2(n);
 62 ... when any
 63 i@p1(..., n, ...)
 64 S
 65
 66@t depends on s && patch && !context && !org && !report@
 67local idexpression n;
 68position r.p2;
 69@@
 70
 71- of_node_put@p2(n);
 72
 73// ----------------------------------------------------------------------------
 74
 75@t_context depends on s && !patch && (context || org || report)@
 76local idexpression n;
 77position r.p2;
 78position j0;
 79@@
 80
 81*  of_node_put@j0@p2(n);
 82
 83// ----------------------------------------------------------------------------
 84
 85@script:python t_org depends on org@
 86j0 << t_context.j0;
 87@@
 88
 89msg = "ERROR: probable double put."
 90coccilib.org.print_todo(j0[0], msg)
 91
 92// ----------------------------------------------------------------------------
 93
 94@script:python t_report depends on report@
 95j0 << t_context.j0;
 96@@
 97
 98msg = "ERROR: probable double put."
 99coccilib.report.print_report(j0[0], msg)
100