def write_enum_block(self, b): p = self.p i = 0 while i < len(b.value): line = " " * self.indent tokens = b.value[i].value line += self.format_line(tokens) if i < len(b.value) - 1: line += "," self.in_row, _ = parser.get_row_col(tokens[0]) self.add_line(line) i += 1
def do_output(self): prev = None while self.stack: tok = self.stack.pop(0) if isinstance(tok, str): self.line += tok prev = None continue if tok: self.in_row, _ = parser.get_row_col(tok) else: prev = None word = self.format_op(tok) if not word: prev = None continue if prev: if prev[-1].isalnum() and word[0].isalnum(): self.line += " " self.line += word prev = word
def write_block(self, b, is_macro = False): self.current_block.append(b) p = self.p i = 0 n = len(b.value) while i < n: s = b.value[i] i += 1 if s.value: self.in_row, _ = parser.get_row_col(s) block = None if i < n: if b.value[i].kind == p.BLOCK: block = b.value[i] i += 1 if not self.in_header: for c in s.comments: self.code += self.indent * " " self.code += "//" self.code += c.value.rstrip() self.code += "\n" self.out_crow += 1 if s.kind == p.LINE: self.write_line(s, block) elif s.kind == p.STATEMENT: self.handle_statement(s) elif s.kind == p.TYPE: self.handle_class(s) elif s.kind == p.FUNCTION: self.current_function.append(s) self.handle_function(s) self.current_function.pop() elif s.kind == p.IMPORT: self.handle_import(s.value[1:], s.is_static) elif s.kind == p.PREPROCESSOR: self.handle_preprocessor(s) elif s.kind == p.MACRO: self.handle_macro(s) elif s.kind == p.ENUM: self.handle_enum(s) elif s.kind == p.LABEL: self.add_iline(self.format_line(s.value[1:]) + ":;") elif s.kind == p.GOTO: self.add_iline("goto " + self.format_line(s.value[1:]) + ";") elif s.kind == p.INCLUDE: self.p = s.value if not self.no_lines: prev_crow = self.out_crow self.code += "#line 1 \"" + self.p.filename + "\"\n" self.out_crow = 1 prev_hrow = self.out_hrow self.header += "#line 1 \"" + self.p.filename + "\"\n" self.out_hrow = 1 self.undef_at_end = [] self.write_block(self.p.root) self.p = p if not self.no_lines: self.out_crow = prev_crow + 1 self.code += "#line " + str(self.out_crow) + " \"" +\ self.p.filename + "\"\n" self.out_hrow = prev_hrow + 1 self.header += "#line " + str(self.out_hrow) + " \"" +\ self.p.filename + "\"\n" for u in self.undef_at_end: self.code += "#undef " + u + "\n" self.out_crow += 1 else: row, col = parser.get_row_col(s) p.error_pos("Unexpected node type %d." % s.kind, row, col) self.current_block.pop()