
On Wed, Dec 03, 2008 at 11:57:54PM +0000, Daniel P. Berrange wrote:
let isLockableThingNull exp funcheck = match exp with | UnOp (op,exp,typ) -> ( match op with LNot -> ( match exp with Lval (lhost, off) -> ( match lhost with Var vi -> funcheck vi | _ -> false ) | _ -> false ) | _ -> false ) | _ -> false
I guess this is better written using a nested pattern, something like: let isLockableThingNull exp funcheck = match exp with | UnOp (LNot, Lval (Var vi, off), typ) when funcheck vi -> true | _ -> false
let isLockableObjectNull exp = isLockableThingNull exp isLockableObjectVar
let isLockableDriverNull exp = isLockableThingNull exp isLockableDriverVar
It doesn't really matter, but you can also hide subfunctions (and static variables) like this: let isLockableObjectNull, isLockableDriverNull = let isLockableThingNull exp funcheck = (* this function is hidden *) (* the definition above *) in let isLockableObjectNull exp = (* visible *) (* copy definition from above *) in let isLockableDriverNull exp = (* visible *) (* copy definition from above *) in isLockableObjectNull, isLockableDriverNull
module L = DF.ForwardsDataFlow(Locking)
CIL is kinda crazy isn't it :-(
let prefixes = [ "qem"; "uml"; "lxc"; "ope"; "tes"; "net"; "sto"; "nod" ] in if String.length name > 4 then let prefix = String.sub fundec.svar.vname 0 3 in
There's also a function String.starts_with. It's in extlib, so you need to compile with '-package extlib' and add 'open ExtString' at the top of the source file. Top marks for dealing with the sheer weirdness of CIL :-) Rich. -- Richard Jones, Emerging Technologies, Red Hat http://et.redhat.com/~rjones Read my OCaml programming blog: http://camltastic.blogspot.com/ Fedora now supports 68 OCaml packages (the OPEN alternative to F#) http://cocan.org/getting_started_with_ocaml_on_red_hat_and_fedora