You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
2.1 KiB

# Copyright (C) 2014 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import os
from common.immutables import ImmutableDict
from common.logger import Logger
from common.mixins import PrintableMixin
class C1visualizerFile(PrintableMixin):
def __init__(self, filename):
self.base_file_name = os.path.basename(filename)
self.full_file_name = filename
self.passes = []
self.instruction_set_features = ImmutableDict()
def set_isa_features(self, features):
self.instruction_set_features = ImmutableDict(features)
def add_pass(self, new_pass):
self.passes.append(new_pass)
def find_pass(self, name):
for entry in self.passes:
if entry.name == name:
return entry
return None
def __eq__(self, other):
return (isinstance(other, self.__class__)
and self.passes == other.passes
and self.instruction_set_features == other.instruction_set_features)
class C1visualizerPass(PrintableMixin):
def __init__(self, parent, name, body, start_line_no):
self.parent = parent
self.name = name
self.body = body
self.start_line_no = start_line_no
if not self.name:
Logger.fail("C1visualizer pass does not have a name", self.filename, self.start_line_no)
if not self.body:
Logger.fail("C1visualizer pass does not have a body", self.filename, self.start_line_no)
self.parent.add_pass(self)
@property
def filename(self):
return self.parent.base_file_name
def __eq__(self, other):
return (isinstance(other, self.__class__)
and self.name == other.name
and self.body == other.body)