| None -> f None
| Some qid -> let f qid = f (Some qid) in relax_qid f qid
-let resolve_gref f st lenv gref =
+let resolve_gref f st local lenv gref =
let rec get_local f i = function
| [] -> f None
| (name, _) :: _ when fst name = fst gref -> f (Some i)
| Some i -> f gref (Some (Local i))
| None -> get_global g
in
- get_local f 0 lenv
+ if local then get_local f 0 lenv else f None
let resolve_gref_relaxed f st lenv gref =
let rec g gref = function
- | None -> relax_qid (resolve_gref g st lenv) gref
+ | None -> relax_qid (resolve_gref g st false lenv) gref
| Some resolved -> f gref resolved
in
- resolve_gref g st lenv gref
+ resolve_gref g st true lenv gref
let get_pars f st = function
| None -> f [] None