diff options
Diffstat (limited to 'dom/base/gen-usecounters.py')
-rwxr-xr-x | dom/base/gen-usecounters.py | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/dom/base/gen-usecounters.py b/dom/base/gen-usecounters.py new file mode 100755 index 000000000..5b17c22e4 --- /dev/null +++ b/dom/base/gen-usecounters.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python + +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +from __future__ import print_function + +import json +import os +import sys +sys.path.append(os.path.dirname(__file__)) + +import usecounters + +AUTOGENERATED_WARNING_COMMENT = "/* THIS FILE IS AUTOGENERATED BY gen-usecounters.py - DO NOT EDIT */" + +def generate_list(f, counters): + def print_optional_macro_declare(name): + print(''' +#ifndef %(name)s +#define %(name)s(interface_, name_) // nothing +#define DEFINED_%(name)s +#endif +''' % { 'name': name }, file=f) + + def print_optional_macro_undeclare(name): + print(''' +#ifdef DEFINED_%(name)s +#undef DEFINED_%(name)s +#undef %(name)s +#endif +''' % { 'name': name }, file=f) + + print(AUTOGENERATED_WARNING_COMMENT, file=f) + + print_optional_macro_declare('USE_COUNTER_DOM_METHOD') + print_optional_macro_declare('USE_COUNTER_DOM_ATTRIBUTE') + print_optional_macro_declare('USE_COUNTER_CSS_PROPERTY') + + for counter in counters: + if counter['type'] == 'method': + print('USE_COUNTER_DOM_METHOD(%s, %s)' % (counter['interface_name'], counter['method_name']), file=f) + elif counter['type'] == 'attribute': + print('USE_COUNTER_DOM_ATTRIBUTE(%s, %s)' % (counter['interface_name'], counter['attribute_name']), file=f) + elif counter['type'] == 'property': + prop = counter['property_name'] + print('USE_COUNTER_CSS_PROPERTY(%s, %s)' % (prop, prop), file=f) + + print_optional_macro_undeclare('USE_COUNTER_DOM_METHOD') + print_optional_macro_undeclare('USE_COUNTER_DOM_ATTRIBUTE') + print_optional_macro_undeclare('USE_COUNTER_CSS_PROPERTY') + +def generate_property_map(f, counters): + print(AUTOGENERATED_WARNING_COMMENT, file=f) + print(''' +enum { + #define CSS_PROP_PUBLIC_OR_PRIVATE(publicname_, privatename_) privatename_ + #define CSS_PROP_LIST_INCLUDE_LOGICAL + #define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, \\ + kwtable_, stylestruct_, stylestructoffset_, animtype_) \\ + USE_COUNTER_FOR_CSS_PROPERTY_##method_ = eUseCounter_UNKNOWN, + #include "nsCSSPropList.h" + #undef CSS_PROP + #undef CSS_PROP_LIST_INCLUDE_LOGICAL + #undef CSS_PROP_PUBLIC_OR_PRIVATE +}; +''', file=f) + for counter in counters: + if counter['type'] == 'property': + prop = counter['property_name'] + print('#define USE_COUNTER_FOR_CSS_PROPERTY_%s eUseCounter_property_%s' % (prop, prop), file=f) + +def use_counter_list(output_header, conf_filename): + counters = usecounters.read_conf(conf_filename) + generate_list(output_header, counters) + +def property_map(output_map, conf_filename): + counters = usecounters.read_conf(conf_filename) + generate_property_map(output_map, counters) |