DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (dcc6d7a0dc00)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 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)