aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/go/ChangeLog10
-rw-r--r--gcc/go/go-c.h10
-rw-r--r--gcc/go/go-gcc.cc1
-rw-r--r--gcc/go/go-gcc.h33
-rw-r--r--gcc/go/go-lang.c3
-rw-r--r--gcc/go/go-linemap.cc2
-rw-r--r--gcc/go/gofrontend/MERGE2
-rw-r--r--gcc/go/gofrontend/backend.h4
-rw-r--r--gcc/go/gofrontend/go-linemap.h4
-rw-r--r--gcc/go/gofrontend/go.cc3
10 files changed, 58 insertions, 14 deletions
diff --git a/gcc/go/ChangeLog b/gcc/go/ChangeLog
index 6ea6138..93bf4c1 100644
--- a/gcc/go/ChangeLog
+++ b/gcc/go/ChangeLog
@@ -1,5 +1,15 @@
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.
2016-10-10 Eric Botcazou <ebotcazou@adacore.com>
diff --git a/gcc/go/go-c.h b/gcc/go/go-c.h
index 194c1a9..74e8946 100644
--- a/gcc/go/go-c.h
+++ b/gcc/go/go-c.h
@@ -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;
diff --git a/gcc/go/go-gcc.cc b/gcc/go/go-gcc.cc
index b3701bf..44daaa0 100644
--- a/gcc/go/go-gcc.cc
+++ b/gcc/go/go-gcc.cc
@@ -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
index 0000000..0dfd392
--- /dev/null
+++ b/gcc/go/go-gcc.h
@@ -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)
diff --git a/gcc/go/go-lang.c b/gcc/go/go-lang.c
index 88667e0..8d66ee0 100644
--- a/gcc/go/go-lang.c
+++ b/gcc/go/go-lang.c
@@ -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 ();
diff --git a/gcc/go/go-linemap.cc b/gcc/go/go-linemap.cc
index 22498d9..2accb95 100644
--- a/gcc/go/go-linemap.cc
+++ b/gcc/go/go-linemap.cc
@@ -6,6 +6,8 @@
#include "go-linemap.h"
+#include "go-gcc.h"
+
// This class implements the Linemap interface defined by the
// frontend.
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index c987dc9..66b1b85 100644
--- a/gcc/go/gofrontend/MERGE
+++ b/gcc/go/gofrontend/MERGE
@@ -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.
diff --git a/gcc/go/gofrontend/backend.h b/gcc/go/gofrontend/backend.h
index 3b9d3a6..8c45b64 100644
--- a/gcc/go/gofrontend/backend.h
+++ b/gcc/go/gofrontend/backend.h
@@ -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)
diff --git a/gcc/go/gofrontend/go-linemap.h b/gcc/go/gofrontend/go-linemap.h
index f0ca99d..704efdb 100644
--- a/gcc/go/gofrontend/go-linemap.h
+++ b/gcc/go/gofrontend/go-linemap.h
@@ -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)
diff --git a/gcc/go/gofrontend/go.cc b/gcc/go/gofrontend/go.cc
index 927f29d..e0e84e3 100644
--- a/gcc/go/gofrontend/go.cc
+++ b/gcc/go/gofrontend/go.cc
@@ -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)