Bug 1872666 - Remove OrderedDict code from YAML file loading. r=iain,profiler-reviewers,canaltinova

`mach` requires Python 3.7+ since bug 1734402, and Python 3.7 made preserving
dictionary insertion order an official part of the language.

Also use `safe_load` instead of `load` because it doesn't require a loader argument
and is safer (although it doesn't really matter for this use case).

Differential Revision: https://phabricator.services.mozilla.com/D197497
This commit is contained in:
Jan de Mooij 2024-01-04 08:28:17 +00:00
Родитель cdab453613
Коммит 4387a3b625
6 изменённых файлов: 11 добавлений и 101 удалений

Просмотреть файл

@ -1,5 +1,3 @@
from collections import OrderedDict
import buildconfig
import six
import yaml
@ -40,20 +38,7 @@ def load_yaml(yaml_path):
pp.do_filter("substitution")
pp.do_include(yaml_path)
contents = pp.out.getvalue()
# Load into an OrderedDict to ensure order is preserved. Note: Python 3.7+
# also preserves ordering for normal dictionaries.
# Code based on https://stackoverflow.com/a/21912744.
class OrderedLoader(yaml.Loader):
pass
def construct_mapping(loader, node):
loader.flatten_mapping(node)
return OrderedDict(loader.construct_pairs(node))
tag = yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG
OrderedLoader.add_constructor(tag, construct_mapping)
return yaml.load(contents, OrderedLoader)
return yaml.safe_load(contents)
def cpp_arg_type(arg_type):

Просмотреть файл

@ -4,8 +4,6 @@
# This script generates jit/CacheIROpsGenerated.h from CacheIROps.yaml
from collections import OrderedDict
import buildconfig
import six
import yaml
@ -46,20 +44,7 @@ def load_yaml(yaml_path):
pp.do_filter("substitution")
pp.do_include(yaml_path)
contents = pp.out.getvalue()
# Load into an OrderedDict to ensure order is preserved. Note: Python 3.7+
# also preserves ordering for normal dictionaries.
# Code based on https://stackoverflow.com/a/21912744.
class OrderedLoader(yaml.Loader):
pass
def construct_mapping(loader, node):
loader.flatten_mapping(node)
return OrderedDict(loader.construct_pairs(node))
tag = yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG
OrderedLoader.add_constructor(tag, construct_mapping)
return yaml.load(contents, OrderedLoader)
return yaml.safe_load(contents)
# Information for generating CacheIRWriter code for a single argument. Tuple
@ -476,7 +461,7 @@ def generate_cacheirops_header(c_out, yaml_path):
name = op["name"]
args = op["args"]
assert args is None or isinstance(args, OrderedDict)
assert args is None or isinstance(args, dict)
shared = op["shared"]
assert isinstance(shared, bool)

Просмотреть файл

@ -5,8 +5,6 @@
# This script generates jit/LIROpsGenerated.h (list of LIR instructions)
# from LIROps.yaml.
from collections import OrderedDict
import buildconfig
import six
import yaml
@ -37,20 +35,7 @@ def load_yaml(yaml_path):
pp.do_filter("substitution")
pp.do_include(yaml_path)
contents = pp.out.getvalue()
# Load into an OrderedDict to ensure order is preserved. Note: Python 3.7
# also preserves ordering for normal dictionaries.
# Code based on https://stackoverflow.com/a/21912744.
class OrderedLoader(yaml.Loader):
pass
def construct_mapping(loader, node):
loader.flatten_mapping(node)
return OrderedDict(loader.construct_pairs(node))
tag = yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG
OrderedLoader.add_constructor(tag, construct_mapping)
return yaml.load(contents, OrderedLoader)
return yaml.safe_load(contents)
def generate_header(c_out, includeguard, contents):
@ -256,10 +241,10 @@ def generate_lir_header(c_out, yaml_path):
assert result_types[result_type]
operands = op.get("operands", None)
assert operands is None or OrderedDict
assert operands is None or isinstance(operands, dict)
arguments = op.get("arguments", None)
assert arguments is None or isinstance(arguments, OrderedDict)
assert arguments is None or isinstance(arguments, dict)
num_temps = op.get("num_temps", 0)
assert num_temps is None or int

Просмотреть файл

@ -5,8 +5,6 @@
# This script generates jit/MIROpsGenerated.h (list of MIR instructions)
# from MIROps.yaml, as well as MIR op definitions.
from collections import OrderedDict
import buildconfig
import six
import yaml
@ -47,20 +45,7 @@ def load_yaml(yaml_path):
pp.do_filter("substitution")
pp.do_include(yaml_path)
contents = pp.out.getvalue()
# Load into an OrderedDict to ensure order is preserved. Note: Python 3.7+
# also preserves ordering for normal dictionaries.
# Code based on https://stackoverflow.com/a/21912744.
class OrderedLoader(yaml.Loader):
pass
def construct_mapping(loader, node):
loader.flatten_mapping(node)
return OrderedDict(loader.construct_pairs(node))
tag = yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG
OrderedLoader.add_constructor(tag, construct_mapping)
return yaml.load(contents, OrderedLoader)
return yaml.safe_load(contents)
type_policies = {
@ -322,10 +307,10 @@ def generate_mir_header(c_out, yaml_path):
if gen_boilerplate:
operands = op.get("operands", None)
assert operands is None or isinstance(operands, OrderedDict)
assert operands is None or isinstance(operands, dict)
arguments = op.get("arguments", None)
assert arguments is None or isinstance(arguments, OrderedDict)
assert arguments is None or isinstance(arguments, dict)
no_type_policy = op.get("type_policy", None)
assert no_type_policy in (None, "none")

Просмотреть файл

@ -1,5 +1,3 @@
from collections import OrderedDict
import buildconfig
import six
import yaml
@ -40,20 +38,7 @@ def load_yaml(yaml_path):
pp.do_filter("substitution")
pp.do_include(yaml_path)
contents = pp.out.getvalue()
# Load into an OrderedDict to ensure order is preserved. Note: Python 3.7+
# also preserves ordering for normal dictionaries.
# Code based on https://stackoverflow.com/a/21912744.
class OrderedLoader(yaml.Loader):
pass
def construct_mapping(loader, node):
loader.flatten_mapping(node)
return OrderedDict(loader.construct_pairs(node))
tag = yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG
OrderedLoader.add_constructor(tag, construct_mapping)
return yaml.load(contents, OrderedLoader)
return yaml.safe_load(contents)
def cppBool(v):

Просмотреть файл

@ -5,8 +5,6 @@
# This script generates ProfilingCategoryList.h and profiling_categories.rs
# files from profiling_categories.yaml.
from collections import OrderedDict
import yaml
CPP_HEADER_TEMPLATE = """\
@ -104,21 +102,8 @@ def generate_rust_file(c_out, contents):
def load_yaml(yaml_path):
# Load into an OrderedDict to ensure order is preserved. Note: Python 3.7+
# also preserves ordering for normal dictionaries.
# Code based on https://stackoverflow.com/a/21912744.
class OrderedLoader(yaml.Loader):
pass
def construct_mapping(loader, node):
loader.flatten_mapping(node)
return OrderedDict(loader.construct_pairs(node))
tag = yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG
OrderedLoader.add_constructor(tag, construct_mapping)
file_handler = open(yaml_path)
return yaml.load(file_handler, OrderedLoader)
return yaml.safe_load(file_handler)
def generate_category_macro(name, label, color, subcategories):