-- -- Transport namespace and multiname info -- -- Determines for each name if it has a late bound namespace -- and/or late bound name. In such cases, the name is present -- on the stack. -- { data NmInfo = NmInfo { nmNsLate :: Bool, nmLate :: Bool } } ATTR PoolInfo MultinameInfos MultinameInfo [ | | gathNmInfo USE {`mappend`} {mempty} : {Map Word32 NmInfo} ] ATTR BodyInfos BodyInfo InstructionsLike InstructionLike [ distNmInfo : {Map Word32 NmInfo} | | ] ATTR MultinameInfos MultinameInfo [ index : Word32 | | ] SEM PoolInfo | Info multinames.index = 1 SEM MultinameInfos | Cons tl.index = 1 + @lhs.index SEM MultinameInfo | RTQName RTQNameA +gathNmInfo = Map.insert @lhs.index (NmInfo True False) | RTQNameL RTQNameLA +gathNmInfo = Map.insert @lhs.index (NmInfo True True) | MultinameL MultinameLA +gathNmInfo = Map.insert @lhs.index (NmInfo False True) SEM AbcFile | File bodies.distNmInfo = @constantPool.gathNmInfo SEM Instruction | AsType CallInterface CallProp CallPropLex CallPropVoid CallSuper CallSuperVoid Coerce ConstructProp DeleteProperty FindDef FindPropertyGlobalStrict FindPropertyGlobal FindProperty FindPropStrict GetDescendants GetLex GetOuterScope GetProperty GetSuper InitProperty IsType SetProperty SetSuper loc.nmInfo = Map.findWithDefault (NmInfo False False) @name @lhs.distNmInfo loc.isNsLate = nmNsLate @loc.nmInfo loc.isNmLate = nmLate @loc.nmInfo loc.nmExtra = (if @loc.isNsLate then 1 else 0) + (if @loc.isNmLate then 1 else 0)