AnalysisArchitecture.hs revision d0d768aadbf59db3e81450305ecde3f16d7099ce
d27b1887e61f1dc53d77c37f59dbf5019242a686Christian MaederModule : $Header$
d27b1887e61f1dc53d77c37f59dbf5019242a686Christian MaederDescription : static analysis of CASL architectural specifications
d27b1887e61f1dc53d77c37f59dbf5019242a686Christian MaederCopyright : (c) Maciek Makowski, Warsaw University, C. Maeder 2004-2006
d27b1887e61f1dc53d77c37f59dbf5019242a686Christian MaederLicense : similar to LGPL, see HetCATS/LICENSE.txt or LIZENZ.txt
d27b1887e61f1dc53d77c37f59dbf5019242a686Christian MaederMaintainer : till@informatik.uni-bremen.de
d27b1887e61f1dc53d77c37f59dbf5019242a686Christian MaederStability : provisional
d27b1887e61f1dc53d77c37f59dbf5019242a686Christian MaederPortability : non-portable (via imports)
d27b1887e61f1dc53d77c37f59dbf5019242a686Christian MaederStatic analysis of CASL architectural specifications
d27b1887e61f1dc53d77c37f59dbf5019242a686Christian Maeder Follows the extended static semantics sketched in Chap. III:5.6
d27b1887e61f1dc53d77c37f59dbf5019242a686Christian Maeder of the CASL Reference Manual.
d27b1887e61f1dc53d77c37f59dbf5019242a686Christian Maeder ( anaArchSpec
d27b1887e61f1dc53d77c37f59dbf5019242a686Christian Maeder , anaUnitSpec
526e7f36639cb58e3c99a54bea082499a6b04a25Christian Maederimport qualified Data.Map as Map
275698320a734a6fd647ea6a461d6ce38862da1dChristian Maederimport Data.Graph.Inductive.Graph as Graph (Node)
275698320a734a6fd647ea6a461d6ce38862da1dChristian Maeder-- | Analyse an architectural specification
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder-- ARCH-SPEC ::= BASIC-ARCH-SPEC | GROUP-ARCH-SPEC | ARCH-SPEC-NAME
df67ddf64192bfcae6ece65255ad796a17cbe532Christian MaederanaArchSpec :: LogicGraph -> DGraph
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder -> HetcatsOpts -- ^ should only the structure be analysed?
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder -> ARCH_SPEC -> Result (ArchSig, DGraph, ARCH_SPEC)
275698320a734a6fd647ea6a461d6ce38862da1dChristian Maeder{- ^ returns 1. the architectural signature of given ARCH-SPEC
275698320a734a6fd647ea6a461d6ce38862da1dChristian Maeder2. development graph resulting from structured specs within the arch
526e7f36639cb58e3c99a54bea082499a6b04a25Christian Maederspec and 3. ARCH_SPEC after possible conversions -}
275698320a734a6fd647ea6a461d6ce38862da1dChristian MaederanaArchSpec lgraph dg opts archSp = case archSp of
526e7f36639cb58e3c99a54bea082499a6b04a25Christian Maeder Basic_arch_spec udd uexpr pos ->
275698320a734a6fd647ea6a461d6ce38862da1dChristian Maeder do (uctx, dg', udd') <- anaUnitDeclDefns lgraph dg opts udd
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder (_, usig, _, dg'', uexpr') <-
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder anaUnitExpression lgraph dg' opts uctx (item uexpr)
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder return (ArchSig (ctx uctx) usig, dg'', Basic_arch_spec udd'
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder (replaceAnnoted uexpr' uexpr) pos)
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder Group_arch_spec asp _ -> anaArchSpec lgraph dg opts (item asp)
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder Arch_spec_name asn@(Token astr pos) -> case lookupGlobalEnvDG asn dg of
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder Just (ArchEntry asig) -> return (asig, dg, archSp)
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder _ -> fatal_error (astr ++
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder " is not an architectural specification") pos
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder-- | Analyse a list of unit declarations and definitions
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian MaederanaUnitDeclDefns :: LogicGraph -> DGraph
d27b1887e61f1dc53d77c37f59dbf5019242a686Christian Maeder -> HetcatsOpts -> [Annoted UNIT_DECL_DEFN]
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder -> Result (ExtStUnitCtx, DGraph, [Annoted UNIT_DECL_DEFN])
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder{- ^ returns 1. extended static unit context 2. possibly modified
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maederdevelopment graph 3. possibly modified list of unit declarations and
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maederdefinitions -}
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian MaederanaUnitDeclDefns lgraph dg opts =
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder anaUnitDeclDefns' lgraph dg opts emptyExtStUnitCtx
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian MaederanaUnitDeclDefns' :: LogicGraph -> DGraph
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder -> HetcatsOpts -> ExtStUnitCtx -> [Annoted UNIT_DECL_DEFN]
275698320a734a6fd647ea6a461d6ce38862da1dChristian Maeder -> Result (ExtStUnitCtx, DGraph, [Annoted UNIT_DECL_DEFN])
526e7f36639cb58e3c99a54bea082499a6b04a25Christian MaederanaUnitDeclDefns' lgraph dg opts uctx uds = case uds of
df67ddf64192bfcae6ece65255ad796a17cbe532Christian Maeder udd : udds -> do
df67ddf64192bfcae6ece65255ad796a17cbe532Christian Maeder (uctx', dg', udd') <-
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder anaUnitDeclDefn lgraph dg opts uctx (item udd)
526e7f36639cb58e3c99a54bea082499a6b04a25Christian Maeder (uctx'', dg'', udds') <-
526e7f36639cb58e3c99a54bea082499a6b04a25Christian Maeder anaUnitDeclDefns' lgraph dg' opts uctx' udds
526e7f36639cb58e3c99a54bea082499a6b04a25Christian Maeder return (uctx'', dg'', replaceAnnoted udd' udd : udds')
526e7f36639cb58e3c99a54bea082499a6b04a25Christian Maeder [] -> return (uctx, dg, [])
e84c877ad38ce9312eab222a79f44da2015572d2Christian MaederalreadyDefinedUnit :: SIMPLE_ID -> String
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian MaederalreadyDefinedUnit u = "Unit " ++ tokStr u ++ " already declared/defined"
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder-- | Create a node that represents a union of signatures
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian MaedernodeSigUnion :: LogicGraph -> DGraph -> [MaybeNode] -> DGOrigin
c1bca76471ad22ac47f05b03576974762d364339Christian Maeder -> Result (NodeSig, DGraph)
c1bca76471ad22ac47f05b03576974762d364339Christian MaedernodeSigUnion lgraph dg nodeSigs orig =
c1bca76471ad22ac47f05b03576974762d364339Christian Maeder do sigUnion@(G_sign lid sigU ind) <- gsigManyUnion lgraph
c1bca76471ad22ac47f05b03576974762d364339Christian Maeder $ map getMaybeSig nodeSigs
c1bca76471ad22ac47f05b03576974762d364339Christian Maeder let nodeContents = newNodeLab emptyNodeName orig
c1bca76471ad22ac47f05b03576974762d364339Christian Maeder $ noSensGTheory lid sigU ind
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder node = getNewNodeDG dg
e84c877ad38ce9312eab222a79f44da2015572d2Christian Maeder dg' = insNodeDG (node, nodeContents) dg
526e7f36639cb58e3c99a54bea082499a6b04a25Christian Maeder inslink dgres nsig = do
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder EmptyNode _ -> dgres
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder JustNode (NodeSig n sig) -> do
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder incl <- ginclusion lgraph sig sigUnion
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder return $ insLEdgeNubDG
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder (n, node, globDefLink incl SeeTarget) dgv
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder dg'' <- foldl inslink (return dg') nodeSigs
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder return (NodeSig node sigUnion, dg'')
526e7f36639cb58e3c99a54bea082499a6b04a25Christian Maeder-- | Analyse unit refs
526e7f36639cb58e3c99a54bea082499a6b04a25Christian MaederanaUnitRef :: LogicGraph -> DGraph
526e7f36639cb58e3c99a54bea082499a6b04a25Christian Maeder -> HetcatsOpts -> ExtStUnitCtx -> UNIT_REF
526e7f36639cb58e3c99a54bea082499a6b04a25Christian Maeder -> Result (ExtStUnitCtx, DGraph, UNIT_REF)
275698320a734a6fd647ea6a461d6ce38862da1dChristian Maeder{- ^ returns 1. extended static unit context 2. possibly modified
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maederdevelopment graph 3. possibly modified UNIT_DECL_DEFN -}
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder-- unit declaration
a7cb01ac1824bde5bdc997c8e294a1ed821dd21bChristian MaederanaUnitRef lgraph dg opts
275698320a734a6fd647ea6a461d6ce38862da1dChristian Maeder uctx@(buc, _) (Unit_ref un usp pos) =
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder do (dns, diag', dg', _) <-
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder anaUnitImported lgraph dg opts uctx pos []
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder let impSig = toMaybeNode dns
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder (usig, dg'', usp') <-
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder anaRefSpec lgraph dg' opts impSig usp
df67ddf64192bfcae6ece65255ad796a17cbe532Christian Maeder insertBasedUnit lgraph dg'' usig (buc, diag') dns un
df67ddf64192bfcae6ece65255ad796a17cbe532Christian Maeder $ Unit_ref un usp' pos
df67ddf64192bfcae6ece65255ad796a17cbe532Christian MaederinsertBasedUnit :: LogicGraph -> DGraph -> UnitSig -> ExtStUnitCtx
d97700a22b2585ece83b05f3fff945fdfd0c44b4Christian Maeder -> MaybeDiagNode -> UNIT_NAME -> a
df67ddf64192bfcae6ece65255ad796a17cbe532Christian Maeder -> Result (ExtStUnitCtx, DGraph, a)
df67ddf64192bfcae6ece65255ad796a17cbe532Christian MaederinsertBasedUnit lgraph dg'' usig uctx@(buc, diag') dns un@(Token ustr unpos)
275698320a734a6fd647ea6a461d6ce38862da1dChristian Maeder then plain_error (uctx, dg'', ud') (alreadyDefinedUnit un) unpos
275698320a734a6fd647ea6a461d6ce38862da1dChristian Maeder else case usig of
275698320a734a6fd647ea6a461d6ce38862da1dChristian Maeder UnitSig argSigs resultSig -> do
275698320a734a6fd647ea6a461d6ce38862da1dChristian Maeder let impSig = toMaybeNode dns
526e7f36639cb58e3c99a54bea082499a6b04a25Christian Maeder (resultSig', dg''') <- nodeSigUnion lgraph dg''
df67ddf64192bfcae6ece65255ad796a17cbe532Christian Maeder (JustNode resultSig : [impSig]) DGImports
df67ddf64192bfcae6ece65255ad796a17cbe532Christian Maeder (basedParUSig, diag''') <- if null argSigs then do
df67ddf64192bfcae6ece65255ad796a17cbe532Christian Maeder (dn', diag'') <- extendDiagramIncl lgraph diag'
df67ddf64192bfcae6ece65255ad796a17cbe532Christian Maeder JustDiagNode dn -> [dn]
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder _ -> []) resultSig' ustr
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder return (Based_unit_sig dn', diag'')
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder else return (Based_par_unit_sig dns $
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder UnitSig argSigs resultSig', diag')
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder return ((Map.insert un basedParUSig buc, diag'''),
df67ddf64192bfcae6ece65255ad796a17cbe532Christian Maeder-- | Analyse unit declaration or definition
df67ddf64192bfcae6ece65255ad796a17cbe532Christian MaederanaUnitDeclDefn :: LogicGraph -> DGraph
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder -> HetcatsOpts -> ExtStUnitCtx -> UNIT_DECL_DEFN
df67ddf64192bfcae6ece65255ad796a17cbe532Christian Maeder -> Result (ExtStUnitCtx, DGraph, UNIT_DECL_DEFN)
df67ddf64192bfcae6ece65255ad796a17cbe532Christian Maeder{- ^ returns 1. extended static unit context 2. possibly modified
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maederdevelopment graph 3. possibly modified UNIT_DECL_DEFN -}
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian MaederanaUnitDeclDefn lgraph dg opts uctx@(buc, _) udd = case udd of
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder Unit_decl un usp uts pos -> do
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder (dns, diag', dg', uts') <-
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder anaUnitImported lgraph dg opts uctx pos uts
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder let impSig = toMaybeNode dns
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder (usig, dg'', usp') <-
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder anaRefSpec lgraph dg' opts impSig usp
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder insertBasedUnit lgraph dg'' usig (buc, diag') dns un
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder $ Unit_decl un usp' uts' pos
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder Unit_defn un uexp poss -> do
6a6689ad6d4c70af2ce3389f39a50982f20fd939Christian Maeder (p, usig, diag, dg', uexp') <-
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder anaUnitExpression lgraph dg opts uctx uexp
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder let ud' = Unit_defn un uexp' poss
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder {- it's sufficient to check that un is not mapped in buc, we
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder don't need to convert the ExtStUnitCtx to StUnitCtx as the
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder domain will be preserved -}
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder plain_error (uctx, dg', ud') (alreadyDefinedUnit un) $ tokPos un
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder else case usig of
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder {- we can use Map.insert as there are no mappings for
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder un in ps and bs (otherwise there would have been a
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder mapping in (ctx uctx)) -}
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder UnitSig args _ -> if null args then case p of
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder JustDiagNode dn -> return ((Map.insert un
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder (Based_unit_sig dn) buc, diag), dg', ud')
945e82ed7877917f3ab1657f555e71991372546aChristian Maeder _ -> error "anaUnitDeclDefn"
df67ddf64192bfcae6ece65255ad796a17cbe532Christian Maeder else return ((Map.insert un
f0221ee7b9f8660e7c7add896e151f7a4ac8b4adChristian Maeder (Based_par_unit_sig p usig) buc
f0221ee7b9f8660e7c7add896e151f7a4ac8b4adChristian Maeder , diag), dg', ud')
526e7f36639cb58e3c99a54bea082499a6b04a25Christian Maeder-- | Analyse unit imports
526e7f36639cb58e3c99a54bea082499a6b04a25Christian MaederanaUnitImported :: LogicGraph -> DGraph
df67ddf64192bfcae6ece65255ad796a17cbe532Christian Maeder -> HetcatsOpts -> ExtStUnitCtx -> Range -> [Annoted UNIT_TERM]
7710f7c3425e45af11af124ff37bec27229d24f7Christian Maeder -> Result (MaybeDiagNode, Diag, DGraph, [Annoted UNIT_TERM])
b579e1a98aa30fb6093cbbdfeae51edbd5ba26adChristian MaederanaUnitImported lgraph dg opts uctx@(_, diag) poss terms =
b579e1a98aa30fb6093cbbdfeae51edbd5ba26adChristian Maeder case terms of
187e09da24d6ed264eeeef48eb3fcc2b8663ca46Christian Maeder curl <- lookupCurrentLogic "UnitImported" lgraph
187e09da24d6ed264eeeef48eb3fcc2b8663ca46Christian Maeder return (EmptyDiagNode curl, diag, dg, [])
7710f7c3425e45af11af124ff37bec27229d24f7Christian Maeder (dnsigs, diag', dg', terms') <-
7710f7c3425e45af11af124ff37bec27229d24f7Christian Maeder anaUnitImported' lgraph dg opts uctx terms
7710f7c3425e45af11af124ff37bec27229d24f7Christian Maeder (sig, dg'') <- nodeSigUnion lgraph dg'
7710f7c3425e45af11af124ff37bec27229d24f7Christian Maeder (map (JustNode . getSigFromDiag) dnsigs) DGImports
7710f7c3425e45af11af124ff37bec27229d24f7Christian Maeder -- check amalgamability conditions
7710f7c3425e45af11af124ff37bec27229d24f7Christian Maeder {- let incl s = propagateErrors (ginclusion lgraph (getSig
7710f7c3425e45af11af124ff37bec27229d24f7Christian Maeder (getSigFromDiag s)) (getSig sig)) -}
b579e1a98aa30fb6093cbbdfeae51edbd5ba26adChristian Maeder let pos = getPosUnitImported poss
b579e1a98aa30fb6093cbbdfeae51edbd5ba26adChristian Maeder sink <- inclusionSink lgraph dnsigs sig
b579e1a98aa30fb6093cbbdfeae51edbd5ba26adChristian Maeder () <- assertAmalgamability opts pos diag' sink
f0221ee7b9f8660e7c7add896e151f7a4ac8b4adChristian Maeder (dnsig, diag'') <- extendDiagramIncl lgraph diag' dnsigs
b579e1a98aa30fb6093cbbdfeae51edbd5ba26adChristian Maeder sig $ showDoc terms ""
526e7f36639cb58e3c99a54bea082499a6b04a25Christian Maeder return (JustDiagNode dnsig, diag'', dg'', terms')
d97700a22b2585ece83b05f3fff945fdfd0c44b4Christian MaederanaUnitImported' :: LogicGraph -> DGraph
b579e1a98aa30fb6093cbbdfeae51edbd5ba26adChristian Maeder -> HetcatsOpts -> ExtStUnitCtx -> [Annoted UNIT_TERM]
c1bca76471ad22ac47f05b03576974762d364339Christian Maeder -> Result ([DiagNodeSig], Diag, DGraph, [Annoted UNIT_TERM])
d97700a22b2585ece83b05f3fff945fdfd0c44b4Christian MaederanaUnitImported' lgraph dg opts uctx@(buc, diag) ts = case ts of
d97700a22b2585ece83b05f3fff945fdfd0c44b4Christian Maeder [] -> return ([], diag, dg, [])
d97700a22b2585ece83b05f3fff945fdfd0c44b4Christian Maeder ut : uts -> do
d97700a22b2585ece83b05f3fff945fdfd0c44b4Christian Maeder (dnsig, diag', dg', ut') <-
d97700a22b2585ece83b05f3fff945fdfd0c44b4Christian Maeder anaUnitTerm lgraph dg opts uctx (item ut)
d97700a22b2585ece83b05f3fff945fdfd0c44b4Christian Maeder (dnsigs, diag'', dg'', uts') <-
f0221ee7b9f8660e7c7add896e151f7a4ac8b4adChristian Maeder anaUnitImported' lgraph dg' opts (buc, diag') uts
526e7f36639cb58e3c99a54bea082499a6b04a25Christian Maeder return (dnsig : dnsigs, diag'', dg'', replaceAnnoted ut' ut : uts')
526e7f36639cb58e3c99a54bea082499a6b04a25Christian Maeder-- | Analyse an unit expression
526e7f36639cb58e3c99a54bea082499a6b04a25Christian MaederanaUnitExpression :: LogicGraph -> DGraph
526e7f36639cb58e3c99a54bea082499a6b04a25Christian Maeder -> HetcatsOpts -> ExtStUnitCtx -> UNIT_EXPRESSION
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder -> Result (MaybeDiagNode, UnitSig, Diag, DGraph, UNIT_EXPRESSION)
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian MaederanaUnitExpression lgraph dg opts uctx@(buc, diag)
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder uexp@(Unit_expression ubs ut poss) = case ubs of
c1bca76471ad22ac47f05b03576974762d364339Christian Maeder (dnsig@(Diag_node_sig _ ns'), diag', dg', ut') <-
c1bca76471ad22ac47f05b03576974762d364339Christian Maeder anaUnitTerm lgraph dg opts uctx (item ut)
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder return (JustDiagNode dnsig, UnitSig [] ns', diag', dg',
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder Unit_expression [] (replaceAnnoted ut' ut) poss)
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder (args, dg', ubs') <-
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder anaUnitBindings lgraph dg opts uctx ubs
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder (resnsig, _dg'') <- nodeSigUnion lgraph dg'
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder (map (JustNode . snd) args) DGFormalParams
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder -- build the extended diagram and new based unit context
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder let dexp = showDoc uexp ""
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder insNodes diag0 [] buc0 = return ([], diag0, buc0)
31a81edf1285dc338211bfe86ba50a1f4128d9d2Christian Maeder insNodes diag0 ((un, nsig) : args0) buc0 =
c1bca76471ad22ac47f05b03576974762d364339Christian Maeder do (dnsig, diag') <- extendDiagramIncl lgraph diag0 []
Map.insert -}
let buc' = Map.insert un (Based_unit_sig dnsig) buc0
if Map.member un buc
(EmptyNode $ error "Static.AnalysisArchitecture")
case Map.lookup un buc of