blob: 32b133409635fefdcc647b7578c155a75956cf8a [file] [log] [blame] [edit]
# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from typing import List, Optional, Set
from difl.ir import *
class Change:
'''Represents a change between two versions of a FIDL library.'''
before: Optional[Declaration]
after: Optional[Declaration]
def __init__(self, before: Optional[Declaration],
after: Optional[Declaration]):
self.before = before
self.after = after
@property
def name(self) -> str:
return type(self).__name__
def __lt__(self, other: 'Change'):
'''Comparison function so that changes can be sorted by source location.'''
if self.after is not None and other.after is not None:
return self.after.location < other.after.location
if self.before is None:
return True
if other.before is None:
return False
return self.before.location < other.before.location
class ClassifiedChange:
change: Change
hard: bool
message: str
def __init__(self, change, hard, message):
self.change = change
self.hard = hard
self.message = message
#### Generic Declaration Changes
class DeclAdded(Change):
pass
class DeclRemoved(Change):
pass
#### Struct Changes
class StructSizeChanged(Change):
pass
class StructMemberAdded(Change):
pass
class StructMemberRemoved(Change):
pass
class StructMemberMoved(Change):
pass
class StructMemberSizeChanged(Change):
pass
class StructMemberTypeChanged(Change):
compatible: bool
def __init__(self, before: StructMember, after: StructMember,
comptatible: bool):
super().__init__(before, after)
self.compatible = comptatible
class StructMemberRenamed(Change):
pass
class StructMemberSplit(Change):
afters: List[StructMember]
def __init__(self, before: StructMember, afters: List[StructMember]):
super().__init__(before, afters[0].struct)
self.afters = afters
class StructMemberJoined(Change):
befores: List[StructMember]
def __init__(self, befores: List[StructMember], after: StructMember):
super().__init__(befores[0].struct, after)
self.befores = befores
#### Table Changes
class TableMemberAdded(Change):
pass
class TableMemberRemoved(Change):
pass
class TableMemberReserved(Change):
pass
class TableMemberUnreserved(Change):
pass
class TableMemberRenamed(Change):
pass
class TableMemberTypeChanged(Change):
compatible: bool
def __init__(self, before: TableMember, after: TableMember,
comptatible: bool):
super().__init__(before, after)
self.compatible = comptatible
#### Protocol Changes
class MethodOrdinalChanged(Change):
pass
class EventBecameMethod(Change):
pass
class MethodBecameEvent(Change):
pass
class MethodGainedResponse(Change):
pass
class MethodLostResponse(Change):
pass