def include_once(filename, lineno, local_first): """ Performs a file inclusion (#include) in the preprocessor. Writes down that "filename" was included at the current file, at line <lineno>. The file is ignored if it was previuosly included (a warning will be emitted though). If local_first is True, then it will first search the file in the local path before looking for it in the include path chain. This is used when doing a #include "filename". """ filename = search_filename(filename, lineno, local_first) if filename not in INCLUDED.keys(): # If not already included return include_file(filename, lineno, local_first) # include it and return # Now checks if the file has been included more than once if len(INCLUDED[filename]) > 1: warning(lineno, "file '%s' already included more than once, in file " "'%s' at line %i" % (filename, INCLUDED[filename][0][0], INCLUDED[filename][0][1])) # Empty file (already included) LEXER.next_token = '_ENDFILE_' return ''
def p_define(p): """ define : DEFINE ID params defs """ if ENABLED: if p[4]: if SPACES.match(p[4][0]): p[4][0] = p[4][0][1:] else: warning(p.lineno(1), "missing whitespace after the macro name") ID_TABLE.define(p[2], args=p[3], value=p[4], lineno=p.lineno(2), fname=CURRENT_FILE[-1]) p[0] = []
def warning(self, msg): """ Emits a warning and continue execution. """ warning(self.lex.lineno, msg)
def p_warningmsg(p): """ warningmsg : WARNING STRING """ if ENABLED: warning(p.lineno(1), p[2]) p[0] = []