File: Synopsis/Parsers/Cpp/__init__.py 1
2
3
4
5
6
7
8"""Preprocessor for C, C++, IDL"""
9
10from Synopsis.Processor import *
11from Emulator import get_compiler_info
12from ParserImpl import parse
13import os.path
14
15class Parser(Processor):
16
17 emulate_compiler = Parameter('', 'a compiler to emulate')
18 compiler_flags = Parameter([], 'list of flags for the emulated compiler')
19 flags = Parameter([], 'list of preprocessor flags such as -I or -D')
20 primary_file_only = Parameter(True, 'should only primary file be processed')
21 cpp_output = Parameter(None, 'filename for preprocessed file')
22 base_path = Parameter(None, 'path prefix to strip off of the filenames')
23 language = Parameter('C++', 'source code programming language of the given input file')
24
25 def probe(self, **kwds):
26
27 self.set_parameters(kwds)
28 if type(self.compiler_flags) != list:
29 raise InvalidArgument('compiler_flags=%s (expected list)'%repr(self.compiler_flags))
30 return get_compiler_info(self.language,
31 self.emulate_compiler,
32 self.compiler_flags)
33
34 def process(self, ir, **kwds):
35
36 self.set_parameters(kwds)
37 if not self.input: raise MissingArgument('input')
38 self.ir = ir
39
40 system_flags = []
41
42 flags = type(self.flags) is str and self.flags.split() or self.flags
43 base_path = self.base_path and os.path.abspath(self.base_path) + os.sep or ''
44 info = get_compiler_info(self.language,
45 self.emulate_compiler,
46 self.compiler_flags)
47 system_flags += ['-I%s'%x for x in info.include_paths]
48 system_flags += ['-D%s'%k + (v and '=%s'%v or '')
49 for (k,v) in info.macros]
50 for file in self.input:
51 self.ir = parse(self.ir,
52 os.path.abspath(file),
53 base_path,
54 self.cpp_output,
55 self.language, system_flags, flags,
56 self.primary_file_only,
57 self.verbose, self.debug, self.profile)
58 return self.output_and_return_ir()
59
60
Generated on Thu Apr 16 16:27:16 2009 by
synopsis (version devel)