DIRECTORY AbSets, BiRels, Convert, LichenDataOps, LichenDataStructure, Rope, SetBasics; LichenImplNaming: CEDAR PROGRAM IMPORTS AbSets, BiRels, Convert, LichenDataOps, LichenDataStructure, Rope, SetBasics EXPORTS LichenDataOps = BEGIN OPEN Sets:AbSets, LichenDataStructure, LichenDataOps; PrefixifyDesign: PUBLIC PROC [design: Design] ~ { design.cellTypes.EnumA[PrefixifyCellType]; RETURN}; noIntPart: INT ~ -1; fixSet: Set--{noIntPart, 1}-- ~ Sets.CreateList[vals: LIST[IV[noIntPart], IV[1]], space: SetBasics.ints, mutability: constant, order: Sets.fwd]; PrefixifyCellType: PROC [cta: REF ANY] ~ { ct: CellType ~ NARROW[cta]; IF ct.asu#NIL THEN { d: Design ~ ct.d; parsed: BiRel--ROPE X INT-- ~ BiRels.GenCreate[spaces: [SetBasics.ropes[TRUE], SetBasics.ints], mappable: [TRUE, FALSE], hints: [[fn: [$Hash], set: [$Vector]], []]]; FixWire: PROC [w: Wire, prefix: ROPE, dotPos: INT] ~ { subscripts: Set--of INT-- ~ parsed.MappingA[prefix]; newName: ROPE ~ prefix.Replace[start: dotPos, len: 0, with: ".0"]; IF NOT subscripts.Equal[fixSet] THEN ERROR; ForgetVertexName[d, w, LSn[LIST[prefix]]]; KnowVertexName[d, w, LSn[LIST[newName]]]; RETURN}; NoteNaming: PROC [pair: BiRels.Pair] ~ { w: Wire ~ NARROW[pair[left].VA]; sn: SteppyName ~ VSn[pair[right]]; name: ROPE ~ NARROW[sn.steps.first]; namelen: INT ~ name.Length[]; dotPos: INT _ -1; sepPos: INT _ namelen; IF sn.steps.rest#NIL THEN ERROR; FOR idx: INT DECREASING IN [0 .. namelen) DO SELECT name.InlineFetch[idx] FROM '_ => sepPos _ idx; '. => {dotPos _ idx; EXIT}; ENDCASE => NULL; ENDLOOP; IF dotPos>=0 THEN { prefix: ROPE ~ name.Replace[start: dotPos, len: sepPos-dotPos, with: NIL]; intPart: INT ~ Convert.IntFromRope[name.Substr[dotPos+1, sepPos-dotPos-1]]; IF intPart<0 THEN ERROR; IF prefix.Length[]=0 THEN ERROR; [] _ parsed.AddPair[[AV[prefix], IV[intPart]]]; IF parsed.HasPair[[AV[prefix], IV[noIntPart]]] THEN FixWire[FetchWire[ct, OSn[prefix]], prefix, dotPos]; RETURN} ELSE { fix: BOOL ~ parsed.HasMapA[name]; [] _ parsed.AddPair[[AV[name], IV[noIntPart]]]; IF fix THEN FixWire[w, name, sepPos]; RETURN}; }; ct.fullName[w].Enumerate[NoteNaming]; RETURN}; RETURN}; InheritNames: PUBLIC PROC [design: Design] ~ { Subject: TYPE ~ REF ANY --actuall, UNION [Vertex, Port, CellType]--; inherited: Set--of CellType-- ~ Sets.CreateHashSet[design.eSpace]; WorkToCT: PROC [cta: REF ANY] ~ {Ensure[NARROW[cta]]; RETURN}; Ensure: PROC [ct: CellType] ~ { InheritFromCI: PROC [civ: Sets.Value] ~ { ci: CellInstance ~ NARROW[civ.VA]; ict: CellType ~ design.CiT[ci]; ciNames: Set--of SteppyName-- ~ ct.INames[ci]; InheritAlongConnection: PROC [porta, wirea: REF ANY] ~ { port: Port ~ NARROW[porta]; wire: Wire ~ NARROW[wirea]; portNames: Set ~ ict.PNames[port]; KnowVertexNames[design, wire, ActualNames[ciNames, portNames]]; RETURN}; IF ict.asTrans#NIL THEN RETURN; Ensure[ict]; ci.conns.EnumAA[InheritAlongConnection]; RETURN}; UnorganizedInheritToPort: PROC [portv: Sets.Value] ~ { port: Port ~ NARROW[portv.VA]; wire: Wire ~ ConndWire[ct, port]; IF wire#NIL THEN KnowPortNames[design, port, ct.WNames[wire]]; RETURN}; IF NOT inherited.AddA[ct] THEN RETURN; IF ct.inheritNames THEN ERROR; ct.inheritNames _ TRUE; IF ct.asu#NIL THEN { design.cct[i].EnumerateMapping[AV[ct], InheritFromCI, rightToLeft]; design.cct[p].EnumerateMapping[AV[ct], UnorganizedInheritToPort, rightToLeft]; RETURN} ELSE IF ct.asArray#NIL THEN { a: Array ~ ct.asArray; ect: CellType ~ ct.EltType[]; ArrayInheritToPort: PROC [pair: BiRels.Pair] ~ { ap: Port ~ NARROW[pair[left].VA]; pai: PortAtIndex ~ VPai[pair[right]]; idx: SteppyName ~ AIName[ct, pai.ai]; portNames: Set ~ ect.PNames[pai.port]; names: Set ~ ActualNames[OneSteppy[idx], portNames]; KnowPortNames[design, ap, names]; RETURN}; Ensure[ect]; a.statrep.apToPAI.Enumerate[ArrayInheritToPort]; RETURN}; RETURN}; design.cellTypes.EnumA[WorkToCT]; RETURN}; END. ZLichenImplNaming.Mesa Last tweaked by Mike Spreitzer on May 6, 1988 10:29:30 am PDT Κ5– "cedar" style˜code™Kšœ=™=—K˜KšΟk œN˜WK˜šΟnœœ˜KšœM˜TKšœ˜K˜—K˜Kšœœžœ,˜;K˜šžœœœ˜1Kšœ*˜*Kšœ˜—K˜Kšœ œ˜Kš œ Οcœœœ œD˜K˜šžœœœœ˜*Kšœœ˜šœœœ˜K˜Kš œ ŸΠcmŸœ-œœœ/˜₯šžœœœ œ˜6KšœŸ œ˜4Kšœ œ5˜BKšœœœœ˜+Kšœœ ˜*Kšœœ ˜)Kšœ˜—šž œœ˜(Kšœ œ œ˜ K˜"Kšœœœ˜$Kšœ œ˜Kšœœ˜Kšœœ ˜Kšœœœœ˜ š œœ œœ˜,šœ˜!Kšœ˜Kšœœ˜Kšœœ˜—Kšœ˜—šœ œ˜Kšœœ9œ˜JKšœ œ?˜KKšœ œœ˜Kšœœœ˜ Kšœœ œ ˜/Kšœœ œœ5˜hKšœ˜—šœ˜Kšœœ˜!Kšœœœ˜/Kšœœ˜%Kšœ˜—K˜—K˜%Kšœ˜—Kšœ˜—K˜šž œœœ˜.Kš œ œœœŸ+œ˜DKšœŸœ%˜BKš žœœœœ œœ˜>šžœœ˜šž œœ˜)Kšœœœ˜"Kšœ˜Kšœ Ÿœ˜.šžœœœœ˜8Kšœ œ˜Kšœ œ˜K˜"Kšœ?˜?Kšœ˜—Kšœ œœœ˜Kšœ ˜ K˜(Kšœ˜—šžœœ˜6Kšœ œœ˜Kšœ!˜!Kšœœœ.˜>Kšœ˜—Kšœœœœ˜&Kšœœœ˜Kšœœ˜šœœœ˜Kšœœ"˜CKšœœ-˜NKšœ˜—šœœ œœ˜K˜Kšœ˜šžœœ˜0Kšœ œ œ˜!Kšœ%˜%Kšœ%˜%K˜&K˜4Kšœ!˜!Kšœ˜—Kšœ ˜ Kšœ0˜0Kšœ˜—Kšœ˜—Kšœ!˜!Kšœ˜—K˜Kšœ˜—…—£