summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2008-03-06 17:14:05 +0000
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2008-03-06 17:14:05 +0000
commit167057eb52b49248a9de065a5aee8650aed6e3e9 (patch)
treecdfa97fee8a49fae14f14af049306d86c88cd3b4 /gcc
parent1c4e2127649fc27d494d1e193ee7534e07bc495e (diff)
downloadgcc-167057eb52b49248a9de065a5aee8650aed6e3e9.tar.gz
.
* MAINTAINERS: Update for treelang deletion. gcc 2008-03-05 Tom Tromey <tromey@redhat.com> * treelang: Delete. * doc/standards.texi (Standards): Don't mention treelang. * doc/invoke.texi (Overall Options): Don't mention treelang. * doc/install.texi (Prerequisites): Don't mention bison or treelang. (Configuration): Don't mention treelang. (Building): Likewise. * doc/frontends.texi (G++ and GCC): Don't mention treelang. gcc/testsuite * lib/treelang-dg.exp, lib/treelang.exp: Delete. * treelang: Delete. gcc/testsuite/treelang Removed gcc/treelang Removed git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@132976 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/doc/frontends.texi3
-rw-r--r--gcc/doc/install.texi31
-rw-r--r--gcc/doc/invoke.texi1
-rw-r--r--gcc/doc/standards.texi10
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/lib/treelang-dg.exp36
-rw-r--r--gcc/testsuite/lib/treelang.exp269
-rw-r--r--gcc/testsuite/treelang/ChangeLog124
-rw-r--r--gcc/testsuite/treelang/Makefile.in28
-rw-r--r--gcc/testsuite/treelang/compile/autofunc.tree6
-rw-r--r--gcc/testsuite/treelang/compile/badchar.tree2
-rw-r--r--gcc/testsuite/treelang/compile/badreturn.tree14
-rw-r--r--gcc/testsuite/treelang/compile/compile.exp30
-rw-r--r--gcc/testsuite/treelang/compile/exit.tree12
-rw-r--r--gcc/testsuite/treelang/compile/externvar.tree4
-rw-r--r--gcc/testsuite/treelang/compile/extrafunc.tree25
-rw-r--r--gcc/testsuite/treelang/compile/extravar.tree14
-rw-r--r--gcc/testsuite/treelang/compile/extref.tree9
-rw-r--r--gcc/testsuite/treelang/compile/full_unit.tree16
-rw-r--r--gcc/testsuite/treelang/compile/function-1.tree14
-rw-r--r--gcc/testsuite/treelang/compile/memory.tree18
-rw-r--r--gcc/testsuite/treelang/compile/mismatch.tree8
-rw-r--r--gcc/testsuite/treelang/compile/noproto.tree5
-rw-r--r--gcc/testsuite/treelang/compile/novar.tree5
-rw-r--r--gcc/testsuite/treelang/compile/syntax-1.tree9
-rw-r--r--gcc/testsuite/treelang/compile/tabs.tree11
-rw-r--r--gcc/testsuite/treelang/compile/unsigned.tree20
-rw-r--r--gcc/testsuite/treelang/compile/var_defs-2.tree20
-rw-r--r--gcc/testsuite/treelang/compile/var_defs.tree24
-rw-r--r--gcc/testsuite/treelang/execute/execute.exp30
-rw-r--r--gcc/testsuite/treelang/execute/funccall-2.tree28
-rw-r--r--gcc/testsuite/treelang/execute/funccall.tree33
-rw-r--r--gcc/testsuite/treelang/execute/initial.tree20
-rw-r--r--gcc/testsuite/treelang/execute/main.tree14
-rw-r--r--gcc/testsuite/treelang/execute/static.tree32
-rw-r--r--gcc/testsuite/treelang/output/output-1.c43
-rw-r--r--gcc/testsuite/treelang/output/output-1.out8
-rw-r--r--gcc/testsuite/treelang/output/output-1.tree59
-rw-r--r--gcc/testsuite/treelang/output/output.exp58
-rw-r--r--gcc/treelang/ChangeLog1171
-rw-r--r--gcc/treelang/Make-lang.in324
-rw-r--r--gcc/treelang/README19
-rw-r--r--gcc/treelang/config-lang.in36
-rw-r--r--gcc/treelang/lang-specs.h38
-rw-r--r--gcc/treelang/lang.opt42
-rw-r--r--gcc/treelang/lex.l292
-rw-r--r--gcc/treelang/parse.y988
-rw-r--r--gcc/treelang/spec.c60
-rw-r--r--gcc/treelang/tree-convert.c107
-rw-r--r--gcc/treelang/tree1.c309
-rw-r--r--gcc/treelang/treelang.h152
-rw-r--r--gcc/treelang/treelang.texi1310
-rw-r--r--gcc/treelang/treetree.c1184
-rw-r--r--gcc/treelang/treetree.h66
55 files changed, 26 insertions, 7181 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f2d65ad415f..e39eae75b76 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2008-03-06 Tom Tromey <tromey@redhat.com>
+
+ * treelang: Delete.
+ * doc/standards.texi (Standards): Don't mention treelang.
+ * doc/invoke.texi (Overall Options): Don't mention treelang.
+ * doc/install.texi (Prerequisites): Don't mention bison or
+ treelang.
+ (Configuration): Don't mention treelang.
+ (Building): Likewise.
+ * doc/frontends.texi (G++ and GCC): Don't mention treelang.
+
2008-03-06 Paolo Bonzini <bonzini@gnu.org>
* simplify-rtx.c (simplify_subreg): Remove useless shifts from
diff --git a/gcc/doc/frontends.texi b/gcc/doc/frontends.texi
index 827f6a4bc24..9c2d70705e4 100644
--- a/gcc/doc/frontends.texi
+++ b/gcc/doc/frontends.texi
@@ -1,5 +1,5 @@
@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-@c 1999, 2000, 2001, 2002, 2004 Free Software Foundation, Inc.
+@c 1999, 2000, 2001, 2002, 2004, 2008 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.
@@ -14,7 +14,6 @@
@cindex Java
@cindex Objective-C
@cindex Objective-C++
-@cindex treelang
GCC stands for ``GNU Compiler Collection''. GCC is an integrated
distribution of compilers for several major programming languages. These
languages currently include C, C++, Objective-C, Objective-C++, Java,
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index 5735f054317..3bf2305c8d1 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -372,16 +372,6 @@ Necessary to run @samp{make check} for @file{fixinc}.
Necessary to regenerate the top level @file{Makefile.in} file from
@file{Makefile.tpl} and @file{Makefile.def}.
-@item GNU Bison version 1.28 (or later)
-
-Necessary when modifying @file{*.y} files. Necessary to build the
-@code{treelang} front end (which is not enabled by default) from a
-checkout of the SVN repository; the generated files are not in the
-repository. They are included in releases.
-
-Berkeley @command{yacc} (@command{byacc}) has been reported to work
-as well.
-
@item Flex version 2.5.4 (or later)
Necessary when modifying @file{*.l} files.
@@ -1161,11 +1151,11 @@ grep language= */config-lang.in
@end smallexample
Currently, you can use any of the following:
@code{all}, @code{ada}, @code{c}, @code{c++}, @code{fortran}, @code{java},
-@code{objc}, @code{obj-c++}, @code{treelang}.
+@code{objc}, @code{obj-c++}.
Building the Ada compiler has special requirements, see below.
If you do not pass this flag, or specify the option @code{all}, then all
default languages available in the @file{gcc} sub-tree will be configured.
-Ada, Objective-C++, and treelang are not default languages; the rest are.
+Ada and Objective-C++ are not default languages; the rest are.
Re-defining @code{LANGUAGES} when calling @samp{make} @strong{does not}
work anymore, as those language sub-directories might not have been
configured!
@@ -1707,18 +1697,13 @@ that type mismatches occur, this could be the cause.
The solution is not to use such a directory for building GCC@.
-When building from SVN or snapshots and enabling the @code{treelang}
-front end, or if you modify @file{*.y} files, you need the Bison parser
-generator installed. If you do not modify @file{*.y} files, releases
-contain the Bison-generated files and you do not need Bison installed
-to build them. Note that most front ends now use hand-written parsers,
-which can be modified with no need for Bison.
-
Similarly, when building from SVN or snapshots, or if you modify
-@file{*.l} files, you need the Flex lexical analyzer generator installed.
-There is still one Flex-based lexical analyzer (part of the build
-machinery, not of GCC itself) that is used even if you only build the
-C front end.
+@file{*.l} files, you need the Flex lexical analyzer generator
+installed. If you do not modify @file{*.l} files, releases contain
+the Flex-generated files and you do not need Flex installed to build
+them. There is still one Flex-based lexical analyzer (part of the
+build machinery, not of GCC itself) that is used even if you only
+build the C front end.
When building from SVN or snapshots, or if you modify Texinfo
documentation, you need version 4.4 or later of Texinfo installed if you
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 0b1e9c2edcb..411678c7afa 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -1001,7 +1001,6 @@ assembler assembler-with-cpp
ada
f95 f95-cpp-input
java
-treelang
@end smallexample
@item -x none
diff --git a/gcc/doc/standards.texi b/gcc/doc/standards.texi
index cd6e82f5fe9..c31849c239f 100644
--- a/gcc/doc/standards.texi
+++ b/gcc/doc/standards.texi
@@ -1,4 +1,4 @@
-@c Copyright (C) 2000, 2001, 2002, 2004, 2006, 2007 Free Software Foundation,
+@c Copyright (C) 2000, 2001, 2002, 2004, 2006, 2007, 2008 Free Software Foundation,
@c Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.
@@ -219,14 +219,6 @@ and
have additional useful information.
@end itemize
-@section Treelang language
-@cindex treelang
-There is no standard for treelang, which is a sample language front end
-for GCC@. Its only purpose is as a sample for people wishing to write a
-new language for GCC@. The language is documented in
-@file{gcc/treelang/treelang.texi} which can be turned into info or
-HTML format.
-
@xref{Top, GNAT Reference Manual, About This Guide, gnat_rm,
GNAT Reference Manual}, for information on standard
conformance and compatibility of the Ada compiler.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index cad174bba28..396fa3e7439 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-03-06 Tom Tromey <tromey@redhat.com>
+
+ * lib/treelang-dg.exp, lib/treelang.exp: Delete.
+ * treelang: Delete.
+
2008-03-05 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/specs/pack33.ads: New test.
diff --git a/gcc/testsuite/lib/treelang-dg.exp b/gcc/testsuite/lib/treelang-dg.exp
deleted file mode 100644
index 190eaad0a8c..00000000000
--- a/gcc/testsuite/lib/treelang-dg.exp
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2007
-# Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GCC; see the file COPYING3. If not see
-# <http://www.gnu.org/licenses/>.
-
-load_lib gcc-dg.exp
-
-# Define gcc callbacks for dg.exp.
-
-proc treelang-dg-test { prog do_what extra_tool_flags } {
- return [gcc-dg-test-1 treelang_target_compile $prog $do_what $extra_tool_flags]
-}
-
-proc treelang-dg-prune { system text } {
- return [gcc-dg-prune $system $text]
-}
-
-# Utility routines.
-
-# Modified dg-runtest that can cycle through a list of optimization options
-# as c-torture does.
-proc treelang-dg-runtest { testcases default-extra-flags } {
- return [gcc-dg-runtest $testcases ${default-extra-flags}]
-}
diff --git a/gcc/testsuite/lib/treelang.exp b/gcc/testsuite/lib/treelang.exp
deleted file mode 100644
index d97ce153862..00000000000
--- a/gcc/testsuite/lib/treelang.exp
+++ /dev/null
@@ -1,269 +0,0 @@
-# Copyright (C) 1992, 1993, 1994, 1996, 1997, 2000, 2001, 2002, 2004,
-# 2007 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GCC; see the file COPYING3. If not see
-# <http://www.gnu.org/licenses/>.
-
-# This file was written by Rob Savoye (rob@cygnus.com)
-# Currently maintained by James A. Morrison (ja2morri@uwaterloo.ca)
-
-# Having this file here magically tells dejagnu that the treelang
-# directory is worthy of testing
-
-# This file is basically gcc.exp with gcc replaced with treelang.
-
-# This file is loaded by the tool init file (eg: unix.exp). It provides
-# default definitions for treelang_start, etc. and other supporting cast
-# members.
-
-# These globals are used by treelang_start if no compiler arguments are
-# provided. They are also used by the various testsuites to define the
-# environment: where to find stdio.h, libc.a, etc.
-
-load_lib libgloss.exp
-load_lib prune.exp
-load_lib gcc-defs.exp
-load_lib target-libpath.exp
-
-#
-# TREELANG_UNDER_TEST is the compiler under test.
-#
-
-#
-# default_treelang_version -- extract and print the version number of the compiler
-#
-
-proc default_treelang_version { } {
- global TREELANG_UNDER_TEST
-
- treelang_init
-
- # ignore any arguments after the command
- set compiler [lindex $TREELANG_UNDER_TEST 0]
-
- if ![is_remote host] {
- set compiler_name [which $compiler]
- } else {
- set compiler_name $compiler
- }
-
- # verify that the compiler exists
- if { $compiler_name != 0 } then {
- set tmp [remote_exec host "$compiler -v"]
- set status [lindex $tmp 0]
- set output [lindex $tmp 1]
- regexp " version \[^\n\r\]*" $output version
- if { $status == 0 && [info exists version] } then {
- clone_output "$compiler_name $version\n"
- } else {
- clone_output "Couldn't determine version of $compiler_name: $output\n"
- }
- } else {
- # compiler does not exist (this should have already been detected)
- warning "$compiler does not exist"
- }
-}
-
-# treelang_init -- called at the start of each .exp script.
-#
-# There currently isn't much to do, but always using it allows us to
-# make some enhancements without having to go back and rewrite the scripts.
-#
-
-set treelang_initialized 0
-
-proc treelang_init { args } {
- global tmpdir
- global libdir
- global gluefile wrap_flags
- global treelang_initialized
- global TREELANG_UNDER_TEST
- global TOOL_EXECUTABLE
- global treelang_libgcc_s_path
-
-
- # We set LC_ALL and LANG to C so that we get the same error messages as expected.
- setenv LC_ALL C
- setenv LANG C
-
-
- if { $treelang_initialized == 1 } { return; }
-
- if ![info exists TREELANG_UNDER_TEST] then {
- if [info exists TOOL_EXECUTABLE] {
- set TREELANG_UNDER_TEST $TOOL_EXECUTABLE
- } else {
- set TREELANG_UNDER_TEST [find_gcc]
- }
- }
-
- if ![info exists tmpdir] then {
- set tmpdir /tmp
- }
-
- treelang_maybe_build_wrapper "${tmpdir}/treelang-testglue.o"
-
- set treelang_libgcc_s_path \
- [gcc-set-multilib-library-path $TREELANG_UNDER_TEST]
-}
-
-proc treelang_target_compile { source dest type options } {
- global rootme
- global tmpdir
- global gluefile wrap_flags
- global srcdir
- global TREELANG_UNDER_TEST
- global TOOL_OPTIONS
- global ld_library_path
- global treelang_libgcc_s_path
-
- set ld_library_path ".:${treelang_libgcc_s_path}"
- set_ld_library_path_env_vars
-
- if { [target_info needs_status_wrapper]!="" && [info exists gluefile] } {
- lappend options "libs=${gluefile}"
- lappend options "ldflags=$wrap_flags"
- }
-
- # TOOL_OPTIONS must come first, so that it doesn't override testcase
- # specific options.
- if [info exists TOOL_OPTIONS] {
- set options [concat "{additional_flags=$TOOL_OPTIONS}" $options]
- }
-
- # If we have built libtreelang along with the compiler (which usually
- # _is not_ the case on Mac OS X systems), point the test harness
- # at it (and associated headers).
-
- return [target_compile $source $dest $type $options]
-}
-
-#
-# treelang_pass -- utility to record a testcase passed
-#
-
-proc treelang_pass { testcase cflags } {
- if { "$cflags" == "" } {
- pass "$testcase"
- } else {
- pass "$testcase, $cflags"
- }
-}
-
-#
-# treelang_fail -- utility to record a testcase failed
-#
-
-proc treelang_fail { testcase cflags } {
- if { "$cflags" == "" } {
- fail "$testcase"
- } else {
- fail "$testcase, $cflags"
- }
-}
-
-#
-# treelang_finish -- called at the end of every .exp script that calls treelang_init
-#
-# The purpose of this proc is to hide all quirks of the testing environment
-# from the testsuites. It also exists to undo anything that treelang_init did
-# (that needs undoing).
-#
-
-proc treelang_finish { } {
- # The testing harness apparently requires this.
- global errorInfo
-
- if [info exists errorInfo] then {
- unset errorInfo
- }
-
- # Might as well reset these (keeps our caller from wondering whether
- # s/he has to or not).
- global prms_id bug_id
- set prms_id 0
- set bug_id 0
-}
-
-proc treelang_exit { } {
- global gluefile
-
- if [info exists gluefile] {
- file_on_build delete $gluefile
- unset gluefile
- }
-}
-
-# If this is an older version of dejagnu (without runtest_file_p),
-# provide one and assume the old syntax: foo1.exp bar1.c foo2.exp bar2.c.
-# This can be deleted after next dejagnu release.
-
-if { [info procs runtest_file_p] == "" } then {
- proc runtest_file_p { runtests testcase } {
- if { $runtests != "" && [regexp "\[.\]\[cC\]" $runtests] } then {
- if { [lsearch $runtests [file tail $testcase]] >= 0 } then {
- return 1
- } else {
- return 0
- }
- }
- return 1
- }
-}
-
-# Provide a definition of this if missing (delete after next dejagnu release).
-
-if { [info procs prune_warnings] == "" } then {
- proc prune_warnings { text } {
- return $text
- }
-}
-
-# Utility used by mike-gcc.exp and c-torture.exp.
-# Check the compiler(/assembler/linker) output for text indicating that
-# the testcase should be marked as "unsupported".
-#
-# When dealing with a large number of tests, it's difficult to weed out the
-# ones that are too big for a particular cpu (eg: 16 bit with a small amount
-# of memory). There are various ways to deal with this. Here's one.
-# Fortunately, all of the cases where this is likely to happen will be using
-# gld so we can tell what the error text will look like.
-
-proc ${tool}_check_unsupported_p { output } {
- if [regexp "(^|\n)\[^\n\]*: region \[^\n\]* is full" $output] {
- return "memory full"
- }
- return ""
-}
-
-# Prune messages from treelang that aren't useful.
-
-proc prune_treelang_output { text } {
- #send_user "Before:$text\n"
- regsub -all "(^|\n)\[^\n\]*: In (function|method) \[^\n\]*" $text "" text
- regsub -all "(^|\n)\[^\n\]*: At top level:\[^\n\]*" $text "" text
-
- # It would be nice to avoid passing anything to treelang that would cause it to
- # issue these messages (since ignoring them seems like a hack on our part),
- # but that's too difficult in the general case. For example, sometimes
- # you need to use -B to point treelang at crt0.o, but there are some targets
- # that don't have crt0.o.
- regsub -all "(^|\n)\[^\n\]*file path prefix \[^\n\]* never used" $text "" text
- regsub -all "(^|\n)\[^\n\]*linker input file unused since linking not done" $text "" text
-
- #send_user "After:$text\n"
-
- return $text
-}
-
diff --git a/gcc/testsuite/treelang/ChangeLog b/gcc/testsuite/treelang/ChangeLog
deleted file mode 100644
index e4ff2c66ffe..00000000000
--- a/gcc/testsuite/treelang/ChangeLog
+++ /dev/null
@@ -1,124 +0,0 @@
-2005-08-06 James A. Morrison <phython@gcc.gnu.org>
-
- * treetests.exp: Remove.
- * a01gcco01runpgm: Move to...
- * output/output-1.out: here.
- * a01gcci01.c: Move to...
- * output/output-1.c: here.
- * a01gcci01.tree: Move to...
- * output/output-1.tree: here.
- * output/output.exp: New.
-
-2005-07-23 James A. Morrison <phython@gcc.gnu.org>
-
- * compile/var_defs.tree: Remove extra lines.
-
-2005-07-19 James A. Morrison <phython@gcc.gnu.org>
-
- * compile/var_defs.tree: Remove duplicate variable.
- * compile/var_defs-2.tree: Add duplicate variable test.
-
-2005-03-22 James A. Morrison <phython@gcc.gnu.org>
-
- * compile/memory.tree: New test.
-
-2005-02-26 James A. Morrison <phython@gcc.gnu.org>
-
- * compile/var_defs: Add uninitialized variables.
-
-2005-02-26 James A. Morrison <phython@gcc.gnu.org>
-
- * compile/extrafunc.tree, compile/extravar.tree: New tests.
-
-2005-02-26 James A. Morrison <phython@gcc.gnu.org>
-
- * compile/unsigned.tree: New test.
-
-2005-02-24 James A. Morrison <phython@gcc.gnu.org>
-
- PR other/19896
- * execute/execute.exp: New file.
- * execute/funccall.tree, execute/funccall-2.tree, execute/initial.tree,
- execute/main.tree, execute/static.tree: New tests.
-
-2005-02-24 James A. Morrison <phython@gcc.gnu.org>
-
- PR other/19897
- * compile/exit.tree, compile/extref.tree, compile/function-1.tree,
- compile/syntax-1.tree: New tests.
-
-2004-10-02 James A. Morrison <phython@gcc.gnu.org>
-
- * compile/autofunc.tree: New File.
- * compile/badchar.tree: New File.
- * compile/externvar.tree: New File.
- * compile/mismatch.tree: New File.
- * compile/noproto.tree: New File.
- * compile/novar.tree: New File.
- * compile/var_defs.tree: Add duplicate variable.
-
-2004-07-31 James A. Morrison <phython@gcc.gnu.org>
-
- * compile/vars_def.tree: New File.
- * compile/badreturn.tree: New File.
-
-2004-01-18 James A. Morrison <ja2morri@uwaterloo.ca>
-
- * compile/compile.exp: New File.
- * compile/tabs.tree: Test whether the front end
- compiles code with tabs in it.
-
-2003-02-25 Tim Josling <tej@melbpc.org.au>
-
- * treetests.exp (run3): set options to force aggressive GC, to
- ensure GC is all set up correct,
-
-2002-05-07 Tim Josling <tej@melbpc.org.au>
-
- * Makefile.in: Fix copyright
- * a01gcci01.c: Ditto
- * a01gcci01.tree: Ditto
- * treetests.exp: Ditto
-
-2002-04-13 Tim Josling <tej@melbpc.org.au>
-
- * treetree.c (tree_code_create_function_initial)
- Remove duplicate call to layout_decl
-
-2001-12-02 Tim Josling <tej@melbpc.org.au>
-
- * Make-lang.in
- Ensure directory is built during install (installdirs dependency)
-
- * lex.l
- Work around poisoned malloc (undef IN_GCC)
- Remove fake definition of tree.
-
- * parse.y
- Work around poisoned malloc (undef IN_GCC)
-
- * tree1.c
- New front end interface.
- (top level) New structure lang_hooks.
- (tree_post_options) Remove.
- errorcount now a macro so do not define it.
- current_nesting_level => work_nesting_level due to clash.
-
- * treelang.h
- errorcount now a macro so do not reference it.
-
- * treetree.c
- Replace NULL_PTR by NULL.
- (tree_code_get_expression) Mark op3 unused.
- Do not init builtins.
-
-2001-06-11 Tim Josling <tej@melbpc.org.au>
-
- * treelang.exp (global) remove COBOL specific code.
-
-2001-05-24 Tim Josling <tej@melbpc.org.au>
-
- Created this directory and its tests. All derived from the cobol
- test swamp which was also all written by me.
-
-
diff --git a/gcc/testsuite/treelang/Makefile.in b/gcc/testsuite/treelang/Makefile.in
deleted file mode 100644
index 5230e378f4b..00000000000
--- a/gcc/testsuite/treelang/Makefile.in
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright (C) 2001, 2002, 2007 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 3, or (at your option) any
-# later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GCC; see the file COPYING3. If not see
-# <http://www.gnu.org/licenses/>.
-#
-# In other words, you are welcome to use, share and improve this program.
-# You are forbidden to forbid anyone else to use, share and improve
-# what you give them. Help stamp out software-hoarding!
-#
-#
-all:
-
-clean:
- -rm -f *.o *.diff *~ *.bad core *.x
-
-distclean: clean
- -rm -f Makefile config.status
diff --git a/gcc/testsuite/treelang/compile/autofunc.tree b/gcc/testsuite/treelang/compile/autofunc.tree
deleted file mode 100644
index 97da41e4120..00000000000
--- a/gcc/testsuite/treelang/compile/autofunc.tree
+++ /dev/null
@@ -1,6 +0,0 @@
-// { dg-do compile }
-automatic int bar (); // { dg-error "automatic" }
-
-bar () {
- return -12;
-}
diff --git a/gcc/testsuite/treelang/compile/badchar.tree b/gcc/testsuite/treelang/compile/badchar.tree
deleted file mode 100644
index 0121cc88ed0..00000000000
--- a/gcc/testsuite/treelang/compile/badchar.tree
+++ /dev/null
@@ -1,2 +0,0 @@
-// { dg-do compile }
-static int bar = 1*; // { dg-error "Unrecognized" }
diff --git a/gcc/testsuite/treelang/compile/badreturn.tree b/gcc/testsuite/treelang/compile/badreturn.tree
deleted file mode 100644
index 60d3b120c5d..00000000000
--- a/gcc/testsuite/treelang/compile/badreturn.tree
+++ /dev/null
@@ -1,14 +0,0 @@
-// { dg-do compile }
-
-external_definition void bar ();
-external_definition int gar (int arg0);
-
-bar
-{
- return 0; // { dg-warning "return" }
-}
-
-gar
-{
- return; // { dg-error "return" }
-}
diff --git a/gcc/testsuite/treelang/compile/compile.exp b/gcc/testsuite/treelang/compile/compile.exp
deleted file mode 100644
index 4a6c4279f5c..00000000000
--- a/gcc/testsuite/treelang/compile/compile.exp
+++ /dev/null
@@ -1,30 +0,0 @@
-# Tests for treelang; run from gcc/treelang/Make-lang.in => gcc/Makefile
-
-# Copyright (C) 2004, 2007 by The Free Software Foundation
-
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 3, or (at your option) any
-# later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GCC; see the file COPYING3. If not see
-# <http://www.gnu.org/licenses/>.
-#
-# In other words, you are welcome to use, share and improve this program.
-# You are forbidden to forbid anyone else to use, share and improve
-# what you give them. Help stamp out software-hoarding!
-
-# Treelang tests that only need to compile.
-
-# Load support procs.
-load_lib treelang-dg.exp
-
-dg-init
-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.tree]] "" ""
-dg-finish
diff --git a/gcc/testsuite/treelang/compile/exit.tree b/gcc/testsuite/treelang/compile/exit.tree
deleted file mode 100644
index 355e772f5da..00000000000
--- a/gcc/testsuite/treelang/compile/exit.tree
+++ /dev/null
@@ -1,12 +0,0 @@
-// { dg-do compile }
-external_reference void exit (int code);
-
-static int foo ();
-
-foo
-{
- automatic int bar = +1;
- bar = bar + +1;
- exit (0); // Calling external references is currently broken.
- return bar;
-}
diff --git a/gcc/testsuite/treelang/compile/externvar.tree b/gcc/testsuite/treelang/compile/externvar.tree
deleted file mode 100644
index 1fa3d6e89fc..00000000000
--- a/gcc/testsuite/treelang/compile/externvar.tree
+++ /dev/null
@@ -1,4 +0,0 @@
-// { dg-do compile }
-external_reference int bar = 0; // { dg-error "initial" }
-
-static char barf = 1;
diff --git a/gcc/testsuite/treelang/compile/extrafunc.tree b/gcc/testsuite/treelang/compile/extrafunc.tree
deleted file mode 100644
index 30827a79dac..00000000000
--- a/gcc/testsuite/treelang/compile/extrafunc.tree
+++ /dev/null
@@ -1,25 +0,0 @@
-// { dg-do compile }
-// { dg-options "-O2 -fdump-tree-optimized -Wunused-function" }
-// Check to see that unused functions get removed at -O2 and
-// above.
-static int foo (int bar);
-static int baz (int aaa);
-external_definition int ext (int bbb);
-
-foo
-{
- return bar;
-}
-
-baz // { dg-warning "defined but not used" }
-{
- return foo (aaa);
-}
-
-ext
-{
- return foo (bbb);
-}
-
-// { dg-final { scan-tree-dump-not "baz" "optimized" } }
-// { dg-final { cleanup-tree-dump "optimized" } }
diff --git a/gcc/testsuite/treelang/compile/extravar.tree b/gcc/testsuite/treelang/compile/extravar.tree
deleted file mode 100644
index 2154de6b205..00000000000
--- a/gcc/testsuite/treelang/compile/extravar.tree
+++ /dev/null
@@ -1,14 +0,0 @@
-// { dg-do compile }
-// { dg-options "-fdump-tree-optimized -O1 -Wunused-variable" }
-external_definition int bar (int aaa, int ddd);
-
-static int foo = -3; // { dg-warning "defined but not used" }
-
-bar
-{
- automatic int ccc;
-
- return aaa + ddd + +3;
-}
-// { dg-final { scan-tree-dump-not "ccc" "optimized" } }
-// { dg-final { cleanup-tree-dump "optimized" } }
diff --git a/gcc/testsuite/treelang/compile/extref.tree b/gcc/testsuite/treelang/compile/extref.tree
deleted file mode 100644
index 085ab8f88fd..00000000000
--- a/gcc/testsuite/treelang/compile/extref.tree
+++ /dev/null
@@ -1,9 +0,0 @@
-// { dg-do compile }
-external_reference void abort ();
-
-static int foo (int a);
-
-foo
-{
- return a;
-}
diff --git a/gcc/testsuite/treelang/compile/full_unit.tree b/gcc/testsuite/treelang/compile/full_unit.tree
deleted file mode 100644
index 2d50323303f..00000000000
--- a/gcc/testsuite/treelang/compile/full_unit.tree
+++ /dev/null
@@ -1,16 +0,0 @@
-// { dg-do compile }
-// { dg-options "-funit-at-a-time" }
-external_definition int add (int arga, int argb);
-external_definition char sub (char argc, char argd);
-
-add
-{
- return arga + argb + +3;
-}
-
-sub
-{
- return argd - argc + +2;
-}
-// { dg-final { scan-assembler "add" } }
-// { dg-final { scan-assembler "sub" } }
diff --git a/gcc/testsuite/treelang/compile/function-1.tree b/gcc/testsuite/treelang/compile/function-1.tree
deleted file mode 100644
index 6bb4e370a48..00000000000
--- a/gcc/testsuite/treelang/compile/function-1.tree
+++ /dev/null
@@ -1,14 +0,0 @@
-// { dg-do compile }
-static int foo ();
-static int bar (int a);
-
-foo
-{
- return 1;
-}
-
-bar
-{
- a = a + foo ();
- return a;
-}
diff --git a/gcc/testsuite/treelang/compile/memory.tree b/gcc/testsuite/treelang/compile/memory.tree
deleted file mode 100644
index a18475be5b8..00000000000
--- a/gcc/testsuite/treelang/compile/memory.tree
+++ /dev/null
@@ -1,18 +0,0 @@
-external_definition int foo (int a, int b);
-external_definition int bar (int c, int d);
-external_definition int bart (int e);
-
-bar
-{
- return c + d;
-}
-
-foo
-{
- return a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b;
-}
-
-bart
-{
- return e;
-}
diff --git a/gcc/testsuite/treelang/compile/mismatch.tree b/gcc/testsuite/treelang/compile/mismatch.tree
deleted file mode 100644
index 7c62cd35b0d..00000000000
--- a/gcc/testsuite/treelang/compile/mismatch.tree
+++ /dev/null
@@ -1,8 +0,0 @@
-// { dg-do compile }
-static int bar ();
-static void barf ();
-
-bar {
- barf (1); // { dg-error "mismatch" "barf" }
- return -12;
-}
diff --git a/gcc/testsuite/treelang/compile/noproto.tree b/gcc/testsuite/treelang/compile/noproto.tree
deleted file mode 100644
index a704765a791..00000000000
--- a/gcc/testsuite/treelang/compile/noproto.tree
+++ /dev/null
@@ -1,5 +0,0 @@
-// { dg-do compile }
-foo // { dg-error "foo" "prototype" }
-{
- x = 3;
-}
diff --git a/gcc/testsuite/treelang/compile/novar.tree b/gcc/testsuite/treelang/compile/novar.tree
deleted file mode 100644
index 97ef611f8d3..00000000000
--- a/gcc/testsuite/treelang/compile/novar.tree
+++ /dev/null
@@ -1,5 +0,0 @@
-static void bar ();
-
-bar {
- x = 3; // { dg-error "x" "not defined" }
-}
diff --git a/gcc/testsuite/treelang/compile/syntax-1.tree b/gcc/testsuite/treelang/compile/syntax-1.tree
deleted file mode 100644
index 32efe744ca2..00000000000
--- a/gcc/testsuite/treelang/compile/syntax-1.tree
+++ /dev/null
@@ -1,9 +0,0 @@
-// { dg-do compile }
-external_reference void exit(int); // { dg-error "(parse|syntax) error" }
-
-static int foo (int a);
-
-foo
-{
- return a;
-}
diff --git a/gcc/testsuite/treelang/compile/tabs.tree b/gcc/testsuite/treelang/compile/tabs.tree
deleted file mode 100644
index 6294c15c49a..00000000000
--- a/gcc/testsuite/treelang/compile/tabs.tree
+++ /dev/null
@@ -1,11 +0,0 @@
-// { dg-do compile }
-external_definition int main(int argc);
-
-main {
- automatic int v1;
- automatic int v2;
- v1 = argc;
- v2 = 3;
-
- return v2;
-}
diff --git a/gcc/testsuite/treelang/compile/unsigned.tree b/gcc/testsuite/treelang/compile/unsigned.tree
deleted file mode 100644
index 67f3404df90..00000000000
--- a/gcc/testsuite/treelang/compile/unsigned.tree
+++ /dev/null
@@ -1,20 +0,0 @@
-// { dg-do compile }
-// { dg-options "-fdump-tree-gimple" }
-external_reference void abort ();
-external_reference void exit (int status);
-external_definition int main (int argc, int argv);
-
-main
-{
- automatic unsigned int bar = 2147483649;
- automatic unsigned int baz = 2147483649;
-
- if (bar == baz) {
- abort ();
- } else {
- exit (0);
- }
- return +1;
-}
-// { dg-final { scan-tree-dump-not "\\\(int\\\)" "gimple" } }
-// { dg-final { cleanup-tree-dump "gimple" } }
diff --git a/gcc/testsuite/treelang/compile/var_defs-2.tree b/gcc/testsuite/treelang/compile/var_defs-2.tree
deleted file mode 100644
index cfcd3124d8f..00000000000
--- a/gcc/testsuite/treelang/compile/var_defs-2.tree
+++ /dev/null
@@ -1,20 +0,0 @@
-// { dg-do compile }
-external_definition int first_nonzero (int arg5, int arg6);
-
-first_nonzero
-{
- automatic int y;
- automatic int y; // { dg-error "Duplicate" }
- if (arg5)
- {
- return arg5;
- }
- else
- {
- automatic int j;
- j = arg6;
- return j;
- }
- return arg6;
-}
-
diff --git a/gcc/testsuite/treelang/compile/var_defs.tree b/gcc/testsuite/treelang/compile/var_defs.tree
deleted file mode 100644
index 9c4e4e11dfc..00000000000
--- a/gcc/testsuite/treelang/compile/var_defs.tree
+++ /dev/null
@@ -1,24 +0,0 @@
-// { dg-do compile }
-// { dg-options "-Wuninitialized -O" }
-external_definition void boring (int arg0);
-external_definition char condition (char arg1, char arg2);
-
-boring
-{
- arg0 = +5 + +3; // Force 3 and 5 to be signed numbers.
- arg0 = arg0 + +3;
-}
-
-condition
-{
- if (arg1)
- {
- automatic int i; // { dg-warning "was declared here" }
- return i + 1; // { dg-warning "uninitialized" }
- }
- else
- {
- automatic int j; // { dg-warning "was declared here" }
- return j; // { dg-warning "uninitialized" }
- }
-}
diff --git a/gcc/testsuite/treelang/execute/execute.exp b/gcc/testsuite/treelang/execute/execute.exp
deleted file mode 100644
index 4a6c4279f5c..00000000000
--- a/gcc/testsuite/treelang/execute/execute.exp
+++ /dev/null
@@ -1,30 +0,0 @@
-# Tests for treelang; run from gcc/treelang/Make-lang.in => gcc/Makefile
-
-# Copyright (C) 2004, 2007 by The Free Software Foundation
-
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 3, or (at your option) any
-# later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GCC; see the file COPYING3. If not see
-# <http://www.gnu.org/licenses/>.
-#
-# In other words, you are welcome to use, share and improve this program.
-# You are forbidden to forbid anyone else to use, share and improve
-# what you give them. Help stamp out software-hoarding!
-
-# Treelang tests that only need to compile.
-
-# Load support procs.
-load_lib treelang-dg.exp
-
-dg-init
-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.tree]] "" ""
-dg-finish
diff --git a/gcc/testsuite/treelang/execute/funccall-2.tree b/gcc/testsuite/treelang/execute/funccall-2.tree
deleted file mode 100644
index 43911c9f4f8..00000000000
--- a/gcc/testsuite/treelang/execute/funccall-2.tree
+++ /dev/null
@@ -1,28 +0,0 @@
-// { dg-do run }
-external_definition int main (int argc);
-
-static int foo (int bba);
-
-foo
-{
- automatic int bar;
-
- bar = bba + +1;
- return bar;
-}
-
-main
-{
- automatic int aaa = +3;
-
- aaa = foo (argc);
-
- if (aaa == +2)
- {
- return +0;
- }
- else
- {
- return +1;
- }
-}
diff --git a/gcc/testsuite/treelang/execute/funccall.tree b/gcc/testsuite/treelang/execute/funccall.tree
deleted file mode 100644
index e806d3b583d..00000000000
--- a/gcc/testsuite/treelang/execute/funccall.tree
+++ /dev/null
@@ -1,33 +0,0 @@
-// { dg-do run }
-// Tests whether initializtion works properly.
-external_reference void abort ();
-external_reference void exit (int code);
-external_definition int main ();
-
-static int foo ();
-
-foo
-{
- automatic int bar;
-
- bar = +1;
- bar = bar + +1;
- return bar;
-}
-
-main
-{
- automatic int aaa;
-
- aaa = foo ();
-
- if (aaa == +2)
- {
- exit (0);
- }
- else
- {
- abort ();
- }
- return 0;
-}
diff --git a/gcc/testsuite/treelang/execute/initial.tree b/gcc/testsuite/treelang/execute/initial.tree
deleted file mode 100644
index 0daa9970019..00000000000
--- a/gcc/testsuite/treelang/execute/initial.tree
+++ /dev/null
@@ -1,20 +0,0 @@
-// { dg-do run }
-// Tests whether initializtion works properly.
-external_reference void abort ();
-external_reference void exit (int code);
-external_definition int main ();
-
-main
-{
- automatic int aaa = +3;
-
- if (aaa == +3)
- {
- exit (0);
- }
- else
- {
- abort ();
- }
- return 0;
-}
diff --git a/gcc/testsuite/treelang/execute/main.tree b/gcc/testsuite/treelang/execute/main.tree
deleted file mode 100644
index 549f9917895..00000000000
--- a/gcc/testsuite/treelang/execute/main.tree
+++ /dev/null
@@ -1,14 +0,0 @@
-// { dg-do run }
-external_definition int main (int argc);
-
-main
-{
- if (argc == 1)
- {
- return 0;
- }
- else
- {
- return argc;
- }
-}
diff --git a/gcc/testsuite/treelang/execute/static.tree b/gcc/testsuite/treelang/execute/static.tree
deleted file mode 100644
index 370f244604f..00000000000
--- a/gcc/testsuite/treelang/execute/static.tree
+++ /dev/null
@@ -1,32 +0,0 @@
-// { dg-do run }
-external_reference void abort ();
-external_reference void exit (int code);
-external_definition int main (int argc, int argv);
-
-static int foo ();
-
-foo
-{
- static int bar = +1;
-
- bar = bar + +1;
- return bar;
-}
-
-main
-{
- automatic int aaa = +3;
-
- aaa = foo ();
- aaa = foo ();
-
- if (aaa == 3)
- {
- exit (0);
- }
- else
- {
- abort ();
- }
- return 0;
-}
diff --git a/gcc/testsuite/treelang/output/output-1.c b/gcc/testsuite/treelang/output/output-1.c
deleted file mode 100644
index 7f12e87852f..00000000000
--- a/gcc/testsuite/treelang/output/output-1.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Driver for treelang test pgm */
-
-/*
-
- Copyright (C) 2001, 2002, 2007 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 3, or (at your option) any
- later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3. If not see
- <http://www.gnu.org/licenses/>.
-
- In other words, you are welcome to use, share and improve this program.
- You are forbidden to forbid anyone else to use, share and improve
- what you give them. Help stamp out software-hoarding!
-*/
-
-int add(int, int);
-int subtract(int, int);
-int first_nonzero(int, int);
-extern int printf(char *template, ...);
-
-int
-main (int argc, char *argv[])
-{
- printf("2:%d\n", add(1,1));
- printf("7:%d\n", add(3,4));
- printf("-1:%d\n", subtract(3,4));
- printf("1:%d\n", subtract(2,1));
- printf("3:%d\n", first_nonzero(0,3));
- printf("0:%d\n", first_nonzero(0,0));
- printf("1:%d\n", first_nonzero(1,0));
- printf("15:%d\n", double_plus_one(7));
- return 0;
-}
diff --git a/gcc/testsuite/treelang/output/output-1.out b/gcc/testsuite/treelang/output/output-1.out
deleted file mode 100644
index 3c2c743c77d..00000000000
--- a/gcc/testsuite/treelang/output/output-1.out
+++ /dev/null
@@ -1,8 +0,0 @@
-2:2
-7:7
--1:-1
-1:1
-3:3
-0:0
-1:1
-15:15
diff --git a/gcc/testsuite/treelang/output/output-1.tree b/gcc/testsuite/treelang/output/output-1.tree
deleted file mode 100644
index 9fef122e6ef..00000000000
--- a/gcc/testsuite/treelang/output/output-1.tree
+++ /dev/null
@@ -1,59 +0,0 @@
-// -*- c -*- c mode in emacs
-
-// Copyright (C) 2001, 2002, 2007 Free Software Foundation, Inc.
-// This program is free software; you can redistribute it and/or modify it
-// under the terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option) any
-// later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with GCC; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-//
-// In other words, you are welcome to use, share and improve this program.
-// You are forbidden to forbid anyone else to use, share and improve
-// what you give them. Help stamp out software-hoarding!
-
-
-external_definition int add(int arg1, int arg2);
-external_definition int subtract(int arg3, int arg4);
-external_definition int first_nonzero(int arg5, int arg6);
-external_definition int double_plus_one(int arg7);
-
-add
-{
- return arg1 + arg2;
-}
-
-
-subtract
-{
- return arg3 - arg4;
-}
-
-double_plus_one
-{
- automatic int aaa;
- aaa=add(arg7, arg7);
- aaa=add(aaa, aaa);
- aaa=subtract(subtract(aaa, arg7), arg7) + 1;
- return aaa;
-}
-
-first_nonzero
-{
- if (arg5)
- {
- return arg5;
- }
- else
- {
- }
- return arg6;
-}
-
diff --git a/gcc/testsuite/treelang/output/output.exp b/gcc/testsuite/treelang/output/output.exp
deleted file mode 100644
index 8284a8f9cbb..00000000000
--- a/gcc/testsuite/treelang/output/output.exp
+++ /dev/null
@@ -1,58 +0,0 @@
-proc test_treelang_output { testname srcfiles infile resfile args } {
- set comp_output [treelang_target_compile $srcfiles $testname executable $args]
- if { [treelang_check_compile $testname $args $testname $comp_output] == 0 } {
- return 0;
- }
-
- verbose "Expected output is in $resfile"
- set id [open $resfile r]
- set expected ""
- append expected [read $id]
- close $id
- set output ""
- set output [exec $testname $infile]
- regsub -all "\r" "$output" "" output
- regsub "\n*$" $expected "" expected
- regsub "\n*$" $output "" output
- regsub "^\n*" $expected "" expected
- regsub "^\n*" $output "" output
- regsub -all "\[ \t\]\[ \t\]*" $expected " " expected
- regsub -all "\[ \t\]*\n\n*" $expected "\n" expected
- regsub -all "\[ \t\]\[ \t\]*" $output " " output
- regsub -all "\[ \t\]*\n\n*" $output "\n" output
- verbose "expected is $expected"
- verbose "actual is $output"
-
- if { $expected == $output } {
- pass $testname
- } else {
- fail $testname
- }
- exec rm $testname
-}
-global srcdir subdir
-
-catch { lsort [glob -nocomplain ${srcdir}/${subdir}/*.out] } outfiles
-verbose "Output files are $outfiles"
-
-set prefix ""
-foreach x $outfiles {
- regsub "\\.out$" $x "" prefix
- set bname [file tail $prefix]
-
- if [file exists ${prefix}.inp] {
- set inpfile ${prefix}.inp
- } else {
- set inpfile ""
- }
-
- verbose "inpfile is $inpfile"
-
- set srcfiles [lsort [glob -nocomplain ${prefix}.{c,tree}]]
- verbose "source files are $srcfiles"
- test_treelang_output "treelang/$bname" $srcfiles $inpfile $x ""
-}
-
-# Local Variables:
-# tcl-indent-level:4
-# End:
diff --git a/gcc/treelang/ChangeLog b/gcc/treelang/ChangeLog
deleted file mode 100644
index 5aef0c14a3f..00000000000
--- a/gcc/treelang/ChangeLog
+++ /dev/null
@@ -1,1171 +0,0 @@
-2008-02-26 Tom Tromey <tromey@redhat.com>
-
- * tree1.c (treelang_init): Remove old location code.
- (treelang_parse_file): Likewise.
- * lex.l (LINEMAP_POSITION_FOR_COLUMN): Remove.
- (update_lineno_charno): Remove old location code.
-
-2008-02-06 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- PR other/35107
- * Make-lang.in (tree1): Add $(GMPLIBS).
-
-2007-11-26 Andreas Krebbel <krebbel1@de.ibm.com>
-
- PR 34081/C++
- * treetree.c (tree_code_create_function_wrapup): Pass 'false'
- for the new allocate_struct_function parameter.
-
-2007-09-12 Jan Hubicka <jh@suse.cz>
-
- * treetree.c (LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION): Kill.
- (treelang_expand_function): Kill.
-
-2007-09-06 Tom Tromey <tromey@redhat.com>
-
- * tree1.c (treelang_init): Update.
- (treelang_parse_file): Update.
- (treelang_parse_file): Update.
- (treelang_parse_file): Update.
- * lex.l: Update.
- (update_lineno_charno): Likewise.
-
-2007-09-05 Sandra Loosemore <sandra@codesourcery.com>
-
- * treetree.c (tree_code_create_function_wrapup): Use set_cfun.
-
-2007-08-21 Paul Brook <paul@codesourcery.com>
- Nathan Sidwell <nathan@codesourcery.com>
- Mark Mitchell <mark@codesourcery.com>
- Joseph Myers <joseph@codesourcery.com>
-
- * tree1.c (treelang_handle_option): Use pkgversion_string.
- * treelang.texi (which-treelang): Define to use VERSION_PACKAGE.
-
-2007-07-27 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * lex.l (update_yylval): Constify.
- * treelang.h (struct token_part, struct parameter_part):
- Likewise.
- * treetree.c (tree_code_create_function_prototype,
- tree_code_create_variable, tree_code_get_integer_value):
- Likewise.
- * treetree.h (tree_code_get_integer_value,
- tree_code_create_function_prototype, tree_code_create_variable):
- Likewise.
-
-2007-07-25 Richard Guenther <rguenther@suse.de>
-
- * treetree.c (tree_code_generate_return): RETURN_EXPRs
- have volatile type.
-
-2007-07-17 Nick Clifton <nickc@redhat.com>
-
- * parse.y: Change copyright header to refer to version 3 of the
- GNU General Public License and to point readers at the COPYING3
- file.
- * lex.l: Likewise.
- * lang.opt: Likewise.
- * lang-specs.h: Likewise.
- * treelang.h: Likewise.
- * config-lang.in: Likewise.
- * tree-convert.c: Likewise.
- * treetree.c: Likewise.
- * tree1.c: Likewise.
- * Make-lang.in: Likewise.
- * treetree.h: Likewise.
- * spec.c: Likewise.
-
-2007-06-11 Rafael Avila de Espindola <espindola@google.com>
-
- * treetree.c (tree_lang_signed_type): Remove.
- (LANG_HOOKS_SIGNED_TYPE): Remove.
-
-2007-05-14 Rafael Avila de Espindola <espindola@google.com>
-
- * treetree.c (tree_lang_unsigned_type): Remove.
- (LANG_HOOKS_UNSIGNED_TYPE): Remove.
-
-2007-03-30 Rafael Avila de Espindola <espindola@google.com>
-
- * treetree.c (tree_lang_signed_or_unsigned_type): Remove.
- (LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE) Remove.
-
-2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
-
- * Make-lang.in: Add install-pdf target as copied from
- automake v1.10 rules.
-
-2007-02-26 Brooks Moses <brooks.moses@codesourcery.com>
-
- * treelang.texi: Standardize title page, remove version number
- from copyright page.
-
-2006-10-23 Rafael Avila de Espindola <rafael.espindola@gmail.com>
-
- * treetree.c (builtin_function): Remove.
-
-2006-10-10 Brooks Moses <bmoses@stanford.edu>
-
- * Make-lang.in: Added "treelang.pdf" target support.
-
-2006-07-28 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * Make-lang.in: Use $(HEADER_H) instead of header.h in dependencies.
-
-2006-06-17 Karl Berry <karl@gnu.org>
-
- * treelang.texi (@dircategory): Use "Software development"
- instead of "Programming", following the Free Software Directory.
-
-2006-06-06 Mike Stump <mrs@apple.com>
-
- * Make-lang.in: Rename to gcc_htmldir to build_htmldir to avoid
- installing during build.
-
-2006-05-23 Carlos O'Donell <carlos@codesourcery.com>
-
- * Make-lang.in: Rename htmldir to gcc_htmldir.
-
-2006-05-16 H.J. Lu <hongjiu.lu@intel.com>
-
- PR driver/26885
- * Make-lang.in (gtreelang$(exeext)): Replace gcc.o with
- $(GCC_OBJS).
-
-2006-05-14 H.J. Lu <hongjiu.lu@intel.com>
-
- * Make-lang.in (treelang/treetree.o): Add dependency on
- $(TARGET_H).
-
-2006-04-22 Matthias Klose <doko@debian.org>
-
- * Make-lang.in (treelang.check): Don't set and pass TRANSFORM.
-
-2006-03-29 Carlos O'Donell <caros@codesourcery.com>
-
- * Make-lang.in: Rename docdir to gcc_docdir.
-
-2006-02-20 Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
-
- * Make-lang.in (.phony): Remove TREELANG.
- (TREELANG): Remove.
-
-2006-01-21 Joseph S. Myers <joseph@codesourcery.com>
-
- * spec.c (lang_specific_driver): Update copyright notice date.
-
-2006-01-16 Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
-
- * spec.c (lang_specific_spec_functions): Remove.
-
-2005-12-28 Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
-
- * Make-lang.in (treelang.distdir): Remove.
-
-2005-12-07 Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
-
- * Make-lang.in (treelang.all.build, treelang.install-normal): Remove.
-
-2005-12-07 Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
-
- * Make-lang.in: Remove all dependencies on s-gtype.
-
-2005-12-05 Richard Guenther <rguenther@suse.de>
-
- * treetree.c (tree_code_if_start, tree_code_create_variable,
- tree_code_generate_return, tree_code_get_expression,
- tree_code_add_parameter): Use fold_convert where appropriate.
-
-2005-11-07 James A. Morrison <phython@gcc.gnu.org>
-
- PR treelang/24066
- * treetree.c (LANG_HOOKS_ATTRIBUTE_TABLE): Set to
- treelang_attribute_table.
- (handle_attribute): New function.
- (treelang_attribute_table): New attribute table.
-
-2005-09-23 Rafael Ãvila de Espíndola <rafael.espindola@gmail.com>
-
- * parse.y : Changed pointer declaration from "type* var" to "type *var"
- Removed trailing space. Wrap long lines.
-
-2005-09-23 Rafael Ãvila de Espíndola <rafael.espindola@gmail.com>
-
- * parse.y : Fixed two compile warnings in "error" and "warning"
- invocations. Removed trailing periods in messages. Decapitalized the
- first word of each.
-
-2005-08-07 James A. Morrison <phython@gcc.gnu.org>
-
- * tree-convert.c (convert): Use fold_build1 instead of
- fold (build1.
-
-2005-08-06 James A. Morrison <phython@gcc.gnu.org>
-
- PR treelang/23072
- * Make-lang.in: Remove old testing cruft.
-
-2005-06-25 Kelley Cook <kcook@gcc.gnu.org>
-
- * all files: Update FSF address in copyright headers.
-
-2005-06-15 James A. Morrison <phython@gcc.gnu.org>
-
- * parse.y (function_invocation): Reverse parameter list.
- * treetree.c (tree_code_get_expression): Don't reverse parameter list.
-
-2005-06-12 Rafael ?vila de Esp?ndola <rafael.espindola@gmail.com>
-
- * treetree.c (tree_code_get_expression): Call build_function_call_expr
- to build function calls.
-
-2005-05-31 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * treelang/lex.l, treelang/parse.y: Don't include errors.h and
- include toplev.h.
- * treelang/Make-lang.in: Updates dependencies.
-
-2005-05-02 Andrew Pinski <pinskia@physics.uc.edu>
-
- PR treelang/21345
- * parse.y (parameters_opt): Add semicolon at the end.
-
-2005-04-29 Tom Tromey <tromey@redhat.com>
-
- * treetree.c (poplevel): Updated for change to build_block.
-
-2005-04-23 DJ Delorie <dj@redhat.com>
-
- * parse.y: Adjust warning() callers.
-
-2005-04-11 Richard Sandiford <rsandifo@redhat.com>
-
- * lang.opt: Refer to the GCC internals documentation instead of c.opt.
-
-2005-04-01 Andrew Pinski <pinskia@physics.uc.edu>
-
- PR treelang/20604
- * lang-spec.c: Simplify @treelang to what the other
- languages do.
-
-2005-04-01 Kazu Hirata <kazu@cs.umass.edu>
-
- * treelang/treelang.texi: Fix typos.
- * treelang/treetree.c: Fix comment typos.
-
-2005-03-23 Joseph S. Myers <joseph@codesourcery.com>
-
- * treetree.c (LANG_HOOKS_TRUTHVALUE_CONVERSION,
- tree_lang_truthvalue_conversion): Remove.
- * tree-convert.c: Don't call truthvalue_conversion.
-
-2005-03-22 James A. Morrison <phython@gcc.gnu.org>
-
- * treetree.c (tree_code_if_start): Use fold_buildN.
- (tree_code_create_variable): Likewise.
- (tree_code_generate_return): Likewise.
- (tree_code_get_expression): Likewise.
- (tree_code_add_parameter): Likewise.
-
-2005-03-22 James A. Morrison <phython@gcc.gnu.org>
-
- * treelang.h (struct parameter_part): Skip WHERE_TO_PUT_VAR_TREE
- during GC.
-
-2005-03-15 Zack Weinberg <zack@codesourcery.com>
-
- * Make-lang.in (TEXI_TREELANG_FILES): Add gcc-vers.texi.
-
-2005-03-06 James A. Morrison <phython@gcc.gnu.org>
-
- PR other/20326
- * Make-lang.in (gtreelang, treelang/spec.o): New targets.
- * spec.c: New file.
-
-2005-02-27 Kazu Hirata <kazu@cs.umass.edu>
-
- * treelang.texi: Fix a typo.
-
-2005-02-26 James A. Morrison <phython@gcc.gnu.org>
-
- * parse.y (function_invocation, variable-ref, make_plus_expression):
- Pass location to tree_code_get_expression.
- * treetree.c (tree_code_generate_return): Set EXPR_LOCUS on retval.
- (tree_code_get_expression): Wrap variable references in NOP_EXPRs and
- set EXPR_LOCATION on ret1.
- * treetree.h (tree_code_get_expression): Take the location of the
- expression as an argument.
-
-2005-02-26 James A. Morrison <phython@gcc.gnu.org>
-
- * treelang.texi: Treelang does have warnings.
- * treetree.c (tree_code_create_function_prototype): Don't set
- TREE_USED and set TREE_PUBLIC, DECL_EXTERNAL, and TREE_STATIC
- as few times as needed on the function declaration.
- (tree_code_create_function_initial): Don't set TREE_USED,
- TREE_ADDRESSABLE, but set TREE_STATIC on the function declaration.
- (tree_code_create_variable): Don't set TREE_USED on VAR_DECL.
- (tree_code_get_expression): Set TREE_USED for variable references
- and function calls.
-
-2005-02-26 James A. Morrison <phython@gcc.gnu.org>
-
- * parse.y: Do comparisons as the type of the first expression.
- * treetree.c (tree_code_get_integer_value): Build integer constants
- with the proper type.
-
-2005-02-26 James A. Morrison <phython@gcc.gnu.org>
-
- * Make-lang.in: Remove commented out code.
- * lang-specs.h: Always pass -dumpbase to tree1.
-
-2005-02-25 James A. Morrrison <phython@gcc.gnu.org>
-
- * treelang.texi: Remove extra contribution notice.
- Split up some run-on sentences. Document function parameters
- as optional. Indicate automatic variables can now be at any scope.
- Mention literals are only signed if they are preceded by a unary
- plus or minus. Clarify interoperability with C.
-
-2005-02-25 James A. Morrison <phython@gcc.gnu.org>
-
- * treelang.texi: Fix whitespacing.
-
-2005-02-24 James A. Morrison <phython@gcc.gnu.org>
-
- PR other/19896
- * treetree.c (tree_code_create_variable): Initialize DECL_EXTERNAL,
- TREE_PUBLIC, and TREE_STATIC for var_decl to zero. Don't call
- rest_of_decl_compilation on static variables.
- (pushdecl): Put DECL_EXPRs into the current BIND_EXPR for automatic
- variables.
-
-2005-02-24 James A. Morrison <phython@gcc.gnu.org>
-
- PR other/19897
- * parse.y: (function_prototype): Accept EXTERNAL_REFERENCE_STORAGE.
- Move function parameters check from ...
- (function): ...Here. Update call to tree_code_create_function_initial.
- (function_invocation): Use expressions_with_commas_opt instead of
- expressions_with_commas.
- (expressions_with_commas_opt): New rule.
- * treetree.c (tree_code_create_function_prototype): Create PARM_DECLs
- for function parameters.
- (tree_code_create_function_initial): Remove PARMS parameter.
- Don't create PARM_DECLs for function parameters.
- * treetree.h (tree_code_create_function_initial): Remove PARMS
- parameter.
-
-2005-02-23 Kazu Hirata <kazu@cs.umass.edu>
-
- * parse.y: Update copyright.
-
-2005-02-13 James A. Morrison <phython@gcc.gnu.org>
-
- * treetree.c (tree_lang_type_for_mode): Return NULL_TREE for all non
- scalar integer types.
-
-2005-02-09 Richard Henderson <rth@redhat.com>
-
- * treetree.c (treelang_init_decl_processing): Call
- build_common_builtin_nodes.
-
-2005-02-06 Joseph S. Myers <joseph@codesourcery.com>
-
- * treelang.texi: Don't use local treelang version number. Don't
- give last update date.
-
-2005-02-01 James A. Morrison <phython@gcc.gnu.org>
-
- * lex.l: Undef LINEMAP_POSITION_FOR_COLUMN before defining it.
-
-2005-02-01 James A. Morrison <phython@gcc.gnu.org>
-
- * parse.y: Reformat comments.
- * treetree.c: Likewise.
- * treetree.h: Likewise.
-
-2004-10-24 James A. Morrison <phython@gcc.gnu.org>
-
- * treetree.c (tree_code_generate_return): Wrap param declaration in
- ENABLE_CHECKING.
-
-2004-10-05 Zack Weinberg <zack@codesourcery.com>
-
- * parse.y: Add list of diagnostic messages to insulate
- translation template from version of yacc/bison used to
- compile the grammar.
-
-2004-10-02 James A. Morrison <phython@gcc.gnu.org>
-
- PR other/17762
- * lex.l: Include input.h and errors.h
- (lineno): New variable.
- (LINEMAP_POSITION_FOR_COLUMN): Define as noop when USE_MAPPED_LOCATION
- is not defined.
- Set column position with LINEMAP_POSITION_FOR_COLUMN.
- Use error instead of fprintf.
- Set input_location with the value returned by linemap_start_line when
- USE_MAPPED_LOCATION is defined.
- (dump_lex_value): Use LOCATION_LINE.
- * parse.y: Include errors.h.
- Use error and warning instead of fprintf.
- (return): Move exp to rule scope and always set to $2. Test against
- exp instead of $2.
- (init): Set $$ to $2.
- (print_token): Use LOCATION_LINE.
- * tree1.c (treelang_init): Call treelang_init_decl_processing last.
- Call linemap_add to set input_filename when USE_MAPPED_LOCATION is
- defined.
- (treelang_parse_file): Always start at line one.
- Rename input_filename to main_input_filename when USE_MAPPED_LOCATION is
- defined.
- Leave main_input_filename when done parsing the input.
- (insert_tree_name): Use error instead of fprintf.
- * treetree.c (tree_code_get_expression): Wrap long line.
- (tree_mark_addressable): Use %qD to print out DECLs.
-
-2004-10-02 James A. Morrison <phython@gcc.gnu.org>
-
- * parse.y: Use gcc_assert and gcc_unreachable instead of abort.
- * tree1.c: Likewise.
- * treetree.c: Likewise.
-
-2004-10-02 James A. Morrison <phython@gcc.gnu.org>
-
- * lex.l: Remove random whitespace.
- * parse.y: Reformat copyright notice. Indent declarations.
- Wrap long lines, unwrap short lines.
- * tree1.c: Reformat copyright notice. Wrap long lines.
- Remove random whitespace.
- (lookup_tree_name): Use LOCATION_LINE.
- * treetree.c: Reformat copyright notice. Wrap long lines.
- Remove random whitespace.
-
-2004-10-01 James A. Morrison <phython@gcc.gnu.org>
-
- * parse.y (ELSE): Set tok to $1.
- * treelang.texi: Wrap comments in @r{}. Indent example comments.
- Use gcc when refering to the command line or website. Update function
- definition.
-
-2004-10-01 Jan Hubicka <jh@suse.cz>
-
- * treetree.c (treeland_expand_function): Update call of
- tree_rest_of_compilation.
-
-2004-09-17 Jeffrey D. Oldham <oldham@codesourcery.com>
- Zack Weinberg <zack@codesourcery.com>
-
- * treetree.c: Update for new tree-class enumeration constants.
-
-2004-09-15 Zack Weinberg <zack@codesourcery.com>
-
- * Make-lang.in (treelang-warn): Set to $(STRICT_WARN).
-
-2004-08-26 Nathan Sidwell <nathan@codesourcery.com>
-
- * treetree.c (tree_code_get_integer_value): Fix build_int_cst call.
-
-2004-08-24 Nathan Sidwell <nathan@codesourcery.com>
-
- * treelang/treetree.c (treelang_init_decl_processing): Adjust
- build_common_tree_nodes call.
-
-2004-08-14 Nathan Sidwell <nathan@codesourcery.com>
-
- * treetree.c (tree_code_get_integer_value): Use build_int_cst.
-
-2004-07-31 James A. Morrison <phython@gcc.gnu.org>
-
- * Make-lang.in (TREE_BE_LIBS): Remove.
- (tree1): Depend on BACKEND and LIBDEPS. Use BACKEND and LIBS instead
- of TREE_BE_LIBS.
- * parse.y: Add variable_defs_opt before statements_opt.
- Use tree_code_get_type instead of get_type_for_numeric_type.
- Reformat long lines.
- (parameters_opt): New rule.
- (function_prototype): Use parameters_opt.
- (return): Remove calls to print_token in error cases. Use VOID_TYPE.
- (check_type_match): Use VOID_TYPE.
- * lex.l (update_lineno_charno): Ensure INPUT_LINE starts at 1.
- * tree1.c: Include version.h and cgraph.h
- (treelang_parse_file): Call cgraph_finalize_compilation_unit and
- cgraph_optimize.
- * treelang.h (item): Remove extraneous GTY.
- * treetree.h (get_type_for_numeric_type): Remove.
- * treetree.c: Include tree-dump.h, tree-iterator.h, tree-gimple.h,
- function.h, and cgraph.h. Don't include rtl.h
- (keep_level_p): Remove.
- (tree_push_atomic_type_decl): Remove.
- (get_type_for_numeric_type): Remove.
- (tree_code_get_numeric_type): Remove.
- (global_bindings_p): Make static.
- (getdecls): Likewise.
- (insert_block): Likewise.
- (tree_code_if_start): Create a COND_EXPR and add it to the tree
- instead of creating rtl.
- (tree_code_if_else): Create a BIND_EXPR if any variables were created
- in the if statement.
- (tree_code_end_if): Likewise.
- (tree_code_create_function_prototype): Use tree_code_get_type.
- Don't use SET_DECL_ASSEMBLER_NAME.
- (tree_code_create_function_initial): Set DECL_ARTIFICIAL and
- DECL_IGNORING_P on RESULT_DECL. Use tree_code_get_type. Don't call
- layout_decl on RESULT_DECL. Don't call rtl expand functions.
- (tree_code_create_function_wrapup): Don't call rtl expand functions.
- Create a BIND_EXPR for each function. Dump original and gimplified
- copies of the function tree. Gimplify function.
- (tree_code_create_variable): Use tree_code_get_type. Don't call
- layout_decl or expand_decl. Fold CONVERT_EXPRs.
- (tree_code_generate_return): Fold CONVERT_EXPRs and MODIFY_EXPRs.
- Add RETURN_EXPR to the current statement list. Don't call rtl expand
- functions.
- (tree_code_output_expression_statement): Append CODE to current
- statement list.
- (tree_code_get_expression): Fold expressions. Build a pointer to
- a FUNCTION_TYPE intead of the called functions return type.
- (struct binding_level): Add statement list STMTS.
- (getstmtlist): New Function.
- (pushlevel): Make static. Allocate an empty statement list.
- (poplevel): Make static. Don't clear BLOCK_NODE's BLOCK_VARS.
- Don't use DECL_ASSEMBLER_NAME.
- (tree_push_type_decl): Set TYPE_NAME of TYPE_NODE to ID.
- (treelang_init_decl_processing): Define basic types after unused types.
- Don't call tree_push_atomic_type_decl.
- (builtin_function): Don't call make_decl_rtl.
- (treelang_expand_function). New Function.
-
-2004-07-11 Joseph S. Myers <jsm@polyomino.org.uk>
-
- * treetree.c (set_block): Remove.
- (struct binding_level): Remove block_created_by_back_end.
- (clear_binding_level): Likewise.
- (tree_code_create_function_initial,
- tree_code_create_function_wrapup): Call pushlevel and poplevel
- directly rather than through hooks.
- (poplevel): Don't handle block_created_by_back_end.
-
-2004-04-07 Richard Henderson <rth@redhat.com>
-
- * treetree.c (tree_mark_addressable): Don't put_var_into_stack.
-
-2004-03-31 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-
- * treetree.c (tree_lang_signed_or_unsigned_type): Use TYPE_UNSIGNED,
- not TREE_UNSIGNED.
-
-2004-03-21 Joseph S. Myers <jsm@polyomino.org.uk>
-
- * treelang.texi: Update link to "G++ and GCC".
-
-2004-02-20 Richard Henderson <rth@redhat.com>
-
- * Make-lang.in (treelang-warn): Add -Wno-variadic-macros.
-
-2004-01-30 Kelley Cook <kcook@gcc.gnu.org>
-
- * Make-lang.in (doc/treelang.dvi): Use $(abs_docdir).
-
-2004-01-20 Kelley Cook <kcook@gcc.gnu.org>
-
- * Make-lang.in: Replace $(docdir) with doc.
- (treelang.info, treelang.srcinfo): New rules.
- (treelang.man, treelang.man): Dummy entries.
-
-2004-01-15 Kelley Cook <kcook@gcc.gnu.org>
-
- * Make-lang.in (TREE_GENERATED): Delete reference to $(parsedir).
- (treelang/parse.o, treelang/lex.o): Look for sources in build
- directory. Use implicit rule.
- (treelang/parse.c, treelang/parse.h treelang/lex.c): Always build in
- doc directory.
- (treelang.srcextra): Copy above back to source directory if requested.
-
-2004-01-07 Zack Weinberg <zack@codesourcery.com>
-
- * parse.y (yyerror): Mark the definition static.
-
-2003-12-04 James A. Morrison <ja2morri@uwaterloo.ca>
-
- * lex.l: Add \t as a whitespace character.
- * treelang.texi (Lexical Syntax): Document a tab as whitespace.
-
- * treelang.texi (What is GNU Treelang?): Fix a typo.
- (Lexical Syntax): Create an itemize list of keywords. Add commas to
- paragraph defining names.
-
-2003-11-26 Jason Merrill <jason@redhat.com>
-
- * Make-lang.in (treelang.tags): Create TAGS.sub files in each
- directory and TAGS files that include them for each front end.
-
-2003-11-21 Kelley Cook <kcook@gcc.gnu.org>
-
- * .cvsignore: Delete.
-
-2003-11-20 Joseph S. Myers <jsm@polyomino.org.uk>
-
- * Make-lang.in (treelang.extraclean): Delete.
-
-2003-11-20 Joseph S. Myers <jsm@polyomino.org.uk>
-
- * Make-lang.in: Remove obsolete comment.
-
-2003-11-03 Kelley Cook <kcook@gcc.gnu.org>
-
- * Make-lang.in (dvi): Move targets to $(docobjdir).
- (treelang.dvi): Simplify rule and adjust target.
- (treelang.info): Simplify rule.
- (parse.o): Correct dependencies.
- (TREE_EXE): Delete doubled suffix append.
-
-2003-10-21 Kelley Cook <kcook@gcc.gnu.org>
-
- * Make-lang.in (treelang.o): Depend on $(parsedir)/treelang/parse.h.
- (lex.o): Likewise.
-
-2003-10-21 Kelley Cook <kcook@gcc.gnu.org>
-
- * Make-lang.in (parse.o): Honor $(parsedir).
- (lex.o): Likewise.
- (lex.c): Likewise
- (parse.c, parse.h): Likewise.
- ($(docobjdir)/treelang.info): Replace $(srcdir)/doc with $(docdir).
- (dvi): Likewise.
-
-2003-10-20 Mark Mitchell <mark@codesourcery.com>
-
- * Make-lang.in ($(docobjdir)/treelang/treelang.info): Depend on
- stmp-docobjdir.
-
- * Make-lang.in (info): Use docobjdir.
- ($(srcdir)/treelang/treelang.info): Replace with ...
- ($(docobjdir)/treelang/treelang.info): ... this.
- (install-info): New target.
-
-2003-10-12 Andreas Jaeger <aj@suse.de>
-
- * Make-lang.in (treelang.install-info): Remove reference to
- treelang.info.
- (treelang.): Removed.
-
-2003-10-06 Mark Mitchell <mark@codesourcery.com>
-
- * Make-lang.in (treelang.info): Replace with ...
- (info): ... this.
- * Make-lang.in (treelang.dvi): Replace with ...
- (dvi): ... this.
-
-2003-09-21 Richard Henderson <rth@redhat.com>
-
- * treetree.c: Revert.
-
-2003-09-21 Richard Henderson <rth@redhat.com>
-
- * treetree.c: Update for DECL_SOURCE_LOCATION rename and
- change to const.
-
-2003-07-28 Andreas Jaeger <aj@suse.de>
-
- * treetree.c: Convert remaining K&R prototypes to ISO C90.
- * tree1.c: Likewise.
- * parse.y: Likewise.
- * tree-convert.c: Likewise.
-
-2003-07-19 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * treetree.c: Remove unnecessary casts.
-
-2003-07-15 Neil Booth <neil@daikokuya.co.uk>
-
- * lang-options.h: Remove.
- * lang.opt: Document some options. Remove --help.
- * tree1.c (treelang_handle_option): Remove OPT__help case.
-
-2003-07-12 Andreas Jaeger <aj@suse.de>
-
- * Make-lang.in (treelang/tree-convert.o): Depend on TM_H.
-
-2003-07-10 Neil Booth <neil@daikokuya.co.uk>
-
- * Make-lang.in: Update.
- * tree1.c: Don't include c-common.h.
- (c_language): Remove.
-
-2003-07-10 Fergus Henderson <fjh@cs.mu.oz.au>
- Steven Bosscher <steven@gcc.gnu.org>
-
- * tree-convert.c: New file.
- * treetree.c: Don't include c-tree.h. Include target.h.
- (struct lang_identifier, union lang_tree_node, struct lang_type,
- struct lang_function): New, minimal language-specific datastructs.
- (tree_lang_truthvalue_conversion, tree_mark_addressable,
- tree_lang_type_for_size, tree_lang_type_for_mode,
- tree_lang_unsigned_type, tree_lang_signed_type,
- tree_lang_signed_or_unsigned): New functions.
- (LANG_HOOKS_*): Don't use C front end langhooks. Use new functions.
- (pushlevel, poplevel, global_bindings_p, insert_block, set_block,
- pushdecl, getdecls, kept_level_p, tree_push_type_decl,
- tree_push_atomic_type_decl): New functions.
- (struct resword, struct reswords): Remove.
- * Make-lang.in: Update. Don't depend on C front end objects.
- * config-lang.in: Likewise.
-
-2003-07-07 Nathan Sidwell <nathan@codesourcery.com>
-
- * treelang/treetree.c (tree_code_if_start, tree_code_if_else,
- tree_code_if_end, tree_code_create_function_initial,
- tree_code_create_function_wrapup, tree_code_generate_return,
- tree_code_output_expression_statement): Adjust emit_line_note
- calls.
-
-2003-07-04 H.J. Lu <hongjiu.lu@intel.com>
-
- * Make-lang.in: Replace PWD with PWD_COMMAND.
-
-2003-07-02 Neil Booth <neil@daikokuya.co.uk>
-
- * tree1.c (treelang_init_options): Update prototype.
- * treelang.h (treelang_init_options): Update prototype.
-
-2003-07-01 Neil Booth <neil@daikokuya.co.uk>
-
- * Make-lang.in: Update.
- * tree1.c: Include c-common.h. Define c_language.
-
-2003-06-20 Nathan Sidwell <nathan@codesourcery.com>
-
- * treetree.c (tree_code_create_function_wrapup): Adjust
- expand_function_end call.
-
-2003-06-18 Nathan Sidwell <nathan@codesourcery.com>
-
- * treetree.c (build_stmt): Remove VPARAMS.
- (pedwarn_c99): Likewise.
-
-2003-06-15 Neil Booth <neil@daikokuya.co.uk>
-
- * lang.opt: Declare Treelang. Update.
- * tree1.c (treelang_init_options): Update.
-
-2003-06-14 Nathan Sidwell <nathan@codesourcery.com>
-
- * treetree.c (tree_code_create_function_initial): Adjust
- init_function_start call.
-
-2003-06-14 Neil Booth <neil@daikokuya.co.uk>
-
- * Make-lang.in: Update to use options.c and options.h.
- * tree1.c: Include options.h not t-options.h.
- (treelang_init_options): New.
- (treelang_handle_option): Abort on unrecognized switch.
- * treetree.c (LANG_HOOKS_INIT_OPTIONS): Override.
- * treetree.h (treelang_init_options): New.
-
-2003-06-12 Andreas Jaeger <aj@suse.de>
-
- * treetree.c: Remove cl_options-count and cl_options.
-
-2003-06-11 Neil Booth <neil@daikokuya.co.uk>
-
- * Make-lang.in: Update for option handling.
- * lang.opt: New.
- * tree1.c: Include opts.h and t-options.h.
- (treelang_decode_option): Remove.
- (treelang_handle_option): New.
- * treetree.c (LANG_HOOKS_DECODE_OPTION): Remove.
- (LANG_HOOKS_HANDLE_OPTION): Override.
- * treetree.h (treelang_decode_option): Remove.
- (treelang_handle_option): New.
-
-2003-06-08 Andreas Jaeger <aj@suse.de>
-
- * Make-lang.in: Update.
- * treetree.c: Include opts.h. Define cl_options_count and cl_options.
-
-2003-06-08 Tim Josling <tej@melbpc.org.au>
-
- * treetree.c (c_lex): Add fake routine to satisfy RS6000 backend.
-
-2003-06-05 Jan Hubicka <jh@suse.cz>
-
- * Make-lang.in: Add support for stageprofile and stagefeedback
-
-2003-05-21 Nathan Sidwell <nathan@codesourcery.com>
-
- * treetree.c (reswords): Remove __bounded__, __unbounded__.
-
-2003-05-09 Tim Josling <tej@melbpc.org.au>
-
- * Make-lang.in (TREE_BE_LIBS): Add C_TARGET_OBJS to object files
- to link (needed by some front ends such as PPC).
-
- * treetree.c (tree_code_create_function_initial): Fix long line.
- Initialize tree_code_int_size and tree_code_char_size to
- meaningful values.
- (tree_code_get_numeric_type): Add check that size1 parameter is
- valid.
-
- * parse.y: Fix extra long lines in prototypes.
-
- * treelang.h: Fix extra long lines in macro definitions.
-
-2003-05-07 Zack Weinberg <zack@codesourcery.com>
-
- * Make-lang.in: Set -Wno-error for treelang/lex.o.
-
-2003-05-06 Nathan Sidwell <nathan@codesourcery.com>
-
- * Make-lang.in (treelang/tree1.o): Depends on input.h
- (treelang/treetree.o, treelang/parse.o, treelang/lex.o): Likewise.
- * treelang.h: #include input.h.
- (in_fname): Remove.
- (struct token_part): Remove lineno, add location.
- * lex.l (next_tree_lineno): Remove.
- (update_lineno_charno): Adjust.
- (dump_lex_value): Adjust.
- * parse.y (variable_def, function_prototype, function, statement,
- if_statement, return, function_invocation, variable_ref): Adjust.
- (print_token, yyerror, ensure_not_void): Adjust.
- tree1.c (in_fname): Remove.
- (treelang_init): Setup input_location.
- (lookup_tree_name): Adjust.
- (insert_tree_name): Adjust.
- * treetree.c (tree_code_if_start): Replace filename and lineno
- parms with loc. Adjust.
- (tree_code_if_else, tree_code_if_end,
- tree_code_create_function_prototype,
- tree_code_create_function_initial,
- tree_code_create_function_wrapup, tree_code_create_variable,
- tree_code_output_expression_statement): Likewise.
- * treetree.h (tree_code_if_start): Replace filename and lineno
- parms with loc.
- (tree_code_if_else, tree_code_if_end,
- tree_code_create_function_prototype,
- tree_code_create_function_initial,
- tree_code_create_function_wrapup, tree_code_create_variable,
- tree_code_output_expression_statement): Likewise.
-
-2003-05-01 Nathan Sidwell <nathan@codesourcery.com>
-
- * tree1.c (treelang_init): Rename lineno to input_line.
-
-2003-04-30 Steven Bosscher <steven@gcc.gnu.org>
-
- * parse.y (make_plus_expression): New function.
- (expression production): Use make_plus_expression for PLUS,
- MINUS, ASSIGN and EQUALS.
- * tree1.c (treelang_decode_option): Don't fall through to
- options that start with a different character when an option
- was not recognized.
-
-2003-04-30 Nathan Sidwell <nathan@codesourcery.com>
-
- * Make-lang.in (parse.c): Reorder bison arguments for POSIXLY_CORRECT.
- * treetree.c: Do not #include parse.h.
-
-2003-03-21 Andreas Jaeger <aj@suse.de>
-
- * treetree.c (cpp_create_reader): Follow prototype change in
- cpplib.h.
-
-2003-03-17 Andreas Jaeger <aj@suse.de>
-
- * Make-lang.in (treelang.tags): Remove duplicate entry.
-
-2003-03-15 Andreas Jaeger <aj@suse.de>
-
- * treetree.c (cpp_handle_option): Remove.
-
-2003-03-13 Andreas Jaeger <aj@suse.de>
-
- * Make-lang.in (tree1$(exeext)): Fix previous patch.
-
-2003-03-12 Andreas Jaeger <aj@suse.de>
-
- * Make-lang.in (tree1$(exeext)): Add c-cppbuiltin.o.
-
-2003-03-08 Neil Booth <neil@daikokuya.co.uk>
-
- * tree1.c (in_fname): Fix type.
- (treelang_init): Update prototype and use of in_fname.
- * treelang.h (in_fname): Fix type.
- * treetree.c (tree_code_if_start, tree_code_if_else,
- tree_code_if_end, tree_code_create_function_prototype,
- tree_code_create_function_initial, tree_code_create_funciton_wrapup,
- tree_code_create_variable, tree_code_output_expression_statement)
- : Fix prototypes and use of filenames.
- * treetree.h: Similarly.
-
-2003-03-05 Andreas Jaeger <aj@suse.de>
-
- * treetree.c (init_c_lex): Follow change to c-common.h.
-
-2003-03-04 Tom Tromey <tromey@redhat.com>
-
- * Make-lang.in (treelang.tags): New target.
-
-2003-03-01 Tim Josling <tej@melbpc.org.au>
-
- Name clashes with rtl.h fixed.
-
- * lex.l: Tokens PLUS, MINUS, RETURN changed to tl_PLUS tl_MINUS
- tl_RETURN.
-
- * parse.y: Ditto.
-
-2003-02-24 Tim Josling <tej@melbpc.org.au>
-
- * parse.y (my_yylex): New - ensure lexer time is charged to
- TV_LEX.
- (yylex): redefine as invocation of my_yylex which then calls
- flex-generated yylex.
- (timevar.h): include.
-
-2003-02-23 Tim Josling <tej@melbpc.org.au>
-
- Fix garbage collection, add more error checking, force GC always.
-
- * Make-lang.in (treelang/tree1.o): Depend on treelang/treetree.h
- (treelang/treetree.o): Depend on treelang/parse.h
-
- * lex.l: include "treetree.h"
-
- * lex.l (update_yylval): Allocate string using get_string so GC
- works.
-
- * parse.y (function_prototype): Set category correctly so GC works.
- (function): Set category in search so checking works.
- (function_invocation): Ditto.
- (variable_ref): Ditto.
-
- * tree1.c (lookup_tree_name): Call sanity_check for passed
- production and associated token and for symbol table entries.
-
- * tree1.c (sanity_check): New, basic check that struct is valid.
-
- * treelang.h: Prototype for sanity_check.
-
-2003-01-27 Tim Josling <tej@melbpc.org.au>
-
- * treetree.c (treelang_init_decl_processing): Change memory
- allocation to use GC.
-
-2003-02-04 Joseph S. Myers <jsm@polyomino.org.uk>
-
- * treelang.texi: Update to GFDL 1.2.
-
-2003-01-26 Michael Matz <matz@suse.de>
-
- * Make-lang.in (treelang/parse.o-warn): Define as -Wno-error.
-
-2003-01-14 Andreas Jaeger <aj@suse.de>
-
- * Make-lang.in (treelang.install-info): Depend only on info files
- if BUILD_INFO is set. Fix install rules.
- (treelang.): New.
-
-2003-01-09 Christian Cornelssen <ccorn@cs.tu-berlin.de>
-
- * Make-lang.in (treelang.install.common.done,
- treelang.install-info, treelang.uninstall): Prepend
- $(DESTDIR) to destination paths in all (un)installation
- commands.
-
-2002-12-28 Joseph S. Myers <jsm@polyomino.org.uk>
-
- * treelang.texi: Use @copying.
-
-2002-12-23 Joseph S. Myers <jsm@polyomino.org.uk>
-
- * treelang.texi: Include gcc-common.texi.
- * Make-lang.in ($(srcdir)/treelang/treelang.info, treelang.dvi):
- Depend on gcc-common.texi. Add other missing dependencies.
- (treelang.dvi): Use texi2dvi.
-
-2002-12-22 Joseph S. Myers <jsm@polyomino.org.uk>
-
- * treelang.texi: Use @ifnottex instead of @ifinfo.
-
-2002-11-30 Zack Weinberg <zack@codesourcery.com>
-
- * lex.l: Move "%{" below copyright notice; get rid of "/*"
- embedded in comment. Do not #undef IN_GCC; do not include
- stdio.h, memory.h, or ansidecl.h; do not include config.h twice.
- Do include coretypes.h and tm.h.
- * parse.y: Do not #undef IN_GCC, provide bogus definitions of tree
- and rtx typedefs, or include stdio.h, stdlib.h, string.h, or
- ansidecl.h. Do include coretypes.h and tm.h.
- * tree1.c: Do not include ansidecl.h, stdlib.h, unistd.h, ctype.h,
- stdarg.h, string.h, or stdio.h. Do include coretypes.h and tm.h.
- * treetree.c: Do not include stdlib.h, unistd.h, safe-ctype.h,
- errno.h. stdarg.h, limits.h, string.h, fcntl.h, getopt.h. stdio.h,
- or ansidecl.h. Do include coretypes.h and tm.h.
- * Make-lang.in: Update dependencies.
-
-2002-09-09 Tim Josling <tej@melbpc.org.au>
-
- * treetree.c (objc_is_id): New.
-
-2002-08-16 Tim Josling <tej@melbpc.org.au>
-
- Remove variables and functions now defined elsewhere.
-
- * treetree.c (maybe_objc_comptypes): Remove.
- (warn_format, warn_format_y2k, warn_format_extra_args,
- warn_format_nonliteral, warn_format_security,
- warn_format_zero_length): Remove.
- (maybe_building_objc_message_expr): Remove.
- (cpp_post_options): Remove.
- (maybe_objc_check_decl): Remove.
- (integer_types): Remove.
-
-
-2002-08-13 Neil Booth <neil@daikokuya.co.uk>
-
- * treelang.c: Remove cpp_post_options.
-
-2002-08-13 Tim Josling <tej@melbpc.org.au>
-
- * parse.y: Provide dummy definition of rtx for use by config.h.
- * Make-lang.in (treetree.o): Remove dependency on non-existent
- gt-treelang-treelang.h.
- (gt-treelang-treelang.h): Remove.
-
-2002-08-08 Nathan Sidwell <nathan@codesourcery.com>
-
- * treelang/Make-lang.in (treelang.mostlyclean): Remove coverage files.
-
-2002-07-11 Tim Josling <tej@melbpc.org.au>
-
- Remove front end hard coding from gengtype.c.
-
- * config-lang.in (gtfiles): Add files needed for this front
- end.
-
-2002-07-09 Tim Josling <tej@melbpc.org.au>
-
- Support new attributes regime (Fix for PR c++/7099).
-
- * treetree.c (handle_format_attribute): Return NULL_TREE instead
- of aborting.
- (top level): Define LANG_HOOKS_COMMON_ATTRIBUTE_TABLE
- LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE
- LANG_HOOKS_INSERT_DEFAULT_ATTRIBUTES as the standard C routines.
-
-2002-06-21 Andreas Jaeger <aj@suse.de>
-
- * Make-lang.in (treelang/tree1.o, treelang/treetree.o,
- treelang/parse.o, treelang/lex.o): Add dependency on $(CONFIG_H).
-
-2002-06-19 Paolo Bonzini <bonzini@gnu.org>
-
- * lex.l (yyparse) Return AUTOMATIC for 'automatic' token rather
- than STATIC.
-
-2002-06-10 Tim Josling <tej@melbpc.org.au>
-
- Cleanup
-
- * Make-lang.in (check-treelang). Add. Remove direct dependency of
- 'check' on 'treelang.check' as redundant.
-
- PCH Garbage collection regime (gengtypes.c) phase 1.
-
- * Make-lang.in (treelang/tree1.o). Depend on gt-treelang-tree1.h
- gt-treelang-treelang.h gtype-treelang.h.
- (gt-treelang-tree1.h) Depend on s-gtype.
- (gt-treelang-treelang.h) Depend on s-gtype.
- (gtype-treelang.h) Depend on s-gtype.
-
- * config-lang.in (gtfiles): Define.
-
- * lex.l (main): Remove '#if 0' dead code.
- (main): Move undef of IN_GCC so define of tree typedef works.
- (all): Replace token and production by prod_token_parm_item.
-
- * parse.y
- (all): Replace token and production by prod_token_parm_item.
-
- * tree1.c (main): Remove include of "output.h".
- (symbol_table): Add GTY details.
- (symbol_table_ggc): Remove.
- (treelang_init): Remove root definitions for garbage collection.
- (mark_production_used): Remove.
- (mark_token_used): Remove.
- (main, at end): include generated garage collection routines.
-
- * treelang.h (category_enum ): Add parameter_category.
- (all): Replace token and production and parameters by union
- prod_token_parm_item containing production_part, token_part,
- parameter_part.
- (STATIC_STORAGE AUTOMATIC_STORAGE EXTERNAL_REFERENCE_STORAGE
- EXTERNAL_DEFINITION_STORAGE SIGNED_CHAR UNSIGNED_CHAR SIGNED_INT
- UNSIGNED_INT VOID_TYPE EXP_PLUS EXP_REFERENCE EXP_ASSIGN
- EXP_FUNCTION_INVOCATION EXP_MINUS EXP_EQUALS): Move here from
- treetree.h.
-
- * treetree.c
- (tm_p.h): Do not include.
- (ansidecl.h): Move include after config.h.
- (treelang.h): Include it.
- (ADDROOT): Remove.
- (all): Replace token, production and parameter by prod_token_parm_item.
- (tree_parameter_list): Move to treelang.h as part of
- prod_token_parm_item.
- (STATIC_STORAGE AUTOMATIC_STORAGE EXTERNAL_REFERENCE_STORAGE
- EXTERNAL_DEFINITION_STORAGE SIGNED_CHAR UNSIGNED_CHAR SIGNED_INT
- UNSIGNED_INT VOID_TYPE EXP_PLUS EXP_REFERENCE EXP_ASSIGN
- EXP_FUNCTION_INVOCATION EXP_MINUS EXP_EQUALS): Move from here to
- treelang.h.
-
-2002-05-19 Tim Josling <tej@melbpc.org.au>
-
- * treetree.c (warn_format_zero_length): Add.
-
-2002-05-14 Tim Josling <tej@melbpc.org.au>
-
- * Make-lang.in: Fix build for .info files, add target for manpages.
- A bug report and a suggested patch came from Magnus Fromreide
- <magfr@lysator.liu.se>.
-
-2002-05-16 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
-
- * Make-lang.in: Allow for PWDCMD to override hardcoded pwd.
-
-2002-05-11 Tim Josling <tej@melbpc.org.au>
-
- * treetree.c: (cpp_define) Add.
- (cpp_get_callbacks) Add.
-
-2002-05-07 Tim Josling <tej@melbpc.org.au>
-
- * treetree.c: (cpp_get_options) Add.
-
-2002-05-06 Tim Josling <tej@melbpc.org.au>
-
- * .cvsignore: Add.
-
-2002-05-05 Tim Josling <tej@melbpc.org.au>
-
- * Updated for gcc3.2 experimental. Major changes throughout.
-
-2002-03-31 Tim Josling <tej@melbpc.org.au>
-
- * Make-lang.in: Changes so build and check work more reliably
-
-2001-07-30 Tim Josling <tej@melbpc.org.au>
-
- * root.texi: remove
- * treelang.texi: updates based on feedback
-
-2001-06-11 Tim Josling <tej@melbpc.org.au>
-
- * all (all) Revamp code to conform to GCC coding standards, fix
- typos in texi files.
-
-2001-05-11 Tim Josling <tej@melbpc.org.au>
-
- Create the new language.
diff --git a/gcc/treelang/Make-lang.in b/gcc/treelang/Make-lang.in
deleted file mode 100644
index 1b949040c08..00000000000
--- a/gcc/treelang/Make-lang.in
+++ /dev/null
@@ -1,324 +0,0 @@
-# Top level makefile fragment for TREELANG For GCC. -*- makefile -*-
-
-# Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005,
-# 2006, 2007 Free Software Foundation, Inc.
-
-# This file is part of GCC.
-
-# GCC is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-
-# GCC is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with GCC; see the file COPYING3. If not see
-# <http://www.gnu.org/licenses/>.
-
-
-# This file provides the language dependent support in the main Makefile.
-# Each language makefile fragment must provide the following targets:
-#
-# foo.all.cross, foo.start.encap, foo.rest.encap,
-# foo.install-common, foo.install-man, foo.install-info, foo.install-pdf,
-# foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
-# foo.mostlyclean, foo.clean, foo.distclean,
-# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
-#
-# where `foo' is the name of the language.
-#
-# It should also provide rules for:
-#
-# - making any compiler driver (eg: gcc)
-# - the compiler proper (eg: tree1)
-# - define the names for selecting the language in LANGUAGES.
-#
-
-## note program-prefix and program-suffix options are not supported
-## just program_transform_name which is a sed script to transform the
-## names
-
-TREELANGSED = sed
-TREELANGSEDFLAGS = -n
-
-GCC_EXTRAS = -B./ -B$(build_tooldir)/bin/ -isystem $(build_tooldir)/include
-
-# ./xgcc is the just built compiler. See GCC_FOR_TARGET in the GCC Makefile.in.
-# If this can't be found, you probably have not done a bootstrap of GCC,
-# which you need to do.
-
-# GCC_FOR_TREELANG = ./xgcc $(GCC_EXTRAS)
-
-TREE_GENERATED = lex.c parse.c parse.h parse.output
-# We need to use something other than treelang here because the directory
-# is called treelang
-TREE_EXES = gtreelang
-
-#strict warnings for treelang
-treelang-warn = $(STRICT_WARN)
-# bison emits some unused static arrays (yytoknum)
-treelang/parse.o-warn = -Wno-error
-# flex produces 'no previous prototype' warnings
-treelang/lex.o-warn = -Wno-error
-
-#
-# Define the names for selecting treelang in LANGUAGES.
-
-.phony: treelang
-
-treelang:treelang.done
-
-treelang.done: gtreelang$(exeext) tree1$(exeext)
- $(STAMP) treelang.done
-
-# no preprocessor
-
-# core compiler
-tree1$(exeext): treelang/tree1.o treelang/treetree.o treelang/tree-convert.o \
- treelang/lex.o treelang/parse.o \
- $(BACKEND) $(LIBSDEPS) attribs.o
- $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
- treelang/tree1.o treelang/treetree.o treelang/tree-convert.o \
- treelang/lex.o treelang/parse.o \
- $(BACKEND) $(LIBS) attribs.o $(GMPLIBS)
-
-# Create the compiler driver treelang.
-gtreelang$(exeext): $(GCC_OBJS) version.o prefix.o intl.o $(EXTRA_GCC_OBJS) \
- $(LIBDEPS) treelang/spec.o
- $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ treelang/spec.o \
- $(GCC_OBJS) version.o prefix.o intl.o $(EXTRA_GCC_OBJS) $(LIBS)
-
-
-
-#
-# Compiling object files from source files.
-
-# object file makes
-
-treelang/tree1.o: treelang/tree1.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
- $(FLAGS_H) toplev.h $(GGC_H) $(TREE_H) $(DIAGNOSTIC_H) treelang/treelang.h \
- input.h treelang/treetree.h options.h opts.h \
- treelang/treetree.h gt-treelang-tree1.h gtype-treelang.h
-
-treelang/treetree.o: treelang/treetree.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
- $(TM_H) $(TREE_H) $(FLAGS_H) output.h $(RTL_H) $(GGC_H) toplev.h \
- $(VARRAY_H) $(LANGHOOKS_DEF_H) langhooks.h treelang/treelang.h input.h \
- treelang/treetree.h treelang/parse.h $(TARGET_H)
-
-treelang/tree-convert.o: treelang/tree-convert.c $(CONFIG_H) $(SYSTEM_H) \
- coretypes.h $(DIAGNOSTIC_H) $(TREE_H) $(FLAGS_H) toplev.h langhooks.h $(TM_H)
-
-treelang/spec.o: treelang/spec.c $(CONFIG_H) $(SYSTEM_H) \
- coretypes.h $(DIAGNOSTIC_H) $(TREE_H) $(FLAGS_H) toplev.h langhooks.h $(TM_H)
-
-treelang/parse.o: treelang/parse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
- $(TM_H) $(DIAGNOSTIC_H) treelang/treelang.h input.h treelang/treetree.h \
- toplev.h
-
-treelang/lex.o: treelang/lex.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
- $(TM_H) $(DIAGNOSTIC_H) $(TREE_H) treelang/treelang.h input.h \
- treelang/parse.h toplev.h
-
-# generated files the files from lex and yacc are put into the source
-# directory in case someone wants to build but does not have
-# lex/yacc
-
-treelang.srcextra: treelang/parse.c treelang/parse.h treelang/lex.c
- -cp -p $^ $(srcdir)/treelang
-
-treelang/lex.c: treelang/lex.l
- -$(FLEX) $(FLEXFLAGS) -o$@ $<
-
-treelang/parse.c treelang/parse.h treelang/parse.output: treelang/parse.y
- -$(BISON) $(BISONFLAGS) -v --defines --output=treelang/parse.c $<
-
-# -v
-
-#
-# Build hooks:
-
-treelang.all.cross:
- _error_not_here_yet - havent even thought about it - it may even work
-
-treelang.start.encap:
-treelang.rest.encap:
-treelang.man:
-treelang.srcman:
-
-treelang.tags: force
- cd $(srcdir)/treelang; etags -o TAGS.sub *.y *.l *.c *.h; \
- etags --include TAGS.sub --include ../TAGS.sub
-
-treelang.info: doc/treelang.info
-
-treelang.srcinfo: doc/treelang.info
- -cp -p $^ $(srcdir)/doc
-
-treelang.dvi: doc/treelang.dvi
-
-TREELANG_PDFFILES = doc/treelang.pdf
-
-treelang.pdf: $(TREELANG_PDFFILES)
-
-TEXI_TREELANG_FILES = treelang/treelang.texi \
- $(gcc_docdir)/include/gcc-common.texi \
- $(gcc_docdir)/include/gpl.texi \
- $(gcc_docdir)/include/fdl.texi \
- $(gcc_docdir)/include/funding.texi \
- gcc-vers.texi
-
-doc/treelang.info: $(TEXI_TREELANG_FILES)
- $(MAKEINFO) $(MAKEINFOFLAGS) -I $(gcc_docdir)/include -o $@ $<
-
-doc/treelang.dvi: $(TEXI_TREELANG_FILES)
- $(TEXI2DVI) -I $(abs_docdir)/include -o $@ $<
-
-doc/treelang.pdf: $(TEXI_TREELANG_FILES)
- $(TEXI2PDF) -I $(abs_docdir)/include -o $@ $<
-
-treelang.html: $(build_htmldir)/treelang/index.html
-
-$(build_htmldir)/treelang/index.html: $(TEXI_TREELANG_FILES)
- $(mkinstalldirs) $(@D)
- rm -f $(@D)/*
- $(TEXI2HTML) -I $(gcc_docdir)/include -I $(srcdir)/treelang -o $(@D) $<
-
-#
-# Install hooks:
-
-# Install
-.phony:treelang.install.common
-.phony:treelang.install
-
-treelang.install treelang.install.common treelang.install-common: treelang.install.common.done
-
-treelang.install.common.done: installdirs treelang.done
- for name in $(TREE_EXES); \
- do \
- if [ -f $$name ] ; then \
- name2="`echo \`basename $$name\` | sed -e '$(program_transform_name)' `"; \
- rm -f $(DESTDIR)$(bindir)/$$name2$(exeext); \
- echo $(INSTALL_PROGRAM) $$name$(exeext) $(DESTDIR)$(bindir)/$$name2$(exeext); \
- $(INSTALL_PROGRAM) $$name$(exeext) $(DESTDIR)$(bindir)/$$name2$(exeext); \
- chmod a+x $(DESTDIR)$(bindir)/$$name2$(exeext); \
- fi ; \
- done
- $(STAMP) treelang.install.common.done
-
-# We might not be able to build the info files
-treelang.install-info: $(DESTDIR)$(infodir)/treelang.info
-
-treelang.install-pdf: $(TREELANG_PDFFILES)
- @$(NORMAL_INSTALL)
- test -z "$(pdfdir)/gcc" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)/gcc"
- @list='$(TREELANG_PDFFILES)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- f=$(pdf__strip_dir) \
- echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/gcc/$$f'"; \
- $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/gcc/$$f"; \
- done
-
-treelang.install-man:
-
-treelang.uninstall:
- for name in $(TREE_EXES); \
- do \
- echo $$name; \
- name2="`echo $$name | sed -e '$(program_transform_name)' `"; \
- echo becomes $$name2; \
- echo -rm -rf $(DESTDIR)$(bindir)/$$name2$(exeext); \
- rm -rf $(DESTDIR)$(bindir)/$$name2$(exeext); \
- done
- -rm treelang.install.common.done
-
-#
-# Clean hooks:
-# A lot of the ancillary files are deleted by the main makefile.
-# We just have to delete files specific to us.
-
-treelang.mostlyclean:
- for name in $(TREE_EXES); \
- do \
- echo deleting $$name; \
- if [ -f treelang/$$name$(exeext) ] ; then \
- rm -f treelang/$$name$(exeext); \
- fi ; \
- done
- -rm -f treelang/*$(objext)
- -rm -f treelang/*$(coverageexts)
- -rm treelang.done
-
-
-treelang.clean: treelang.mostlyclean
-
-treelang.distclean: treelang.clean
- -rm -f treelang/config.status
- -rm -f treelang/*.output
-
-treelang.maintainer-clean: treelang.distclean
- for name in $(TREE_GENERATED); \
- do \
- if [ -f $(srcdir)/treelang/$$name ] ; then \
- echo deleting $(srcdir)/treelang/$$name; \
- rm -f $(srcdir)/treelang/$$name; \
- fi ; \
- done
- -rm -R $(srcdir)/treelang/*~
-
-
-#
-# Stage hooks:
-# The main makefile has already created stage?/treelang.
-
-treelang.stage1: stage1-start
- -mv treelang/*$(objext) stage1/treelang
-treelang.stage2: stage2-start
- -mv treelang/*$(objext) stage2/treelang
-treelang.stage3: stage3-start
- -mv treelang/*$(objext) stage3/treelang
-treelang.stage4: stage4-start
- -mv treelang/*$(objext) stage4/treelang
-treelang.stageprofile: stageprofile-start
- -mv treelang/*$(objext) stageprofile/treelang
-treelang.stagefeedback: stagefeedback-start
- -mv treelang/*$(objext) stagefeedback/treelang
-#
-# Maintenance hooks:
-
-# test hook
-
-check-treelang: treelang.check
-
-TESTSUITEDIR = testsuite
-
-treelang.check: $(TESTSUITEDIR)/site.exp
- -mkdir testsuite/treelang
-
-# these three files are empty and it seems diff has trouble generating
-# patch files for new empty files as required for cvs.
-# STAMP does not cut it here as I need an empty file.
- -rootme=`${PWD_COMMAND}`; export rootme; \
- srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ; \
- cd testsuite; \
- EXPECT=${EXPECT} ; export EXPECT ; \
- if [ -f $${rootme}/../expect/expect ] ; then \
- TCL_LIBRARY=`cd .. ; cd ${srcdir}/../tcl/library ; ${PWD_COMMAND}` ; \
- export TCL_LIBRARY ; fi ; \
- PATH=`cd ..;${PWD_COMMAND}`:$$PATH; export PATH; \
- gcc_extras="-B`cd ..;${PWD_COMMAND}` -B`cd ..;${PWD_COMMAND}`/treelang"; export gcc_extras; \
- $(RUNTEST) --tool treelang $(RUNTESTFLAGS)
-
-# copy the output files from the current test to source ie say the new results are OK
-treelang.check.fix: force
- srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ;
- -cp testsuite/treelang/*.out* t
- -cp testsuite/treelang/*runpgm* t
- -rm -f t/*nofilename
-
-#
-
-config.status: treelang/config-lang.in
diff --git a/gcc/treelang/README b/gcc/treelang/README
deleted file mode 100644
index 87dce1ae85e..00000000000
--- a/gcc/treelang/README
+++ /dev/null
@@ -1,19 +0,0 @@
-This is a sample language front end for GCC.
-
-This is a replacement for 'toy' which had potential copyright issues,
-but more importantly it did not exercise very much of GCC. The intent
-of this language is that it should provide a cookbook of language
-elements that you can use in any language front end.
-
-To this end, treelang is essentially an implementation of a subset of
-the GCC back end 'tree' interface in syntax.
-
-Thanks to Richard Kenner, Joachim Nadler and many others for helping
-me to understand enough of GCC to do this.
-
-Please note, the documentation is not a good model to use for GCC
-front end documentation.
-
-Tim Josling
-19 June 2002
-
diff --git a/gcc/treelang/config-lang.in b/gcc/treelang/config-lang.in
deleted file mode 100644
index 9c0c0c4f7f0..00000000000
--- a/gcc/treelang/config-lang.in
+++ /dev/null
@@ -1,36 +0,0 @@
-# Top level configure fragment for GNU C++.
-# Copyright (C) 1994, 1995, 1997, 1998, 2000, 2001, 2002, 2007 Free Software Foundation, Inc.
-
-# This file is part of GCC.
-
-# GCC is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-
-# GCC is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with GCC; see the file COPYING3. If not see
-# <http://www.gnu.org/licenses/>.
-
-
-# Configure looks for the existence of this file to auto-config each language.
-# We define several parameters used by configure:
-#
-# language - name of language as it would appear in $(LANGUAGES)
-# compilers - value to add to $(COMPILERS)
-# diff_excludes - files to ignore when building diffs between two versions.
-
-language="treelang"
-
-compilers="tree1\$(exeext)"
-
-diff_excludes="-x lex.c -x parse.c -x parse.h"
-headers=
-build_by_default="no"
-
-gtfiles="\$(srcdir)/treelang/tree1.c \$(srcdir)/treelang/treetree.c \$(srcdir)/treelang/treelang.h"
diff --git a/gcc/treelang/lang-specs.h b/gcc/treelang/lang-specs.h
deleted file mode 100644
index 4d9ae2bac7d..00000000000
--- a/gcc/treelang/lang-specs.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Definitions for specs for TREELANG
-
- The format of the specs file is documented in gcc.c
-
- Copyright (C) 1995, 96-98, 1999, 2000, 2001, 2002, 2007 Free Software Foundation, Inc.
-
- This file is part of GCC.
-
- GCC is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GCC is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; see the file COPYING3. If not see
- <http://www.gnu.org/licenses/>. */
-
-/*
- This is the contribution to the `default_compilers' array in GCC.c for
- treelang.
-
- This file must compile with 'traditional', so no ANSI string concatenations
-
-*/
-
-{".tree", "@treelang", NULL, 0, 0},
-{".TREE", "@treelang", NULL, 0, 0},
-{".tre", "@treelang", NULL, 0, 0},
-{".TRE", "@treelang", NULL, 0, 0},
-{"@treelang",
- "%{!E:tree1 %i %(cc1_options) %{J*} %{I*}\
- %{!fsyntax-only:%(invoke_as)}}", NULL , 0, 0
-},
diff --git a/gcc/treelang/lang.opt b/gcc/treelang/lang.opt
deleted file mode 100644
index 9b461d6b614..00000000000
--- a/gcc/treelang/lang.opt
+++ /dev/null
@@ -1,42 +0,0 @@
-; Options for the treelang front end.
-; Copyright (C) 2003, 2007 Free Software Foundation, Inc.
-;
-; This file is part of GCC.
-;
-; GCC is free software; you can redistribute it and/or modify it under
-; the terms of the GNU General Public License as published by the Free
-; Software Foundation; either version 3, or (at your option) any later
-; version.
-;
-; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-; WARRANTY; without even the implied warranty of MERCHANTABILITY or
-; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-; for more details.
-;
-; You should have received a copy of the GNU General Public License
-; along with GCC; see the file COPYING3. If not see
-; <http://www.gnu.org/licenses/>.
-
-
-; See the GCC internals manual for a description of this file's format.
-
-; Please try to keep this file in ASCII collating order.
-
-Language
-Treelang
-
-flexer-trace
-Treelang
-Trace lexical analysis
-
-fparser-trace
-Treelang
-Trace the parsing process
-
-v
-Treelang
-
-y
-Treelang
-
-; This comment is to ensure we retain the blank line above.
diff --git a/gcc/treelang/lex.l b/gcc/treelang/lex.l
deleted file mode 100644
index 86a81d78343..00000000000
--- a/gcc/treelang/lex.l
+++ /dev/null
@@ -1,292 +0,0 @@
-/* -*- c -*- = mode for emacs editor
-
- TREELANG lexical analysis
-
- ---------------------------------------------------------------------
-
- Copyright (C) 1986, 87, 89, 92-96, 1997, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 3, or (at your option) any
- later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; see the file COPYING3. If not see
- <http://www.gnu.org/licenses/>.
-
- In other words, you are welcome to use, share and improve this program.
- You are forbidden to forbid anyone else to use, share and improve
- what you give them. Help stamp out software-hoarding!
-
- ---------------------------------------------------------------------
-
- Written by Tim Josling 1999-2001, based in part on other parts of
- the GCC compiler. */
-
-%{
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "tm.h"
-#include "input.h"
-#include "tree.h"
-
-/* Token defs. */
-#include "treelang.h"
-#include "parse.h"
-#include "treetree.h"
-#include "toplev.h"
-
-extern int option_lexer_trace;
-
-int yylex (void);
-void update_yylval (int a);
-
-static int next_tree_charno = 1;
-static int lineno = 1;
-
-static void update_lineno_charno (void);
-static void dump_lex_value (int lexret);
-
-#define SAVE_RETURN(a) {update_yylval (a); if (option_lexer_trace)\
- {fprintf (stderr, "\nlexer returning"); dump_lex_value (a);} return a;}
-#define NOT_RETURN(a) {update_yylval (a); if (option_lexer_trace)\
- {fprintf (stderr, "\nlexer swallowing"); dump_lex_value (a);}}
-%}
-
-%option nostack
-%option nounput
-%option noyywrap
-%option pointer
-%option nodefault
-
-%%
-
- {
- /* ??? Should really allocate only what we need. */
- yylval = my_malloc (sizeof (struct prod_token_parm_item));
- LINEMAP_POSITION_FOR_COLUMN (input_location, line_table,
- next_tree_charno);
- ((struct prod_token_parm_item *)yylval)->tp.tok.location = input_location;
- ((struct prod_token_parm_item *)yylval)->tp.tok.charno = next_tree_charno;
- }
-
-[ \n\t]+ {
- update_lineno_charno ();
- NOT_RETURN (WHITESPACE);
-}
-
-"//".* {
- /* Comment. */
- update_lineno_charno ();
- NOT_RETURN (COMMENT);
-}
-
-"{" {
- update_lineno_charno ();
- SAVE_RETURN (LEFT_BRACE);
-}
-
-"}" {
- update_lineno_charno ();
- SAVE_RETURN (RIGHT_BRACE);
-}
-
-"(" {
- update_lineno_charno ();
- SAVE_RETURN (LEFT_PARENTHESIS);
-}
-
-")" {
- update_lineno_charno ();
- SAVE_RETURN (RIGHT_PARENTHESIS);
-}
-
-"," {
- update_lineno_charno ();
- SAVE_RETURN (COMMA);
-}
-
-";" {
- update_lineno_charno ();
- SAVE_RETURN (SEMICOLON);
-}
-
-"+" {
- update_lineno_charno ();
- SAVE_RETURN (tl_PLUS);
-}
-
-"-" {
- update_lineno_charno ();
- SAVE_RETURN (tl_MINUS);
-}
-
-"=" {
- update_lineno_charno ();
- SAVE_RETURN (ASSIGN);
-}
-
-"==" {
- update_lineno_charno ();
- SAVE_RETURN (EQUALS);
-}
-
-[+-]?[0-9]+ {
- update_lineno_charno ();
- SAVE_RETURN (INTEGER);
-}
-
-"external_reference" {
- update_lineno_charno ();
- SAVE_RETURN (EXTERNAL_REFERENCE);
-}
-
-"external_definition" {
- update_lineno_charno ();
- SAVE_RETURN (EXTERNAL_DEFINITION);
-}
-
-"static" {
- update_lineno_charno ();
- SAVE_RETURN (STATIC);
-}
-
-"automatic" {
- update_lineno_charno ();
- SAVE_RETURN (AUTOMATIC);
-}
-
-"int" {
- update_lineno_charno ();
- SAVE_RETURN (INT);
-}
-
-"char" {
- update_lineno_charno ();
- SAVE_RETURN (CHAR);
-}
-
-"void" {
- update_lineno_charno ();
- SAVE_RETURN (VOID);
-}
-
-"unsigned" {
- update_lineno_charno ();
- SAVE_RETURN (UNSIGNED);
-}
-
-"return" {
- update_lineno_charno ();
- SAVE_RETURN (tl_RETURN);
-}
-
-"if" {
- update_lineno_charno ();
- SAVE_RETURN (IF);
-}
-
-"else" {
- update_lineno_charno ();
- SAVE_RETURN (ELSE);
-}
-
-[A-Za-z_]+[A-Za-z_0-9]* {
- update_lineno_charno ();
- update_yylval (NAME);
- if (option_lexer_trace)
- {
- fprintf (stderr, "\nlexer returning");
- dump_lex_value (NAME);
- }
- return NAME;
-}
-
-[^\n] {
- update_lineno_charno ();
- error ("%HUnrecognized character %qc.",
- &((struct prod_token_parm_item *)yylval)->tp.tok.location,
- yytext[0]);
-}
-
-%%
-
-/*
- Update line number (1-) and character number (1-). Call this
- before processing the token. */
-
-static void
-update_lineno_charno (void)
-{
- /* Update the values we send to caller in case we sometimes don't
- tell them about all the 'tokens' eg comments etc. */
- int yyl;
- LINEMAP_POSITION_FOR_COLUMN (input_location, line_table,
- next_tree_charno);
- ((struct prod_token_parm_item *)yylval)->tp.tok.location = input_location;
- ((struct prod_token_parm_item *)yylval)->tp.tok.charno = next_tree_charno;
-
- for ( yyl = 0; yyl < yyleng; ++yyl )
- {
- if ( yytext[yyl] == '\n' )
- {
- source_location s = linemap_line_start (line_table, ++lineno,
- 80);
- input_location = s;
- next_tree_charno = 1;
- }
- else
- next_tree_charno++;
- }
-}
-
-/* Fill in the fields of yylval - the value of the token. The token
- type is A. */
-void
-update_yylval (int a)
-{
- struct prod_token_parm_item * tok;
- tok = yylval;
-
- tok->category = token_category;
- tok->type = a;
- tok->tp.tok.length = yyleng;
- /* Have to copy yytext as it is just a ptr into the buffer at the
- moment. */
- tok->tp.tok.chars = (const unsigned char *) get_string (yytext, yyleng);
-}
-
-/* Trace the value LEXRET and the position and token details being
- returned by the lexical analyser. */
-
-static void
-dump_lex_value (int lexret)
-{
- int ix;
-
- fprintf (stderr, " %d l:%d c:%d ln:%d text=", lexret,
- LOCATION_LINE (((struct prod_token_parm_item *)
- yylval)->tp.tok.location),
- ((struct prod_token_parm_item *) yylval)->tp.tok.charno,
- ((struct prod_token_parm_item *) yylval)->tp.tok.length);
-
- for (ix = 0; ix < yyleng; ix++)
- {
- fprintf (stderr, "%c", yytext[ix]);
- }
- fprintf (stderr, " in hex:");
- for (ix = 0; ix < yyleng; ix++)
- {
- fprintf (stderr, " %2.2x", yytext[ix]);
- }
- fprintf (stderr, "\n");
-}
-
diff --git a/gcc/treelang/parse.y b/gcc/treelang/parse.y
deleted file mode 100644
index 65225205bd5..00000000000
--- a/gcc/treelang/parse.y
+++ /dev/null
@@ -1,988 +0,0 @@
-/* -*- c -*- emacs mode c */
-/* TREELANG Compiler parser.
-
----------------------------------------------------------------------
-
-Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
-Free Software Foundation, Inc.
-
-This program is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 3, or (at your option) any
-later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; see the file COPYING3. If not see
-<http://www.gnu.org/licenses/>.
-
-In other words, you are welcome to use, share and improve this program.
-You are forbidden to forbid anyone else to use, share and improve
-what you give them. Help stamp out software-hoarding!
-
----------------------------------------------------------------------
-
-Written by Tim Josling 1999-2001, based in part on other parts of
-the GCC compiler. */
-
-/* Grammar Conflicts
- *****************
- There are no conflicts in this grammar. Please keep it that way. */
-
-%{
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "tm.h"
-#include "timevar.h"
-#include "tree.h"
-
-#include "treelang.h"
-#include "treetree.h"
-#include "toplev.h"
-
-#define YYDEBUG 1
-#define YYPRINT(file, type, value) print_token (file, type, value)
-#define YYERROR_VERBOSE YES
-
- /* My yylex routine used to intercept calls to flex generated code, to
- record lex time. */
- int yylex (void);
- static inline int my_yylex (void);
-
- /* Call lex, but ensure time is charged to TV_LEX. */
- static inline int
- my_yylex (void)
- {
- int res;
- timevar_push (TV_LEX);
- res = yylex ();
- timevar_pop (TV_LEX);
- return res;
- }
-#define yylex my_yylex
-
- extern int option_parser_trace;
-
- /* Local prototypes. */
- static void yyerror (const char *error_message);
- int yyparse (void);
- void print_token (FILE *file, unsigned int type ATTRIBUTE_UNUSED,
- YYSTYPE value);
- static struct prod_token_parm_item *reverse_prod_list
- (struct prod_token_parm_item *old_first);
- static void ensure_not_void (unsigned int type,
- struct prod_token_parm_item *name);
- static int check_type_match (int type_num, struct prod_token_parm_item *exp);
- static int get_common_type (struct prod_token_parm_item *type1,
- struct prod_token_parm_item *type2);
- static struct prod_token_parm_item *make_integer_constant
- (struct prod_token_parm_item *value);
- static struct prod_token_parm_item *make_plus_expression
- (struct prod_token_parm_item *tok, struct prod_token_parm_item *op1,
- struct prod_token_parm_item *op2, int type_code, int prod_code);
- static void set_storage (struct prod_token_parm_item *prod);
-
- /* File global variables. */
- static struct prod_token_parm_item *current_function = NULL;
-%}
-
-/* Not %raw - seems to have bugs. */
-%token_table
-
-/* Punctuation. */
-%token RIGHT_BRACE
-%token LEFT_BRACE
-%token RIGHT_SQUARE_BRACKET
-%token LEFT_SQUARE_BRACKET
-%token RIGHT_PARENTHESIS
-%token LEFT_PARENTHESIS
-%token SEMICOLON
-%token ASTERISK
-%token COMMA
-%right EQUALS
-%right ASSIGN
-%left tl_PLUS
-%left tl_MINUS
-
-/* Literals. */
-%token INTEGER
-
-/* Keywords. */
-%token IF
-%token ELSE
-%token tl_RETURN
-%token CHAR
-%token INT
-%token UNSIGNED
-%token VOID
-%token TYPEDEF
-%token NAME
-%token STATIC
-%token AUTOMATIC
-%token EXTERNAL_DEFINITION
-%token EXTERNAL_REFERENCE
-
-/* Tokens not passed to parser. */
-%token WHITESPACE
-%token COMMENT
-
-/* Pseudo tokens - productions. */
-%token PROD_VARIABLE_NAME
-%token PROD_TYPE_NAME
-%token PROD_FUNCTION_NAME
-%token PROD_INTEGER_CONSTANT
-%token PROD_PLUS_EXPRESSION
-%token PROD_MINUS_EXPRESSION
-%token PROD_ASSIGN_EXPRESSION
-%token PROD_VARIABLE_REFERENCE_EXPRESSION
-%token PROD_PARAMETER
-%token PROD_FUNCTION_INVOCATION
-%expect 0
-%%
-
-file:
-/* Nil. */ {
- /* Nothing to do. */
-}
-|declarations {
- /* Nothing to do. */
-}
-;
-
-
-declarations:
-declaration {
- /* Nothing to do. */
-}
-| declarations declaration {
- /* Nothing to do. */
-}
-;
-
-declaration:
-variable_def {
- /* Nothing to do. */
-}
-|function_prototype {
- /* Nothing to do. */
-}
-|function {
- /* Nothing to do. */
-}
-;
-
-variable_def:
-storage typename NAME init_opt SEMICOLON {
- struct prod_token_parm_item *tok;
- struct prod_token_parm_item *prod;
- tok = $3;
- prod = make_production (PROD_VARIABLE_NAME, tok);
- SYMBOL_TABLE_NAME (prod) = tok;
- EXPRESSION_TYPE (prod) = $2;
- VAR_INIT (prod) = $4;
- NUMERIC_TYPE (prod) =
- NUMERIC_TYPE (( (struct prod_token_parm_item *)EXPRESSION_TYPE (prod)));
- ensure_not_void (NUMERIC_TYPE (prod), tok);
- if (insert_tree_name (prod))
- {
- YYERROR;
- }
- STORAGE_CLASS_TOKEN (prod) = $1;
- set_storage (prod);
-
- if (VAR_INIT (prod))
- {
- gcc_assert (((struct prod_token_parm_item *)
- VAR_INIT (prod))->tp.pro.code);
- if (STORAGE_CLASS (prod) == EXTERNAL_REFERENCE_STORAGE)
- {
- error("%Hexternal reference variable %q.*s has an initial value",
- &tok->tp.tok.location, tok->tp.tok.length, tok->tp.tok.chars);
- YYERROR;
- VAR_INIT (prod) = NULL;
- }
-
- }
-
- prod->tp.pro.code = tree_code_create_variable
- (STORAGE_CLASS (prod),
- ((struct prod_token_parm_item *)SYMBOL_TABLE_NAME (prod))->tp.tok.chars,
- ((struct prod_token_parm_item *)SYMBOL_TABLE_NAME (prod))->tp.tok.length,
- NUMERIC_TYPE (prod),
- VAR_INIT (prod) ?
- ((struct prod_token_parm_item *)VAR_INIT (prod))->tp.pro.code : NULL,
- tok->tp.tok.location);
- gcc_assert (prod->tp.pro.code);
-}
-;
-
-storage:
-STATIC
-|AUTOMATIC
-|EXTERNAL_DEFINITION
-|EXTERNAL_REFERENCE
-;
-
-parameter:
-typename NAME {
- struct prod_token_parm_item *tok;
- struct prod_token_parm_item *prod;
- struct prod_token_parm_item *prod2;
- tok = $2;
- prod = make_production (PROD_VARIABLE_NAME, tok);
- SYMBOL_TABLE_NAME (prod) = $2;
- EXPRESSION_TYPE (prod) = $1;
- NUMERIC_TYPE (prod) =
- NUMERIC_TYPE (( (struct prod_token_parm_item *)EXPRESSION_TYPE (prod)));
- ensure_not_void (NUMERIC_TYPE (prod), tok);
- if (insert_tree_name (prod))
- {
- YYERROR;
- }
- prod2 = make_production (PROD_PARAMETER, tok);
- VARIABLE (prod2) = prod;
- $$ = prod2;
-}
-;
-
-function_prototype:
-storage typename NAME LEFT_PARENTHESIS parameters_opt RIGHT_PARENTHESIS SEMICOLON {
- struct prod_token_parm_item *tok;
- struct prod_token_parm_item *prod;
- struct prod_token_parm_item *type;
- struct prod_token_parm_item *first_parms;
- struct prod_token_parm_item *last_parms;
- struct prod_token_parm_item *this_parms;
- struct prod_token_parm_item *this_parm;
- struct prod_token_parm_item *this_parm_var;
- tok = $3;
- prod = make_production (PROD_FUNCTION_NAME, $3);
- SYMBOL_TABLE_NAME (prod) = $3;
- EXPRESSION_TYPE (prod) = $2;
- NUMERIC_TYPE (prod) =
- NUMERIC_TYPE (( (struct prod_token_parm_item *)EXPRESSION_TYPE (prod)));
- PARAMETERS (prod) = reverse_prod_list ($5);
- insert_tree_name (prod);
- STORAGE_CLASS_TOKEN (prod) = $1;
- set_storage (prod);
- switch (STORAGE_CLASS (prod))
- {
- case STATIC_STORAGE:
- case EXTERNAL_DEFINITION_STORAGE:
- case EXTERNAL_REFERENCE_STORAGE:
- break;
-
- case AUTOMATIC_STORAGE:
- error ("%Hfunction %q.*s cannot be automatic",
- &tok->tp.tok.location, tok->tp.tok.length, tok->tp.tok.chars);
- YYERROR;
- break;
-
- default:
- gcc_unreachable ();
- }
- type = EXPRESSION_TYPE (prod);
- /* Create a parameter list in a non-front end specific format. */
- for (first_parms = NULL, last_parms = NULL, this_parm = PARAMETERS (prod);
- this_parm;
- this_parm = this_parm->tp.pro.next)
- {
- gcc_assert (this_parm->category == production_category);
- this_parm_var = VARIABLE (this_parm);
-
- gcc_assert (this_parm_var);
- gcc_assert (this_parm_var->category == production_category);
- gcc_assert (this_parm_var->tp.pro.main_token);
-
- this_parms = my_malloc (sizeof (struct prod_token_parm_item));
-
- this_parms->tp.par.variable_name =
- this_parm_var->tp.pro.main_token->tp.tok.chars;
- this_parms->category = parameter_category;
- this_parms->type = NUMERIC_TYPE
- (( (struct prod_token_parm_item *)EXPRESSION_TYPE (this_parm_var)));
- if (last_parms)
- {
- last_parms->tp.par.next = this_parms;
- last_parms = this_parms;
- }
- else
- {
- first_parms = this_parms;
- last_parms = this_parms;
- }
- this_parms->tp.par.where_to_put_var_tree =
- & (((struct prod_token_parm_item *)VARIABLE (this_parm))->tp.pro.code);
- }
- FIRST_PARMS (prod) = first_parms;
-
- prod->tp.pro.code =
- tree_code_create_function_prototype (tok->tp.tok.chars,
- STORAGE_CLASS (prod),
- NUMERIC_TYPE (type),
- first_parms, tok->tp.tok.location);
-
-#ifdef ENABLE_CHECKING
- /* Check all the parameters have code. */
- for (this_parm = PARAMETERS (prod);
- this_parm;
- this_parm = this_parm->tp.pro.next)
- {
- gcc_assert ((struct prod_token_parm_item *)VARIABLE (this_parm));
- gcc_assert (((struct prod_token_parm_item *)
- VARIABLE (this_parm))->tp.pro.code);
- }
-#endif
-}
-;
-
-function:
-NAME LEFT_BRACE {
- struct prod_token_parm_item *proto;
- struct prod_token_parm_item search_prod;
- struct prod_token_parm_item *tok;
- tok = $1;
- SYMBOL_TABLE_NAME ((&search_prod)) = tok;
- search_prod.category = token_category;
- current_function = proto = lookup_tree_name (&search_prod);
- if (!proto)
- {
- error ("%Hno prototype found for %q.*s", &tok->tp.tok.location,
- tok->tp.tok.length, tok->tp.tok.chars);
- YYERROR;
- }
-
- gcc_assert (proto->tp.pro.code);
-
- tree_code_create_function_initial (proto->tp.pro.code, tok->tp.tok.location);
-}
-
-variable_defs_opt statements_opt RIGHT_BRACE {
- struct prod_token_parm_item *tok;
- tok = $1;
- tree_code_create_function_wrapup (tok->tp.tok.location);
- current_function = NULL;
-}
-;
-
-variable_defs_opt:
-/* Nil. */ {
- $$ = 0;
-}
-|variable_defs {
- $$ = $1;
-}
-;
-
-statements_opt:
-/* Nil. */ {
- $$ = 0;
-}
-|statements {
- $$ = $1;
-}
-;
-
-variable_defs:
-variable_def {
- /* Nothing to do. */
-}
-|variable_defs variable_def {
- /* Nothing to do. */
-}
-;
-
-typename:
-INT {
- struct prod_token_parm_item *tok;
- struct prod_token_parm_item *prod;
- tok = $1;
- prod = make_production (PROD_TYPE_NAME, tok);
- NUMERIC_TYPE (prod) = SIGNED_INT;
- prod->tp.pro.code = tree_code_get_type (NUMERIC_TYPE (prod));
- $$ = prod;
-}
-|UNSIGNED INT {
- struct prod_token_parm_item *tok;
- struct prod_token_parm_item *prod;
- tok = $1;
- prod = make_production (PROD_TYPE_NAME, tok);
- NUMERIC_TYPE (prod) = UNSIGNED_INT;
- prod->tp.pro.code = tree_code_get_type (NUMERIC_TYPE (prod));
- $$ = prod;
-}
-|CHAR {
- struct prod_token_parm_item *tok;
- struct prod_token_parm_item *prod;
- tok = $1;
- prod = make_production (PROD_TYPE_NAME, tok);
- NUMERIC_TYPE (prod) = SIGNED_CHAR;
- prod->tp.pro.code = tree_code_get_type (NUMERIC_TYPE (prod));
- $$ = prod;
-}
-|UNSIGNED CHAR {
- struct prod_token_parm_item *tok;
- struct prod_token_parm_item *prod;
- tok = $1;
- prod = make_production (PROD_TYPE_NAME, tok);
- NUMERIC_TYPE (prod) = UNSIGNED_CHAR;
- prod->tp.pro.code = tree_code_get_type (NUMERIC_TYPE (prod));
- $$ = prod;
-}
-|VOID {
- struct prod_token_parm_item *tok;
- struct prod_token_parm_item *prod;
- tok = $1;
- prod = make_production (PROD_TYPE_NAME, tok);
- NUMERIC_TYPE (prod) = VOID_TYPE;
- prod->tp.pro.code = tree_code_get_type (NUMERIC_TYPE (prod));
- $$ = prod;
-}
-;
-
-parameters_opt:
-/* Nothing to do. */ {
- $$ = 0;
-}
-| parameters {
- $$ = $1;
-}
-;
-
-parameters:
-parameter {
- /* Nothing to do. */
- $$ = $1;
-}
-|parameters COMMA parameter {
- struct prod_token_parm_item *prod1;
- prod1 = $3;
- prod1->tp.pro.next = $1; /* Insert in reverse order. */
- $$ = prod1;
-}
-;
-
-statements:
-statement {
- /* Nothing to do. */
-}
-|statements statement {
- /* Nothing to do. */
-}
-;
-
-statement:
-expression SEMICOLON {
- struct prod_token_parm_item *exp;
- exp = $1;
- tree_code_output_expression_statement (exp->tp.pro.code,
- exp->tp.pro.main_token->tp.tok.location);
-}
-|return SEMICOLON {
- /* Nothing to do. */
-}
-|if_statement {
- /* Nothing to do. */
-}
-;
-
-if_statement:
-IF LEFT_PARENTHESIS expression RIGHT_PARENTHESIS {
- struct prod_token_parm_item *tok;
- struct prod_token_parm_item *exp;
- tok = $1;
- exp = $3;
- ensure_not_void (NUMERIC_TYPE (exp), exp->tp.pro.main_token);
- tree_code_if_start (exp->tp.pro.code, tok->tp.tok.location);
-}
-LEFT_BRACE variable_defs_opt statements_opt RIGHT_BRACE {
- /* Just let the statements flow. */
-}
-ELSE {
- struct prod_token_parm_item *tok;
- tok = $1;
- tree_code_if_else (tok->tp.tok.location);
-}
-LEFT_BRACE variable_defs_opt statements_opt RIGHT_BRACE {
- struct prod_token_parm_item *tok;
- tok = $1;
- tree_code_if_end (tok->tp.tok.location);
-}
-;
-
-
-return:
-tl_RETURN expression_opt {
- struct prod_token_parm_item *type_prod;
- struct prod_token_parm_item *ret_tok = $1;
- struct prod_token_parm_item *exp = $2;
-
- type_prod = EXPRESSION_TYPE (current_function);
- if (NUMERIC_TYPE (type_prod) == VOID_TYPE)
- if (exp == NULL)
- tree_code_generate_return (type_prod->tp.pro.code, NULL);
- else
- {
- warning (0, "%Hredundant expression in return",
- &ret_tok->tp.tok.location);
- tree_code_generate_return (type_prod->tp.pro.code, NULL);
- }
- else
- if (exp == NULL)
- error ("%Hexpression missing in return", &ret_tok->tp.tok.location);
- else
- {
- /* Check same type. */
- if (check_type_match (NUMERIC_TYPE (type_prod), exp))
- {
- gcc_assert (type_prod->tp.pro.code);
- gcc_assert (exp->tp.pro.code);
-
- /* Generate the code. */
- tree_code_generate_return (type_prod->tp.pro.code,
- exp->tp.pro.code);
- }
- }
-}
-;
-
-expression_opt:
-/* Nil. */ {
- $$ = 0;
-}
-|expression {
- struct prod_token_parm_item *exp;
- exp = $1;
- gcc_assert (exp->tp.pro.code);
-
- $$ = $1;
-}
-;
-
-expression:
-INTEGER {
- $$ = make_integer_constant ($1);
-}
-|variable_ref {
- $$ = $1;
-}
-|expression tl_PLUS expression {
- struct prod_token_parm_item *tok = $2;
- struct prod_token_parm_item *op1 = $1;
- struct prod_token_parm_item *op2 = $3;
- int type_code = get_common_type (op1, op2);
- if (!type_code)
- YYERROR;
- $$ = make_plus_expression (tok, op1, op2, type_code, EXP_PLUS);
-}
-|expression tl_MINUS expression %prec tl_PLUS {
- struct prod_token_parm_item *tok = $2;
- struct prod_token_parm_item *op1 = $1;
- struct prod_token_parm_item *op2 = $3;
- int type_code = get_common_type (op1, op2);
- if (!type_code)
- YYERROR;
- $$ = make_plus_expression (tok, op1, op2, type_code, EXP_MINUS);
-}
-|expression EQUALS expression {
- struct prod_token_parm_item *tok = $2;
- struct prod_token_parm_item *op1 = $1;
- struct prod_token_parm_item *op2 = $3;
- int type_code = NUMERIC_TYPE (op1);
- if (!type_code)
- YYERROR;
- $$ = make_plus_expression
- (tok, op1, op2, type_code, EXP_EQUALS);
-}
-|variable_ref ASSIGN expression {
- struct prod_token_parm_item *tok = $2;
- struct prod_token_parm_item *op1 = $1;
- struct prod_token_parm_item *op2 = $3;
- int type_code = NUMERIC_TYPE (op1);
- if (!type_code)
- YYERROR;
- $$ = make_plus_expression
- (tok, op1, op2, type_code, EXP_ASSIGN);
-}
-|function_invocation {
- $$ = $1;
-}
-;
-
-function_invocation:
-NAME LEFT_PARENTHESIS expressions_with_commas_opt RIGHT_PARENTHESIS {
- struct prod_token_parm_item *prod;
- struct prod_token_parm_item *tok;
- struct prod_token_parm_item search_prod;
- struct prod_token_parm_item *proto;
- struct prod_token_parm_item *exp;
- struct prod_token_parm_item *exp_proto;
- struct prod_token_parm_item *var;
- int exp_proto_count;
- int exp_count;
- tree parms;
- tree type;
-
- tok = $1;
- prod = make_production (PROD_FUNCTION_INVOCATION, tok);
- SYMBOL_TABLE_NAME (prod) = tok;
- PARAMETERS (prod) = reverse_prod_list ($3);
- SYMBOL_TABLE_NAME ((&search_prod)) = tok;
- search_prod.category = token_category;
- proto = lookup_tree_name (&search_prod);
- if (!proto)
- {
- error ("%Hfunction prototype not found for %q.*s",
- &tok->tp.tok.location, tok->tp.tok.length, tok->tp.tok.chars);
- YYERROR;
- }
- EXPRESSION_TYPE (prod) = EXPRESSION_TYPE (proto);
- NUMERIC_TYPE (prod) = NUMERIC_TYPE (proto);
- /* Count the expressions and ensure they match the prototype. */
- for (exp_proto_count = 0, exp_proto = PARAMETERS (proto);
- exp_proto; exp_proto = exp_proto->tp.pro.next)
- exp_proto_count++;
-
- for (exp_count = 0, exp = PARAMETERS (prod); exp; exp = exp->tp.pro.next)
- exp_count++;
-
- if (exp_count != exp_proto_count)
- {
- error ("%Hexpression count mismatch %q.*s with prototype",
- &tok->tp.tok.location, tok->tp.tok.length, tok->tp.tok.chars);
- YYERROR;
- }
- parms = tree_code_init_parameters ();
- for (exp_proto = PARAMETERS (proto), exp = PARAMETERS (prod);
- exp_proto;
- exp = exp->tp.pro.next, exp_proto = exp_proto->tp.pro.next)
- {
- gcc_assert (exp);
- gcc_assert (exp_proto);
- gcc_assert (exp->tp.pro.code);
-
- var = VARIABLE (exp_proto);
-
- gcc_assert (var);
- gcc_assert (var->tp.pro.code);
-
- parms = tree_code_add_parameter (parms, var->tp.pro.code,
- exp->tp.pro.code);
- }
- type = tree_code_get_type (NUMERIC_TYPE (prod));
- prod->tp.pro.code = tree_code_get_expression (EXP_FUNCTION_INVOCATION, type,
- proto->tp.pro.code,
- nreverse (parms),
- NULL, tok->tp.tok.location);
- $$ = prod;
-}
-;
-
-expressions_with_commas_opt:
-/* Nil. */ {
-$$ = 0
-}
-|expressions_with_commas { $$ = $1 }
-;
-
-expressions_with_commas:
-expression {
- struct prod_token_parm_item *exp;
- exp = $1;
- ensure_not_void (NUMERIC_TYPE (exp), exp->tp.pro.main_token);
- $$ = $1;
-}
-|expressions_with_commas COMMA expression {
- struct prod_token_parm_item *exp;
- exp = $3;
- ensure_not_void (NUMERIC_TYPE (exp), exp->tp.pro.main_token);
- exp->tp.pro.next = $1; /* Reverse order. */
- $$ = exp;
-}
-;
-
-variable_ref:
-NAME {
- struct prod_token_parm_item search_prod;
- struct prod_token_parm_item *prod;
- struct prod_token_parm_item *symbol_table_entry;
- struct prod_token_parm_item *tok;
- tree type;
-
- tok = $1;
- SYMBOL_TABLE_NAME ((&search_prod)) = tok;
- search_prod.category = token_category;
- symbol_table_entry = lookup_tree_name (&search_prod);
- if (!symbol_table_entry)
- {
- error ("%Hvariable %q.*s not defined",
- &tok->tp.tok.location, tok->tp.tok.length, tok->tp.tok.chars);
- YYERROR;
- }
-
- prod = make_production (PROD_VARIABLE_REFERENCE_EXPRESSION, tok);
- NUMERIC_TYPE (prod) = NUMERIC_TYPE (symbol_table_entry);
- type = tree_code_get_type (NUMERIC_TYPE (prod));
- if (!NUMERIC_TYPE (prod))
- YYERROR;
- OP1 (prod) = $1;
-
- prod->tp.pro.code =
- tree_code_get_expression (EXP_REFERENCE, type,
- symbol_table_entry->tp.pro.code, NULL, NULL,
- tok->tp.tok.location);
- $$ = prod;
-}
-;
-
-init_opt:
-/* Nil. */ {
- $$ = 0;
-}
-|init {
- /* Pass the initialization value up. */
- $$ = $1;
-};
-
-init:
-ASSIGN init_element {
- $$ = $2;
-}
-;
-
-init_element:
-INTEGER {
- $$ = make_integer_constant ($1);
-}
-;
-
-%%
-
-/* Print a token VALUE to file FILE. Ignore TYPE which is the token
- type. */
-
-void
-print_token (FILE *file, unsigned int type ATTRIBUTE_UNUSED, YYSTYPE value)
-{
- struct prod_token_parm_item *tok;
- unsigned int ix;
-
- tok = value;
- fprintf (file, "%d \"", LOCATION_LINE (tok->tp.tok.location));
- for (ix = 0; ix < tok->tp.tok.length; ix++)
- fprintf (file, "%c", tok->tp.tok.chars[ix]);
-
- fprintf (file, "\"");
-}
-
-/* Output a message ERROR_MESSAGE from the parser. */
-static void
-yyerror (const char *error_message)
-{
- struct prod_token_parm_item *tok;
-
- tok = yylval;
- if (tok)
- error ("%H%s", &tok->tp.tok.location, error_message);
- else
- error ("%s", error_message);
-}
-
-/* Reverse the order of a token list, linked by parse_next, old first
- token is OLD_FIRST. */
-
-static struct prod_token_parm_item*
-reverse_prod_list (struct prod_token_parm_item *old_first)
-{
- struct prod_token_parm_item *current;
- struct prod_token_parm_item *next;
- struct prod_token_parm_item *prev = NULL;
-
- current = old_first;
- prev = NULL;
-
- while (current)
- {
- gcc_assert (current->category == production_category);
-
- next = current->tp.pro.next;
- current->tp.pro.next = prev;
- prev = current;
- current = next;
- }
- return prev;
-}
-
-/* Ensure TYPE is not VOID. Use NAME as the token for the error location. */
-
-static void
-ensure_not_void (unsigned int type, struct prod_token_parm_item* name)
-{
- if (type == VOID_TYPE)
- error ("%Htype must not be void in this context",
- &name->tp.tok.location);
-}
-
-/* Check TYPE1 and TYPE2 which are integral types. Return the lowest
- common type (min is signed int). */
-
-static int
-get_common_type (struct prod_token_parm_item *type1,
- struct prod_token_parm_item *type2)
-{
- if (NUMERIC_TYPE (type1) == UNSIGNED_INT)
- return UNSIGNED_INT;
- if (NUMERIC_TYPE (type2) == UNSIGNED_INT)
- return UNSIGNED_INT;
-
- return SIGNED_INT;
-}
-
-/* Check type (TYPE_NUM) and expression (EXP) match. Return the 1 if
- OK else 0. Must be exact match - same name unless it is an
- integral type. */
-
-static int
-check_type_match (int type_num, struct prod_token_parm_item *exp)
-{
- switch (type_num)
- {
- case SIGNED_INT:
- case UNSIGNED_INT:
- case SIGNED_CHAR:
- case UNSIGNED_CHAR:
- switch (NUMERIC_TYPE (exp))
- {
- case SIGNED_INT:
- case UNSIGNED_INT:
- case SIGNED_CHAR:
- case UNSIGNED_CHAR:
- return 1;
-
- case VOID_TYPE:
- default:
- gcc_unreachable ();
- }
- break;
-
- case VOID_TYPE:
- default:
- gcc_unreachable ();
-
- }
-}
-
-/* Make a production for an integer constant VALUE. */
-
-static struct prod_token_parm_item *
-make_integer_constant (struct prod_token_parm_item* value)
-{
- struct prod_token_parm_item *tok;
- struct prod_token_parm_item *prod;
- tok = value;
- prod = make_production (PROD_INTEGER_CONSTANT, tok);
- if ((tok->tp.tok.chars[0] == (unsigned char)'-')
- || (tok->tp.tok.chars[0] == (unsigned char)'+'))
- NUMERIC_TYPE (prod) = SIGNED_INT;
- else
- NUMERIC_TYPE (prod) = UNSIGNED_INT;
- prod->tp.pro.code = tree_code_get_integer_value (tok->tp.tok.chars,
- tok->tp.tok.length);
- return prod;
-}
-
-
-/* Build a PROD_PLUS_EXPRESSION. This is uses for PLUS, MINUS, ASSIGN
- and EQUALS expressions. */
-
-static struct prod_token_parm_item *
-make_plus_expression (struct prod_token_parm_item *tok,
- struct prod_token_parm_item *op1,
- struct prod_token_parm_item *op2,
- int type_code, int prod_code)
-{
- struct prod_token_parm_item *prod;
- tree type;
-
- ensure_not_void (NUMERIC_TYPE (op1), op1->tp.pro.main_token);
- ensure_not_void (NUMERIC_TYPE (op2), op2->tp.pro.main_token);
-
- prod = make_production (PROD_PLUS_EXPRESSION, tok);
-
- NUMERIC_TYPE (prod) = type_code;
- type = tree_code_get_type (type_code);
-
- gcc_assert (type);
-
- OP1 (prod) = op1;
- OP2 (prod) = op2;
-
- prod->tp.pro.code = tree_code_get_expression (prod_code, type,
- op1->tp.pro.code,
- op2->tp.pro.code, NULL,
- tok->tp.tok.location);
-
- return prod;
-}
-
-
-/* Set STORAGE_CLASS in PROD according to CLASS_TOKEN. */
-
-static void
-set_storage (struct prod_token_parm_item *prod)
-{
- struct prod_token_parm_item *stg_class;
- stg_class = STORAGE_CLASS_TOKEN (prod);
- switch (stg_class->type)
- {
- case STATIC:
- STORAGE_CLASS (prod) = STATIC_STORAGE;
- break;
-
- case AUTOMATIC:
- STORAGE_CLASS (prod) = AUTOMATIC_STORAGE;
- break;
-
- case EXTERNAL_DEFINITION:
- STORAGE_CLASS (prod) = EXTERNAL_DEFINITION_STORAGE;
- break;
-
- case EXTERNAL_REFERENCE:
- STORAGE_CLASS (prod) = EXTERNAL_REFERENCE_STORAGE;
- break;
-
- default:
- gcc_unreachable ();
- }
-}
-
-/* Set parse trace. */
-
-void
-treelang_debug (void)
-{
- if (option_parser_trace)
- yydebug = 1;
-}
-
-#ifdef __XGETTEXT__
-/* Depending on the version of Bison used to compile this grammar,
- it may issue generic diagnostics spelled "syntax error" or
- "parse error". To prevent this from changing the translation
- template randomly, we list all the variants of this particular
- diagnostic here. Translators: there is no fine distinction
- between diagnostics with "syntax error" in them, and diagnostics
- with "parse error" in them. It's okay to give them both the same
- translation. */
-const char d1[] = N_("syntax error");
-const char d2[] = N_("parse error");
-const char d3[] = N_("syntax error; also virtual memory exhausted");
-const char d4[] = N_("parse error; also virtual memory exhausted");
-const char d5[] = N_("syntax error: cannot back up");
-const char d6[] = N_("parse error: cannot back up");
-#endif
diff --git a/gcc/treelang/spec.c b/gcc/treelang/spec.c
deleted file mode 100644
index 604ec31a46f..00000000000
--- a/gcc/treelang/spec.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Specific flags and argument handling of the Treelang front-end.
- Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc.
-
- This file is part of GCC.
-
- GCC is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
-
- GCC is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU CC; see the file COPYING3. If not see
- <http://www.gnu.org/licenses/>. */
-
-#include "config.h"
-#include "system.h"
-#include "gcc.h"
-
-#include "coretypes.h"
-#include "tm.h"
-
-void
-lang_specific_driver (int *in_argc, const char *const **in_argv,
- int *in_added_libraries ATTRIBUTE_UNUSED)
-{
- int argc = *in_argc, i;
- const char *const *argv = *in_argv;
-
- for (i = 1; i < argc; ++i)
- {
- if (!strcmp (argv[i], "-fversion")) /* Really --version!! */
- {
- printf ("\
-GNU Treelang (GCC %s)\n\
-Copyright (C) 2006 Free Software Foundation, Inc.\n\
-\n\
-GNU Treelang comes with NO WARRANTY, to the extent permitted by law.\n\
-You may redistribute copies of GNU Treelang\n\
-under the terms of the GNU General Public License.\n\
-For more information about these matters, see the file named COPYING\n\
-", version_string);
- exit (0);
- }
- }
-}
-
-/* Called before linking. Returns 0 on success and -1 on failure. */
-int
-lang_specific_pre_link (void) /* Not used for Treelang. */
-{
- return 0;
-}
-
-/* Number of extra output files that lang_specific_pre_link may generate. */
-int lang_specific_extra_outfiles = 0; /* Not used for Treelang. */
diff --git a/gcc/treelang/tree-convert.c b/gcc/treelang/tree-convert.c
deleted file mode 100644
index f111d6d7425..00000000000
--- a/gcc/treelang/tree-convert.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Language-level data type conversion for Treelang.
- This is a very slightly modified copy of c-convert.c.
- Copyright (C) 1987, 1988, 1991, 1998, 2002, 2003, 2007
- Free Software Foundation, Inc.
-
- This file is part of GCC.
-
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
-
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- for more details.
-
- You should have received a copy of the GNU General Public License
- along with GCC; see the file COPYING3. If not see
- <http://www.gnu.org/licenses/>. */
-
-
-/* This file contains the functions for converting C expressions
- to different data types. The only entry point is `convert'.
- Every language front end must have a `convert' function
- but what kind of conversions it does will depend on the language. */
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "tm.h"
-#include "diagnostic.h"
-#include "tree.h"
-#include "flags.h"
-#include "convert.h"
-#include "toplev.h"
-#include "langhooks.h"
-
-/* Change of width--truncation and extension of integers or reals--
- is represented with NOP_EXPR. Proper functioning of many things
- assumes that no other conversions can be NOP_EXPRs.
-
- Conversion between integer and pointer is represented with CONVERT_EXPR.
- Converting integer to real uses FLOAT_EXPR
- and real to integer uses FIX_TRUNC_EXPR.
-
- Here is a list of all the functions that assume that widening and
- narrowing is always done with a NOP_EXPR:
- In convert.c, convert_to_integer.
- In c-typeck.c, build_binary_op (boolean ops), and
- c_common_truthvalue_conversion.
- In expr.c: expand_expr, for operands of a MULT_EXPR.
- In fold-const.c: fold.
- In tree.c: get_narrower and get_unwidened. */
-
-/* Create an expression whose value is that of EXPR,
- converted to type TYPE. The TREE_TYPE of the value
- is always TYPE. This function implements all reasonable
- conversions; callers should filter out those that are
- not permitted by the language being compiled. */
-
-tree
-convert (tree type, tree expr)
-{
- tree e = expr;
- enum tree_code code = TREE_CODE (type);
-
- if (type == TREE_TYPE (expr)
- || TREE_CODE (expr) == ERROR_MARK
- || code == ERROR_MARK || TREE_CODE (TREE_TYPE (expr)) == ERROR_MARK)
- return expr;
-
- if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (TREE_TYPE (expr)))
- return fold_build1 (NOP_EXPR, type, expr);
- if (TREE_CODE (TREE_TYPE (expr)) == ERROR_MARK)
- return error_mark_node;
- if (TREE_CODE (TREE_TYPE (expr)) == VOID_TYPE)
- {
- error ("void value not ignored as it ought to be");
- return error_mark_node;
- }
- if (code == VOID_TYPE)
- return build1 (CONVERT_EXPR, type, e);
- if (code == INTEGER_TYPE || code == ENUMERAL_TYPE)
- return fold (convert_to_integer (type, e));
- if (code == BOOLEAN_TYPE)
- {
- tree t = expr;
- /* If it returns a NOP_EXPR, we must fold it here to avoid
- infinite recursion between fold () and convert (). */
- if (TREE_CODE (t) == NOP_EXPR)
- return fold_build1 (NOP_EXPR, type, TREE_OPERAND (t, 0));
- else
- return fold_build1 (NOP_EXPR, type, t);
- }
- if (code == POINTER_TYPE || code == REFERENCE_TYPE)
- return fold (convert_to_pointer (type, e));
- if (code == REAL_TYPE)
- return fold (convert_to_real (type, e));
- if (code == COMPLEX_TYPE)
- return fold (convert_to_complex (type, e));
- if (code == VECTOR_TYPE)
- return fold (convert_to_vector (type, e));
-
- error ("conversion to non-scalar type requested");
- return error_mark_node;
-}
diff --git a/gcc/treelang/tree1.c b/gcc/treelang/tree1.c
deleted file mode 100644
index e667a846eba..00000000000
--- a/gcc/treelang/tree1.c
+++ /dev/null
@@ -1,309 +0,0 @@
-/* TREELANG Compiler almost main (tree1)
- Called by GCC's toplev.c
-
- Copyright (C) 1986, 87, 89, 92-96, 1997, 1999, 2000, 2001, 2002, 2003, 2004,
- 2007, 2008 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; see the file COPYING3. If not, see
- <http://www.gnu.org/licenses/>.
-
- In other words, you are welcome to use, share and improve this program.
- You are forbidden to forbid anyone else to use, share and improve
- what you give them. Help stamp out software-hoarding!
-
- ---------------------------------------------------------------------------
-
- Written by Tim Josling 1999, 2000, 2001, based in part on other
- parts of the GCC compiler. */
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "tm.h"
-#include "flags.h"
-#include "toplev.h"
-#include "version.h"
-
-#include "ggc.h"
-#include "tree.h"
-#include "cgraph.h"
-#include "diagnostic.h"
-
-#include "treelang.h"
-#include "treetree.h"
-#include "opts.h"
-#include "options.h"
-
-extern int yyparse (void);
-
-/* Linked list of symbols - all must be unique in treelang. */
-
-static GTY(()) struct prod_token_parm_item *symbol_table = NULL;
-
-/* Language for usage for messages. */
-
-const char *const language_string = "TREELANG - sample front end for GCC ";
-
-/* Local prototypes. */
-
-void version (void);
-
-/* Global variables. */
-
-extern struct cbl_tree_struct_parse_tree_top* parse_tree_top;
-
-/*
- Options.
-*/
-
-/* Trace the parser. */
-unsigned int option_parser_trace = 0;
-
-/* Trace the lexical analysis. */
-
-unsigned int option_lexer_trace = 0;
-
-/* Warning levels. */
-
-/* Local variables. */
-
-/* This is 1 if we have output the version string. */
-
-static int version_done = 0;
-
-/* Variable nesting level. */
-
-static unsigned int work_nesting_level = 0;
-
-/* Prepare to handle switches. */
-unsigned int
-treelang_init_options (unsigned int argc ATTRIBUTE_UNUSED,
- const char **argv ATTRIBUTE_UNUSED)
-{
- return CL_Treelang;
-}
-
-/* Process a switch - called by opts.c. */
-int
-treelang_handle_option (size_t scode, const char *arg ATTRIBUTE_UNUSED,
- int value)
-{
- enum opt_code code = (enum opt_code) scode;
-
- switch (code)
- {
- case OPT_v:
- if (!version_done)
- {
- fputs (language_string, stdout);
- fputs (pkgversion_string, stdout);
- fputs (version_string, stdout);
- fputs ("\n", stdout);
- version_done = 1;
- }
- break;
-
- case OPT_y:
- option_lexer_trace = 1;
- option_parser_trace = 1;
- break;
-
- case OPT_fparser_trace:
- option_parser_trace = value;
- break;
-
- case OPT_flexer_trace:
- option_lexer_trace = value;
- break;
-
- default:
- gcc_unreachable ();
- }
-
- return 1;
-}
-
-/* Language dependent parser setup. */
-
-bool
-treelang_init (void)
-{
- linemap_add (line_table, LC_ENTER, false, main_input_filename, 1);
-
- /* This error will not happen from GCC as it will always create a
- fake input file. */
- if (!input_filename || input_filename[0] == ' ' || !input_filename[0])
- {
- if (!version_done)
- {
- fprintf (stderr, "No input file specified, try --help for help\n");
- exit (1);
- }
-
- return false;
- }
-
- yyin = fopen (input_filename, "r");
- if (!yyin)
- {
- fprintf (stderr, "Unable to open input file %s\n", input_filename);
- exit (1);
- }
-
- linemap_add (line_table, LC_RENAME, false, "<built-in>", 1);
- linemap_line_start (line_table, 0, 1);
-
- /* Init decls, etc. */
- treelang_init_decl_processing ();
-
- return true;
-}
-
-/* Language dependent wrapup. */
-
-void
-treelang_finish (void)
-{
- fclose (yyin);
-}
-
-/* Parse a file. Debug flag doesn't seem to work. */
-
-void
-treelang_parse_file (int debug_flag ATTRIBUTE_UNUSED)
-{
- source_location s;
- linemap_add (line_table, LC_RENAME, false, main_input_filename, 1);
- s = linemap_line_start (line_table, 1, 80);
- input_location = s;
-
- treelang_debug ();
- yyparse ();
- cgraph_finalize_compilation_unit ();
- linemap_add (line_table, LC_LEAVE, false, NULL, 0);
- cgraph_optimize ();
-}
-
-/* Allocate SIZE bytes and clear them. Not to be used for strings
- which must go in stringpool. */
-
-void *
-my_malloc (size_t size)
-{
- void *mem;
- mem = ggc_alloc (size);
- if (!mem)
- {
- fprintf (stderr, "\nOut of memory\n");
- abort ();
- }
- memset (mem, 0, size);
- return mem;
-}
-
-/* Look up a name in PROD->SYMBOL_TABLE_NAME in the symbol table;
- return the symbol table entry from the symbol table if found there,
- else 0. */
-
-struct prod_token_parm_item*
-lookup_tree_name (struct prod_token_parm_item *prod)
-{
- struct prod_token_parm_item *this;
- struct prod_token_parm_item *this_tok;
- struct prod_token_parm_item *tok;
-
- sanity_check (prod);
-
- tok = SYMBOL_TABLE_NAME (prod);
- sanity_check (tok);
-
- for (this = symbol_table; this; this = this->tp.pro.next)
- {
- sanity_check (this);
- this_tok = this->tp.pro.main_token;
- sanity_check (this_tok);
- if (tok->tp.tok.length != this_tok->tp.tok.length)
- continue;
- if (memcmp (tok->tp.tok.chars, this_tok->tp.tok.chars,
- this_tok->tp.tok.length))
- continue;
-
- if (option_parser_trace)
- fprintf (stderr, "Found symbol %s (%i:%i) as %i \n",
- tok->tp.tok.chars, LOCATION_LINE (tok->tp.tok.location),
- tok->tp.tok.charno, NUMERIC_TYPE (this));
- return this;
- }
-
- if (option_parser_trace)
- fprintf (stderr, "Not found symbol %s (%i:%i) as %i \n",
- tok->tp.tok.chars, LOCATION_LINE (tok->tp.tok.location),
- tok->tp.tok.charno, tok->type);
- return NULL;
-}
-
-/* Insert name PROD into the symbol table. Return 1 if duplicate, 0 if OK. */
-
-int
-insert_tree_name (struct prod_token_parm_item *prod)
-{
- struct prod_token_parm_item *tok;
- tok = SYMBOL_TABLE_NAME (prod);
- sanity_check (prod);
- if (lookup_tree_name (prod))
- {
- error ("%HDuplicate name %q.*s.", &tok->tp.tok.location,
- tok->tp.tok.length, tok->tp.tok.chars);
- return 1;
- }
- prod->tp.pro.next = symbol_table;
- NESTING_LEVEL (prod) = work_nesting_level;
- symbol_table = prod;
- return 0;
-}
-
-/* Create a struct productions of type TYPE, main token MAIN_TOK. */
-
-struct prod_token_parm_item *
-make_production (int type, struct prod_token_parm_item *main_tok)
-{
- struct prod_token_parm_item *prod;
- prod = my_malloc (sizeof (struct prod_token_parm_item));
- prod->category = production_category;
- prod->type = type;
- prod->tp.pro.main_token = main_tok;
- return prod;
-}
-
-/* Abort if ITEM is not a valid structure, based on 'category'. */
-
-void
-sanity_check (struct prod_token_parm_item *item)
-{
- switch (item->category)
- {
- case token_category:
- case production_category:
- case parameter_category:
- break;
-
- default:
- gcc_unreachable ();
- }
-}
-
-/* New garbage collection regime see gty.texi. */
-#include "gt-treelang-tree1.h"
-/*#include "gt-treelang-treelang.h"*/
-#include "gtype-treelang.h"
diff --git a/gcc/treelang/treelang.h b/gcc/treelang/treelang.h
deleted file mode 100644
index aea030a4256..00000000000
--- a/gcc/treelang/treelang.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/* TREELANG Compiler common definitions (treelang.h)
-
- Copyright (C) 1986, 87, 89, 92-96, 1997, 1999, 2000, 2001, 2002, 2003, 2004,
- 2007 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 3, or (at your option) any
- later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; see the file COPYING3. If not see
- <http://www.gnu.org/licenses/>.
-
- In other words, you are welcome to use, share and improve this program.
- You are forbidden to forbid anyone else to use, share and improve
- what you give them. Help stamp out software-hoarding!
-
- ---------------------------------------------------------------------------
-
- Written by Tim Josling 1999, 2000, 2001, based in part on other
- parts of the GCC compiler. */
-
-#include "input.h"
-
-/* Parse structure type. */
-enum category_enum
-{ /* These values less likely to be there by chance unlike 0/1,
- make checks more meaningful */
- token_category = 111,
- production_category = 222,
- parameter_category = 333
-};
-
-/* Input file FILE. */
-extern FILE* yyin;
-
-/* Forward references to satisfy mutually recursive definitions. */
-struct token_part;
-struct production_part;
-struct prod_token_parm_item;
-typedef struct prod_token_parm_item item;
-
-/* A token from the input file. */
-
-struct token_part GTY(())
-{
- location_t location;
- unsigned int charno;
- unsigned int length; /* The value. */
- const unsigned char *chars;
-};
-
-/* Definitions for fields in production. */
-#define NESTING_LEVEL(a) a->tp.pro.info[0] /* Level used for variable definitions. */
-/* Numeric type used in type definitions and expressions. */
-#define NUMERIC_TYPE(a) a->tp.pro.info[1]
-#define SUB_COUNT 5
-#define SYMBOL_TABLE_NAME(a) (a->tp.pro.sub[0]) /* Name token. */
-#define EXPRESSION_TYPE(a) (a->tp.pro.sub[1]) /* Type identifier. */
-#define OP1(a) (a->tp.pro.sub[2]) /* Exp operand1. */
-#define PARAMETERS(a) (a->tp.pro.sub[2]) /* Function parameters. */
-#define VARIABLE(a) (a->tp.pro.sub[2]) /* Parameter variable ptr. */
-#define VAR_INIT(a) (a->tp.pro.sub[2]) /* Variable init. */
-#define OP2(a) (a->tp.pro.sub[3]) /* Exp operand2. */
-/* Function parameters linked via struct tree_parameter_list. */
-#define FIRST_PARMS(a) (a->tp.pro.sub[3])
-#define OP3(a) (a->tp.pro.sub[4]) /* Exp operand3. */
-#define STORAGE_CLASS_TOKEN(a) (a->tp.pro.sub[4]) /* Storage class token. */
-#define STORAGE_CLASS(a) a->tp.pro.flag1 /* Values in treetree.h. */
-
-struct production_part GTY(())
-{
- struct prod_token_parm_item *main_token; /* Main token for error msgs; variable name token. */
-
- unsigned int info[2]; /* Extra information. */
-
- struct prod_token_parm_item *sub[SUB_COUNT]; /* Sub productions or tokens. */
- tree code; /* Back end hook for this item. */
- struct prod_token_parm_item *next; /* Next in chains of various types. */
-
- unsigned int flag1:2;
- unsigned int flag2:1;
- unsigned int flag3:1;
- unsigned int flag4:1;
- unsigned int flag5:1;
- unsigned int flag6:1;
- unsigned int flag7:1;
-
-};
-
-/* Storage modes. */
-#define STATIC_STORAGE 0
-#define AUTOMATIC_STORAGE 1
-#define EXTERNAL_REFERENCE_STORAGE 2
-#define EXTERNAL_DEFINITION_STORAGE 3
-
-/* Numeric types. */
-#define SIGNED_CHAR 1
-#define UNSIGNED_CHAR 2
-#define SIGNED_INT 3
-#define UNSIGNED_INT 4
-#define VOID_TYPE 5
-
-/* Expression types. */
-#define EXP_PLUS 0 /* Addition expression. */
-#define EXP_REFERENCE 1 /* Variable reference. */
-#define EXP_ASSIGN 2 /* Assignment. */
-#define EXP_FUNCTION_INVOCATION 3 /* Call function. */
-#define EXP_MINUS 4 /* Subtraction. */
-#define EXP_EQUALS 5 /* Equality test. */
-
-/* Parameter list passed to back end. */
-struct parameter_part GTY(())
-{
- struct prod_token_parm_item *next; /* Next entry. */
- const unsigned char *variable_name; /* Name. */
- tree * GTY ((skip)) where_to_put_var_tree; /* Where to save decl. */
-};
-
-/* A production or a token. */
-struct prod_token_parm_item GTY(())
-{
- enum category_enum category; /* Token or production. */
- unsigned int type; /* Token or production type. */
- union t_or_p
- {
- struct token_part GTY((tag ("token_category"))) tok;
- struct production_part GTY((tag ("production_category"))) pro;
- struct parameter_part GTY((tag ("parameter_category"))) par;
- } GTY((desc ("((item *)&%1)->category"))) tp;
-};
-
-
-/* For parser. Alternatively you can define it using %union (bison) or
- union. */
-#define YYSTYPE void *
-
-void *my_malloc (size_t size);
-int insert_tree_name (struct prod_token_parm_item *prod);
-struct prod_token_parm_item *lookup_tree_name (struct prod_token_parm_item *prod);
-struct prod_token_parm_item *make_production (int type, struct prod_token_parm_item *main_tok);
-void mark_production_used (struct prod_token_parm_item *pp);
-void mark_token_used (struct prod_token_parm_item *tt);
-void treelang_debug (void);
-
-void sanity_check (struct prod_token_parm_item *item);
diff --git a/gcc/treelang/treelang.texi b/gcc/treelang/treelang.texi
deleted file mode 100644
index f9e17fb3e81..00000000000
--- a/gcc/treelang/treelang.texi
+++ /dev/null
@@ -1,1310 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-
-@c NOTE THIS IS NOT A GOOD EXAMPLE OF HOW TO DO A MANUAL. FIXME!!!
-@c NOTE THIS IS NOT A GOOD EXAMPLE OF HOW TO DO A MANUAL. FIXME!!!
-
-
-@c %**start of header
-@setfilename treelang.info
-
-@include gcc-common.texi
-
-@set copyrights-treelang 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005
-
-@set email-general gcc@@gcc.gnu.org
-@set email-bugs gcc-bugs@@gcc.gnu.org or bug-gcc@@gnu.org
-@set email-patches gcc-patches@@gcc.gnu.org
-@set path-treelang gcc/gcc/treelang
-
-@ifset VERSION_PACKAGE
-@set which-treelang @value{version-GCC} @value{VERSION_PACKAGE}
-@end ifset
-@ifclear VERSION_PACKAGE
-@set which-treelang @value{version-GCC}
-@end ifclear
-@set which-GCC GCC
-
-@set email-josling tej@@melbpc.org.au
-@set www-josling http://www.geocities.com/timjosling
-
-@c This tells @include'd files that they're part of the overall TREELANG doc
-@c set. (They might be part of a higher-level doc set too.)
-@set DOC-TREELANG
-
-@c @setfilename usetreelang.info
-@c @setfilename maintaintreelang.info
-@c To produce the full manual, use the "treelang.info" setfilename, and
-@c make sure the following do NOT begin with '@c' (and the @clear lines DO)
-@set INTERNALS
-@set USING
-@c To produce a user-only manual, use the "usetreelang.info" setfilename, and
-@c make sure the following does NOT begin with '@c':
-@c @clear INTERNALS
-@c To produce a maintainer-only manual, use the "maintaintreelang.info" setfilename,
-@c and make sure the following does NOT begin with '@c':
-@c @clear USING
-
-@ifset INTERNALS
-@ifset USING
-@settitle Using and Maintaining GNU Treelang
-@end ifset
-@end ifset
-@c seems reasonable to assume at least one of INTERNALS or USING is set...
-@ifclear INTERNALS
-@settitle Using GNU Treelang
-@end ifclear
-@ifclear USING
-@settitle Maintaining GNU Treelang
-@end ifclear
-@c then again, have some fun
-@ifclear INTERNALS
-@ifclear USING
-@settitle Doing Very Little at all with GNU Treelang
-@end ifclear
-@end ifclear
-
-@syncodeindex fn cp
-@syncodeindex vr cp
-@c %**end of header
-
-@c Cause even numbered pages to be printed on the left hand side of
-@c the page and odd numbered pages to be printed on the right hand
-@c side of the page. Using this, you can print on both sides of a
-@c sheet of paper and have the text on the same part of the sheet.
-
-@c The text on right hand pages is pushed towards the right hand
-@c margin and the text on left hand pages is pushed toward the left
-@c hand margin.
-@c (To provide the reverse effect, set bindingoffset to -0.75in.)
-
-@c @tex
-@c \global\bindingoffset=0.75in
-@c \global\normaloffset =0.75in
-@c @end tex
-
-@copying
-Copyright @copyright{} @value{copyrights-treelang} Free Software Foundation, Inc.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.2 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being ``GNU General Public License'', the Front-Cover
-texts being (a) (see below), and with the Back-Cover Texts being (b)
-(see below). A copy of the license is included in the section entitled
-``GNU Free Documentation License''.
-
-(a) The FSF's Front-Cover Text is:
-
- A GNU Manual
-
-(b) The FSF's Back-Cover Text is:
-
- You have freedom to copy and modify this GNU Manual, like GNU
- software. Copies published by the Free Software Foundation raise
- funds for GNU development.
-@end copying
-
-@ifnottex
-@dircategory Software development
-@direntry
-* treelang: (treelang). The GNU Treelang compiler.
-@end direntry
-@ifset INTERNALS
-@ifset USING
-This file documents the use and the internals of the GNU Treelang
-(@code{treelang}) compiler. At the moment this manual is not
-incorporated into the main GCC manual as it is incomplete. It
-corresponds to the @value{which-treelang} version of @code{treelang}.
-@end ifset
-@end ifset
-@ifclear USING
-This file documents the internals of the GNU Treelang (@code{treelang}) compiler.
-It corresponds to the @value{which-treelang} version of @code{treelang}.
-@end ifclear
-@ifclear INTERNALS
-This file documents the use of the GNU Treelang (@code{treelang}) compiler.
-It corresponds to the @value{which-treelang} version of @code{treelang}.
-@end ifclear
-
-Published by the Free Software Foundation
-51 Franklin Street, Fifth Floor
-Boston, MA 02110-1301 USA
-
-@insertcopying
-@end ifnottex
-
-@setchapternewpage odd
-@c @finalout
-@titlepage
-@ifset INTERNALS
-@ifset USING
-@title Using and Maintaining GNU Treelang
-@end ifset
-@end ifset
-@ifclear INTERNALS
-@title Using GNU Treelang
-@end ifclear
-@ifclear USING
-@title Maintaining GNU Treelang
-@end ifclear
-@versionsubtitle
-@author Tim Josling
-@page
-@vskip 0pt plus 1filll
-Published by the Free Software Foundation @*
-51 Franklin Street, Fifth Floor@*
-Boston, MA 02110-1301, USA@*
-@c Last printed ??ber, 19??.@*
-@c Printed copies are available for $? each.@*
-@c ISBN ???
-@sp 1
-@insertcopying
-@end titlepage
-@page
-
-@ifnottex
-
-@node Top, Copying,, (dir)
-@top Introduction
-@cindex Introduction
-
-@ifset INTERNALS
-@ifset USING
-This manual documents how to run, install and maintain @code{treelang}.
-It also documents the features and incompatibilities in the @value{which-treelang}
-version of @code{treelang}.
-@end ifset
-@end ifset
-
-@ifclear INTERNALS
-This manual documents how to run and install @code{treelang}.
-It also documents the features and incompatibilities in the @value{which-treelang}
-version of @code{treelang}.
-@end ifclear
-@ifclear USING
-This manual documents how to maintain @code{treelang}.
-It also documents the features and incompatibilities in the @value{which-treelang}
-version of @code{treelang}.
-@end ifclear
-
-@end ifnottex
-
-@menu
-* Copying::
-* Contributors::
-* GNU Free Documentation License::
-* Funding::
-* Getting Started::
-* What is GNU Treelang?::
-* Lexical Syntax::
-* Parsing Syntax::
-* Compiler Overview::
-* TREELANG and GCC::
-* Compiler::
-* Other Languages::
-* treelang internals::
-* Open Questions::
-* Bugs::
-* Service::
-* Projects::
-* Index::
-
-@detailmenu
- --- The Detailed Node Listing ---
-
-Other Languages
-
-* Interoperating with C and C++::
-
-treelang internals
-
-* treelang files::
-* treelang compiler interfaces::
-* Hints and tips::
-
-treelang compiler interfaces
-
-* treelang driver::
-* treelang main compiler::
-
-treelang main compiler
-
-* Interfacing to toplev.c::
-* Interfacing to the garbage collection::
-* Interfacing to the code generation code. ::
-
-Reporting Bugs
-
-* Sending Patches::
-
-@end detailmenu
-@end menu
-
-@include gpl.texi
-
-@include fdl.texi
-
-@node Contributors
-
-@unnumbered Contributors to GNU Treelang
-@cindex contributors
-@cindex credits
-
-Treelang was based on 'toy' by Richard Kenner, and also uses code from
-the GCC core code tree. Tim Josling first created the language and
-documentation, based on the GCC Fortran compiler's documentation
-framework. Treelang was updated to use the TreeSSA infrastructure by
-James A. Morrison.
-
-@itemize @bullet
-@item
-The packaging and compiler portions of GNU Treelang are based largely
-on the GCC compiler.
-@xref{Contributors,,Contributors to GCC,GCC,Using and Maintaining GCC},
-for more information.
-
-@item
-There is no specific run-time library for treelang, other than the
-standard C runtime.
-
-@item
-It would have been difficult to build treelang without access to Joachim
-Nadler's guide to writing a front end to GCC (written in German). A
-translation of this document into English is available via the
-CobolForGCC project or via the documentation links from the GCC home
-page @uref{http://gcc.gnu.org}.
-@end itemize
-
-@include funding.texi
-
-@node Getting Started
-@chapter Getting Started
-@cindex getting started
-@cindex new users
-@cindex newbies
-@cindex beginners
-
-Treelang is a sample language, useful only to help people understand how
-to implement a new language front end to GCC. It is not a useful
-language in itself other than as an example or basis for building a new
-language. Therefore only language developers are likely to have an
-interest in it.
-
-This manual assumes familiarity with GCC, which you can obtain by using
-it and by reading the manuals @samp{Using the GNU Compiler Collection (GCC)}
-and @samp{GNU Compiler Collection (GCC) Internals}.
-
-To install treelang, follow the GCC installation instructions,
-taking care to ensure you specify treelang in the configure step by adding
-treelang to the list of languages specified by @option{--enable-languages},
-e.g.@: @samp{--enable-languages=all,treelang}.
-
-If you're generally curious about the future of
-@code{treelang}, see @ref{Projects}.
-If you're curious about its past,
-see @ref{Contributors}.
-
-To see a few of the questions maintainers of @code{treelang} have,
-and that you might be able to answer,
-see @ref{Open Questions}.
-
-@ifset USING
-@node What is GNU Treelang?, Lexical Syntax, Getting Started, Top
-@chapter What is GNU Treelang?
-@cindex concepts, basic
-@cindex basic concepts
-
-GNU Treelang, or @code{treelang}, is designed initially as a free
-replacement for, or alternative to, the 'toy' language, but which is
-amenable to inclusion within the GCC source tree.
-
-@code{treelang} is largely a cut down version of C, designed to showcase
-the features of the GCC code generation back end. Only those features
-that are directly supported by the GCC code generation back end are
-implemented. Features are implemented in a manner which is easiest and
-clearest to implement. Not all or even most code generation back end
-features are implemented. The intention is to add features incrementally
-until most features of the GCC back end are implemented in treelang.
-
-The main features missing are structures, arrays and pointers.
-
-A sample program follows:
-
-@smallexample
-// @r{function prototypes}
-// @r{function 'add' taking two ints and returning an int}
-external_definition int add(int arg1, int arg2);
-external_definition int subtract(int arg3, int arg4);
-external_definition int first_nonzero(int arg5, int arg6);
-external_definition int double_plus_one(int arg7);
-
-// @r{function definition}
-add
-@{
- // @r{return the sum of arg1 and arg2}
- return arg1 + arg2;
-@}
-
-
-subtract
-@{
- return arg3 - arg4;
-@}
-
-double_plus_one
-@{
- // @r{aaa is a variable, of type integer and allocated at the start of}
- // @r{the function}
- automatic int aaa;
- // @r{set aaa to the value returned from add, when passed arg7 and arg7 as}
- // @r{the two parameters}
- aaa=add(arg7, arg7);
- aaa=add(aaa, aaa);
- aaa=subtract(subtract(aaa, arg7), arg7) + 1;
- return aaa;
-@}
-
-first_nonzero
-@{
- // @r{C-like if statement}
- if (arg5)
- @{
- return arg5;
- @}
- else
- @{
- @}
- return arg6;
-@}
-@end smallexample
-
-@node Lexical Syntax, Parsing Syntax, What is GNU Treelang?, Top
-@chapter Lexical Syntax
-@cindex Lexical Syntax
-
-Treelang programs consist of whitespace, comments, keywords and names.
-@itemize @bullet
-
-@item
-Whitespace consists of the space character, a tab, and the end of line
-character. Line terminations are as defined by the
-standard C library. Whitespace is ignored except within comments,
-and where it separates parts of the program. In the example below, A and
-B are two separate names separated by whitespace.
-
-@smallexample
-A B
-@end smallexample
-
-@item
-Comments consist of @samp{//} followed by any characters up to the end
-of the line. C style comments (/* */) are not supported. For example,
-the assignment below is followed by a not very helpful comment.
-
-@smallexample
-x = 1; // @r{Set X to 1}
-@end smallexample
-
-@item
-Keywords consist of any of the following reserved words or symbols:
-
-@itemize @bullet
-@item @{
-used to start the statements in a function
-@item @}
-used to end the statements in a function
-@item (
-start list of function arguments, or to change the precedence of operators in
-an expression
-@item )
-end list or prioritized operators in expression
-@item ,
-used to separate parameters in a function prototype or in a function call
-@item ;
-used to end a statement
-@item +
-addition, or unary plus for signed literals
-@item -
-subtraction, or unary minus for signed literals
-@item =
-assignment
-@item ==
-equality test
-@item if
-begin IF statement
-@item else
-begin 'else' portion of IF statement
-@item static
-indicate variable is permanent, or function has file scope only
-@item automatic
-indicate that variable is allocated for the life of the current scope
-@item external_reference
-indicate that variable or function is defined in another file
-@item external_definition
-indicate that variable or function is to be accessible from other files
-@item int
-variable is an integer (same as C int)
-@item char
-variable is a character (same as C char)
-@item unsigned
-variable is unsigned. If this is not present, the variable is signed
-@item return
-start function return statement
-@item void
-used as function type to indicate function returns nothing
-@end itemize
-
-
-@item
-Names consist of any letter or "_" followed by any number of letters,
-numbers, or "_". "$" is not allowed in a name. All names must be globally
-unique, i.e. may not be used twice in any context, and must
-not be a keyword. Names and keywords are case sensitive. For example:
-
-@smallexample
-a A _a a_ IF_X
-@end smallexample
-
-are all different names.
-
-@end itemize
-
-@node Parsing Syntax, Compiler Overview, Lexical Syntax, Top
-@chapter Parsing Syntax
-@cindex Parsing Syntax
-
-Declarations are built up from the lexical elements described above. A
-file may contain one of more declarations.
-
-@itemize @bullet
-
-@item
-declaration: variable declaration OR function prototype OR function declaration
-
-@item
-Function Prototype: storage type NAME ( optional_parameter_list )
-
-@smallexample
-static int add (int a, int b)
-@end smallexample
-
-@item
-variable_declaration: storage type NAME initial;
-
-Example:
-
-@smallexample
-int temp1 = 1;
-@end smallexample
-
-A variable declaration can be outside a function, or at the start of a
-function.
-
-@item
-storage: automatic OR static OR external_reference OR external_definition
-
-This defines the scope, duration and visibility of a function or variable
-
-@enumerate 1
-
-@item
-automatic: This means a variable is allocated at start of the current scope and
-released when the current scope is exited. This can only be used for variables
-within functions. It cannot be used for functions.
-
-@item
-static: This means a variable is allocated at start of program and
-remains allocated until the program as a whole ends. For a function, it
-means that the function is only visible within the current file.
-
-@item
-external_definition: For a variable, which must be defined outside a
-function, it means that the variable is visible from other files. For a
-function, it means that the function is visible from another file.
-
-@item
-external_reference: For a variable, which must be defined outside a
-function, it means that the variable is defined in another file. For a
-function, it means that the function is defined in another file.
-
-@end enumerate
-
-@item
-type: int OR unsigned int OR char OR unsigned char OR void
-
-This defines the data type of a variable or the return type of a function.
-
-@enumerate a
-
-@item
-int: The variable is a signed integer. The function returns a signed integer.
-
-@item
-unsigned int: The variable is an unsigned integer. The function returns an unsigned integer.
-
-@item
-char: The variable is a signed character. The function returns a signed character.
-
-@item
-unsigned char: The variable is an unsigned character. The function returns an unsigned character.
-
-@end enumerate
-
-@item
-parameter_list OR parameter [, parameter]...
-
-@item
-parameter: variable_declaration ,
-
-The variable declarations must not have initializations.
-
-@item
-initial: = value
-
-@item
-value: integer_constant
-
-Values without a unary plus or minus are considered to be unsigned.
-@smallexample
-e.g.@: 1 +2 -3
-@end smallexample
-
-@item
-function_declaration: name @{ variable_declarations statements @}
-
-A function consists of the function name then the declarations (if any)
-and statements (if any) within one pair of braces.
-
-The details of the function arguments come from the function
-prototype. The function prototype must precede the function declaration
-in the file.
-
-@item
-statement: if_statement OR expression_statement OR return_statement
-
-@item
-if_statement: if ( expression ) @{ variable_declarations statements @}
-else @{ variable_declarations statements @}
-
-The first lot of statements is executed if the expression is
-nonzero. Otherwise the second lot of statements is executed. Either
-list of statements may be empty, but both sets of braces and the else must be present.
-
-@smallexample
-if (a==b)
-@{
-// @r{nothing}
-@}
-else
-@{
-a=b;
-@}
-@end smallexample
-
-@item
-expression_statement: expression;
-
-The expression is executed, including any side effects.
-
-@item
-return_statement: return expression_opt;
-
-Returns from the function. If the function is void, the expression must
-be absent, and if the function is not void the expression must be
-present.
-
-@item
-expression: variable OR integer_constant OR expression + expression
-OR expression - expression OR expression == expression OR ( expression )
-OR variable = expression OR function_call
-
-An expression can be a constant or a variable reference or a
-function_call. Expressions can be combined as a sum of two expressions
-or the difference of two expressions, or an equality test of two
-expressions. An assignment is also an expression. Expressions and operator
-precedence work as in C.
-
-@item
-function_call: function_name ( optional_comma_separated_expressions )
-
-This invokes the function, passing to it the values of the expressions
-as actual parameters.
-
-@end itemize
-
-@cindex compilers
-@node Compiler Overview, TREELANG and GCC, Parsing Syntax, Top
-@chapter Compiler Overview
-treelang is run as part of the GCC compiler.
-
-@itemize @bullet
-@cindex source code
-@cindex file, source
-@cindex code, source
-@cindex source file
-@item
-It reads a user's program, stored in a file and containing instructions
-written in the appropriate language (Treelang, C, and so on). This file
-contains @dfn{source code}.
-
-@cindex translation of user programs
-@cindex machine code
-@cindex code, machine
-@cindex mistakes
-@item
-It translates the user's program into instructions a computer can carry
-out more quickly than it takes to translate the instructions in the
-first place. These instructions are called @dfn{machine code}---code
-designed to be efficiently translated and processed by a machine such as
-a computer. Humans usually aren't as good writing machine code as they
-are at writing Treelang or C, because it is easy to make tiny mistakes
-writing machine code. When writing Treelang or C, it is easy to make
-big mistakes. But you can only make one mistake, because the compiler
-stops after it finds any problem.
-
-@cindex debugger
-@cindex bugs, finding
-@cindex @code{gdb}, command
-@cindex commands, @code{gdb}
-@item
-It provides information in the generated machine code
-that can make it easier to find bugs in the program
-(using a debugging tool, called a @dfn{debugger},
-such as @code{gdb}).
-
-@cindex libraries
-@cindex linking
-@cindex @code{ld} command
-@cindex commands, @code{ld}
-@item
-It locates and gathers machine code already generated to perform actions
-requested by statements in the user's program. This machine code is
-organized into @dfn{libraries} and is located and gathered during the
-@dfn{link} phase of the compilation process. (Linking often is thought
-of as a separate step, because it can be directly invoked via the
-@code{ld} command. However, the @code{gcc} command, as with most
-compiler commands, automatically performs the linking step by calling on
-@code{ld} directly, unless asked to not do so by the user.)
-
-@cindex language, incorrect use of
-@cindex incorrect use of language
-@item
-It attempts to diagnose cases where the user's program contains
-incorrect usages of the language. The @dfn{diagnostics} produced by the
-compiler indicate the problem and the location in the user's source file
-where the problem was first noticed. The user can use this information
-to locate and fix the problem.
-
-The compiler stops after the first error. There are no plans to fix
-this, ever, as it would vastly complicate the implementation of treelang
-to little or no benefit.
-
-@cindex diagnostics, incorrect
-@cindex incorrect diagnostics
-@cindex error messages, incorrect
-@cindex incorrect error messages
-(Sometimes an incorrect usage of the language leads to a situation where
-the compiler can not make any sense of what it reads---while a human
-might be able to---and thus ends up complaining about an incorrect
-``problem'' it encounters that, in fact, reflects a misunderstanding of
-the programmer's intention.)
-
-@cindex warnings
-@cindex questionable instructions
-@item
-There are a few warnings in treelang. For example an unused static function
-generate a warnings when -Wunused-function is specified, similarly an unused
-static variable generates a warning when -Wunused-variable are specified.
-The only treelang specific warning is a warning when an expression is in a
-return statement for functions that return void.
-@end itemize
-
-@cindex components of treelang
-@cindex @code{treelang}, components of
-@code{treelang} consists of several components:
-
-@cindex @code{gcc}, command
-@cindex commands, @code{gcc}
-@itemize @bullet
-@item
-A modified version of the @code{gcc} command, which also might be
-installed as the system's @code{cc} command.
-(In many cases, @code{cc} refers to the
-system's ``native'' C compiler, which
-might be a non-GNU compiler, or an older version
-of @code{GCC} considered more stable or that is
-used to build the operating system kernel.)
-
-@cindex @code{treelang}, command
-@cindex commands, @code{treelang}
-@item
-The @code{treelang} command itself.
-
-@item
-The @code{libc} run-time library. This library contains the machine
-code needed to support capabilities of the Treelang language that are
-not directly provided by the machine code generated by the
-@code{treelang} compilation phase. This is the same library that the
-main C compiler uses (libc).
-
-@cindex @code{tree1}, program
-@cindex programs, @code{tree1}
-@cindex assembler
-@cindex @code{as} command
-@cindex commands, @code{as}
-@cindex assembly code
-@cindex code, assembly
-@item
-The compiler itself, is internally named @code{tree1}.
-
-Note that @code{tree1} does not generate machine code directly---it
-generates @dfn{assembly code} that is a more readable form
-of machine code, leaving the conversion to actual machine code
-to an @dfn{assembler}, usually named @code{as}.
-@end itemize
-
-@code{GCC} is often thought of as ``the C compiler'' only,
-but it does more than that.
-Based on command-line options and the names given for files
-on the command line, @code{gcc} determines which actions to perform, including
-preprocessing, compiling (in a variety of possible languages), assembling,
-and linking.
-
-@cindex driver, gcc command as
-@cindex @code{gcc}, command as driver
-@cindex executable file
-@cindex files, executable
-@cindex cc1 program
-@cindex programs, cc1
-@cindex preprocessor
-@cindex cpp program
-@cindex programs, cpp
-For example, the command @samp{gcc foo.c} @dfn{drives} the file
-@file{foo.c} through the preprocessor @code{cpp}, then
-the C compiler (internally named
-@code{cc1}), then the assembler (usually @code{as}), then the linker
-(@code{ld}), producing an executable program named @file{a.out} (on
-UNIX systems).
-
-@cindex treelang program
-@cindex programs, treelang
-As another example, the command @samp{gcc foo.tree} would do much the
-same as @samp{gcc foo.c}, but instead of using the C compiler named
-@code{cc1}, @code{gcc} would use the treelang compiler (named
-@code{tree1}). However there is no preprocessor for treelang.
-
-@cindex @code{tree1}, program
-@cindex programs, @code{tree1}
-In a GNU Treelang installation, @code{gcc} recognizes Treelang source
-files by name just like it does C and C++ source files. It knows to use
-the Treelang compiler named @code{tree1}, instead of @code{cc1} or
-@code{cc1plus}, to compile Treelang files. If a file's name ends in
-@code{.tree} then GCC knows that the program is written in treelang. You
-can also manually override the language.
-
-@cindex @code{gcc}, not recognizing Treelang source
-@cindex unrecognized file format
-@cindex file format not recognized
-Non-Treelang-related operation of @code{gcc} is generally
-unaffected by installing the GNU Treelang version of @code{gcc}.
-However, without the installed version of @code{gcc} being the
-GNU Treelang version, @code{gcc} will not be able to compile
-and link Treelang programs.
-
-@cindex printing version information
-@cindex version information, printing
-The command @samp{gcc -v x.tree} where @samp{x.tree} is a file which
-must exist but whose contents are ignored, is a quick way to display
-version information for the various programs used to compile a typical
-Treelang source file.
-
-The @code{tree1} program represents most of what is unique to GNU
-Treelang; @code{tree1} is a combination of two rather large chunks of
-code.
-
-@cindex GCC Back End (GBE)
-@cindex GBE
-@cindex @code{GCC}, back end
-@cindex back end, GCC
-@cindex code generator
-One chunk is the so-called @dfn{GNU Back End}, or GBE,
-which knows how to generate fast code for a wide variety of processors.
-The same GBE is used by the C, C++, and Treelang compiler programs @code{cc1},
-@code{cc1plus}, and @code{tree1}, plus others.
-Often the GBE is referred to as the ``GCC back end'' or
-even just ``GCC''---in this manual, the term GBE is used
-whenever the distinction is important.
-
-@cindex GNU Treelang Front End (TFE)
-@cindex tree1
-@cindex @code{treelang}, front end
-@cindex front end, @code{treelang}
-The other chunk of @code{tree1} is the majority of what is unique about
-GNU Treelang---the code that knows how to interpret Treelang programs to
-determine what they are intending to do, and then communicate that
-knowledge to the GBE for actual compilation of those programs. This
-chunk is called the @dfn{Treelang Front End} (TFE). The @code{cc1} and
-@code{cc1plus} programs have their own front ends, for the C and C++
-languages, respectively. These fronts ends are responsible for
-diagnosing incorrect usage of their respective languages by the programs
-the process, and are responsible for most of the warnings about
-questionable constructs as well. (The GBE in principle handles
-producing some warnings, like those concerning possible references to
-undefined variables, but these warnings should not occur in treelang
-programs as the front end is meant to pick them up first).
-
-Because so much is shared among the compilers for various languages,
-much of the behavior and many of the user-selectable options for these
-compilers are similar.
-For example, diagnostics (error messages and
-warnings) are similar in appearance; command-line
-options like @samp{-Wall} have generally similar effects; and the quality
-of generated code (in terms of speed and size) is roughly similar
-(since that work is done by the shared GBE).
-
-@node TREELANG and GCC, Compiler, Compiler Overview, Top
-@chapter Compile Treelang, C, or Other Programs
-@cindex compiling programs
-@cindex programs, compiling
-
-@cindex @code{gcc}, command
-@cindex commands, @code{gcc}
-A GNU Treelang installation includes a modified version of the @code{gcc}
-command.
-
-In a non-Treelang installation, @code{gcc} recognizes C, C++,
-and Objective-C source files.
-
-In a GNU Treelang installation, @code{gcc} also recognizes Treelang source
-files and accepts Treelang-specific command-line options, plus some
-command-line options that are designed to cater to Treelang users
-but apply to other languages as well.
-
-@xref{G++ and GCC,,Programming Languages Supported by GCC,GCC,Using
-the GNU Compiler Collection (GCC)},
-for information on the way different languages are handled
-by the GCC compiler (@code{gcc}).
-
-You can use this, combined with the output of the @samp{gcc -v x.tree}
-command to get the options applicable to treelang. Treelang programs
-must end with the suffix @samp{.tree}.
-
-@cindex preprocessor
-
-Treelang programs are not by default run through the C
-preprocessor by @code{gcc}. There is no reason why they cannot be run through the
-preprocessor manually, but you would need to prevent the preprocessor
-from generating #line directives, using the @samp{-P} option, otherwise
-tree1 will not accept the input.
-
-@node Compiler, Other Languages, TREELANG and GCC, Top
-@chapter The GNU Treelang Compiler
-
-The GNU Treelang compiler, @code{treelang}, supports programs written
-in the GNU Treelang language.
-
-@node Other Languages, treelang internals, Compiler, Top
-@chapter Other Languages
-
-@menu
-* Interoperating with C and C++::
-@end menu
-
-@node Interoperating with C and C++, , Other Languages, Other Languages
-@section Tools and advice for interoperating with C and C++
-
-The output of treelang programs looks like C program code to the linker
-and everybody else, so you should be able to freely mix treelang and C
-(and C++) code, with one proviso.
-
-C promotes small integer types to 'int' when used as function parameters and
-return values in non-prototyped functions. Since treelang has no
-non-prototyped functions, the treelang compiler does not do this.
-
-@ifset INTERNALS
-@node treelang internals, Open Questions, Other Languages, Top
-@chapter treelang internals
-
-@menu
-* treelang files::
-* treelang compiler interfaces::
-* Hints and tips::
-@end menu
-
-@node treelang files, treelang compiler interfaces, treelang internals, treelang internals
-@section treelang files
-
-To create a compiler that integrates into GCC, you need create many
-files. Some of the files are integrated into the main GCC makefile, to
-build the various parts of the compiler and to run the test
-suite. Others are incorporated into various GCC programs such as
-@file{gcc.c}. Finally you must provide the actual programs comprising your
-compiler.
-
-@cindex files
-
-The files are:
-
-@enumerate 1
-
-@item
-COPYING. This is the copyright file, assuming you are going to use the
-GNU General Public License. You probably need to use the GPL because if
-you use the GCC back end your program and the back end are one program,
-and the back end is GPLed.
-
-This need not be present if the language is incorporated into the main
-GCC tree, as the main GCC directory has this file.
-
-@item
-COPYING.LIB. This is the copyright file for those parts of your program
-that are not to be covered by the GPL, but are instead to be covered by
-the LGPL (Library or Lesser GPL). This license may be appropriate for
-the library routines associated with your compiler. These are the
-routines that are linked with the @emph{output} of the compiler. Using
-the LGPL for these programs allows programs written using your compiler
-to be closed source. For example LIBC is under the LGPL.
-
-This need not be present if the language is incorporated into the main
-GCC tree, as the main GCC directory has this file.
-
-@item
-ChangeLog. Record all the changes to your compiler. Use the same format
-as used in treelang as it is supported by an emacs editing mode and is
-part of the FSF coding standard. Normally each directory has its own
-changelog. The FSF standard allows but does not require a meaningful
-comment on why the changes were made, above and beyond @emph{why} they
-were made. In the author's opinion it is useful to provide this
-information.
-
-@item
-treelang.texi. The manual, written in texinfo. Your manual would have a
-different file name. You need not write it in texinfo if you don't want
-do, but a lot of GNU software does use texinfo.
-
-@cindex Make-lang.in
-@item
-Make-lang.in. This file is part of the make file which in incorporated
-with the GCC make file skeleton (Makefile.in in the GCC directory) to
-make Makefile, as part of the configuration process.
-
-Makefile in turn is the main instruction to actually build
-everything. The build instructions are held in the main GCC manual and
-web site so they are not repeated here.
-
-There are some comments at the top which will help you understand what
-you need to do.
-
-There are make commands to build things, remove generated files with
-various degrees of thoroughness, count the lines of code (so you know
-how much progress you are making), build info and html files from the
-texinfo source, run the tests etc.
-
-@item
-README. Just a brief informative text file saying what is in this
-directory.
-
-@cindex config-lang.in
-@item
-config-lang.in. This file is read by the configuration progress and must
-be present. You specify the name of your language, the name(s) of the
-compiler(s) including preprocessors you are going to build, whether any,
-usually generated, files should be excluded from diffs (ie when making
-diff files to send in patches). Whether the equate 'stagestuff' is used
-is unknown (???).
-
-@cindex lang.opt
-@item
-lang.opt. This file is included into @file{gcc.c}, the main GCC driver, and
-tells it what options your language supports. This is also used to
-display help.
-
-@cindex lang-specs.h
-@item
-lang-specs.h. This file is also included in @file{gcc.c}. It tells
-@file{gcc.c} when to call your programs and what options to send them. The
-mini-language 'specs' is documented in the source of @file{gcc.c}. Do not
-attempt to write a specs file from scratch - use an existing one as the base
-and enhance it.
-
-@item
-Your texi files. Texinfo can be used to build documentation in HTML,
-info, dvi and postscript formats. It is a tagged language, is documented
-in its own manual, and has its own emacs mode.
-
-@item
-Your programs. The relationships between all the programs are explained
-in the next section. You need to write or use the following programs:
-
-@itemize @bullet
-
-@item
-lexer. This breaks the input into words and passes these to the
-parser. This is @file{lex.l} in treelang, which is passed through flex, a lex
-variant, to produce C code @file{lex.c}. Note there is a school of thought
-that says real men hand code their own lexers. However, you may prefer to
-write far less code and use flex, as was done with treelang.
-
-@item
-parser. This breaks the program into recognizable constructs such as
-expressions, statements etc. This is @file{parse.y} in treelang, which is
-passed through bison, which is a yacc variant, to produce C code
-@file{parse.c}.
-
-@item
-back end interface. This interfaces to the code generation back end. In
-treelang, this is @file{tree1.c} which mainly interfaces to @file{toplev.c} and
-@file{treetree.c} which mainly interfaces to everything else. Many languages
-mix up the back end interface with the parser, as in the C compiler for
-example. It is a matter of taste which way to do it, but with treelang
-it is separated out to make the back end interface cleaner and easier to
-understand.
-
-@item
-header files. For function prototypes and common data items. One point
-to note here is that bison can generate a header files with all the
-numbers is has assigned to the keywords and symbols, and you can include
-the same header in your lexer. This technique is demonstrated in
-treelang.
-
-@item
-compiler main file. GCC comes with a file @file{toplev.c} which is a
-perfectly serviceable main program for your compiler. GNU Treelang uses
-@file{toplev.c} but other languages have been known to replace it with their
-own main program. Again this is a matter of taste and how much code you
-want to write.
-
-@end itemize
-
-@end enumerate
-
-@node treelang compiler interfaces, Hints and tips, treelang files, treelang internals
-@section treelang compiler interfaces
-
-@cindex driver
-@cindex toplev.c
-
-@menu
-* treelang driver::
-* treelang main compiler::
-@end menu
-
-@node treelang driver, treelang main compiler, treelang compiler interfaces, treelang compiler interfaces
-@subsection treelang driver
-
-The GCC compiler consists of a driver, which then executes the various
-compiler phases based on the instructions in the specs files.
-
-Typically a program's language will be identified from its suffix
-(e.g., @file{.tree}) for treelang programs.
-
-The driver (@file{gcc.c}) will then drive (exec) in turn a preprocessor,
-the main compiler, the assembler and the link editor. Options to GCC allow you
-to override all of this. In the case of treelang programs there is no
-preprocessor, and mostly these days the C preprocessor is run within the
-main C compiler rather than as a separate process, apparently for reasons of speed.
-
-You will be using the standard assembler and linkage editor so these are
-ignored from now on.
-
-You have to write your own preprocessor if you want one. This is usually
-totally language specific. The main point to be aware of is to ensure
-that you find some way to pass file name and line number information
-through to the main compiler so that it can tell the back end this
-information and so the debugger can find the right source line for each
-piece of code. That is all there is to say about the preprocessor except
-that the preprocessor will probably not be the slowest part of the
-compiler and will probably not use the most memory so don't waste too
-much time tuning it until you know you need to do so.
-
-@node treelang main compiler, , treelang driver, treelang compiler interfaces
-@subsection treelang main compiler
-
-The main compiler for treelang consists of @file{toplev.c} from the main GCC
-compiler, the parser, lexer and back end interface routines, and the
-back end routines themselves, of which there are many.
-
-@file{toplev.c} does a lot of work for you and you should almost certainly
-use it.
-
-Writing this code is the hard part of creating a compiler using GCC. The
-back end interface documentation is incomplete and the interface is
-complex.
-
-There are three main aspects to interfacing to the other GCC code.
-
-@menu
-* Interfacing to toplev.c::
-* Interfacing to the garbage collection::
-* Interfacing to the code generation code. ::
-@end menu
-
-@node Interfacing to toplev.c, Interfacing to the garbage collection, treelang main compiler, treelang main compiler
-@subsubsection Interfacing to toplev.c
-
-In treelang this is handled mainly in tree1.c
-and partly in treetree.c. Peruse toplev.c for details of what you need
-to do.
-
-@node Interfacing to the garbage collection, Interfacing to the code generation code. , Interfacing to toplev.c, treelang main compiler
-@subsubsection Interfacing to the garbage collection
-
-Interfacing to the garbage collection. In treelang this is mainly in
-tree1.c.
-
-Memory allocation in the compiler should be done using the ggc_alloc and
-kindred routines in ggc*.*. At the end of every 'function' in your language, toplev.c calls
-the garbage collection several times. The garbage collection calls mark
-routines which go through the memory which is still used, telling the
-garbage collection not to free it. Then all the memory not used is
-freed.
-
-What this means is that you need a way to hook into this marking
-process. This is done by calling ggc_add_root. This provides the address
-of a callback routine which will be called duing garbage collection and
-which can call ggc_mark to save the storage. If storage is only
-used within the parsing of a function, you do not need to provide a way
-to mark it.
-
-Note that you can also call ggc_mark_tree to mark any of the back end
-internal 'tree' nodes. This routine will follow the branches of the
-trees and mark all the subordinate structures. This is useful for
-example when you have created a variable declaration that will be used
-across multiple functions, or for a function declaration (from a
-prototype) that may be used later on. See the next item for more on the
-tree nodes.
-
-@node Interfacing to the code generation code. , , Interfacing to the garbage collection, treelang main compiler
-@subsubsection Interfacing to the code generation code.
-
-In treelang this is done in treetree.c. A typedef called 'tree' which is
-defined in tree.h and tree.def in the GCC directory and largely
-implemented in tree.c and stmt.c forms the basic interface to the
-compiler back end.
-
-In general you call various tree routines to generate code, either
-directly or through toplev.c. You build up data structures and
-expressions in similar ways.
-
-You can read some documentation on this which can be found via the GCC
-main web page. In particular, the documentation produced by Joachim
-Nadler and translated by Tim Josling can be quite useful. the C compiler
-also has documentation in the main GCC manual (particularly the current
-CVS version) which is useful on a lot of the details.
-
-In time it is hoped to enhance this document to provide a more
-comprehensive overview of this topic. The main gap is in explaining how
-it all works together.
-
-@node Hints and tips, , treelang compiler interfaces, treelang internals
-@section Hints and tips
-
-@itemize @bullet
-
-@item
-TAGS: Use the make ETAGS commands to create TAGS files which can be used in
-emacs to jump to any symbol quickly.
-
-@item
-GREP: grep is also a useful way to find all uses of a symbol.
-
-@item
-TREE: The main routines to look at are tree.h and tree.def. You will
-probably want a hardcopy of these.
-
-@item
-SAMPLE: look at the sample interfacing code in treetree.c. You can use
-gdb to trace through the code and learn about how it all works.
-
-@item
-GDB: the GCC back end works well with gdb. It traps abort() and allows
-you to trace back what went wrong.
-
-@item
-Error Checking: The compiler back end does some error and consistency
-checking. Often the result of an error is just no code being
-generated. You will then need to trace through and find out what is
-going wrong. The rtl dump files can help here also.
-
-@item
-rtl dump files: The main compiler documents these files which are dumps
-of the rtl (intermediate code) which is manipulated doing the code
-generation process. This can provide useful clues about what is going
-wrong. The rtl 'language' is documented in the main GCC manual.
-
-@end itemize
-
-@end ifset
-
-@node Open Questions, Bugs, treelang internals, Top
-@chapter Open Questions
-
-If you know GCC well, please consider looking at the file treetree.c and
-resolving any questions marked "???".
-
-@node Bugs, Service, Open Questions, Top
-@chapter Reporting Bugs
-@cindex bugs
-@cindex reporting bugs
-
-You can report bugs to @email{@value{email-bugs}}. Please make
-sure bugs are real before reporting them. Follow the guidelines in the
-main GCC manual for submitting bug reports.
-
-@menu
-* Sending Patches::
-@end menu
-
-@node Sending Patches, , Bugs, Bugs
-@section Sending Patches for GNU Treelang
-
-If you would like to write bug fixes or improvements for the GNU
-Treelang compiler, that is very helpful. Send suggested fixes to
-@email{@value{email-patches}}.
-
-@node Service, Projects, Bugs, Top
-@chapter How To Get Help with GNU Treelang
-
-If you need help installing, using or changing GNU Treelang, there are two
-ways to find it:
-
-@itemize @bullet
-
-@item
-Look in the service directory for someone who might help you for a fee.
-The service directory is found in the file named @file{SERVICE} in the
-GCC distribution.
-
-@item
-Send a message to @email{@value{email-general}}.
-
-@end itemize
-
-@end ifset
-@ifset INTERNALS
-
-@node Projects, Index, Service, Top
-@chapter Projects
-@cindex projects
-
-If you want to contribute to @code{treelang} by doing research,
-design, specification, documentation, coding, or testing,
-the following information should give you some ideas.
-
-Send a message to @email{@value{email-general}} if you plan to add a
-feature.
-
-The main requirement for treelang is to add features and to add
-documentation. Features are things that the GCC back end can do but
-which are not reflected in treelang. Examples include structures,
-unions, pointers, arrays.
-
-@end ifset
-
-@node Index, , Projects, Top
-@unnumbered Index
-
-@printindex cp
-@summarycontents
-@contents
-@bye
diff --git a/gcc/treelang/treetree.c b/gcc/treelang/treetree.c
deleted file mode 100644
index 18354dc79f3..00000000000
--- a/gcc/treelang/treetree.c
+++ /dev/null
@@ -1,1184 +0,0 @@
-/* TREELANG Compiler interface to GCC's middle end (treetree.c)
- Called by the parser.
-
- If you want a working example of how to write a front end to GCC,
- you are in the right place.
-
- Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
- Free Software Foundation, Inc.
-
- This code is based on toy.c written by Richard Kenner.
-
- It was later modified by Jonathan Bartlett whose changes have all
- been removed (by Tim Josling).
-
- Various bits and pieces were cloned from the GCC main tree, as
- GCC evolved, for COBOLForGCC, by Tim Josling.
-
- It was adapted to TREELANG by Tim Josling 2001.
-
- Updated to function-at-a-time by James A. Morrison, 2004.
-
- -----------------------------------------------------------------------
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 3, or (at your option) any
- later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; see the file COPYING3. If not see
- <http://www.gnu.org/licenses/>.
-
- In other words, you are welcome to use, share and improve this program.
- You are forbidden to forbid anyone else to use, share and improve
- what you give them. Help stamp out software-hoarding!
-
- ----------------------------------------------------------------------- */
-
-/* Assumption: garbage collection is never called implicitly. It will
- not be called 'at any time' when short of memory. It will only be
- called explicitly at the end of each function. This removes the
- need for a *lot* of bother to ensure everything is in the mark trees
- at all times. */
-
-/* Note, it is OK to use GCC extensions such as long long in a compiler front
- end. This is because the GCC front ends are built using GCC. */
-
-/* GCC headers. */
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "tm.h"
-#include "tree.h"
-#include "tree-dump.h"
-#include "tree-iterator.h"
-#include "tree-gimple.h"
-#include "function.h"
-#include "flags.h"
-#include "output.h"
-#include "ggc.h"
-#include "toplev.h"
-#include "varray.h"
-#include "langhooks-def.h"
-#include "langhooks.h"
-#include "target.h"
-
-#include "cgraph.h"
-
-#include "treelang.h"
-#include "treetree.h"
-#include "opts.h"
-
-extern int option_main;
-extern char **file_names;
-
-/* Types expected by gcc's garbage collector.
- These types exist to allow language front-ends to
- add extra information in gcc's parse tree data structure.
- But the treelang front end doesn't use them -- it has
- its own parse tree data structure.
- We define them here only to satisfy gcc's garbage collector. */
-
-/* Language-specific identifier information. */
-
-struct lang_identifier GTY(())
-{
- struct tree_identifier common;
-};
-
-/* Language-specific tree node information. */
-
-union lang_tree_node
- GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE")))
-{
- union tree_node GTY ((tag ("0"),
- desc ("tree_node_structure (&%h)")))
- generic;
- struct lang_identifier GTY ((tag ("1"))) identifier;
-};
-
-/* Language-specific type information. */
-
-struct lang_type GTY(())
-{
- char junk; /* dummy field to ensure struct is not empty */
-};
-
-/* Language-specific declaration information. */
-
-struct lang_decl GTY(())
-{
- char junk; /* dummy field to ensure struct is not empty */
-};
-
-struct language_function GTY(())
-{
- char junk; /* dummy field to ensure struct is not empty */
-};
-
-static bool tree_mark_addressable (tree exp);
-static tree tree_lang_type_for_size (unsigned precision, int unsignedp);
-static tree tree_lang_type_for_mode (enum machine_mode mode, int unsignedp);
-
-/* Functions to keep track of the current scope. */
-static void pushlevel (int ignore);
-static tree poplevel (int keep, int reverse, int functionbody);
-static tree pushdecl (tree decl);
-static tree* getstmtlist (void);
-
-/* Langhooks. */
-extern const struct attribute_spec treelang_attribute_table[];
-static tree getdecls (void);
-static int global_bindings_p (void);
-static void insert_block (tree);
-
-static void tree_push_type_decl (tree id, tree type_node);
-
-/* The front end language hooks (addresses of code for this front
- end). These are not really very language-dependent, i.e.
- treelang, C, Mercury, etc. can all use almost the same definitions. */
-
-#undef LANG_HOOKS_MARK_ADDRESSABLE
-#define LANG_HOOKS_MARK_ADDRESSABLE tree_mark_addressable
-#undef LANG_HOOKS_TYPE_FOR_MODE
-#define LANG_HOOKS_TYPE_FOR_MODE tree_lang_type_for_mode
-#undef LANG_HOOKS_TYPE_FOR_SIZE
-#define LANG_HOOKS_TYPE_FOR_SIZE tree_lang_type_for_size
-#undef LANG_HOOKS_PARSE_FILE
-#define LANG_HOOKS_PARSE_FILE treelang_parse_file
-#undef LANG_HOOKS_ATTRIBUTE_TABLE
-#define LANG_HOOKS_ATTRIBUTE_TABLE treelang_attribute_table
-
-/* #undef LANG_HOOKS_TYPES_COMPATIBLE_P
-#define LANG_HOOKS_TYPES_COMPATIBLE_P hook_bool_tree_tree_true
-*/
-/* Hook routines and data unique to treelang. */
-
-#undef LANG_HOOKS_INIT
-#define LANG_HOOKS_INIT treelang_init
-#undef LANG_HOOKS_NAME
-#define LANG_HOOKS_NAME "GNU treelang"
-#undef LANG_HOOKS_FINISH
-#define LANG_HOOKS_FINISH treelang_finish
-#undef LANG_HOOKS_INIT_OPTIONS
-#define LANG_HOOKS_INIT_OPTIONS treelang_init_options
-#undef LANG_HOOKS_HANDLE_OPTION
-#define LANG_HOOKS_HANDLE_OPTION treelang_handle_option
-const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
-
-/* Tree code type/name/code tables. */
-
-#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
-
-const enum tree_code_class tree_code_type[] = {
-#include "tree.def"
- tcc_exceptional
-};
-#undef DEFTREECODE
-
-#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
-
-const unsigned char tree_code_length[] = {
-#include "tree.def"
- 0
-};
-#undef DEFTREECODE
-
-#define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
-
-const char *const tree_code_name[] = {
-#include "tree.def"
- "@@dummy"
-};
-#undef DEFTREECODE
-
-/* Number of bits in int and char - accessed by front end. */
-
-unsigned int tree_code_int_size = SIZEOF_INT * HOST_BITS_PER_CHAR;
-
-unsigned int tree_code_char_size = HOST_BITS_PER_CHAR;
-
-/* Return the tree stuff for this type TYPE_NUM. */
-
-tree
-tree_code_get_type (int type_num)
-{
- switch (type_num)
- {
- case SIGNED_CHAR:
- return signed_char_type_node;
-
- case UNSIGNED_CHAR:
- return unsigned_char_type_node;
-
- case SIGNED_INT:
- return integer_type_node;
-
- case UNSIGNED_INT:
- return unsigned_type_node;
-
- case VOID_TYPE:
- return void_type_node;
-
- default:
- gcc_unreachable ();
- }
-}
-
-/* Output the code for the start of an if statement. The test
- expression is EXP (true if not zero), and the stmt occurred at line
- LINENO in file FILENAME. */
-
-void
-tree_code_if_start (tree exp, location_t loc)
-{
- tree cond_exp, cond;
- cond_exp = fold_build2 (NE_EXPR, boolean_type_node, exp,
- build_int_cst (TREE_TYPE (exp), 0));
- SET_EXPR_LOCATION (cond_exp, loc);
- cond = build3 (COND_EXPR, void_type_node, cond_exp, NULL_TREE,
- NULL_TREE);
- SET_EXPR_LOCATION (cond, loc);
- append_to_statement_list_force (cond, getstmtlist ());
- pushlevel (0);
-}
-
-/* Output the code for the else of an if statement. The else occurred
- at line LINENO in file FILENAME. */
-
-void
-tree_code_if_else (location_t loc ATTRIBUTE_UNUSED)
-{
- tree stmts = *getstmtlist ();
- tree block = poplevel (1, 0, 0);
- if (BLOCK_VARS (block))
- {
- tree bindexpr = build3 (BIND_EXPR, void_type_node, BLOCK_VARS (block),
- stmts, block);
- stmts = alloc_stmt_list ();
- append_to_statement_list (bindexpr, &stmts);
- }
-
- TREE_OPERAND (STATEMENT_LIST_TAIL (*getstmtlist ())->stmt, 1) = stmts;
- pushlevel (0);
-}
-
-/* Output the code for the end_if an if statement. The end_if (final brace)
- occurred at line LINENO in file FILENAME. */
-
-void
-tree_code_if_end (location_t loc ATTRIBUTE_UNUSED)
-{
- tree stmts = *getstmtlist ();
- tree block = poplevel (1, 0, 0);
- if (BLOCK_VARS (block))
- {
- tree bindexpr = build3 (BIND_EXPR, void_type_node, BLOCK_VARS (block),
- stmts, block);
- stmts = alloc_stmt_list ();
- append_to_statement_list (bindexpr, &stmts);
- }
-
- TREE_OPERAND (STATEMENT_LIST_TAIL (*getstmtlist ())->stmt, 2) = stmts;
-}
-
-/* Create a function. The prototype name is NAME, storage class is
- STORAGE_CLASS, type of return variable is RET_TYPE, parameter lists
- is PARMS, returns decl for this function. */
-
-tree
-tree_code_create_function_prototype (const unsigned char *chars,
- unsigned int storage_class,
- unsigned int ret_type,
- struct prod_token_parm_item* parms,
- location_t loc)
-{
-
- tree id;
- struct prod_token_parm_item* parm;
- tree type_list = NULL_TREE;
- tree type_node;
- tree fn_type;
- tree fn_decl;
- tree parm_list = NULL_TREE;
-
- /* Build the type. */
- id = get_identifier ((const char*)chars);
- for (parm = parms; parm; parm = parm->tp.par.next)
- {
- gcc_assert (parm->category == parameter_category);
- type_node = tree_code_get_type (parm->type);
- type_list = tree_cons (NULL_TREE, type_node, type_list);
- }
- /* Last parm if void indicates fixed length list (as opposed to
- printf style va_* list). */
- type_list = tree_cons (NULL_TREE, void_type_node, type_list);
-
- /* The back end needs them in reverse order. */
- type_list = nreverse (type_list);
-
- type_node = tree_code_get_type (ret_type);
- fn_type = build_function_type (type_node, type_list);
-
- id = get_identifier ((const char*)chars);
- fn_decl = build_decl (FUNCTION_DECL, id, fn_type);
-
- /* Nested functions not supported here. */
- DECL_CONTEXT (fn_decl) = NULL_TREE;
- DECL_SOURCE_LOCATION (fn_decl) = loc;
-
- TREE_PUBLIC (fn_decl) = 0;
- DECL_EXTERNAL (fn_decl) = 0;
- TREE_STATIC (fn_decl) = 0;
- switch (storage_class)
- {
- case STATIC_STORAGE:
- break;
-
- case EXTERNAL_DEFINITION_STORAGE:
- TREE_PUBLIC (fn_decl) = 1;
- break;
-
- case EXTERNAL_REFERENCE_STORAGE:
- DECL_EXTERNAL (fn_decl) = 1;
- break;
-
- case AUTOMATIC_STORAGE:
- default:
- gcc_unreachable ();
- }
-
- /* Make the argument variable decls. */
- for (parm = parms; parm; parm = parm->tp.par.next)
- {
- tree parm_decl = build_decl (PARM_DECL, get_identifier
- ((const char*) (parm->tp.par.variable_name)),
- tree_code_get_type (parm->type));
-
- /* Some languages have different nominal and real types. */
- DECL_ARG_TYPE (parm_decl) = TREE_TYPE (parm_decl);
- gcc_assert (DECL_ARG_TYPE (parm_decl));
- gcc_assert (fn_decl);
- DECL_CONTEXT (parm_decl) = fn_decl;
- DECL_SOURCE_LOCATION (parm_decl) = loc;
- parm_list = chainon (parm_decl, parm_list);
- }
-
- /* Back into reverse order as the back end likes them. */
- parm_list = nreverse (parm_list);
-
- DECL_ARGUMENTS (fn_decl) = parm_list;
-
- /* Save the decls for use when the args are referred to. */
- for (parm = parms; parm_list;
- parm_list = TREE_CHAIN (parm_list),
- parm = parm->tp.par.next)
- {
- gcc_assert (parm); /* Too few. */
- *parm->tp.par.where_to_put_var_tree = parm_list;
- }
- gcc_assert (!parm); /* Too many. */
-
- /* Process declaration of function defined elsewhere. */
- rest_of_decl_compilation (fn_decl, 1, 0);
-
- return fn_decl;
-}
-
-
-/* Output code for start of function; the decl of the function is in
- PREV_SAVED (as created by tree_code_create_function_prototype),
- the function is at line number LINENO in file FILENAME. The
- parameter details are in the lists PARMS. Returns nothing. */
-
-void
-tree_code_create_function_initial (tree prev_saved,
- location_t loc)
-{
- tree fn_decl;
- tree resultdecl;
-
- fn_decl = prev_saved;
- gcc_assert (fn_decl);
-
- /* Output message if not -quiet. */
- announce_function (fn_decl);
-
- /* This has something to do with forcing output also. */
- pushdecl (fn_decl);
-
- /* Set current function for error msgs etc. */
- current_function_decl = fn_decl;
- DECL_INITIAL (fn_decl) = error_mark_node;
-
- DECL_SOURCE_LOCATION (fn_decl) = loc;
-
- /* Create a DECL for the functions result. */
- resultdecl =
- build_decl (RESULT_DECL, NULL_TREE, TREE_TYPE (TREE_TYPE (fn_decl)));
- DECL_CONTEXT (resultdecl) = fn_decl;
- DECL_ARTIFICIAL (resultdecl) = 1;
- DECL_IGNORED_P (resultdecl) = 1;
- DECL_SOURCE_LOCATION (resultdecl) = loc;
- DECL_RESULT (fn_decl) = resultdecl;
-
- /* Create a new level at the start of the function. */
-
- pushlevel (0);
-
- TREE_STATIC (fn_decl) = 1;
-}
-
-/* Wrapup a function contained in file FILENAME, ending at line LINENO. */
-void
-tree_code_create_function_wrapup (location_t loc)
-{
- tree block;
- tree fn_decl;
- tree stmts = *getstmtlist ();
-
- fn_decl = current_function_decl;
-
- /* Pop the level. */
-
- block = poplevel (1, 0, 1);
-
- /* And attach it to the function. */
-
- DECL_SAVED_TREE (fn_decl) = build3 (BIND_EXPR, void_type_node,
- BLOCK_VARS (block),
- stmts, block);
-
- allocate_struct_function (fn_decl, false);
- cfun->function_end_locus = loc;
-
- /* Dump the original tree to a file. */
- dump_function (TDI_original, fn_decl);
-
- /* Convert current function to GIMPLE for the middle end. */
- gimplify_function_tree (fn_decl);
- dump_function (TDI_generic, fn_decl);
-
- /* We are not inside of any scope now. */
- current_function_decl = NULL_TREE;
- set_cfun (NULL);
-
- /* Pass the current function off to the middle end. */
- (void)cgraph_node (fn_decl);
- cgraph_finalize_function (fn_decl, false);
-}
-
-/* Create a variable.
-
- The storage class is STORAGE_CLASS (eg LOCAL).
- The name is CHARS/LENGTH.
- The type is EXPRESSION_TYPE (eg UNSIGNED_TYPE).
- The init tree is INIT. */
-
-tree
-tree_code_create_variable (unsigned int storage_class,
- const unsigned char *chars,
- unsigned int length,
- unsigned int expression_type,
- tree init,
- location_t loc)
-{
- tree var_type;
- tree var_id;
- tree var_decl;
-
- /* 1. Build the type. */
- var_type = tree_code_get_type (expression_type);
-
- /* 2. Build the name. */
- gcc_assert (chars[length] == 0); /* Should be null terminated. */
-
- var_id = get_identifier ((const char*)chars);
-
- /* 3. Build the decl and set up init. */
- var_decl = build_decl (VAR_DECL, var_id, var_type);
-
- /* 3a. Initialization. */
- if (init)
- DECL_INITIAL (var_decl) = fold_convert (var_type, init);
- else
- DECL_INITIAL (var_decl) = NULL_TREE;
-
- gcc_assert (TYPE_SIZE (var_type) != 0); /* Did not calculate size. */
-
- DECL_CONTEXT (var_decl) = current_function_decl;
-
- DECL_SOURCE_LOCATION (var_decl) = loc;
-
- DECL_EXTERNAL (var_decl) = 0;
- TREE_PUBLIC (var_decl) = 0;
- TREE_STATIC (var_decl) = 0;
- /* Set the storage mode and whether only visible in the same file. */
- switch (storage_class)
- {
- case STATIC_STORAGE:
- TREE_STATIC (var_decl) = 1;
- break;
-
- case AUTOMATIC_STORAGE:
- break;
-
- case EXTERNAL_DEFINITION_STORAGE:
- TREE_PUBLIC (var_decl) = 1;
- break;
-
- case EXTERNAL_REFERENCE_STORAGE:
- DECL_EXTERNAL (var_decl) = 1;
- break;
-
- default:
- gcc_unreachable ();
- }
-
- TYPE_NAME (TREE_TYPE (var_decl)) = TYPE_NAME (var_type);
- return pushdecl (copy_node (var_decl));
-}
-
-
-/* Generate code for return statement. Type is in TYPE, expression
- is in EXP if present. */
-
-void
-tree_code_generate_return (tree type, tree exp)
-{
- tree setret;
-#ifdef ENABLE_CHECKING
- tree param;
-
- for (param = DECL_ARGUMENTS (current_function_decl);
- param;
- param = TREE_CHAIN (param))
- gcc_assert (DECL_CONTEXT (param) == current_function_decl);
-#endif
-
- if (exp && TREE_TYPE (TREE_TYPE (current_function_decl)) != void_type_node)
- {
- setret = fold_build2 (MODIFY_EXPR, type,
- DECL_RESULT (current_function_decl),
- fold_convert (type, exp));
- TREE_SIDE_EFFECTS (setret) = 1;
- TREE_USED (setret) = 1;
- setret = build1 (RETURN_EXPR, void_type_node, setret);
- /* Use EXPR_LOCUS so we don't lose any information about the file we
- are compiling. */
- SET_EXPR_LOCUS (setret, EXPR_LOCUS (exp));
- }
- else
- setret = build1 (RETURN_EXPR, void_type_node, NULL_TREE);
-
- append_to_statement_list_force (setret, getstmtlist ());
-}
-
-
-/* Output the code for this expression statement CODE. */
-
-void
-tree_code_output_expression_statement (tree code, location_t loc)
-{
- /* Output the line number information. */
- SET_EXPR_LOCATION (code, loc);
- TREE_USED (code) = 1;
- TREE_SIDE_EFFECTS (code) = 1;
- /* put CODE into the code list. */
- append_to_statement_list_force (code, getstmtlist ());
-}
-
-/* Return a tree for a constant integer value in the token TOK. No
- size checking is done. */
-
-tree
-tree_code_get_integer_value (const unsigned char *chars, unsigned int length)
-{
- long long int val = 0;
- unsigned int ix;
- unsigned int start = 0;
- int negative = 1;
- switch (chars[0])
- {
- case (unsigned char)'-':
- negative = -1;
- start = 1;
- break;
-
- case (unsigned char)'+':
- start = 1;
- break;
-
- default:
- break;
- }
- for (ix = start; ix < length; ix++)
- val = val * 10 + chars[ix] - (unsigned char)'0';
- val = val*negative;
- return build_int_cst_wide (start == 1 ?
- integer_type_node : unsigned_type_node,
- val & 0xffffffff, (val >> 32) & 0xffffffff);
-}
-
-/* Return the tree for an expression, type EXP_TYPE (see treetree.h)
- with tree type TYPE and with operands1 OP1, OP2 (maybe), OP3 (maybe). */
-tree
-tree_code_get_expression (unsigned int exp_type,
- tree type, tree op1, tree op2,
- tree op3 ATTRIBUTE_UNUSED,
- location_t loc)
-{
- tree ret1;
- int operator;
-
- switch (exp_type)
- {
- case EXP_ASSIGN:
- gcc_assert (op1 && op2);
- operator = MODIFY_EXPR;
- ret1 = fold_build2 (operator, void_type_node, op1,
- fold_convert (TREE_TYPE (op1), op2));
-
- break;
-
- case EXP_PLUS:
- operator = PLUS_EXPR;
- goto binary_expression;
-
- case EXP_MINUS:
- operator = MINUS_EXPR;
- goto binary_expression;
-
- case EXP_EQUALS:
- operator = EQ_EXPR;
- goto binary_expression;
-
- /* Expand a binary expression. Ensure the operands are the right type. */
- binary_expression:
- gcc_assert (op1 && op2);
- ret1 = fold_build2 (operator, type,
- fold_convert (type, op1),
- fold_convert (type, op2));
- break;
-
- /* Reference to a variable. This is dead easy, just return the
- decl for the variable. If the TYPE is different than the
- variable type, convert it. However, to keep accurate location
- information we wrap it in a NOP_EXPR is is easily stripped. */
- case EXP_REFERENCE:
- gcc_assert (op1);
- TREE_USED (op1) = 1;
- if (type == TREE_TYPE (op1))
- ret1 = build1 (NOP_EXPR, type, op1);
- else
- ret1 = fold_convert (type, op1);
- break;
-
- case EXP_FUNCTION_INVOCATION:
- gcc_assert (op1);
- gcc_assert(TREE_TYPE (TREE_TYPE (op1)) == type);
- TREE_USED (op1) = 1;
- ret1 = build_function_call_expr(op1, op2);
- break;
-
- default:
- gcc_unreachable ();
- }
-
- /* Declarations already have a location and constants can be shared so they
- shouldn't a location set on them. */
- if (! DECL_P (ret1) && ! TREE_CONSTANT (ret1))
- SET_EXPR_LOCATION (ret1, loc);
- return ret1;
-}
-
-/* Init parameter list and return empty list. */
-
-tree
-tree_code_init_parameters (void)
-{
- return NULL_TREE;
-}
-
-/* Add a parameter EXP whose expression type is EXP_PROTO to list
- LIST, returning the new list. */
-
-tree
-tree_code_add_parameter (tree list, tree proto_exp, tree exp)
-{
- tree new_exp;
- new_exp = tree_cons (NULL_TREE,
- fold_convert (TREE_TYPE (proto_exp),
- exp), NULL_TREE);
- if (!list)
- return new_exp;
- return chainon (new_exp, list);
-}
-
-/* Get a stringpool entry for a string S of length L. This is needed
- because the GTY routines don't mark strings, forcing you to put
- them into stringpool, which is never freed. */
-
-const char*
-get_string (const char *s, size_t l)
-{
- tree t;
- t = get_identifier_with_length (s, l);
- return IDENTIFIER_POINTER(t);
-}
-
-/* Save typing debug_tree all the time. Dump a tree T pretty and
- concise. */
-
-void dt (tree t);
-
-void
-dt (tree t)
-{
- debug_tree (t);
-}
-
-/* Routines Expected by gcc: */
-
-/* These are used to build types for various sizes. The code below
- is a simplified version of that of GNAT. */
-
-#ifndef MAX_BITS_PER_WORD
-#define MAX_BITS_PER_WORD BITS_PER_WORD
-#endif
-
-/* This variable keeps a table for types for each precision so that we only
- allocate each of them once. Signed and unsigned types are kept separate. */
-static GTY(()) tree signed_and_unsigned_types[MAX_BITS_PER_WORD + 1][2];
-
-/* Mark EXP saying that we need to be able to take the
- address of it; it should not be allocated in a register.
- Value is 1 if successful.
-
- This implementation was copied from c-decl.c. */
-
-static bool
-tree_mark_addressable (tree exp)
-{
- register tree x = exp;
- while (1)
- switch (TREE_CODE (x))
- {
- case COMPONENT_REF:
- case ADDR_EXPR:
- case ARRAY_REF:
- case REALPART_EXPR:
- case IMAGPART_EXPR:
- x = TREE_OPERAND (x, 0);
- break;
-
- case CONSTRUCTOR:
- TREE_ADDRESSABLE (x) = 1;
- return 1;
-
- case VAR_DECL:
- case CONST_DECL:
- case PARM_DECL:
- case RESULT_DECL:
- if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
- && DECL_NONLOCAL (x))
- {
- if (TREE_PUBLIC (x))
- {
- error ("Global register variable %qD used in nested function.",
- x);
- return 0;
- }
- pedwarn ("Register variable %qD used in nested function.", x);
- }
- else if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x))
- {
- if (TREE_PUBLIC (x))
- {
- error ("Address of global register variable %qD requested.",
- x);
- return 0;
- }
-
- pedwarn ("Address of register variable %qD requested.", x);
- }
-
- /* drops in */
- case FUNCTION_DECL:
- TREE_ADDRESSABLE (x) = 1;
-
- default:
- return 1;
- }
-}
-
-/* Return an integer type with the number of bits of precision given by
- PRECISION. UNSIGNEDP is nonzero if the type is unsigned; otherwise
- it is a signed type. */
-
-static tree
-tree_lang_type_for_size (unsigned precision, int unsignedp)
-{
- tree t;
-
- if (precision <= MAX_BITS_PER_WORD
- && signed_and_unsigned_types[precision][unsignedp] != 0)
- return signed_and_unsigned_types[precision][unsignedp];
-
- if (unsignedp)
- t = signed_and_unsigned_types[precision][1]
- = make_unsigned_type (precision);
- else
- t = signed_and_unsigned_types[precision][0]
- = make_signed_type (precision);
-
- return t;
-}
-
-/* Return a data type that has machine mode MODE. UNSIGNEDP selects
- an unsigned type; otherwise a signed type is returned. */
-
-static tree
-tree_lang_type_for_mode (enum machine_mode mode, int unsignedp)
-{
- if (SCALAR_INT_MODE_P (mode))
- return tree_lang_type_for_size (GET_MODE_BITSIZE (mode), unsignedp);
- else
- return NULL_TREE;
-}
-
-
-/* These functions and variables deal with binding contours. We only
- need these functions for the list of PARM_DECLs, but we leave the
- functions more general; these are a simplified version of the
- functions from GNAT. */
-
-/* For each binding contour we allocate a binding_level structure which records
- the entities defined or declared in that contour. Contours include:
-
- the global one
- one for each subprogram definition
- one for each compound statement (declare block)
-
- Binding contours are used to create GCC tree BLOCK nodes. */
-
-struct binding_level
-{
- /* A chain of ..._DECL nodes for all variables, constants, functions,
- parameters and type declarations. These ..._DECL nodes are chained
- through the TREE_CHAIN field. Note that these ..._DECL nodes are stored
- in the reverse of the order supplied to be compatible with the
- back-end. */
- tree names;
- /* For each level (except the global one), a chain of BLOCK nodes for all
- the levels that were entered and exited one level down from this one. */
- tree blocks;
-
- tree stmts;
- /* The binding level containing this one (the enclosing binding level). */
- struct binding_level *level_chain;
-};
-
-/* The binding level currently in effect. */
-static struct binding_level *current_binding_level = NULL;
-
-/* The outermost binding level. This binding level is created when the
- compiler is started and it will exist through the entire compilation. */
-static struct binding_level *global_binding_level;
-
-/* Binding level structures are initialized by copying this one. */
-static struct binding_level clear_binding_level = {NULL, NULL, NULL, NULL };
-
-/* Return non-zero if we are currently in the global binding level. */
-
-static int
-global_bindings_p (void)
-{
- return current_binding_level == global_binding_level ? -1 : 0;
-}
-
-
-/* Return the list of declarations in the current level. Note that this list
- is in reverse order (it has to be so for back-end compatibility). */
-
-static tree
-getdecls (void)
-{
- return current_binding_level->names;
-}
-
-/* Return a STATMENT_LIST for the current block. */
-
-static tree*
-getstmtlist (void)
-{
- return &current_binding_level->stmts;
-}
-
-/* Enter a new binding level. The input parameter is ignored, but has to be
- specified for back-end compatibility. */
-
-static void
-pushlevel (int ignore ATTRIBUTE_UNUSED)
-{
- struct binding_level *newlevel = XNEW (struct binding_level);
-
- *newlevel = clear_binding_level;
-
- /* Add this level to the front of the chain (stack) of levels that are
- active. */
- newlevel->level_chain = current_binding_level;
- current_binding_level = newlevel;
- current_binding_level->stmts = alloc_stmt_list ();
-}
-
-/* Exit a binding level.
- Pop the level off, and restore the state of the identifier-decl mappings
- that were in effect when this level was entered.
-
- If KEEP is nonzero, this level had explicit declarations, so
- and create a "block" (a BLOCK node) for the level
- to record its declarations and subblocks for symbol table output.
-
- If FUNCTIONBODY is nonzero, this level is the body of a function,
- so create a block as if KEEP were set and also clear out all
- label names.
-
- If REVERSE is nonzero, reverse the order of decls before putting
- them into the BLOCK. */
-
-static tree
-poplevel (int keep, int reverse, int functionbody)
-{
- /* Points to a BLOCK tree node. This is the BLOCK node constructed for the
- binding level that we are about to exit and which is returned by this
- routine. */
- tree block_node = NULL_TREE;
- tree decl_chain;
- tree subblock_chain = current_binding_level->blocks;
- tree subblock_node;
-
- /* Reverse the list of *_DECL nodes if desired. Note that the ..._DECL
- nodes chained through the `names' field of current_binding_level are in
- reverse order except for PARM_DECL node, which are explicitly stored in
- the right order. */
- decl_chain = (reverse) ? nreverse (current_binding_level->names)
- : current_binding_level->names;
-
- /* If there were any declarations in the current binding level, or if this
- binding level is a function body, or if there are any nested blocks then
- create a BLOCK node to record them for the life of this function. */
- if (keep || functionbody)
- block_node = build_block (keep ? decl_chain : 0, subblock_chain, 0, 0);
-
- /* Record the BLOCK node just built as the subblock its enclosing scope. */
- for (subblock_node = subblock_chain; subblock_node;
- subblock_node = TREE_CHAIN (subblock_node))
- BLOCK_SUPERCONTEXT (subblock_node) = block_node;
-
- /* Clear out the meanings of the local variables of this level. */
-
- for (subblock_node = decl_chain; subblock_node;
- subblock_node = TREE_CHAIN (subblock_node))
- if (DECL_NAME (subblock_node) != 0)
- /* If the identifier was used or addressed via a local extern decl,
- don't forget that fact. */
- if (DECL_EXTERNAL (subblock_node))
- {
- if (TREE_USED (subblock_node))
- TREE_USED (DECL_NAME (subblock_node)) = 1;
- }
-
- /* Pop the current level. */
- current_binding_level = current_binding_level->level_chain;
-
- if (functionbody)
- {
- /* This is the top level block of a function. */
- DECL_INITIAL (current_function_decl) = block_node;
- }
- else if (block_node)
- {
- current_binding_level->blocks
- = chainon (current_binding_level->blocks, block_node);
- }
-
- /* If we did not make a block for the level just exited, any blocks made for
- inner levels (since they cannot be recorded as subblocks in that level)
- must be carried forward so they will later become subblocks of something
- else. */
- else if (subblock_chain)
- current_binding_level->blocks
- = chainon (current_binding_level->blocks, subblock_chain);
- if (block_node)
- TREE_USED (block_node) = 1;
-
- return block_node;
-}
-
-/* Insert BLOCK at the end of the list of subblocks of the
- current binding level. This is used when a BIND_EXPR is expanded,
- to handle the BLOCK node inside the BIND_EXPR. */
-
-static void
-insert_block (tree block)
-{
- TREE_USED (block) = 1;
- current_binding_level->blocks
- = chainon (current_binding_level->blocks, block);
-}
-
-
-/* Records a ..._DECL node DECL as belonging to the current lexical scope.
- Returns the ..._DECL node. */
-
-tree
-pushdecl (tree decl)
-{
- /* External objects aren't nested, other objects may be. */
-
- if ((DECL_EXTERNAL (decl)) || (decl==current_function_decl))
- DECL_CONTEXT (decl) = 0;
- else
- DECL_CONTEXT (decl) = current_function_decl;
-
- /* Put the declaration on the list. The list of declarations is in reverse
- order. The list will be reversed later if necessary. This needs to be
- this way for compatibility with the back-end. */
-
- TREE_CHAIN (decl) = current_binding_level->names;
- current_binding_level->names = decl;
-
- /* For the declaration of a type, set its name if it is not already set. */
-
- if (TREE_CODE (decl) == TYPE_DECL
- && TYPE_NAME (TREE_TYPE (decl)) == 0)
- TYPE_NAME (TREE_TYPE (decl)) = DECL_NAME (decl);
-
- /* Put automatic variables into the intermediate representation. */
- if (TREE_CODE (decl) == VAR_DECL && !DECL_EXTERNAL (decl)
- && !TREE_STATIC (decl) && !TREE_PUBLIC (decl))
- tree_code_output_expression_statement (build1 (DECL_EXPR, void_type_node,
- decl),
- DECL_SOURCE_LOCATION (decl));
- return decl;
-}
-
-
-static void
-tree_push_type_decl(tree id, tree type_node)
-{
- tree decl = build_decl (TYPE_DECL, id, type_node);
- TYPE_NAME (type_node) = id;
- pushdecl (decl);
-}
-
-#define NULL_BINDING_LEVEL (struct binding_level *) NULL
-
-/* Create the predefined scalar types of C,
- and some nodes representing standard constants (0, 1, (void *) 0).
- Initialize the global binding level.
- Make definitions for built-in primitive functions. */
-
-void
-treelang_init_decl_processing (void)
-{
- current_function_decl = NULL;
- current_binding_level = NULL_BINDING_LEVEL;
- pushlevel (0); /* make the binding_level structure for global names */
- global_binding_level = current_binding_level;
-
- build_common_tree_nodes (flag_signed_char, false);
-
- /* set standard type names */
-
- /* Define `int' and `char' last so that they are not overwritten. */
- tree_push_type_decl (NULL_TREE, intQI_type_node);
- tree_push_type_decl (NULL_TREE, intHI_type_node);
- tree_push_type_decl (NULL_TREE, intSI_type_node);
- tree_push_type_decl (NULL_TREE, intDI_type_node);
-#if HOST_BITS_PER_WIDE_INT >= 64
- tree_push_type_decl (NULL_TREE, intTI_type_node);
-#endif
- tree_push_type_decl (NULL_TREE, unsigned_intQI_type_node);
- tree_push_type_decl (NULL_TREE, unsigned_intHI_type_node);
- tree_push_type_decl (NULL_TREE, unsigned_intSI_type_node);
- tree_push_type_decl (NULL_TREE, unsigned_intDI_type_node);
-#if HOST_BITS_PER_WIDE_INT >= 64
- tree_push_type_decl (NULL_TREE, unsigned_intTI_type_node);
-#endif
-
- tree_push_type_decl (get_identifier ("int"), integer_type_node);
- tree_push_type_decl (get_identifier ("char"), char_type_node);
- tree_push_type_decl (get_identifier ("long int"),
- long_integer_type_node);
- tree_push_type_decl (get_identifier ("unsigned int"),
- unsigned_type_node);
- tree_push_type_decl (get_identifier ("long unsigned int"),
- long_unsigned_type_node);
- tree_push_type_decl (get_identifier ("long long int"),
- long_long_integer_type_node);
- tree_push_type_decl (get_identifier ("long long unsigned int"),
- long_long_unsigned_type_node);
- tree_push_type_decl (get_identifier ("short int"),
- short_integer_type_node);
- tree_push_type_decl (get_identifier ("short unsigned int"),
- short_unsigned_type_node);
- tree_push_type_decl (get_identifier ("signed char"),
- signed_char_type_node);
- tree_push_type_decl (get_identifier ("unsigned char"),
- unsigned_char_type_node);
- size_type_node = make_unsigned_type (POINTER_SIZE);
- tree_push_type_decl (get_identifier ("size_t"), size_type_node);
- set_sizetype (size_type_node);
-
- build_common_tree_nodes_2 (/* short_double= */ 0);
-
- tree_push_type_decl (get_identifier ("float"), float_type_node);
- tree_push_type_decl (get_identifier ("double"), double_type_node);
- tree_push_type_decl (get_identifier ("long double"), long_double_type_node);
- tree_push_type_decl (get_identifier ("void"), void_type_node);
-
- build_common_builtin_nodes ();
- (*targetm.init_builtins) ();
-
- pedantic_lvalues = pedantic;
-}
-
-static tree
-handle_attribute (tree *node, tree name, tree ARG_UNUSED (args),
- int ARG_UNUSED (flags), bool *no_add_attrs)
-{
- if (TREE_CODE (*node) == FUNCTION_DECL)
- {
- if (strcmp (IDENTIFIER_POINTER (name), "const") == 0)
- TREE_READONLY (*node) = 1;
- if (strcmp (IDENTIFIER_POINTER (name), "nothrow") == 0)
- TREE_NOTHROW (*node) = 1;
- }
- else
- {
- warning (OPT_Wattributes, "%qD attribute ignored", name);
- *no_add_attrs = true;
- }
-
- return NULL_TREE;
-}
-
-const struct attribute_spec treelang_attribute_table[] =
-{
- { "const", 0, 0, true, false, false, handle_attribute },
- { "nothrow", 0, 0, true, false, false, handle_attribute },
- { NULL, 0, 0, false, false, false, NULL },
-};
-
-#include "debug.h" /* for debug_hooks, needed by gt-treelang-treetree.h */
-#include "gt-treelang-treetree.h"
diff --git a/gcc/treelang/treetree.h b/gcc/treelang/treetree.h
deleted file mode 100644
index 6774626cd91..00000000000
--- a/gcc/treelang/treetree.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* TREELANG Compiler definitions for interfacing to treetree.c
- (compiler back end interface).
-
- Copyright (C) 1986, 87, 89, 92-96, 1997, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005, 2007 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 3, or (at your option) any
- later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; see the file COPYING3. If not see
- <http://www.gnu.org/licenses/>.
-
- In other words, you are welcome to use, share and improve this program.
- You are forbidden to forbid anyone else to use, share and improve
- what you give them. Help stamp out software-hoarding!
-
- ---------------------------------------------------------------------------
-
- Written by Tim Josling 1999, 2000, 2001, based in part on other
- parts of the GCC compiler. */
-
-tree tree_code_init_parameters (void);
-tree tree_code_add_parameter (tree list, tree proto_exp, tree exp);
-tree tree_code_get_integer_value (const unsigned char *chars, unsigned int length);
-void tree_code_generate_return (tree type, tree exp);
-void tree_ggc_storage_always_used (void *m);
-tree tree_code_get_expression (unsigned int exp_type, tree type, tree op1,
- tree op2, tree op3, location_t loc);
-tree tree_code_get_numeric_type (unsigned int size1, unsigned int sign1);
-void tree_code_create_function_initial (tree prev_saved,
- location_t loc);
-void tree_code_create_function_wrapup (location_t loc);
-tree tree_code_create_function_prototype (const unsigned char *chars,
- unsigned int storage_class,
- unsigned int ret_type,
- struct prod_token_parm_item* parms,
- location_t loc);
-tree tree_code_create_variable (unsigned int storage_class,
- const unsigned char *chars,
- unsigned int length,
- unsigned int expression_type,
- tree init,
- location_t loc);
-void tree_code_output_expression_statement (tree code,
- location_t loc);
-void tree_code_if_start (tree exp, location_t loc);
-void tree_code_if_else (location_t loc);
-void tree_code_if_end (location_t loc);
-tree tree_code_get_type (int type_num);
-void treelang_init_decl_processing (void);
-void treelang_finish (void);
-bool treelang_init (void);
-unsigned int treelang_init_options (unsigned int, const char **);
-int treelang_handle_option (size_t scode, const char *arg, int value);
-void treelang_parse_file (int debug_flag);
-void push_var_level (void);
-void pop_var_level (void);
-const char* get_string (const char *s, size_t l);