Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(105)

Side by Side Diff: tools/js2c.py

Issue 28184: Avoids allocating a JSArray of capture information on each non-global... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« src/runtime.cc ('K') | « test/mjsunit/regexp-string-methods.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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()
OLDNEW
« src/runtime.cc ('K') | « test/mjsunit/regexp-string-methods.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698