aboutsummaryrefslogtreecommitdiffstats
path: root/cparser/Transform.ml
diff options
context:
space:
mode:
authorxleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2012-12-18 07:54:35 +0000
committerxleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2012-12-18 07:54:35 +0000
commit712f3cbae6bfd3c6f6cc40d44f438aa0affcd371 (patch)
tree913762a241b5f97b3ef4df086ba6adaeb2ff45c4 /cparser/Transform.ml
parentc629161139899e43a2fe7c5af59ca926cdab370e (diff)
downloadcompcert-kvx-712f3cbae6bfd3c6f6cc40d44f438aa0affcd371.tar.gz
compcert-kvx-712f3cbae6bfd3c6f6cc40d44f438aa0affcd371.zip
Support for inline assembly (asm statements).
cparser: add primitive support for enum types. bitfield emulation: for bitfields with enum type, choose signed/unsigned as appropriate git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@2074 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'cparser/Transform.ml')
-rw-r--r--cparser/Transform.ml9
1 files changed, 6 insertions, 3 deletions
diff --git a/cparser/Transform.ml b/cparser/Transform.ml
index 0e7357b8..3b6f10f6 100644
--- a/cparser/Transform.ml
+++ b/cparser/Transform.ml
@@ -166,6 +166,7 @@ let stmt trexpr env s =
| Sreturn None -> s
| Sreturn (Some e) ->
{s with sdesc = Sreturn(Some(trexpr s.sloc env Val e))}
+ | Sasm _ -> s
| Sblock _ | Sdecl _ ->
assert false (* should not occur in unblocked code *)
in stm s
@@ -185,7 +186,7 @@ let program
?(fundef = fun env fd -> fd)
?(composite = fun env su id attr fl -> (attr, fl))
?(typedef = fun env id ty -> ty)
- ?(enum = fun env id members -> members)
+ ?(enum = fun env id attr members -> (attr, members))
?(pragma = fun env s -> s)
p =
@@ -208,8 +209,10 @@ let program
Env.add_composite env id (composite_info_def env su attr fl))
| Gtypedef(id, ty) ->
(Gtypedef(id, typedef env id ty), Env.add_typedef env id ty)
- | Genumdef(id, members) ->
- (Genumdef(id, enum env id members), env)
+ | Genumdef(id, attr, members) ->
+ let (attr', members') = enum env id attr members in
+ (Genumdef(id, attr', members'),
+ Env.add_enum env id {ei_members = members; ei_attr = attr})
| Gpragma s ->
(Gpragma(pragma env s), env)
in