[Tinyos-devel] cc2420 radio stack and deputy
Vlado Handziski
handzisk at tkn.tu-berlin.de
Mon Jun 23 14:45:58 PDT 2008
Is this already commited to the deputy svn?
Vlado
On Mon, Jun 23, 2008 at 20:52, David Gay <dgay42 at gmail.com> wrote:
> On Fri, Jun 20, 2008 at 5:06 PM, David Gay <dgay42 at gmail.com> wrote:
> > On Fri, Jun 20, 2008 at 4:01 PM, David Gay <dgay42 at gmail.com> wrote:
> >> Now I just need to figure out why a safe base station is unhappy...
> >
> > Ok, found the problem: Deputy doesn't support gcc's enum extension
> > that allows long (or longer) enum constants. John/Yang, can you add
> > the following patch to our collection of Deputy patches? (I'll
> > incorporate a cleaner/more complete version of this patch in CIL at a
> > later date, probably when we merge the other patches - this one is a
> > quick hack):
>
> The patch needs a little further elaboration (hopefully this is final
> - the new bit is the second change in cabs2cil.ml):
>
> Index: src/cil.mli
> ===================================================================
> --- src/cil.mli (revision 10132)
> +++ src/cil.mli (working copy)
> @@ -1612,6 +1612,11 @@
> Otherwise, return None. *)
> val isInteger: exp -> int64 option
>
> +(** If the given expression is a (possibly cast'ed)
> + character or an integer constant, return that integer's kind.
> + Otherwise, return None. *)
> +val isIntegerKind: exp -> ikind option
> +
> (** Convert a 64-bit int to an OCaml int, or raise an exception if that
> can't be done. *)
> val i64_to_int: int64 -> int
> Index: src/frontc/cabs2cil.ml
> ===================================================================
> --- src/frontc/cabs2cil.ml (revision 10132)
> +++ src/frontc/cabs2cil.ml (working copy)
> @@ -2376,9 +2376,10 @@
> | (kname, e, cloc) :: rest ->
> (* constant-eval 'e' to determine tag value *)
> let e' = getIntConstExp e in
> + let c' = constFold true e' in
> let e' =
> - match isInteger (constFold true e') with
> - Some i -> if !lowerConstants then kinteger64 IInt i else
> e'
> + match (isInteger c', isIntegerKind c') with
> + (Some i, Some ik) -> if !lowerConstants then
> kinteger64 ik i else e'
> | _ -> E.s (error "Constant initializer %a not an
> integer" d_exp e')
> in
> processName kname e' (convLoc cloc) rest
> @@ -3144,7 +3145,7 @@
> finishExp empty (Lval(var vi)) vi.vtype
> | EnvEnum (tag, typ), _ ->
> if !Cil.lowerConstants then
> - finishExp empty tag typ
> + finishExp empty tag (typeOf tag)
> else begin
> let ei =
> match unrollType typ with
> Index: src/cil.ml
> ===================================================================
> --- src/cil.ml (revision 10132)
> +++ src/cil.ml (working copy)
> @@ -1223,6 +1223,13 @@
> | CastE(_, e) -> isInteger e
> | _ -> None
>
> +let rec isIntegerKind : exp -> ikind option = function
> + | Const(CInt64 (_,k,_)) -> Some k
> + | Const(CChr c) -> Some IInt
> + | Const(CEnum(v, s, ei)) -> isIntegerKind v
> + | CastE(_, e) -> isIntegerKind e
> + | _ -> None
> +
>
> (** Convert a 64-bit int to an OCaml int, or raise an exception if that
> can't be done. *)
> _______________________________________________
> Tinyos-devel mailing list
> Tinyos-devel at millennium.berkeley.edu
> https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://www.millennium.berkeley.edu/pipermail/tinyos-devel/attachments/20080623/92e354c8/attachment-0001.htm
More information about the Tinyos-devel
mailing list