-
Notifications
You must be signed in to change notification settings - Fork 63
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add for checker for cmd ids orders and union types
- Loading branch information
Showing
5 changed files
with
138 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
# Copyright (c) Meta Platforms, Inc. and affiliates. | ||
|
||
from projects.jdwp.defs.command_sets.virtual_machine import VirtualMachine | ||
from projects.jdwp.defs.command_sets.reference_type import ReferenceType | ||
from projects.jdwp.defs.command_sets.event_request import EventRequest | ||
|
||
ALL = [ | ||
VirtualMachine, | ||
ReferenceType, | ||
EventRequest, | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
# Copyright (c) Meta Platforms, Inc. and affiliates. | ||
|
||
python_binary( | ||
name = "check-uniontypes", | ||
deps = [ | ||
"//projects/jdwp/defs:defs" | ||
], | ||
main_module = "projects.jdwp.tools.check_union_types", | ||
|
||
) | ||
|
||
python_binary( | ||
name = "cmd-order-check", | ||
deps = [ | ||
"//projects/jdwp/defs:defs" | ||
], | ||
main_module = "projects.jdwp.tools.check_command_ids_order", | ||
|
||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
# Copyright (c) Meta Platforms, Inc. and affiliates. | ||
|
||
from argparse import ArgumentParser | ||
from projects.jdwp.defs.schema import CommandSet | ||
from projects.jdwp.defs.command_sets import ALL | ||
|
||
|
||
def check_command_ids(command_set: CommandSet) -> None: | ||
try: | ||
sorted_command_ids = [command.id for command in command_set.commands] | ||
if sorted_command_ids != sorted(sorted_command_ids): | ||
print(f"Command IDs in {command_set.name} are NOT in ascending order.") | ||
exit(1) | ||
except Exception as e: | ||
print(f"Error checking command IDs in {command_set.name}: {e}") | ||
exit(1) | ||
|
||
|
||
def main() -> None: | ||
parser = ArgumentParser(description="Check order of command IDs in command sets") | ||
parser.add_argument("--command-set", type=str, help="Specific command set to check") | ||
args = parser.parse_args() | ||
|
||
arg_command_set: str = args.command_set | ||
|
||
for command_set in ALL: | ||
if arg_command_set: | ||
if arg_command_set != command_set.name: | ||
continue | ||
check_command_ids(command_set) | ||
|
||
|
||
if __name__ == "__main__": | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
# Copyright (c) Meta Platforms, Inc. and affiliates. | ||
|
||
from argparse import ArgumentParser | ||
from projects.jdwp.defs.command_sets import ALL | ||
from projects.jdwp.defs.schema import ( | ||
Command, | ||
CommandSet, | ||
Struct, | ||
TaggedUnion, | ||
Type, | ||
Array, | ||
UnionTag, | ||
) | ||
|
||
|
||
def check_command_set(command_set: CommandSet) -> None: | ||
for command in command_set.commands: | ||
check_command(command) | ||
|
||
|
||
def check_command(command: Command) -> None: | ||
if command.out: | ||
check_struct(command.out) | ||
if command.reply: | ||
check_struct(command.reply) | ||
|
||
|
||
def check_struct(struct: Struct) -> None: | ||
for field in struct.fields: | ||
check_type(field.type) | ||
|
||
|
||
def check_type(type: Type) -> None: | ||
match type: | ||
case Struct(): | ||
check_struct(type) | ||
case Array(): | ||
check_struct(type.element_type) | ||
case TaggedUnion(): | ||
check_tagged_union(type) | ||
|
||
|
||
def check_tagged_union(union: TaggedUnion) -> None: | ||
tagged_union: UnionTag = union.tag.type | ||
for enum_value in tagged_union.value: | ||
try: | ||
union.cases[enum_value] | ||
except KeyError: | ||
print( | ||
f"Error in tagged union '{union.tag.type}': Missing case for enum value '{enum_value}'" | ||
) | ||
exit(1) | ||
|
||
for value in union.cases.values(): | ||
check_struct(value) | ||
|
||
|
||
def main() -> None: | ||
parser = ArgumentParser(description="Check tagged union mappings in command sets") | ||
parser.add_argument("--command-set", type=str, help="Specific command set to check") | ||
args = parser.parse_args() | ||
|
||
arg_command_set: str = args.command_set | ||
|
||
for command_set in ALL: | ||
if arg_command_set: | ||
if arg_command_set != command_set.name: | ||
continue | ||
check_command_set(command_set) | ||
|
||
|
||
if __name__ == "__main__": | ||
main() |