aboutsummaryrefslogtreecommitdiff
path: root/codegen/lib/code
diff options
context:
space:
mode:
authormat <github@matdoes.dev>2022-06-23 21:54:38 -0500
committermat <github@matdoes.dev>2022-06-23 21:54:38 -0500
commit8755f18c2b0c11a51a81f60b5501d9d57d0c370e (patch)
tree08594ab64576d439662ccb7786b11aa11cb1877c /codegen/lib/code
parente44afb76f4d89ecd3763db83338268b9d9360a0c (diff)
downloadazalea-drasl-8755f18c2b0c11a51a81f60b5501d9d57d0c370e.tar.xz
Correctly detect updated packets
Diffstat (limited to 'codegen/lib/code')
-rw-r--r--codegen/lib/code/packet.py25
-rw-r--r--codegen/lib/code/utils.py3
2 files changed, 26 insertions, 2 deletions
diff --git a/codegen/lib/code/packet.py b/codegen/lib/code/packet.py
index 2aabf39a..7849b0b3 100644
--- a/codegen/lib/code/packet.py
+++ b/codegen/lib/code/packet.py
@@ -245,3 +245,28 @@ def remove_packet_ids(removing_packet_ids: list[int], direction: str, state: str
new_packet_class_names.append(packet_class_name)
set_packets(new_packet_ids, new_packet_class_names, direction, state)
+
+
+def are_packet_instructions_identical(old_packet, new_packet):
+ old_packet = old_packet or []
+ new_packet = new_packet or []
+
+ if len(old_packet) != len(new_packet):
+ return False
+
+ for old_field, new_field in zip(old_packet, new_packet):
+ if old_field['operation'] != new_field['operation']:
+ return False
+ if new_field['operation'] == 'write':
+ if burger_type_to_rust_type(old_field.get('type')) != burger_type_to_rust_type(new_field.get('type')):
+ return False
+ else:
+ # comparing is too complicated here since it's possible the type has variables
+ # so we just don't
+ pass
+
+ if 'instructions' in old_field and 'instructions' in new_field:
+ if not are_packet_instructions_identical(old_field['instructions'], new_field['instructions']):
+ return False
+
+ return True
diff --git a/codegen/lib/code/utils.py b/codegen/lib/code/utils.py
index ecfff4fb..0c22d7ba 100644
--- a/codegen/lib/code/utils.py
+++ b/codegen/lib/code/utils.py
@@ -62,8 +62,7 @@ def burger_type_to_rust_type(burger_type):
burger_type[:-2])
field_type_rs = f'Vec<{field_type_rs}>'
else:
- print('Unknown field type:', burger_type)
- exit()
+ raise Exception(f'Unknown field type: {burger_type}')
return field_type_rs, is_var, uses