(*
- * Copyright 2010, INRIA, University of Copenhagen
+ * Copyright 2012, INRIA
+ * Julia Lawall, Gilles Muller
+ * Copyright 2010-2011, INRIA, University of Copenhagen
* Julia Lawall, Rene Rydhof Hansen, Gilles Muller, Nicolas Palix
* Copyright 2005-2009, Ecole des Mines de Nantes, University of Copenhagen
* Yoann Padioleau, Julia Lawall, Rene Rydhof Hansen, Henrik Stuart, Gilles Muller, Nicolas Palix
| Ast.Assignment(left,op,right,simple) ->
expression left; print_string " "; mcode assignOp op;
print_string " "; expression right
+ | Ast.Sequence(left,op,right) ->
+ expression left; mcode print_string op;
+ print_string " "; expression right
| Ast.CondExpr(exp1,why,exp2,colon,exp3) ->
expression exp1; print_string " "; mcode print_string why;
print_option (function e -> print_string " "; expression e) exp2;
| Ast.MetaExpr(name,_,keep,ty,form,inherited) ->
mcode print_meta name; print_type keep inherited ty
| Ast.MetaExprList(name,_,_,_) -> mcode print_meta name
+ | Ast.AsExpr(exp,asexp) -> expression exp; print_string "@"; expression asexp
| Ast.EComma(cm) -> mcode print_string cm; print_space()
| Ast.DisjExpr(exp_list) -> print_disj_list expression exp_list
| Ast.NestExpr(starter,expr_dots,ender,Some whencode,multi) ->
and fullType ft =
match Ast.unwrap ft with
- Ast.Type(cv,ty) ->
+ Ast.Type(_,cv,ty) ->
print_option (function x -> mcode const_vol x; print_string " ") cv;
typeC ty
+ | Ast.AsType(ty,asty) -> fullType ty; print_string "@"; fullType asty
| Ast.DisjType(decls) -> print_disj_list fullType decls
| Ast.OptType(ty) -> print_string "?"; fullType ty
| Ast.UniqueType(ty) -> print_string "!"; fullType ty
and print_named_type ty id =
match Ast.unwrap ty with
- Ast.Type(None,ty1) ->
+ Ast.Type(_,None,ty1) ->
(match Ast.unwrap ty1 with
Ast.FunctionPointer(ty,lp1,star,rp1,lp2,params,rp2) ->
print_function_pointer (ty,lp1,star,rp1,lp2,params,rp2)
match Ast.unwrap ty with
Ast.Array(ty,lb,size,rb) ->
(match Ast.unwrap ty with
- Ast.Type(None,ty) ->
+ Ast.Type(_,cv,ty) ->
+ print_option
+ (function x -> mcode const_vol x; print_string " ")
+ cv;
loop ty
(function _ ->
k ();
Ast.MetaDecl(name,_,_) | Ast.MetaField(name,_,_)
| Ast.MetaFieldList(name,_,_,_) ->
mcode print_meta name
+ | Ast.AsDecl(decl,asdecl) -> declaration decl; print_string "@";
+ declaration asdecl
| Ast.Init(stg,ty,id,eq,ini,sem) ->
print_option (mcode storage) stg; print_named_type ty id;
print_string " "; mcode print_string eq;
ident name; mcode print_string_box lp;
dots (function _ -> ()) expression args;
close_box(); mcode print_string rp; mcode print_string sem
+ | Ast.MacroDeclInit(name,lp,args,rp,eq,ini,sem) ->
+ ident name; mcode print_string_box lp;
+ dots (function _ -> ()) expression args;
+ close_box(); mcode print_string rp;
+ print_string " "; mcode print_string eq;
+ print_string " "; initialiser ini; mcode print_string sem
| Ast.TyDecl(ty,sem) -> fullType ty; mcode print_string sem
| Ast.Typedef(stg,ty,id,sem) ->
mcode print_string stg; print_string " "; fullType ty; typeC id;
mcode print_meta name; print_string " "
| Ast.MetaInitList(name,_,_,_) ->
mcode print_meta name; print_string " "
+ | Ast.AsInit(ini,asini) -> initialiser ini; print_string "@";
+ initialiser asini
| Ast.InitExpr(exp) -> expression exp
| Ast.ArInitList(lb,initlist,rb) ->
mcode print_string lb; open_box 0;
| Ast.Define(header,body) ->
rule_elem arity header; print_string " ";
dots force_newline (statement arity) body
+ | Ast.AsStmt(stm,asstm) ->
+ statement arity stm; print_string "@"; statement arity asstm
| Ast.Nest(starter,stmt_dots,ender,whn,multi,_,_) ->
print_string arity;
nest_dots starter ender (statement arity)