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 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 args = map(string.strip, python_match.group(2).split(',')) | 197 args = map(string.strip, python_match.group(2).split(',')) |
198 body = python_match.group(3).strip() | 198 body = python_match.group(3).strip() |
199 fun = eval("lambda " + ",".join(args) + ': ' + body) | 199 fun = eval("lambda " + ",".join(args) + ': ' + body) |
200 macros.append((re.compile("\\b%s\\(" % name), PythonMacro(args, fun))) | 200 macros.append((re.compile("\\b%s\\(" % name), PythonMacro(args, fun))) |
201 else: | 201 else: |
202 raise ("Illegal line: " + line) | 202 raise ("Illegal line: " + line) |
203 return (constants, macros) | 203 return (constants, macros) |
204 | 204 |
205 | 205 |
206 HEADER_TEMPLATE = """\ | 206 HEADER_TEMPLATE = """\ |
207 // Copyright 2008 Google Inc. All Rights Reserved. | 207 // Copyright 2011 Google Inc. All Rights Reserved. |
208 | 208 |
209 // This file was generated from .js source files by SCons. If you | 209 // This file was generated from .js source files by SCons. If you |
210 // want to make changes to this file you should either change the | 210 // want to make changes to this file you should either change the |
211 // javascript source files or the SConstruct script. | 211 // javascript source files or the SConstruct script. |
212 | 212 |
213 #include "v8.h" | 213 #include "v8.h" |
214 #include "natives.h" | 214 #include "natives.h" |
215 | 215 |
216 namespace v8 { | 216 namespace v8 { |
217 namespace internal { | 217 namespace internal { |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
281 if 'macros.py' == (os.path.split(str(s))[1]): | 281 if 'macros.py' == (os.path.split(str(s))[1]): |
282 (consts, macros) = ReadMacros(ReadLines(str(s))) | 282 (consts, macros) = ReadMacros(ReadLines(str(s))) |
283 else: | 283 else: |
284 modules.append(s) | 284 modules.append(s) |
285 | 285 |
286 # Build source code lines | 286 # Build source code lines |
287 source_lines = [ ] | 287 source_lines = [ ] |
288 | 288 |
289 minifier = jsmin.JavaScriptMinifier() | 289 minifier = jsmin.JavaScriptMinifier() |
290 | 290 |
291 source_lines_empty = [] | |
292 for module in modules: | 291 for module in modules: |
293 filename = str(module) | 292 filename = str(module) |
294 debugger = filename.endswith('-debugger.js') | 293 debugger = filename.endswith('-debugger.js') |
295 lines = ReadFile(filename) | 294 lines = ReadFile(filename) |
296 lines = ExpandConstants(lines, consts) | 295 lines = ExpandConstants(lines, consts) |
297 lines = ExpandMacros(lines, macros) | 296 lines = ExpandMacros(lines, macros) |
298 Validate(lines, filename) | 297 Validate(lines, filename) |
299 lines = minifier.JSMinify(lines) | 298 lines = minifier.JSMinify(lines) |
300 data = ToCArray(lines) | 299 data = ToCArray(lines) |
301 id = (os.path.split(filename)[1])[:-3] | 300 id = (os.path.split(filename)[1])[:-3] |
302 if debugger: id = id[:-9] | 301 if debugger: id = id[:-9] |
303 if debugger: | 302 if debugger: |
304 debugger_ids.append((id, len(lines))) | 303 debugger_ids.append((id, len(lines))) |
305 else: | 304 else: |
306 ids.append((id, len(lines))) | 305 ids.append((id, len(lines))) |
307 source_lines.append(SOURCE_DECLARATION % { 'id': id, 'data': data }) | 306 source_lines.append(SOURCE_DECLARATION % { 'id': id, 'data': data }) |
308 source_lines_empty.append(SOURCE_DECLARATION % { 'id': id, 'data': data }) | |
309 | 307 |
310 # Build debugger support functions | 308 # Build debugger support functions |
311 get_index_cases = [ ] | 309 get_index_cases = [ ] |
312 get_script_source_cases = [ ] | 310 get_script_source_cases = [ ] |
313 get_script_name_cases = [ ] | 311 get_script_name_cases = [ ] |
314 | 312 |
315 i = 0 | 313 i = 0 |
316 for (id, length) in debugger_ids: | 314 for (id, length) in debugger_ids: |
317 native_name = "native %s.js" % id | 315 native_name = "native %s.js" % id |
318 get_index_cases.append(GET_DEBUGGER_INDEX_CASE % { 'id': id, 'i': i }) | 316 get_index_cases.append(GET_DEBUGGER_INDEX_CASE % { 'id': id, 'i': i }) |
(...skipping 30 matching lines...) Expand all Loading... |
349 'builtin_count': len(ids) + len(debugger_ids), | 347 'builtin_count': len(ids) + len(debugger_ids), |
350 'debugger_count': len(debugger_ids), | 348 'debugger_count': len(debugger_ids), |
351 'source_lines': "\n".join(source_lines), | 349 'source_lines': "\n".join(source_lines), |
352 'get_index_cases': "".join(get_index_cases), | 350 'get_index_cases': "".join(get_index_cases), |
353 'get_script_source_cases': "".join(get_script_source_cases), | 351 'get_script_source_cases': "".join(get_script_source_cases), |
354 'get_script_name_cases': "".join(get_script_name_cases), | 352 'get_script_name_cases': "".join(get_script_name_cases), |
355 'type': env['TYPE'] | 353 'type': env['TYPE'] |
356 }) | 354 }) |
357 output.close() | 355 output.close() |
358 | 356 |
359 if len(target) > 1: | |
360 output = open(str(target[1]), "w") | |
361 output.write(HEADER_TEMPLATE % { | |
362 'builtin_count': len(ids) + len(debugger_ids), | |
363 'debugger_count': len(debugger_ids), | |
364 'source_lines': "\n".join(source_lines_empty), | |
365 'get_index_cases': "".join(get_index_cases), | |
366 'get_script_source_cases': "".join(get_script_source_cases), | |
367 'get_script_name_cases': "".join(get_script_name_cases), | |
368 'type': env['TYPE'] | |
369 }) | |
370 output.close() | |
371 | |
372 def main(): | 357 def main(): |
373 natives = sys.argv[1] | 358 natives = sys.argv[1] |
374 natives_empty = sys.argv[2] | 359 type = sys.argv[2] |
375 type = sys.argv[3] | 360 source_files = sys.argv[3:] |
376 source_files = sys.argv[4:] | 361 JS2C(source_files, [natives], { 'TYPE': type }) |
377 JS2C(source_files, [natives, natives_empty], { 'TYPE': type }) | |
378 | 362 |
379 if __name__ == "__main__": | 363 if __name__ == "__main__": |
380 main() | 364 main() |
OLD | NEW |