dom/base/gen-usecounters.py
author Simon Whitehead <chemnova@gmail.com>
Sat, 13 May 2017 15:12:15 -0500
changeset 358329 633151f5d481d49bd39900d43e6a75d77459a7bb
parent 258861 4a470b936bf334846a980ecc3303b1cd8bcc3509
child 374472 e894fa698629c0dc5d6a30dec9b5282d58ad852f
permissions -rwxr-xr-x
servo: Merge #16829 - Disallow negative duration for animation and transition (from hiikezoe:disallow-negative-duration); r=emilio <!-- Please describe your changes on the following line: --> --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [X] These changes fix #15343 <!-- Either: --> - [X] There are tests for these changes written by @simon-whitehead . Thank you! <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> Source-Repo: https://github.com/servo/servo Source-Revision: 4613c0382ab76263fb8202ccf52f4c0520e44809

#!/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)