Example #1
0
def type_check_RMV(context, field):
    if not is_reserved_field(field.field):
        if field.field in context.header:
            del context.header[field.field]
        else:
            raise TypeError("field (%s) is not present in the header." % str(field.field))
    else:
        raise TypeError("field (%s) is a reserved field." % str(field.field))

    context.labels = Labels(syntax.Label(''))
Example #2
0
def type_check_ADD(context, field, size):
    if not is_reserved_field(field.field):
        if field.field not in context.header:
            context.header[field.field] = size
        else:
            raise TypeError("field (%s) is already present in the header." % str(field.field))
    else:
        raise TypeError("field (%s) is a reserved field." % str(field.field))

    context.labels = Labels(syntax.Label(''))
Example #3
0
def type_check_RMV(context, field):
    if not is_reserved_field(field.field):
        if field.field in context.header:
            del context.header[field.field]
        else:
            raise TypeError("field (%s) is not present in the header." %
                            str(field.field))
    else:
        raise TypeError("field (%s) is a reserved field." % str(field.field))

    context.labels = Labels(syntax.Label(''))
Example #4
0
def type_check_ADD(context, field, size):
    if not is_reserved_field(field.field):
        if field.field not in context.header:
            context.header[field.field] = size
        else:
            raise TypeError("field (%s) is already present in the header." %
                            str(field.field))
    else:
        raise TypeError("field (%s) is a reserved field." % str(field.field))

    context.labels = Labels(syntax.Label(''))
Example #5
0
def is_reserved_or_argument_field(field, argument_fields):
    return is_reserved_field(field) or (field in argument_fields)
        def defines(flow_graph, field, argument_fields):
            instructions = set()

            for _, node in flow_graph.iteritems():
                for instruction in node.basic_block:
                    if isinstance(instruction, I.ADD):
                        if instruction.field.field == field:
                            instructions |= {instruction}
                    elif isinstance(instruction, I.LD):
                        if isinstance(instruction.destination, O.Field):
                            if instruction.destination.field == field:
                                if not (is_reserved_field(field) or field in argument_fields):
                                    instructions |= {instruction}
                    elif isinstance(instruction, I.OP):
                        if isinstance(instruction.destination, O.Field):
                            if instruction.destination.field == field:
                                if not (is_reserved_field(field) or field in argument_fields):
                                    instructions |= {instruction}
                    elif isinstance(instruction, I.LDt):
                        if isinstance(instruction.destinations, O.Operands__):
                            for operand in instruction.destinations:
                                if isinstance(operand, O.Field):
                                    if operand.field == field:
                                        if not (is_reserved_field(field) or field in argument_fields):
                                            instructions |= {instruction}
                                            break
                        else:
                            raise RuntimeError()
                    elif isinstance(instruction, I.LKt):
                        if isinstance(instruction.index, O.Field):
                            if instruction.index.field == field:
                                if not (is_reserved_field(field) or field in argument_fields):
                                    instructions |= {instruction}
                    elif isinstance(instruction, I.CRC):
                        if isinstance(instruction.destination, O.Field):
                            if instruction.destination.field == field:
                                if not (is_reserved_field(field) or field in argument_fields):
                                    instructions |= {instruction}
                    elif isinstance(instruction, I.HSH):
                        if isinstance(instruction.destination, O.Field):
                            if instruction.destination.field == field:
                                if not (is_reserved_field(field) or field in argument_fields):
                                    instructions |= {instruction}
                    elif isinstance(instruction, I.CNC):
                        if isinstance(instruction.codes, I.Codes):
                            for code in instruction.codes:
                                for _field in code.argument_fields:
                                    if _field == field:
                                        if not (is_reserved_field(field) or field in argument_fields):
                                            instructions |= {instruction}
                                            break
                        else:
                            raise RuntimeError()
                    elif isinstance(instruction, I.ATM):
                        if isinstance(instruction.code, I.Code):
                            for _field in instruction.code.argument_fields:
                                if _field == field:
                                    if not (is_reserved_field(field) or field in argument_fields):
                                        instructions |= {instruction}
                                        break
                        else:
                            raise RuntimeError()
                    elif isinstance(instruction, I.SEQ):
                        if isinstance(instruction.code, I.Code):
                            for _field in instruction.code.argument_fields:
                                if _field == field:
                                    if not (is_reserved_field(field) or field in argument_fields):
                                        instructions |= {instruction}
                                        break
                        else:
                            raise RuntimeError()
                    elif isinstance(instruction, I.Instruction):
                        pass
                    else:
                        raise RuntimeError()

            return instructions
Example #7
0
def is_reserved_or_argument_field(field, argument_fields):
    return is_reserved_field(field) or (field in argument_fields)
Example #8
0
        def defines(flow_graph, field, argument_fields):
            instructions = set()

            for _, node in flow_graph.iteritems():
                for instruction in node.basic_block:
                    if isinstance(instruction, I.ADD):
                        if instruction.field.field == field:
                            instructions |= {instruction}
                    elif isinstance(instruction, I.LD):
                        if isinstance(instruction.destination, O.Field):
                            if instruction.destination.field == field:
                                if not (is_reserved_field(field)
                                        or field in argument_fields):
                                    instructions |= {instruction}
                    elif isinstance(instruction, I.OP):
                        if isinstance(instruction.destination, O.Field):
                            if instruction.destination.field == field:
                                if not (is_reserved_field(field)
                                        or field in argument_fields):
                                    instructions |= {instruction}
                    elif isinstance(instruction, I.LDt):
                        if isinstance(instruction.destinations, O.Operands__):
                            for operand in instruction.destinations:
                                if isinstance(operand, O.Field):
                                    if operand.field == field:
                                        if not (is_reserved_field(field)
                                                or field in argument_fields):
                                            instructions |= {instruction}
                                            break
                        else:
                            raise RuntimeError()
                    elif isinstance(instruction, I.LKt):
                        if isinstance(instruction.index, O.Field):
                            if instruction.index.field == field:
                                if not (is_reserved_field(field)
                                        or field in argument_fields):
                                    instructions |= {instruction}
                    elif isinstance(instruction, I.CRC):
                        if isinstance(instruction.destination, O.Field):
                            if instruction.destination.field == field:
                                if not (is_reserved_field(field)
                                        or field in argument_fields):
                                    instructions |= {instruction}
                    elif isinstance(instruction, I.HSH):
                        if isinstance(instruction.destination, O.Field):
                            if instruction.destination.field == field:
                                if not (is_reserved_field(field)
                                        or field in argument_fields):
                                    instructions |= {instruction}
                    elif isinstance(instruction, I.CNC):
                        if isinstance(instruction.codes, I.Codes):
                            for code in instruction.codes:
                                for _field in code.argument_fields:
                                    if _field == field:
                                        if not (is_reserved_field(field)
                                                or field in argument_fields):
                                            instructions |= {instruction}
                                            break
                        else:
                            raise RuntimeError()
                    elif isinstance(instruction, I.ATM):
                        if isinstance(instruction.code, I.Code):
                            for _field in instruction.code.argument_fields:
                                if _field == field:
                                    if not (is_reserved_field(field)
                                            or field in argument_fields):
                                        instructions |= {instruction}
                                        break
                        else:
                            raise RuntimeError()
                    elif isinstance(instruction, I.SEQ):
                        if isinstance(instruction.code, I.Code):
                            for _field in instruction.code.argument_fields:
                                if _field == field:
                                    if not (is_reserved_field(field)
                                            or field in argument_fields):
                                        instructions |= {instruction}
                                        break
                        else:
                            raise RuntimeError()
                    elif isinstance(instruction, I.Instruction):
                        pass
                    else:
                        raise RuntimeError()

            return instructions
Example #9
0
    def field(instruction, argument_fields, exclude_list):
        operands = set()

        if any(map(lambda instruction_type: isinstance(instruction, instruction_type), exclude_list)):
            pass
        # I.ID
        # I.DRP
        # I.CTR
        elif isinstance(instruction, I.ADD):
            operands |= {instruction.field.field}
        # I.RMV
        elif isinstance(instruction, I.LD):
            if isinstance(instruction.destination, O.Field):
                if not (
                    is_reserved_field(instruction.destination.field) or instruction.destination.field in argument_fields
                ):
                    operands |= {instruction.destination.field}
        # I.ST
        elif isinstance(instruction, I.OP):
            if isinstance(instruction.destination, O.Field):
                if not (
                    is_reserved_field(instruction.destination.field) or instruction.destination.field in argument_fields
                ):
                    operands |= {instruction.destination.field}
        # I.PUSH
        # I.POP
        # I.BR
        # I.JMP
        # I.LBL
        elif isinstance(instruction, I.LDt):
            if isinstance(instruction.destinations, O.Operands__):
                for operand in instruction.destinations:
                    if isinstance(operand, O.Field):
                        if not (is_reserved_field(operand.field) or operand.field in argument_fields):
                            operands |= {operand.field}
            else:
                raise RuntimeError()
        # I.STt
        # I.INCt
        elif isinstance(instruction, I.LKt):
            if isinstance(instruction.index, O.Field):
                if not (is_reserved_field(instruction.index.field) or instruction.index.field in argument_fields):
                    operands |= {instruction.index.field}
        elif isinstance(instruction, I.CRC):
            if isinstance(instruction.destination, O.Field):
                if not (
                    is_reserved_field(instruction.destination.field) or instruction.destination.field in argument_fields
                ):
                    operands |= {instruction.destination.field}
        elif isinstance(instruction, I.HSH):
            if isinstance(instruction.destination, O.Field):
                if not (
                    is_reserved_field(instruction.destination.field) or instruction.destination.field in argument_fields
                ):
                    operands |= {instruction.destination.field}
        # I.HLT
        elif isinstance(instruction, I.CNC):
            if isinstance(instruction.codes, I.Codes):
                for code in instruction.codes:
                    for field in code.argument_fields:
                        operands |= {field}
            else:
                raise RuntimeError()
        elif isinstance(instruction, I.ATM):
            if isinstance(instruction.code, I.Code):
                for field in instruction.code.argument_fields:
                    operands |= {field}
            else:
                raise RuntimeError()
        elif isinstance(instruction, I.SEQ):
            if isinstance(instruction.code, I.Code):
                for field in instruction.code.argument_fields:
                    operands |= {field}
            else:
                raise RuntimeError()
        elif isinstance(instruction, I.Instruction):
            pass
        else:
            raise RuntimeError()

        return operands
Example #10
0
    def field(instruction, argument_fields, exclude_list):
        operands = set()

        if any(
                map(
                    lambda instruction_type: isinstance(
                        instruction, instruction_type), exclude_list)):
            pass
        # I.ID
        # I.DRP
        # I.CTR
        elif isinstance(instruction, I.ADD):
            operands |= {instruction.field.field}
        # I.RMV
        elif isinstance(instruction, I.LD):
            if isinstance(instruction.destination, O.Field):
                if not (is_reserved_field(instruction.destination.field)
                        or instruction.destination.field in argument_fields):
                    operands |= {instruction.destination.field}
        # I.ST
        elif isinstance(instruction, I.OP):
            if isinstance(instruction.destination, O.Field):
                if not (is_reserved_field(instruction.destination.field)
                        or instruction.destination.field in argument_fields):
                    operands |= {instruction.destination.field}
        # I.PUSH
        # I.POP
        # I.BR
        # I.JMP
        # I.LBL
        elif isinstance(instruction, I.LDt):
            if isinstance(instruction.destinations, O.Operands__):
                for operand in instruction.destinations:
                    if isinstance(operand, O.Field):
                        if not (is_reserved_field(operand.field)
                                or operand.field in argument_fields):
                            operands |= {operand.field}
            else:
                raise RuntimeError()
        # I.STt
        # I.INCt
        elif isinstance(instruction, I.LKt):
            if isinstance(instruction.index, O.Field):
                if not (is_reserved_field(instruction.index.field)
                        or instruction.index.field in argument_fields):
                    operands |= {instruction.index.field}
        elif isinstance(instruction, I.CRC):
            if isinstance(instruction.destination, O.Field):
                if not (is_reserved_field(instruction.destination.field)
                        or instruction.destination.field in argument_fields):
                    operands |= {instruction.destination.field}
        elif isinstance(instruction, I.HSH):
            if isinstance(instruction.destination, O.Field):
                if not (is_reserved_field(instruction.destination.field)
                        or instruction.destination.field in argument_fields):
                    operands |= {instruction.destination.field}
        # I.HLT
        elif isinstance(instruction, I.CNC):
            if isinstance(instruction.codes, I.Codes):
                for code in instruction.codes:
                    for field in code.argument_fields:
                        operands |= {field}
            else:
                raise RuntimeError()
        elif isinstance(instruction, I.ATM):
            if isinstance(instruction.code, I.Code):
                for field in instruction.code.argument_fields:
                    operands |= {field}
            else:
                raise RuntimeError()
        elif isinstance(instruction, I.SEQ):
            if isinstance(instruction.code, I.Code):
                for field in instruction.code.argument_fields:
                    operands |= {field}
            else:
                raise RuntimeError()
        elif isinstance(instruction, I.Instruction):
            pass
        else:
            raise RuntimeError()

        return operands