aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.c
diff options
context:
space:
mode:
authorAlexandre Petit-Bianco <apbianco@cygnus.com>1998-04-08 14:03:48 +0000
committerPer Bothner <bothner@gcc.gnu.org>1998-04-08 07:03:48 -0700
commitbf1e5319c3c6a2e26470ca5e17340fff30b9510e (patch)
treeda1bfbbe113dd95c4e32fc4661d73298fc0876a6 /gcc/tree.c
parent1382bac6e8cd0595741e2d69e38e585232b73eba (diff)
downloadgcc-bf1e5319c3c6a2e26470ca5e17340fff30b9510e.zip
gcc-bf1e5319c3c6a2e26470ca5e17340fff30b9510e.tar.gz
gcc-bf1e5319c3c6a2e26470ca5e17340fff30b9510e.tar.bz2
tree.def (EXPR_WITH_FILE_LOCATION): New tree node definition.
d Fri Apr 3 17:02:13 1998 Alexandre Petit-Bianco <apbianco@cygnus.com> * tree.def (EXPR_WITH_FILE_LOCATION): New tree node definition. * tree.h (EXPR_WFL_{NODE,FILENAME,FILENAME_NODE,LINENO, COLNO,LINECOL,SET_LINECOL,EMIT_LINE_NOTE}): New macros. (build_expr_wfl): New prototype declaration. * tree.c (build_expr_wfl): New function, to build EXPR_WITH_FILE_LOCATION nodes. (copy_node): Don't zero TREE_CHAIN if copying a EXPR_WITH_FILE_LOCATION node. * print-tree.c (print_node): Handle EXPR_WITH_FILE_LOCATION. * expr.c (expand_expr): Handle EXPR_WITH_FILE_LOCATION. From-SVN: r19049
Diffstat (limited to 'gcc/tree.c')
-rw-r--r--gcc/tree.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index b6db322..c0b1e34 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -1185,7 +1185,9 @@ copy_node (node)
for (i = length / sizeof (int) * sizeof (int); i < length; i++)
((char *) t)[i] = ((char *) node)[i];
- TREE_CHAIN (t) = 0;
+ /* EXPR_WITH_FILE_LOCATION must keep filename info stored in TREE_CHAIN */
+ if (TREE_CODE (node) != EXPR_WITH_FILE_LOCATION)
+ TREE_CHAIN (t) = 0;
TREE_ASM_WRITTEN (t) = 0;
if (TREE_CODE_CLASS (code) == 'd')
@@ -3218,6 +3220,26 @@ build_block (vars, tags, subblocks, supercontext, chain)
BLOCK_CHAIN (block) = chain;
return block;
}
+
+/* EXPR_WITH_FILE_LOCATION are used to keep track of the exact
+ location where an expression or an identifier were encountered. It
+ is necessary for languages where the frontend parser will handle
+ recursively more than one file (Java is one of them). */
+
+tree
+build_expr_wfl (node, file, line, col)
+ tree node;
+ char *file;
+ int line, col;
+{
+ register tree wfl = make_node (EXPR_WITH_FILE_LOCATION);
+ EXPR_WFL_NODE (wfl) = node;
+ EXPR_WFL_FILENAME_NODE (wfl) = get_identifier (file);
+ EXPR_WFL_SET_LINECOL (wfl, line, col);
+ TREE_SIDE_EFFECTS (wfl) = TREE_SIDE_EFFECTS (node);
+ TREE_TYPE (wfl) = TREE_TYPE (node);
+ return wfl;
+}
/* Return a declaration like DDECL except that its DECL_MACHINE_ATTRIBUTE
is ATTRIBUTE. */