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 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 namespace internal { | 213 namespace internal { |
214 | 214 |
215 %(source_lines)s\ | 215 %(source_lines)s\ |
216 | 216 |
217 template <> | 217 template <> |
218 int NativesCollection<%(type)s>::GetBuiltinsCount() { | 218 int NativesCollection<%(type)s>::GetBuiltinsCount() { |
219 return %(builtin_count)i; | 219 return %(builtin_count)i; |
220 } | 220 } |
221 | 221 |
222 template <> | 222 template <> |
223 int NativesCollection<%(type)s>::GetDelayCount() { | 223 int NativesCollection<%(type)s>::GetDebuggerCount() { |
224 return %(delay_count)i; | 224 return %(debugger_count)i; |
225 } | 225 } |
226 | 226 |
227 template <> | 227 template <> |
228 int NativesCollection<%(type)s>::GetIndex(const char* name) { | 228 int NativesCollection<%(type)s>::GetIndex(const char* name) { |
229 %(get_index_cases)s\ | 229 %(get_index_cases)s\ |
230 return -1; | 230 return -1; |
231 } | 231 } |
232 | 232 |
233 template <> | 233 template <> |
234 Vector<const char> NativesCollection<%(type)s>::GetScriptSource(int index) { | 234 Vector<const char> NativesCollection<%(type)s>::GetScriptSource(int index) { |
(...skipping 10 matching lines...) Expand all Loading... |
245 } // internal | 245 } // internal |
246 } // v8 | 246 } // v8 |
247 """ | 247 """ |
248 | 248 |
249 | 249 |
250 SOURCE_DECLARATION = """\ | 250 SOURCE_DECLARATION = """\ |
251 static const char %(id)s[] = { %(data)s }; | 251 static const char %(id)s[] = { %(data)s }; |
252 """ | 252 """ |
253 | 253 |
254 | 254 |
255 GET_DELAY_INDEX_CASE = """\ | 255 GET_DEBUGGER_INDEX_CASE = """\ |
256 if (strcmp(name, "%(id)s") == 0) return %(i)i; | 256 if (strcmp(name, "%(id)s") == 0) return %(i)i; |
257 """ | 257 """ |
258 | 258 |
259 | 259 |
260 GET_DELAY_SCRIPT_SOURCE_CASE = """\ | 260 GET_DEBUGGER_SCRIPT_SOURCE_CASE = """\ |
261 if (index == %(i)i) return Vector<const char>(%(id)s, %(length)i); | 261 if (index == %(i)i) return Vector<const char>(%(id)s, %(length)i); |
262 """ | 262 """ |
263 | 263 |
264 | 264 |
265 GET_DELAY_SCRIPT_NAME_CASE = """\ | 265 GET_DEBUGGER_SCRIPT_NAME_CASE = """\ |
266 if (index == %(i)i) return Vector<const char>("%(name)s", %(length)i); | 266 if (index == %(i)i) return Vector<const char>("%(name)s", %(length)i); |
267 """ | 267 """ |
268 | 268 |
269 def JS2C(source, target, env): | 269 def JS2C(source, target, env): |
270 ids = [] | 270 ids = [] |
271 delay_ids = [] | 271 debugger_ids = [] |
272 modules = [] | 272 modules = [] |
273 # Locate the macros file name. | 273 # Locate the macros file name. |
274 consts = {} | 274 consts = {} |
275 macros = {} | 275 macros = {} |
276 for s in source: | 276 for s in source: |
277 if 'macros.py' == (os.path.split(str(s))[1]): | 277 if 'macros.py' == (os.path.split(str(s))[1]): |
278 (consts, macros) = ReadMacros(ReadLines(str(s))) | 278 (consts, macros) = ReadMacros(ReadLines(str(s))) |
279 else: | 279 else: |
280 modules.append(s) | 280 modules.append(s) |
281 | 281 |
282 # Build source code lines | 282 # Build source code lines |
283 source_lines = [ ] | 283 source_lines = [ ] |
284 | 284 |
285 minifier = jsmin.JavaScriptMinifier() | 285 minifier = jsmin.JavaScriptMinifier() |
286 | 286 |
287 source_lines_empty = [] | 287 source_lines_empty = [] |
288 for module in modules: | 288 for module in modules: |
289 filename = str(module) | 289 filename = str(module) |
290 delay = filename.endswith('-delay.js') | 290 debugger = filename.endswith('-debugger.js') |
291 lines = ReadFile(filename) | 291 lines = ReadFile(filename) |
292 lines = ExpandConstants(lines, consts) | 292 lines = ExpandConstants(lines, consts) |
293 lines = ExpandMacros(lines, macros) | 293 lines = ExpandMacros(lines, macros) |
294 Validate(lines, filename) | 294 Validate(lines, filename) |
295 lines = minifier.JSMinify(lines) | 295 lines = minifier.JSMinify(lines) |
296 data = ToCArray(lines) | 296 data = ToCArray(lines) |
297 id = (os.path.split(filename)[1])[:-3] | 297 id = (os.path.split(filename)[1])[:-3] |
298 if delay: id = id[:-6] | 298 if debugger: id = id[:-9] |
299 if delay: | 299 if debugger: |
300 delay_ids.append((id, len(lines))) | 300 debugger_ids.append((id, len(lines))) |
301 else: | 301 else: |
302 ids.append((id, len(lines))) | 302 ids.append((id, len(lines))) |
303 source_lines.append(SOURCE_DECLARATION % { 'id': id, 'data': data }) | 303 source_lines.append(SOURCE_DECLARATION % { 'id': id, 'data': data }) |
304 source_lines_empty.append(SOURCE_DECLARATION % { 'id': id, 'data': data }) | 304 source_lines_empty.append(SOURCE_DECLARATION % { 'id': id, 'data': data }) |
305 | 305 |
306 # Build delay support functions | 306 # Build debugger support functions |
307 get_index_cases = [ ] | 307 get_index_cases = [ ] |
308 get_script_source_cases = [ ] | 308 get_script_source_cases = [ ] |
309 get_script_name_cases = [ ] | 309 get_script_name_cases = [ ] |
310 | 310 |
311 i = 0 | 311 i = 0 |
312 for (id, length) in delay_ids: | 312 for (id, length) in debugger_ids: |
313 native_name = "native %s.js" % id | 313 native_name = "native %s.js" % id |
314 get_index_cases.append(GET_DELAY_INDEX_CASE % { 'id': id, 'i': i }) | 314 get_index_cases.append(GET_DEBUGGER_INDEX_CASE % { 'id': id, 'i': i }) |
315 get_script_source_cases.append(GET_DELAY_SCRIPT_SOURCE_CASE % { | 315 get_script_source_cases.append(GET_DEBUGGER_SCRIPT_SOURCE_CASE % { |
316 'id': id, | 316 'id': id, |
317 'length': length, | 317 'length': length, |
318 'i': i | 318 'i': i |
319 }) | 319 }) |
320 get_script_name_cases.append(GET_DELAY_SCRIPT_NAME_CASE % { | 320 get_script_name_cases.append(GET_DEBUGGER_SCRIPT_NAME_CASE % { |
321 'name': native_name, | 321 'name': native_name, |
322 'length': len(native_name), | 322 'length': len(native_name), |
323 'i': i | 323 'i': i |
324 }); | 324 }); |
325 i = i + 1 | 325 i = i + 1 |
326 | 326 |
327 for (id, length) in ids: | 327 for (id, length) in ids: |
328 native_name = "native %s.js" % id | 328 native_name = "native %s.js" % id |
329 get_index_cases.append(GET_DELAY_INDEX_CASE % { 'id': id, 'i': i }) | 329 get_index_cases.append(GET_DEBUGGER_INDEX_CASE % { 'id': id, 'i': i }) |
330 get_script_source_cases.append(GET_DELAY_SCRIPT_SOURCE_CASE % { | 330 get_script_source_cases.append(GET_DEBUGGER_SCRIPT_SOURCE_CASE % { |
331 'id': id, | 331 'id': id, |
332 'length': length, | 332 'length': length, |
333 'i': i | 333 'i': i |
334 }) | 334 }) |
335 get_script_name_cases.append(GET_DELAY_SCRIPT_NAME_CASE % { | 335 get_script_name_cases.append(GET_DEBUGGER_SCRIPT_NAME_CASE % { |
336 'name': native_name, | 336 'name': native_name, |
337 'length': len(native_name), | 337 'length': len(native_name), |
338 'i': i | 338 'i': i |
339 }); | 339 }); |
340 i = i + 1 | 340 i = i + 1 |
341 | 341 |
342 # Emit result | 342 # Emit result |
343 output = open(str(target[0]), "w") | 343 output = open(str(target[0]), "w") |
344 output.write(HEADER_TEMPLATE % { | 344 output.write(HEADER_TEMPLATE % { |
345 'builtin_count': len(ids) + len(delay_ids), | 345 'builtin_count': len(ids) + len(debugger_ids), |
346 'delay_count': len(delay_ids), | 346 'debugger_count': len(debugger_ids), |
347 'source_lines': "\n".join(source_lines), | 347 'source_lines': "\n".join(source_lines), |
348 'get_index_cases': "".join(get_index_cases), | 348 'get_index_cases': "".join(get_index_cases), |
349 'get_script_source_cases': "".join(get_script_source_cases), | 349 'get_script_source_cases': "".join(get_script_source_cases), |
350 'get_script_name_cases': "".join(get_script_name_cases), | 350 'get_script_name_cases': "".join(get_script_name_cases), |
351 'type': env['TYPE'] | 351 'type': env['TYPE'] |
352 }) | 352 }) |
353 output.close() | 353 output.close() |
354 | 354 |
355 if len(target) > 1: | 355 if len(target) > 1: |
356 output = open(str(target[1]), "w") | 356 output = open(str(target[1]), "w") |
357 output.write(HEADER_TEMPLATE % { | 357 output.write(HEADER_TEMPLATE % { |
358 'builtin_count': len(ids) + len(delay_ids), | 358 'builtin_count': len(ids) + len(debugger_ids), |
359 'delay_count': len(delay_ids), | 359 'debugger_count': len(debugger_ids), |
360 'source_lines': "\n".join(source_lines_empty), | 360 'source_lines': "\n".join(source_lines_empty), |
361 'get_index_cases': "".join(get_index_cases), | 361 'get_index_cases': "".join(get_index_cases), |
362 'get_script_source_cases': "".join(get_script_source_cases), | 362 'get_script_source_cases': "".join(get_script_source_cases), |
363 'get_script_name_cases': "".join(get_script_name_cases), | 363 'get_script_name_cases': "".join(get_script_name_cases), |
364 'type': env['TYPE'] | 364 'type': env['TYPE'] |
365 }) | 365 }) |
366 output.close() | 366 output.close() |
367 | 367 |
368 def main(): | 368 def main(): |
369 natives = sys.argv[1] | 369 natives = sys.argv[1] |
370 natives_empty = sys.argv[2] | 370 natives_empty = sys.argv[2] |
371 type = sys.argv[3] | 371 type = sys.argv[3] |
372 source_files = sys.argv[4:] | 372 source_files = sys.argv[4:] |
373 JS2C(source_files, [natives, natives_empty], { 'TYPE': type }) | 373 JS2C(source_files, [natives, natives_empty], { 'TYPE': type }) |
374 | 374 |
375 if __name__ == "__main__": | 375 if __name__ == "__main__": |
376 main() | 376 main() |
OLD | NEW |