Commit 3c061ac0 by Than McIntosh Committed by Ian Lance Taylor

compiler: move Backend/Linemap creation out of front end.

    
    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
parent abe08b7d
2016-10-10 Than McIntosh <thanm@google.com> 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. * go-linemap.cc (Gcc_linemap::location_line): New method.
2016-10-10 Eric Botcazou <ebotcazou@adacore.com> 2016-10-10 Eric Botcazou <ebotcazou@adacore.com>
......
...@@ -22,6 +22,8 @@ along with GCC; see the file COPYING3. If not see ...@@ -22,6 +22,8 @@ along with GCC; see the file COPYING3. If not see
#define GO_EXTERN_C #define GO_EXTERN_C
class Linemap;
class Backend;
/* Functions defined in the Go frontend proper called by the GCC /* Functions defined in the Go frontend proper called by the GCC
interface. */ interface. */
...@@ -36,9 +38,11 @@ struct go_create_gogo_args ...@@ -36,9 +38,11 @@ struct go_create_gogo_args
int int_type_size; int int_type_size;
int pointer_size; int pointer_size;
const char* pkgpath; const char* pkgpath;
const char *prefix; const char* prefix;
const char *relative_import_path; const char* relative_import_path;
const char *c_header; const char* c_header;
Backend* backend;
Linemap* linemap;
bool check_divide_by_zero; bool check_divide_by_zero;
bool check_divide_overflow; bool check_divide_overflow;
bool compiling_runtime; bool compiling_runtime;
......
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
#include "builtins.h" #include "builtins.h"
#include "go-c.h" #include "go-c.h"
#include "go-gcc.h"
#include "gogo.h" #include "gogo.h"
#include "backend.h" #include "backend.h"
......
/* 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)
...@@ -37,6 +37,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -37,6 +37,7 @@ along with GCC; see the file COPYING3. If not see
#include <mpfr.h> #include <mpfr.h>
#include "go-c.h" #include "go-c.h"
#include "go-gcc.h"
/* Language-dependent contents of a type. */ /* Language-dependent contents of a type. */
...@@ -111,6 +112,8 @@ go_langhook_init (void) ...@@ -111,6 +112,8 @@ go_langhook_init (void)
args.check_divide_overflow = go_check_divide_overflow; args.check_divide_overflow = go_check_divide_overflow;
args.compiling_runtime = go_compiling_runtime; args.compiling_runtime = go_compiling_runtime;
args.debug_escape_level = go_debug_escape_level; args.debug_escape_level = go_debug_escape_level;
args.linemap = go_get_linemap();
args.backend = go_get_backend();
go_create_gogo (&args); go_create_gogo (&args);
build_common_builtin_nodes (); build_common_builtin_nodes ();
......
...@@ -6,6 +6,8 @@ ...@@ -6,6 +6,8 @@
#include "go-linemap.h" #include "go-linemap.h"
#include "go-gcc.h"
// This class implements the Linemap interface defined by the // This class implements the Linemap interface defined by the
// frontend. // frontend.
......
ecf9b645cefc5c3b4e6339adeb452b2d8642cf3e a700fa1908aa2a36f05b3ee09932f814fd94a10d
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -740,8 +740,4 @@ class Backend ...@@ -740,8 +740,4 @@ class Backend
const std::vector<Bvariable*>& variable_decls) = 0; 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) #endif // !defined(GO_BACKEND_H)
...@@ -149,8 +149,4 @@ class Linemap ...@@ -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) #endif // !defined(GO_LINEMAP_H)
...@@ -24,8 +24,7 @@ void ...@@ -24,8 +24,7 @@ void
go_create_gogo(const struct go_create_gogo_args* args) go_create_gogo(const struct go_create_gogo_args* args)
{ {
go_assert(::gogo == NULL); go_assert(::gogo == NULL);
Linemap* linemap = go_get_linemap(); ::gogo = new Gogo(args->backend, args->linemap, args->int_type_size,
::gogo = new Gogo(go_get_backend(), linemap, args->int_type_size,
args->pointer_size); args->pointer_size);
if (args->pkgpath != NULL) if (args->pkgpath != NULL)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment