packages feed

asil-1.2: src/TrfInjectRefl.ag

-- Injects reflection information in the byte code
MODULE {TrfInjectRefl} {injectReflSwf,injectReflAbc} {}

INCLUDE "ByteCodeAst.ag"

import
{
import Data.ByteString.Lazy(ByteString,pack)
import ByteCode
import CFG
import Data.Word
import qualified Data.Set as Set
import Data.Set(Set)
import qualified Data.Map as Map
import Data.Map(Map)
import Codec.Binary.UTF8.String
import ProgInfo
}


WRAPPER SwfFile
WRAPPER AbcFile

{
injectReflSwf :: [SymbolTables] -> SwfFile -> SwfFile
injectReflSwf tbls m = out where
  inh = Inh_SwfFile { tbls_Inh_SwfFile = tbls }
  sem = sem_SwfFile m
  syn = wrap_SwfFile sem inh
  out = output_Syn_SwfFile syn

injectReflAbc :: [SymbolTables] -> AbcFile -> AbcFile
injectReflAbc tbls m = out where
  inh = Inh_AbcFile { tbls_Inh_AbcFile = tbls }
  sem = sem_AbcFile m
  syn = wrap_AbcFile sem inh
  out = output_Syn_AbcFile syn
}


--
-- Transformation of the code
--

ATTR AllSwf [ | | output : SELF ]


--
-- Associate a symbol table with the right abcfile in a SWF file
--

ATTR OnlySwfAbc [ | tbls : {[SymbolTables]} | ]
ATTR AllAbc [ tbls : SymbolTables | | ]

SEM AbcFile | File
  loc.tbls = head @lhs.tbls
  lhs.tbls = tail @lhs.tbls