aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tccpp.c6
-rw-r--r--tests/tcctest.c7
-rw-r--r--tests/tcctest.h9
3 files changed, 22 insertions, 0 deletions
diff --git a/tccpp.c b/tccpp.c
index 151bce6..1838a3a 100644
--- a/tccpp.c
+++ b/tccpp.c
@@ -3465,6 +3465,7 @@ ST_INLN void unget_tok(int last_tok)
ST_FUNC void preprocess_start(TCCState *s1)
{
+ char *buf;
s1->include_stack_ptr = s1->include_stack;
/* XXX: move that before to avoid having to initialize
file->ifdef_stack_ptr ? */
@@ -3480,6 +3481,11 @@ ST_FUNC void preprocess_start(TCCState *s1)
s1->dollars_in_identifiers ? IS_ID : 0;
isidnum_table['.' - CH_EOF] =
(parse_flags & PARSE_FLAG_ASM_FILE) ? IS_ID : 0;
+ buf = tcc_malloc(3 + strlen(file->filename));
+ sprintf(buf, "\"%s\"", file->filename);
+ tcc_undefine_symbol(s1, "__BASE_FILE__");
+ tcc_define_symbol(s1, "__BASE_FILE__", buf);
+ tcc_free(buf);
if (s1->nb_cmd_include_files) {
CString cstr;
int i;
diff --git a/tests/tcctest.c b/tests/tcctest.c
index 10033a4..025d12d 100644
--- a/tests/tcctest.c
+++ b/tests/tcctest.c
@@ -59,6 +59,8 @@
#include "tcclib.h"
+#include "tcctest.h"
+
void intdiv_test();
void string_test();
void expr_test();
@@ -389,6 +391,11 @@ comment
/* And again when the name and parenthes are separated by a
comment. */
TEST2 /* the comment */ ();
+
+ printf("%s\n", get_basefile_from_header());
+ printf("%s\n", __BASE_FILE__);
+ printf("%s\n", get_file_from_header());
+ printf("%s\n", __FILE__);
}
diff --git a/tests/tcctest.h b/tests/tcctest.h
new file mode 100644
index 0000000..b301c7c
--- /dev/null
+++ b/tests/tcctest.h
@@ -0,0 +1,9 @@
+static inline const char *get_basefile_from_header(void)
+{
+ return __BASE_FILE__;
+}
+
+static inline const char *get_file_from_header(void)
+{
+ return __FILE__;
+}