]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
compiler: move Backend/Linemap creation out of front end.
authorThan McIntosh <thanm@google.com>
Tue, 11 Oct 2016 00:11:43 +0000 (00:11 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Tue, 11 Oct 2016 00:11:43 +0000 (00:11 +0000)
    Push the calls to create Backend and Linemap object out
    of the front end into the back end, and instead pass pointers to
    these objects in the go_create_gogo_args struct. This allows
    for more flexibility in the interfaces used to create the
    objects.

    Reviewed-on: https://go-review.googlesource.com/30698

* go-gcc.h: New file.
* go-c.h (struct go_create_gogo_args): Add backend and linemap
fields.
* go-lang.c: Include "go-gcc.h".
(go_langhook_init): Set linemap and backend fields of args.
* go-gcc.cc: Include "go-gcc.h".
* go-linemap.cc: Include "go-gcc.h".

From-SVN: r240959

gcc/go/ChangeLog
gcc/go/go-c.h
gcc/go/go-gcc.cc
gcc/go/go-gcc.h [new file with mode: 0644]
gcc/go/go-lang.c
gcc/go/go-linemap.cc
gcc/go/gofrontend/MERGE
gcc/go/gofrontend/backend.h
gcc/go/gofrontend/go-linemap.h
gcc/go/gofrontend/go.cc

index 6ea6138c327e7a27440634dd5dcfbec0ca5fb695..93bf4c12c2b1f76d32a498894aaa33e6bdd2c59c 100644 (file)
@@ -1,3 +1,13 @@
+2016-10-10  Than McIntosh  <thanm@google.com>
+
+       * go-gcc.h: New file.
+       * go-c.h (struct go_create_gogo_args): Add backend and linemap
+       fields.
+       * go-lang.c: Include "go-gcc.h".
+       (go_langhook_init): Set linemap and backend fields of args.
+       * go-gcc.cc: Include "go-gcc.h".
+       * go-linemap.cc: Include "go-gcc.h".
+
 2016-10-10  Than McIntosh  <thanm@google.com>
 
        * go-linemap.cc (Gcc_linemap::location_line): New method.
index 194c1a9ca64bacf8afc68cd08b73da1c5d97932e..74e89463c43aef8c3c29a1e38b9c9ad27abfb791 100644 (file)
@@ -22,6 +22,8 @@ along with GCC; see the file COPYING3.  If not see
 
 #define GO_EXTERN_C
 
+class Linemap;
+class Backend;
 
 /* Functions defined in the Go frontend proper called by the GCC
    interface.  */
@@ -36,9 +38,11 @@ struct go_create_gogo_args
   int int_type_size;
   int pointer_size;
   const char* pkgpath;
-  const char *prefix;
-  const char *relative_import_path;
-  const char *c_header;
+  const char* prefix;
+  const char* relative_import_path;
+  const char* c_header;
+  Backend* backend;
+  Linemap* linemap;
   bool check_divide_by_zero;
   bool check_divide_overflow;
   bool compiling_runtime;
index b3701bf31e4820e7f4fae8642b63fc3c4d6cec92..44daaa0aecef3ac52ddf6acb792065650367b50f 100644 (file)
@@ -43,6 +43,7 @@
 #include "builtins.h"
 
 #include "go-c.h"
+#include "go-gcc.h"
 
 #include "gogo.h"
 #include "backend.h"
diff --git a/gcc/go/go-gcc.h b/gcc/go/go-gcc.h
new file mode 100644 (file)
index 0000000..0dfd392
--- /dev/null
@@ -0,0 +1,33 @@
+/* go-gcc.h -- Header file for go backend-specific interfaces.
+   Copyright (C) 2016 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/>.  */
+
+#ifndef GO_GO_GCC_BACKEND_H
+#define GO_GO_GCC_BACKEND_H
+
+class Backend;
+
+// Create and return a Backend object for use with the GCC backend.
+
+extern Backend *go_get_backend();
+
+// Create and return a Linemap object for use with the GCC backend.
+
+extern Linemap *go_get_linemap();
+
+#endif // !defined(GO_GCC_BACKEND_H)
index 88667e0c9b4aa6d74d4719f9b78172ee2755d65b..8d66ee0e176af560af5612f4958ed9c614eb17aa 100644 (file)
@@ -37,6 +37,7 @@ along with GCC; see the file COPYING3.  If not see
 #include <mpfr.h>
 
 #include "go-c.h"
+#include "go-gcc.h"
 
 /* Language-dependent contents of a type.  */
 
@@ -111,6 +112,8 @@ go_langhook_init (void)
   args.check_divide_overflow = go_check_divide_overflow;
   args.compiling_runtime = go_compiling_runtime;
   args.debug_escape_level = go_debug_escape_level;
+  args.linemap = go_get_linemap();
+  args.backend = go_get_backend();
   go_create_gogo (&args);
 
   build_common_builtin_nodes ();
index 22498d940adbfc7ad4705b8b6a6d75dd18b9c8d5..2accb95e5c476d66e83360f6ae8385c12863adf0 100644 (file)
@@ -6,6 +6,8 @@
 
 #include "go-linemap.h"
 
+#include "go-gcc.h"
+
 // This class implements the Linemap interface defined by the
 // frontend.
 
index c987dc90eb720bd5dfd9fd1041c27a01b2a6df2a..66b1b856c7eda2794cab6112d6944668b631877b 100644 (file)
@@ -1,4 +1,4 @@
-ecf9b645cefc5c3b4e6339adeb452b2d8642cf3e
+a700fa1908aa2a36f05b3ee09932f814fd94a10d
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index 3b9d3a6202ab842a3b7b3d4324306402f10ebffc..8c45b6493b74e26b966bb3f768c37bea848aeba0 100644 (file)
@@ -740,8 +740,4 @@ class Backend
                            const std::vector<Bvariable*>& variable_decls) = 0;
 };
 
-// The backend interface has to define this function.
-
-extern Backend* go_get_backend();
-
 #endif // !defined(GO_BACKEND_H)
index f0ca99d905c00fe11f4abe7bfc4f03a824d87139..704efdbfa53f92f6dc2e6ebea05312e19f3d70e0 100644 (file)
@@ -149,8 +149,4 @@ class Linemap
   }
 };
 
-// The backend interface must define this function.  It should return
-// a fully implemented instance of Linemap.
-extern Linemap* go_get_linemap();
-
 #endif // !defined(GO_LINEMAP_H)
index 927f29d81330324e128824ca7402a50648290b8d..e0e84e3adc2510bf019c2fb715a19ce82d49896a 100644 (file)
@@ -24,8 +24,7 @@ void
 go_create_gogo(const struct go_create_gogo_args* args)
 {
   go_assert(::gogo == NULL);
-  Linemap* linemap = go_get_linemap();
-  ::gogo = new Gogo(go_get_backend(), linemap, args->int_type_size,
+  ::gogo = new Gogo(args->backend, args->linemap, args->int_type_size,
                    args->pointer_size);
 
   if (args->pkgpath != NULL)