1314
1314
let pp_flow n =
1315
1315
match F.unwrap n with
1316
| F.FunHeader ({f_name =idb;
1317
f_type = (rett, (paramst,(isvaargs,iidotsb)));
1320
f_attr = attrs},ii) ->
1326
attrs +> List.iter (vk_attribute bigf);
1328
paramst +> List.iter (fun (param, iicomma) ->
1329
vk_param bigf param;
1337
(* vk_decl bigf decl *)
1316
| F.FunHeader (({f_name =idb;
1317
f_type = (rett, (paramst,(isvaargs,iidotsb)));
1320
f_attr = attrs},ii) as def) ->
1326
| F.Decl decl -> pp_decl decl
1340
1328
| F.ExprStatement (st, (eopt, ii)) ->
1341
1329
pp_statement (Ast_c.mk_st (ExprStatement eopt) ii)
1343
| F.IfHeader (_, (e,ii)) -> pr2 "IfHeader"
1344
| F.SwitchHeader (_, (e,ii)) -> pr2 "SwitchHeader"
1345
| F.WhileHeader (_, (e,ii)) -> pr2 "WhileHeader"
1331
| F.IfHeader (_, (e,ii)) ->
1332
let (i1,i2,i3) = tuple_of_list3 ii in
1333
pr_elem i1; pr_space(); pr_elem i2; pp_expression e; pr_elem i3
1334
| F.SwitchHeader (_, (e,ii)) ->
1335
let (i1,i2,i3) = tuple_of_list3 ii in
1336
pr_elem i1; pr_space(); pr_elem i2; pp_expression e; pr_elem i3
1337
| F.WhileHeader (_, (e,ii)) ->
1338
let (i1,i2,i3) = tuple_of_list3 ii in
1339
pr_elem i1; pr_space(); pr_elem i2; pp_expression e; pr_elem i3
1346
1340
| F.DoWhileTail (e,ii) ->
1354
| F.ForHeader (_st, ((first, (e2opt,i2), (e3opt,i3)), ii)) ->
1356
iif i1; iif i2; iif i3;
1358
e1opt +> do_option (vk_expr bigf);
1359
e2opt +> do_option (vk_expr bigf);
1360
e3opt +> do_option (vk_expr bigf);
1341
let (i1,i2,i3,i4) = tuple_of_list4 ii in
1342
pr_elem i1; pr_elem i2; pp_expression e;
1343
pr_elem i3; pr_elem i4
1346
| F.ForHeader (_st, ((first, (e2opt,il2), (e3opt,il3)), ii)) ->
1347
let (i1,i2,i3) = tuple_of_list3 ii in
1348
pr_elem i1; pr_space();
1351
ForExp (e1opt,il1) ->
1352
pp_statement (Ast_c.mk_st (ExprStatement e1opt) il1)
1353
| ForDecl decl -> pp_decl decl);
1355
pp_statement (Ast_c.mk_st (ExprStatement e2opt) il2);
1358
pp_statement (Ast_c.mk_st (ExprStatement e3opt) il3);
1364
1361
| F.MacroIterHeader (_s, ((s,es), ii)) ->
1367
vk_argument_list bigf es;
1369
pr2 "MacroIterHeader"
1362
let (i1,i2,i3) = tuple_of_list3 ii in
1363
pr_elem i1; pr_space();
1366
es +> List.iter (fun (e, opt) ->
1367
assert (List.length opt <= 1);
1368
opt +> List.iter pr_elem;
1372
1374
| F.ReturnExpr (_st, (e,ii)) ->
1373
(* iif ii; vk_expr bigf e*)
1377
| F.Case (_st, (e,ii)) ->
1378
(* iif ii; vk_expr bigf e *)
1375
let (i1,i2) = tuple_of_list2 ii in
1376
pr_elem i1; pr_space(); pp_expression e; pr_elem i2
1378
| F.Case (_st, (e,ii)) ->
1379
let (i1,i2) = tuple_of_list2 ii in
1380
pr_elem i1; pr_space(); pp_expression e; pr_elem i2
1381
1382
| F.CaseRange (_st, ((e1, e2),ii)) ->
1382
(* iif ii; vk_expr bigf e1; vk_expr bigf e2 *)
1383
let (i1,i2,i3) = tuple_of_list3 ii in
1384
pr_elem i1; pr_space(); pp_expression e1; pr_elem i2;
1385
pp_expression e2; pr_elem i3
1387
1387
| F.CaseNode i -> ()
1390
(* vk_expr bigf e *)
1389
| F.DefineExpr e -> pp_expression e
1393
| F.DefineType ft ->
1394
(* vk_type bigf ft *)
1391
| F.DefineType ft -> pp_type ft
1397
1393
| F.DefineHeader ((s,ii), (defkind)) ->
1400
vk_define_kind bigf defkind;
1394
let (idefine,iident,ieol) = Common.tuple_of_list3 ii in
1395
pr_elem idefine; pr_space();
1396
pr_elem iident; pr_space();
1398
| DefineVar | Undef -> ()
1399
| DefineFunc (params, ii) ->
1400
let (i1,i2) = tuple_of_list2 ii in
1402
pp_define_param_list params;
1405
1405
| F.DefineDoWhileZeroHeader (((),ii)) ->
1406
(* not sure what it is, ignore *)
1407
1408
pr2 "DefineDoWhileZeroHeader"
1412
1413
pr_elem iident;
1413
1414
pp_pragmainfo pragmainfo
1415
| F.Include {i_include = (s, ii);} ->
1416
| F.Include ({i_include = (s, ii);} as a) ->
1417
pp_directive (Include a)
1420
1419
| F.MacroTop (s, args, ii) ->
1422
vk_argument_list bigf args *)
1420
pp_toplevel(MacroTop (s, args, ii))
1426
1422
| F.Break (st,((),ii),fromswitch) ->
1423
let (i1,i2) = tuple_of_list2 ii in
1424
pr_elem i1; pr_elem i2
1429
1425
| F.Continue (st,((),ii)) ->
1426
let (i1,i2) = tuple_of_list2 ii in
1427
pr_elem i1; pr_elem i2
1432
1428
| F.Default (st,((),ii)) ->
1429
let (i1,i2) = tuple_of_list2 ii in
1430
pr_elem i1; pr_elem i2
1435
1431
| F.Return (st,((),ii)) ->
1432
let (i1,i2) = tuple_of_list2 ii in
1433
pr_elem i1; pr_elem i2
1438
1434
| F.Goto (st, name, ((),ii)) ->
1435
let (i1, i3) = Common.tuple_of_list2 ii in
1436
pr_elem i1; pr_space(); pp_name name; pr_elem i3
1441
1437
| F.Label (st, name, ((),ii)) ->
1438
let (i2) = Common.tuple_of_list1 ii in
1439
pp_name name; pr_elem i2
1444
1440
| F.EndStatement iopt ->
1445
1441
(* do_option infof iopt *)
1446
1442
pr2 "EndStatement"
1447
1443
| F.DoHeader (st, info) ->
1450
1445
| F.Else info ->
1453
1447
| F.SeqEnd (i, info) ->
1456
1449
| F.SeqStart (st, i, info) ->
1460
1452
| F.MacroStmt (st, ((),ii)) ->
1453
pp_statement (MacroStmt,ii)
1463
1454
| F.Asm (st, (asmbody,ii)) ->
1466
vk_asmbody bigf asmbody
1455
pp_statement (Asm asmbody, ii)
1470
| F.Exec(st,(code,ii)) -> pr2 "Exec"
1457
| F.Exec(st,(code,ii)) ->
1458
pp_statement (Exec code, ii)
1472
1460
| F.IfdefHeader (info) ->