(*
- * 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
let (right_n,right) = expression right in
(multibind [left_n;op_n;right_n],
Ast0.Assignment(left,op,right,simple))
+ | Ast0.Sequence(left,op,right) ->
+ let (left_n,left) = expression left in
+ let (op_n,op) = string_mcode op in
+ let (right_n,right) = expression right in
+ (multibind [left_n;op_n;right_n],
+ Ast0.Sequence(left,op,right))
| Ast0.CondExpr(exp1,why,exp2,colon,exp3) ->
let (exp1_n,exp1) = expression exp1 in
let (why_n,why) = string_mcode why in
(exp_n,Ast0.OptExp(exp))
| Ast0.UniqueExp(exp) ->
let (exp_n,exp) = expression exp in
- (exp_n,Ast0.UniqueExp(exp))) in
+ (exp_n,Ast0.UniqueExp(exp))
+ | Ast0.AsExpr(exp,asexp) ->
+ let (exp_n,exp) = expression exp in
+ let (asexp_n,asexp) = expression asexp in
+ (bind exp_n asexp_n, Ast0.AsExpr(exp,asexp))) in
exprfn all_functions k e
and typeC t =
let k t =
| Ast0.OptType(ty) ->
let (ty_n,ty) = typeC ty in (ty_n, Ast0.OptType(ty))
| Ast0.UniqueType(ty) ->
- let (ty_n,ty) = typeC ty in (ty_n, Ast0.UniqueType(ty))) in
+ let (ty_n,ty) = typeC ty in (ty_n, Ast0.UniqueType(ty))
+ | Ast0.AsType(ty,asty) ->
+ let (ty_n,ty) = typeC ty in
+ let (asty_n,asty) = typeC asty in
+ (bind ty_n asty_n, Ast0.AsType(ty,asty))) in
tyfn all_functions k t
and function_pointer (ty,lp1,star,rp1,lp2,params,rp2) extra =
let (sem_n,sem) = string_mcode sem in
(multibind [name_n;lp_n;args_n;rp_n;sem_n],
Ast0.MacroDecl(name,lp,args,rp,sem))
+ | Ast0.MacroDeclInit(name,lp,args,rp,eq,ini,sem) ->
+ let (name_n,name) = ident name in
+ let (lp_n,lp) = string_mcode lp in
+ let (args_n,args) = expression_dots args in
+ let (rp_n,rp) = string_mcode rp in
+ let (eq_n,eq) = string_mcode eq in
+ let (ini_n,ini) = initialiser ini in
+ let (sem_n,sem) = string_mcode sem in
+ (multibind [name_n;lp_n;args_n;rp_n;eq_n;ini_n;sem_n],
+ Ast0.MacroDeclInit(name,lp,args,rp,eq,ini,sem))
| Ast0.TyDecl(ty,sem) ->
let (ty_n,ty) = typeC ty in
let (sem_n,sem) = string_mcode sem in
| Ast0.OptDecl(decl) ->
let (n,decl) = declaration decl in (n,Ast0.OptDecl(decl))
| Ast0.UniqueDecl(decl) ->
- let (n,decl) = declaration decl in (n,Ast0.UniqueDecl(decl))) in
+ let (n,decl) = declaration decl in (n,Ast0.UniqueDecl(decl))
+ | Ast0.AsDecl(decl,asdecl) ->
+ let (decl_n,decl) = declaration decl in
+ let (asdecl_n,asdecl) = declaration asdecl in
+ (bind decl_n asdecl_n, Ast0.AsDecl(decl,asdecl))) in
declfn all_functions k d
and initialiser i =
| Ast0.OptIni(i) ->
let (n,i) = initialiser i in (n,Ast0.OptIni(i))
| Ast0.UniqueIni(i) ->
- let (n,i) = initialiser i in (n,Ast0.UniqueIni(i))) in
+ let (n,i) = initialiser i in (n,Ast0.UniqueIni(i))
+ | Ast0.AsInit(ini,asini) ->
+ let (ini_n,ini) = initialiser ini in
+ let (asini_n,asini) = initialiser asini in
+ (bind ini_n asini_n, Ast0.AsInit(ini,asini))) in
initfn all_functions k i
and designator = function
| Ast0.OptStm(re) ->
let (re_n,re) = statement re in (re_n,Ast0.OptStm(re))
| Ast0.UniqueStm(re) ->
- let (re_n,re) = statement re in (re_n,Ast0.UniqueStm(re))) in
+ let (re_n,re) = statement re in (re_n,Ast0.UniqueStm(re))
+ | Ast0.AsStmt(stm,asstm) ->
+ let (stm_n,stm) = statement stm in
+ let (asstm_n,asstm) = statement asstm in
+ (bind stm_n asstm_n, Ast0.AsStmt(stm,asstm))) in
let (n,s) = stmtfn all_functions k s in
(n,if mode = REBUILDER then process_bef_aft s else s)
| Ast0.IsoWhenFTag(e) ->
let (e_n,e) = expression e in
(e_n,Ast0.IsoWhenFTag(e))
- | Ast0.MetaPosTag(var) -> failwith "not supported" in
+ | Ast0.MetaPosTag(var) -> failwith "not supported"
+ | Ast0.HiddenVarTag(var) -> failwith "not supported" in
k a
(* not done for combiner, because the statement is assumed to be already