-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbolum13.txt
48 lines (39 loc) · 2.23 KB
/
bolum13.txt
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
13 Yineleme
Bir sonraki yineleme sanal kuralları veya sanal tanımlayıcı
bağlamalarının farklı bir kümesi verilerek, Coccinelle de yineleme
yapmak mümkündür. demos/iteration.cocci 'de bir örneği bulunmaktadır.
Örnek aşağıdaki gibidir:
virtual after_start
@initialize:ocaml@
let tbl = Hashtbl.create(100)
let add_if_not_present from f file =
try let _ = Hashtbl.find tbl (f,file) in ()
with Not_found ->
Hashtbl.add tbl (f,file) file;
let it = new iteration() in
(match file with
Some fl -> it#set_files [fl]
| None -> ());
it#add_virtual_rule After_start;
it#add_virtual_identifier Err_ptr_function f;
it#register()
after_start sanal kuralı ilk yinelemeyi (burada eşleşme kabul edilmez)
diğerlerinden ayırt etmek için kullanılır. This is done by not mentioning
after_start in the command line, ama her yinelemede eklenir.
"new iteration" ve "register" satırları arasında bulunan "add_if_not_present"
fonksiyonu ana kod için çalışan yinelemedir. "new iteration" yeni bir yinelemeyi
temsil eden bir yapı oluşturur. "set_files" yeni yineleme üzerinde dikkate alınması
gereken dosyaların listesini belirler. Eğer fonsiyon çağırılmazsa yeni yineleme
o dosyalara o an ki güncel yinelemymiş gibi davranır. "add_virtual_rule A" yanına
-D parametresi koyulduğunda da aynı etkiyi yaratacaktır. Bu başka bir yerde yapıl-
masa da kural adının büyük harfle başladığını unutmayın. "add_virtual_identifier X v"
yanına -D x=v parametresi koyulduğunda da aynı etkiyi yaratacaktır. Durum değişikli-
ği hakkında not, "extend_virtual_identifiers()" güncel yinelemenin
"add_virtual_identifier" tarafından üzerien yazılmamış tüm sanal tanımlarını korur.
Son olarak, "register" gelecekte bir zamanda yeni bir yinelemeyi tetiklemek için
toplanan bilgileri kuyruğa sokar.
Yineleme kullanılırken değişikliğe izin verilmez. Böylelikle anlamsal yama *s
(anlamsal eşleme yerine bir anlamsal yama.) içermedikçe "-no-show-diff" kullanmayı
gerektirir. Kodun geri kalanı üzerinde aynı bilginin birden fazla kez kuyruğa
alınmadığından emin olmak için bir anahtarlı tablo(hash table) kullanır. Coccinelle'nin
kendisi bunu desteklemez.