Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion compiler/src/main/scala/edg/compiler/Compiler.scala
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ class AssignNamer() {
}

object Compiler {
final val kExpectedProtoVersion = 13
final val kExpectedProtoVersion = 14
}

/** Compiler for a particular design, with an associated library to elaborate references from.
Expand Down
8 changes: 8 additions & 0 deletions edg/core/BlockInterfaceMixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from .Blocks import AbstractBlockProperty
from .HdlUserExceptions import BlockDefinitionError
from .HierarchyBlock import Block
from .. import edgir

MixinBaseType = TypeVar("MixinBaseType", covariant=True, bound=Block, default=Block)

Expand Down Expand Up @@ -77,6 +78,13 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
# don't overwrite if exists, it may define a default refinement
self._elt_properties[(self.__class__, AbstractBlockProperty)] = None

@override
def _populate_def_proto_block_base(self, pb: edgir.BlockLikeTypes) -> None:
super()._populate_def_proto_block_base(pb)
assert isinstance(pb, edgir.HierarchyBlock)
if self._is_mixin():
pb.is_mixin = self._is_mixin()

def implementation(self, fn: Callable[[MixinBaseType], None]) -> None:
"""Wrap implementation definitions (where MixinBaseType is required) in this. This is only called
in a concrete class, and ignored when the standalone mixin is instantiated."""
Expand Down
1 change: 1 addition & 0 deletions edg/core/Blocks.py
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,7 @@ def _populate_def_proto_block_base(self, pb: edgir.BlockLikeTypes) -> None:
if (self.__class__, AbstractBlockProperty) in self._elt_properties:
assert isinstance(pb, edgir.HierarchyBlock)
pb.is_abstract = True
pb.is_mixin = False
default_refinement_fn = self._elt_properties[(self.__class__, AbstractBlockProperty)]
if default_refinement_fn is not None:
default_refinement = default_refinement_fn()
Expand Down
Binary file modified edg/core/resources/edg-compiler-precompiled.jar
Binary file not shown.
3 changes: 3 additions & 0 deletions edg/core/test_mixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ def setUp(self) -> None:

def test_abstract(self) -> None:
self.assertEqual(self.pb.is_abstract, True)
self.assertEqual(self.pb.is_mixin, True)
self.assertEqual(self.pb.HasField("default_refinement"), False)

def test_superclass(self) -> None:
Expand Down Expand Up @@ -71,6 +72,7 @@ def setUp(self) -> None:

def test_abstract(self) -> None:
self.assertEqual(self.pb.is_abstract, True)
self.assertEqual(self.pb.is_mixin, True)
self.assertEqual(self.pb.HasField("default_refinement"), False)

def test_superclass(self) -> None:
Expand Down Expand Up @@ -113,6 +115,7 @@ def setUp(self) -> None:

def test_abstract(self) -> None:
self.assertEqual(self.pb.is_abstract, False)
self.assertEqual(self.pb.is_mixin, False)
self.assertEqual(self.pb.HasField("default_refinement"), False)

def test_superclass(self) -> None:
Expand Down
32 changes: 16 additions & 16 deletions edg/edgir/elem_pb2.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from ..edgir import ref_pb2 as edgir_dot_ref__pb2

DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(
b'\n\x10edgir/elem.proto\x12\nedgir.elem\x1a\x12edgir/common.proto\x1a\x10edgir/init.proto\x1a\x10edgir/expr.proto\x1a\x0fedgir/ref.proto"@\n\x0cNamedValInit\x12\x0c\n\x04name\x18\x01 \x01(\t\x12"\n\x05value\x18\x02 \x01(\x0b2\x13.edgir.init.ValInit"D\n\x0eNamedValueExpr\x12\x0c\n\x04name\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"B\n\rNamedPortLike\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b2\x14.edgir.elem.PortLike"D\n\x0eNamedBlockLike\x12\x0c\n\x04name\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.elem.BlockLike"B\n\rNamedLinkLike\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b2\x14.edgir.elem.LinkLike"\xbf\x02\n\x04Port\x12(\n\x06params\x18( \x03(\x0b2\x18.edgir.elem.NamedValInit\x12/\n\x0bconstraints\x18) \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12(\n\x05ports\x18* \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x0csuperclasses\x18\x15 \x03(\x0b2\x16.edgir.ref.LibraryPath\x122\n\x12super_superclasses\x18\x18 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"\xca\x01\n\tPortArray\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x05ports\x18\x0e \x01(\x0b2\x1b.edgir.elem.PortArray.PortsH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x1a1\n\x05Ports\x12(\n\x05ports\x18( \x03(\x0b2\x19.edgir.elem.NamedPortLikeB\n\n\x08contains"\xb0\x01\n\x08PortLike\x12(\n\tundefined\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12*\n\x08lib_elem\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPathH\x00\x12 \n\x04port\x18\x03 \x01(\x0b2\x10.edgir.elem.PortH\x00\x12&\n\x05array\x18\x04 \x01(\x0b2\x15.edgir.elem.PortArrayH\x00B\x04\n\x02is"=\n\tParameter\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12\x0c\n\x04unit\x18\x02 \x01(\t"a\n\x18StringDescriptionElement\x12\x0e\n\x04text\x18\x01 \x01(\tH\x00\x12&\n\x05param\x18\x02 \x01(\x0b2\x15.edgir.elem.ParameterH\x00B\r\n\x0bElementType"\xc4\x06\n\x0eHierarchyBlock\x12(\n\x06params\x18( \x03(\x0b2\x18.edgir.elem.NamedValInit\x12E\n\x0eparam_defaults\x18\x0f \x03(\x0b2-.edgir.elem.HierarchyBlock.ParamDefaultsEntry\x12(\n\x05ports\x18) \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12*\n\x06blocks\x18* \x03(\x0b2\x1a.edgir.elem.NamedBlockLike\x12(\n\x05links\x18+ \x03(\x0b2\x19.edgir.elem.NamedLinkLike\x12/\n\x0bconstraints\x18, \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12*\n\nself_class\x18\x17 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x0csuperclasses\x18\x14 \x03(\x0b2\x16.edgir.ref.LibraryPath\x122\n\x12super_superclasses\x18\x18 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12/\n\x0fprerefine_class\x18\x15 \x01(\x0b2\x16.edgir.ref.LibraryPath\x120\n\x10prerefine_mixins\x18\x19 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12(\n\tgenerator\x18\x16 \x01(\x0b2\x15.edgir.elem.Generator\x12\x13\n\x0bis_abstract\x18\x1e \x01(\x08\x122\n\x12default_refinement\x18\x1f \x01(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x129\n\x0bdescription\x18\x01 \x03(\x0b2$.edgir.elem.StringDescriptionElement\x1aK\n\x12ParamDefaultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr:\x028\x01":\n\tGenerator\x12-\n\x0frequired_params\x18\x02 \x03(\x0b2\x14.edgir.ref.LocalPath"\\\n\x0cBlockLibrary\x12$\n\x04base\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12&\n\x06mixins\x18\x03 \x03(\x0b2\x16.edgir.ref.LibraryPath"\x9c\x01\n\tBlockLike\x12(\n\tundefined\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12,\n\x08lib_elem\x18\x05 \x01(\x0b2\x18.edgir.elem.BlockLibraryH\x00\x12/\n\thierarchy\x18\x04 \x01(\x0b2\x1a.edgir.elem.HierarchyBlockH\x00B\x06\n\x04type"\xa4\x03\n\x04Link\x12(\n\x06params\x18( \x03(\x0b2\x18.edgir.elem.NamedValInit\x12(\n\x05ports\x18) \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12(\n\x05links\x18+ \x03(\x0b2\x19.edgir.elem.NamedLinkLike\x12/\n\x0bconstraints\x18* \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x0csuperclasses\x18\x15 \x03(\x0b2\x16.edgir.ref.LibraryPath\x122\n\x12super_superclasses\x18\x18 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x129\n\x0bdescription\x18\x01 \x03(\x0b2$.edgir.elem.StringDescriptionElement"\xe2\x01\n\tLinkArray\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12(\n\x05ports\x18) \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12/\n\x0bconstraints\x18* \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12(\n\x05links\x18+ \x03(\x0b2\x19.edgir.elem.NamedLinkLike\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"\xb2\x01\n\x08LinkLike\x12(\n\tundefined\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12*\n\x08lib_elem\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPathH\x00\x12 \n\x04link\x18\x03 \x01(\x0b2\x10.edgir.elem.LinkH\x00\x12&\n\x05array\x18\x04 \x01(\x0b2\x15.edgir.elem.LinkArrayH\x00B\x06\n\x04typeb\x06proto3'
b'\n\x10edgir/elem.proto\x12\nedgir.elem\x1a\x12edgir/common.proto\x1a\x10edgir/init.proto\x1a\x10edgir/expr.proto\x1a\x0fedgir/ref.proto"@\n\x0cNamedValInit\x12\x0c\n\x04name\x18\x01 \x01(\t\x12"\n\x05value\x18\x02 \x01(\x0b2\x13.edgir.init.ValInit"D\n\x0eNamedValueExpr\x12\x0c\n\x04name\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"B\n\rNamedPortLike\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b2\x14.edgir.elem.PortLike"D\n\x0eNamedBlockLike\x12\x0c\n\x04name\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.elem.BlockLike"B\n\rNamedLinkLike\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b2\x14.edgir.elem.LinkLike"\xbf\x02\n\x04Port\x12(\n\x06params\x18( \x03(\x0b2\x18.edgir.elem.NamedValInit\x12/\n\x0bconstraints\x18) \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12(\n\x05ports\x18* \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x0csuperclasses\x18\x15 \x03(\x0b2\x16.edgir.ref.LibraryPath\x122\n\x12super_superclasses\x18\x18 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"\xca\x01\n\tPortArray\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x05ports\x18\x0e \x01(\x0b2\x1b.edgir.elem.PortArray.PortsH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x1a1\n\x05Ports\x12(\n\x05ports\x18( \x03(\x0b2\x19.edgir.elem.NamedPortLikeB\n\n\x08contains"\xb0\x01\n\x08PortLike\x12(\n\tundefined\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12*\n\x08lib_elem\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPathH\x00\x12 \n\x04port\x18\x03 \x01(\x0b2\x10.edgir.elem.PortH\x00\x12&\n\x05array\x18\x04 \x01(\x0b2\x15.edgir.elem.PortArrayH\x00B\x04\n\x02is"=\n\tParameter\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12\x0c\n\x04unit\x18\x02 \x01(\t"a\n\x18StringDescriptionElement\x12\x0e\n\x04text\x18\x01 \x01(\tH\x00\x12&\n\x05param\x18\x02 \x01(\x0b2\x15.edgir.elem.ParameterH\x00B\r\n\x0bElementType"\xd6\x06\n\x0eHierarchyBlock\x12(\n\x06params\x18( \x03(\x0b2\x18.edgir.elem.NamedValInit\x12E\n\x0eparam_defaults\x18\x0f \x03(\x0b2-.edgir.elem.HierarchyBlock.ParamDefaultsEntry\x12(\n\x05ports\x18) \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12*\n\x06blocks\x18* \x03(\x0b2\x1a.edgir.elem.NamedBlockLike\x12(\n\x05links\x18+ \x03(\x0b2\x19.edgir.elem.NamedLinkLike\x12/\n\x0bconstraints\x18, \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12*\n\nself_class\x18\x17 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x0csuperclasses\x18\x14 \x03(\x0b2\x16.edgir.ref.LibraryPath\x122\n\x12super_superclasses\x18\x18 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12/\n\x0fprerefine_class\x18\x15 \x01(\x0b2\x16.edgir.ref.LibraryPath\x120\n\x10prerefine_mixins\x18\x19 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12(\n\tgenerator\x18\x16 \x01(\x0b2\x15.edgir.elem.Generator\x12\x13\n\x0bis_abstract\x18\x1e \x01(\x08\x12\x10\n\x08is_mixin\x18 \x01(\x08\x122\n\x12default_refinement\x18\x1f \x01(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x129\n\x0bdescription\x18\x01 \x03(\x0b2$.edgir.elem.StringDescriptionElement\x1aK\n\x12ParamDefaultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr:\x028\x01":\n\tGenerator\x12-\n\x0frequired_params\x18\x02 \x03(\x0b2\x14.edgir.ref.LocalPath"\\\n\x0cBlockLibrary\x12$\n\x04base\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12&\n\x06mixins\x18\x03 \x03(\x0b2\x16.edgir.ref.LibraryPath"\x9c\x01\n\tBlockLike\x12(\n\tundefined\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12,\n\x08lib_elem\x18\x05 \x01(\x0b2\x18.edgir.elem.BlockLibraryH\x00\x12/\n\thierarchy\x18\x04 \x01(\x0b2\x1a.edgir.elem.HierarchyBlockH\x00B\x06\n\x04type"\xa4\x03\n\x04Link\x12(\n\x06params\x18( \x03(\x0b2\x18.edgir.elem.NamedValInit\x12(\n\x05ports\x18) \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12(\n\x05links\x18+ \x03(\x0b2\x19.edgir.elem.NamedLinkLike\x12/\n\x0bconstraints\x18* \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x0csuperclasses\x18\x15 \x03(\x0b2\x16.edgir.ref.LibraryPath\x122\n\x12super_superclasses\x18\x18 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x129\n\x0bdescription\x18\x01 \x03(\x0b2$.edgir.elem.StringDescriptionElement"\xe2\x01\n\tLinkArray\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12(\n\x05ports\x18) \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12/\n\x0bconstraints\x18* \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12(\n\x05links\x18+ \x03(\x0b2\x19.edgir.elem.NamedLinkLike\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"\xb2\x01\n\x08LinkLike\x12(\n\tundefined\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12*\n\x08lib_elem\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPathH\x00\x12 \n\x04link\x18\x03 \x01(\x0b2\x10.edgir.elem.LinkH\x00\x12&\n\x05array\x18\x04 \x01(\x0b2\x15.edgir.elem.LinkArrayH\x00B\x06\n\x04typeb\x06proto3'
)
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgir.elem_pb2", globals())
Expand Down Expand Up @@ -43,18 +43,18 @@
_STRINGDESCRIPTIONELEMENT._serialized_start = 1216
_STRINGDESCRIPTIONELEMENT._serialized_end = 1313
_HIERARCHYBLOCK._serialized_start = 1316
_HIERARCHYBLOCK._serialized_end = 2152
_HIERARCHYBLOCK_PARAMDEFAULTSENTRY._serialized_start = 2077
_HIERARCHYBLOCK_PARAMDEFAULTSENTRY._serialized_end = 2152
_GENERATOR._serialized_start = 2154
_GENERATOR._serialized_end = 2212
_BLOCKLIBRARY._serialized_start = 2214
_BLOCKLIBRARY._serialized_end = 2306
_BLOCKLIKE._serialized_start = 2309
_BLOCKLIKE._serialized_end = 2465
_LINK._serialized_start = 2468
_LINK._serialized_end = 2888
_LINKARRAY._serialized_start = 2891
_LINKARRAY._serialized_end = 3117
_LINKLIKE._serialized_start = 3120
_LINKLIKE._serialized_end = 3298
_HIERARCHYBLOCK._serialized_end = 2170
_HIERARCHYBLOCK_PARAMDEFAULTSENTRY._serialized_start = 2095
_HIERARCHYBLOCK_PARAMDEFAULTSENTRY._serialized_end = 2170
_GENERATOR._serialized_start = 2172
_GENERATOR._serialized_end = 2230
_BLOCKLIBRARY._serialized_start = 2232
_BLOCKLIBRARY._serialized_end = 2324
_BLOCKLIKE._serialized_start = 2327
_BLOCKLIKE._serialized_end = 2483
_LINK._serialized_start = 2486
_LINK._serialized_end = 2906
_LINKARRAY._serialized_start = 2909
_LINKARRAY._serialized_end = 3135
_LINKLIKE._serialized_start = 3138
_LINKLIKE._serialized_end = 3316
6 changes: 6 additions & 0 deletions edg/edgir/elem_pb2.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -373,11 +373,14 @@ class HierarchyBlock(_message.Message):
PREREFINE_MIXINS_FIELD_NUMBER: _builtins.int
GENERATOR_FIELD_NUMBER: _builtins.int
IS_ABSTRACT_FIELD_NUMBER: _builtins.int
IS_MIXIN_FIELD_NUMBER: _builtins.int
DEFAULT_REFINEMENT_FIELD_NUMBER: _builtins.int
META_FIELD_NUMBER: _builtins.int
DESCRIPTION_FIELD_NUMBER: _builtins.int
is_abstract: _builtins.bool
"true if self_class is abstract, and should error if used in a design"
is_mixin: _builtins.bool
"true if self_class is a mixin"

@_builtins.property
def params(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedValInit]: ...
Expand Down Expand Up @@ -453,6 +456,7 @@ class HierarchyBlock(_message.Message):
prerefine_mixins: _abc.Iterable[_ref_pb2.LibraryPath] | None = ...,
generator: Global___Generator | None = ...,
is_abstract: _builtins.bool = ...,
is_mixin: _builtins.bool = ...,
default_refinement: _ref_pb2.LibraryPath | None = ...,
meta: _common_pb2.Metadata | None = ...,
description: _abc.Iterable[Global___StringDescriptionElement] | None = ...,
Expand Down Expand Up @@ -484,6 +488,8 @@ class HierarchyBlock(_message.Message):
b"generator",
"is_abstract",
b"is_abstract",
"is_mixin",
b"is_mixin",
"links",
b"links",
"meta",
Expand Down
2 changes: 1 addition & 1 deletion edg/hdl_server/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from ..core import *
from ..core.Core import NonLibraryProperty

EDG_PROTO_VERSION = 13
EDG_PROTO_VERSION = 14


class LibraryElementIndexer:
Expand Down
1 change: 1 addition & 0 deletions proto/edgir/elem.proto
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ message HierarchyBlock {
Generator generator = 22; // optional, and removed upon invocation

bool is_abstract = 30; // true if self_class is abstract, and should error if used in a design
bool is_mixin = 32; // true if self_class is a mixin
edgir.ref.LibraryPath default_refinement = 31; // optional default refinement subclass, only valid for library blocks

edgir.common.Metadata meta = 127;
Expand Down
Loading