| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 2 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 3 # for details. All rights reserved. Use of this source code is governed by a | 3 # for details. All rights reserved. Use of this source code is governed by a |
| 4 # BSD-style license that can be found in the LICENSE file. | 4 # BSD-style license that can be found in the LICENSE file. |
| 5 | 5 |
| 6 import re | 6 import re |
| 7 import subprocess | 7 import subprocess |
| 8 import tempfile | 8 import tempfile |
| 9 | 9 |
| 10 from pegparser import * | 10 from pegparser import * |
| (...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 404 | 404 |
| 405 Returns: | 405 Returns: |
| 406 The result of running gcc on the content. | 406 The result of running gcc on the content. |
| 407 | 407 |
| 408 Args: | 408 Args: |
| 409 content -- text to process. | 409 content -- text to process. |
| 410 defines -- an array of pre-processor defines. | 410 defines -- an array of pre-processor defines. |
| 411 includePaths -- an array of path strings. | 411 includePaths -- an array of path strings. |
| 412 """ | 412 """ |
| 413 # FIXME: Handle gcc not found, or any other processing errors | 413 # FIXME: Handle gcc not found, or any other processing errors |
| 414 gcc = '/usr/bin/gcc' | 414 gcc = 'gcc' |
| 415 cmd = [gcc, '-E', '-P', '-C', '-x', 'c++']; | 415 cmd = [gcc, '-E', '-P', '-C', '-x', 'c++']; |
| 416 for define in defines: | 416 for define in defines: |
| 417 cmd.append('-D%s' % define) | 417 cmd.append('-D%s' % define) |
| 418 cmd.append('-') | 418 cmd.append('-') |
| 419 pipe = subprocess.Popen(cmd, stdin=subprocess.PIPE, | 419 pipe = subprocess.Popen(cmd, stdin=subprocess.PIPE, |
| 420 stdout=subprocess.PIPE, stderr=subprocess.PIPE) | 420 stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
| 421 (content, stderr) = pipe.communicate(content) | 421 (content, stderr) = pipe.communicate(content) |
| 422 return content | 422 return content |
| 423 | 423 |
| 424 def parse(self, content, defines=[], includePaths=[]): | 424 def parse(self, content, defines=[], includePaths=[]): |
| 425 """Parse the give content string. | 425 """Parse the give content string. |
| 426 | 426 |
| 427 The WebKit IDL syntax also allows gcc pre-processing instructions. | 427 The WebKit IDL syntax also allows gcc pre-processing instructions. |
| 428 Lists of defined variables and include paths can be provided. | 428 Lists of defined variables and include paths can be provided. |
| 429 | 429 |
| 430 Returns: | 430 Returns: |
| 431 An abstract syntax tree (AST). | 431 An abstract syntax tree (AST). |
| 432 | 432 |
| 433 Args: | 433 Args: |
| 434 content -- text to parse. | 434 content -- text to parse. |
| 435 defines -- an array of pre-processor defines. | 435 defines -- an array of pre-processor defines. |
| 436 includePaths -- an array of path strings used by the | 436 includePaths -- an array of path strings used by the |
| 437 gcc pre-processor. | 437 gcc pre-processor. |
| 438 """ | 438 """ |
| 439 if self._syntax == WEBKIT_SYNTAX: | 439 if self._syntax == WEBKIT_SYNTAX: |
| 440 content = self._pre_process(content, defines, includePaths) | 440 content = self._pre_process(content, defines, includePaths) |
| 441 | 441 |
| 442 return self._pegparser.parse(content) | 442 return self._pegparser.parse(content) |
| OLD | NEW |