| OLD | NEW | 
|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python | 
| 2 # | 2 # | 
| 3 # Copyright 2006-2008 the V8 project authors. All rights reserved. | 3 # Copyright 2006-2008 the V8 project authors. All rights reserved. | 
| 4 # Redistribution and use in source and binary forms, with or without | 4 # Redistribution and use in source and binary forms, with or without | 
| 5 # modification, are permitted provided that the following conditions are | 5 # modification, are permitted provided that the following conditions are | 
| 6 # met: | 6 # met: | 
| 7 # | 7 # | 
| 8 #     * Redistributions of source code must retain the above copyright | 8 #     * Redistributions of source code must retain the above copyright | 
| 9 #       notice, this list of conditions and the following disclaimer. | 9 #       notice, this list of conditions and the following disclaimer. | 
| 10 #     * Redistributions in binary form must reproduce the above | 10 #     * Redistributions in binary form must reproduce the above | 
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 97 | 97 | 
| 98 | 98 | 
| 99 def ExpandConstants(lines, constants): | 99 def ExpandConstants(lines, constants): | 
| 100   for key, value in constants.items(): | 100   for key, value in constants.items(): | 
| 101     lines = lines.replace(key, str(value)) | 101     lines = lines.replace(key, str(value)) | 
| 102   return lines | 102   return lines | 
| 103 | 103 | 
| 104 | 104 | 
| 105 def ExpandMacros(lines, macros): | 105 def ExpandMacros(lines, macros): | 
| 106   for name, macro in macros.items(): | 106   for name, macro in macros.items(): | 
| 107     start = lines.find(name, 0) | 107     start = lines.find(name + '(', 0) | 
| 108     while start != -1: | 108     while start != -1: | 
| 109       # Scan over the arguments | 109       # Scan over the arguments | 
| 110       assert lines[start + len(name)] == '(' | 110       assert lines[start + len(name)] == '(' | 
| 111       height = 1 | 111       height = 1 | 
| 112       end = start + len(name) + 1 | 112       end = start + len(name) + 1 | 
| 113       last_match = end | 113       last_match = end | 
| 114       arg_index = 0 | 114       arg_index = 0 | 
| 115       mapping = { } | 115       mapping = { } | 
| 116       def add_arg(str): | 116       def add_arg(str): | 
| 117         # Remember to expand recursively in the arguments | 117         # Remember to expand recursively in the arguments | 
| 118         replacement = ExpandMacros(str.strip(), macros) | 118         replacement = ExpandMacros(str.strip(), macros) | 
| 119         mapping[macro.args[arg_index]] = replacement | 119         mapping[macro.args[arg_index]] = replacement | 
| 120       while end < len(lines) and height > 0: | 120       while end < len(lines) and height > 0: | 
| 121         # We don't count commas at higher nesting levels. | 121         # We don't count commas at higher nesting levels. | 
| 122         if lines[end] == ',' and height == 1: | 122         if lines[end] == ',' and height == 1: | 
| 123           add_arg(lines[last_match:end]) | 123           add_arg(lines[last_match:end]) | 
| 124           last_match = end + 1 | 124           last_match = end + 1 | 
| 125         elif lines[end] in ['(', '{', '[']: | 125         elif lines[end] in ['(', '{', '[']: | 
| 126           height = height + 1 | 126           height = height + 1 | 
| 127         elif lines[end] in [')', '}', ']']: | 127         elif lines[end] in [')', '}', ']']: | 
| 128           height = height - 1 | 128           height = height - 1 | 
| 129         end = end + 1 | 129         end = end + 1 | 
| 130       # Remember to add the last match. | 130       # Remember to add the last match. | 
| 131       add_arg(lines[last_match:end-1]) | 131       add_arg(lines[last_match:end-1]) | 
| 132       result = macro.expand(mapping) | 132       result = macro.expand(mapping) | 
| 133       # Replace the occurrence of the macro with the expansion | 133       # Replace the occurrence of the macro with the expansion | 
| 134       lines = lines[:start] + result + lines[end:] | 134       lines = lines[:start] + result + lines[end:] | 
| 135       start = lines.find(name, end) | 135       start = lines.find(name + '(', end) | 
| 136   return lines | 136   return lines | 
| 137 | 137 | 
| 138 class TextMacro: | 138 class TextMacro: | 
| 139   def __init__(self, args, body): | 139   def __init__(self, args, body): | 
| 140     self.args = args | 140     self.args = args | 
| 141     self.body = body | 141     self.body = body | 
| 142   def expand(self, mapping): | 142   def expand(self, mapping): | 
| 143     result = self.body | 143     result = self.body | 
| 144     for key, value in mapping.items(): | 144     for key, value in mapping.items(): | 
| 145         result = result.replace(key, value) | 145         result = result.replace(key, value) | 
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 356 | 356 | 
| 357 def main(): | 357 def main(): | 
| 358   natives = sys.argv[1] | 358   natives = sys.argv[1] | 
| 359   natives_empty = sys.argv[2] | 359   natives_empty = sys.argv[2] | 
| 360   type = sys.argv[3] | 360   type = sys.argv[3] | 
| 361   source_files = sys.argv[4:] | 361   source_files = sys.argv[4:] | 
| 362   JS2C(source_files, [natives, natives_empty], { 'TYPE': type }) | 362   JS2C(source_files, [natives, natives_empty], { 'TYPE': type }) | 
| 363 | 363 | 
| 364 if __name__ == "__main__": | 364 if __name__ == "__main__": | 
| 365   main() | 365   main() | 
| OLD | NEW | 
|---|