(self, function, frame_pointer, bc)
return ret
find patterns like::

            code:01F3 20 06                   get_local           $frame_pointer
            code:01F5 20 00                   get_local           $param0
            code:01F7 36 02 14                i32.store           0x14, align:2

        and extract metadata like:
          - frame offset
          - store size

        args:
          function (Dict[str, any]): function instance.
          frame_pointer (int): local variable index of the frame pointer.
          bc (List[wasm.Instruction]): sequence of at least three instructions.

        returns:
          Dict[Str, any]: frame store metadata, including:
            - frame_offset (int): offset into frame of store.
            - element_size (str): size of element being written.
            - access_type (str): the string "store".
            - offset (int): offset into the bitcode of the reference instruction.
            - parameter (int, optional): the parameter index being loaded.

        raises:
          ValueError: if the given bc does not contain a frame store.
find patterns like::
find patterns like ::
def get_frame_store(self, function, frame_pointer, bc):
        '''
        find patterns like::

            code:01F3 20 06                   get_local           $frame_pointer
            code:01F5 20 00                   get_local           $param0
            code:01F7 36 02 14                i32.store           0x14, align:2

        and extract metadata like:
          - frame offset
          - store size

        args:
          function (Dict[str, any]): function instance.
          frame_pointer (int): local variable index of the frame pointer.
          bc (List[wasm.Instruction]): sequence of at least three instructions.

        returns:
          Dict[Str, any]: frame store metadata, including:
            - frame_offset (int): offset into frame of store.
            - element_size (str): size of element being written.
            - access_type (str): the string "store".
            - offset (int): offset into the bitcode of the reference instruction.
            - parameter (int, optional): the parameter index being loaded.

        raises:
          ValueError: if the given bc does not contain a frame store.
        '''
        if bc[0].op.id != wasm.opcodes.OP_GET_LOCAL:
            raise ValueError('not a store')

        if bc[1].op.id != wasm.opcodes.OP_GET_LOCAL:
            raise ValueError('not a store')

        if not self.is_store(bc[2].op):
            raise ValueError('not a store')

        if bc[0].imm.local_index != frame_pointer:
            raise ValueError('not a store')

        ret = {
            'offset': bc[0].len + bc[1].len,
            'access_type': 'store',
            'frame_offset': bc[2].imm.offset,
            'element_size': self.get_store_size(bc[2])
        }

        if bc[1].imm.local_index < function['type']['param_count']:
            ret['parameter'] = bc[1].imm.local_index

        return ret
def get_frame_store ( self , function , frame_pointer , bc ) : if bc [ 0 ] . op . id != wasm . opcodes . OP_GET_LOCAL : raise ValueError ( 'not a store' ) if bc [ 1 ] . op . id != wasm . opcodes . OP_GET_LOCAL : raise ValueError ( 'not a store' ) if not self . is_store ( bc [ 2 ] . op ) : raise ValueError ( 'not a store' ) if bc [ 0 ] . imm . local_index != frame_pointer : raise ValueError ( 'not a store' ) ret = { 'offset' : bc [ 0 ] . len + bc [ 1 ] . len , 'access_type' : 'store' , 'frame_offset' : bc [ 2 ] . imm . offset , 'element_size' : self . get_store_size ( bc [ 2 ] ) } if bc [ 1 ] . imm . local_index < function [ 'type' ] [ 'param_count' ] : ret [ 'parameter' ] = bc [ 1 ] . imm . local_index return ret