gccrs: Move Backend::error_variable to Bvariable::error_variable
gcc/rust/ChangeLog: * rust-backend.h (Backend::error_variable): Remove. (Gcc_backend::error_variable): Move to ... * rust-gcc.cc (Bvariable::error_variable): ... here ... * rust-gcc.h (Bvariable::error_variable): ... and declare here. (Gcc_backend::global_variable): Update error_variable call. (Gcc_backend::local_variable): Likewise. (Gcc_backend::parameter_variable): Likewise. (Gcc_backend::static_chain_variable): Likewise. (Gcc_backend::temporary_variable): Likewise. * backend/rust-compile-extern.h (CompileExternItem::visit): Likewise. * backend/rust-compile-fnparam.cc (CompileFnParam::CompileFnParam): Likewise. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
This commit is contained in:
parent
79b52e6956
commit
77fbe55f8e
5 changed files with 18 additions and 14 deletions
|
@ -48,7 +48,7 @@ public:
|
||||||
void visit (HIR::ExternalStaticItem &item) override
|
void visit (HIR::ExternalStaticItem &item) override
|
||||||
{
|
{
|
||||||
// check if its already been compiled
|
// check if its already been compiled
|
||||||
Bvariable *lookup = ctx->get_backend ()->error_variable ();
|
Bvariable *lookup = Bvariable::error_variable ();
|
||||||
if (ctx->lookup_var_decl (item.get_mappings ().get_hirid (), &lookup))
|
if (ctx->lookup_var_decl (item.get_mappings ().get_hirid (), &lookup))
|
||||||
{
|
{
|
||||||
reference = ctx->get_backend ()->var_expression (lookup, ref_locus);
|
reference = ctx->get_backend ()->var_expression (lookup, ref_locus);
|
||||||
|
|
|
@ -27,7 +27,7 @@ namespace Compile {
|
||||||
CompileFnParam::CompileFnParam (Context *ctx, tree fndecl, tree decl_type,
|
CompileFnParam::CompileFnParam (Context *ctx, tree fndecl, tree decl_type,
|
||||||
location_t locus)
|
location_t locus)
|
||||||
: HIRCompileBase (ctx), fndecl (fndecl), decl_type (decl_type), locus (locus),
|
: HIRCompileBase (ctx), fndecl (fndecl), decl_type (decl_type), locus (locus),
|
||||||
compiled_param (ctx->get_backend ()->error_variable ())
|
compiled_param (Bvariable::error_variable ())
|
||||||
{}
|
{}
|
||||||
|
|
||||||
Bvariable *
|
Bvariable *
|
||||||
|
|
|
@ -346,11 +346,6 @@ public:
|
||||||
|
|
||||||
// Variables.
|
// Variables.
|
||||||
|
|
||||||
// Create an error variable. This is used for cases which should
|
|
||||||
// not occur in a correct program, in order to keep the compilation
|
|
||||||
// going without crashing.
|
|
||||||
virtual Bvariable *error_variable () = 0;
|
|
||||||
|
|
||||||
// Create a global variable. NAME is the package-qualified name of
|
// Create a global variable. NAME is the package-qualified name of
|
||||||
// the variable. ASM_NAME is the encoded identifier for the
|
// the variable. ASM_NAME is the encoded identifier for the
|
||||||
// variable, incorporating the package, and made safe for the
|
// variable, incorporating the package, and made safe for the
|
||||||
|
@ -655,8 +650,6 @@ public:
|
||||||
|
|
||||||
// Variables.
|
// Variables.
|
||||||
|
|
||||||
Bvariable *error_variable () { return new Bvariable (error_mark_node); }
|
|
||||||
|
|
||||||
Bvariable *global_variable (const std::string &var_name,
|
Bvariable *global_variable (const std::string &var_name,
|
||||||
const std::string &asm_name, tree type,
|
const std::string &asm_name, tree type,
|
||||||
bool is_external, bool is_hidden,
|
bool is_external, bool is_hidden,
|
||||||
|
|
|
@ -77,6 +77,12 @@ Bvariable::get_tree (location_t location) const
|
||||||
return build_fold_indirect_ref_loc (location, t);
|
return build_fold_indirect_ref_loc (location, t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Bvariable *
|
||||||
|
Bvariable::error_variable ()
|
||||||
|
{
|
||||||
|
return new Bvariable (error_mark_node);
|
||||||
|
}
|
||||||
|
|
||||||
// This file implements the interface between the Rust frontend proper
|
// This file implements the interface between the Rust frontend proper
|
||||||
// and the gcc IR. This implements specific instantiations of
|
// and the gcc IR. This implements specific instantiations of
|
||||||
// abstract classes defined by the Rust frontend proper. The Rust
|
// abstract classes defined by the Rust frontend proper. The Rust
|
||||||
|
@ -2048,7 +2054,7 @@ Gcc_backend::global_variable (const std::string &var_name,
|
||||||
bool in_unique_section, location_t location)
|
bool in_unique_section, location_t location)
|
||||||
{
|
{
|
||||||
if (type_tree == error_mark_node)
|
if (type_tree == error_mark_node)
|
||||||
return this->error_variable ();
|
return Bvariable::error_variable ();
|
||||||
|
|
||||||
// The GNU linker does not like dynamic variables with zero size.
|
// The GNU linker does not like dynamic variables with zero size.
|
||||||
tree orig_type_tree = type_tree;
|
tree orig_type_tree = type_tree;
|
||||||
|
@ -2113,7 +2119,7 @@ Gcc_backend::local_variable (tree function, const std::string &name,
|
||||||
location_t location)
|
location_t location)
|
||||||
{
|
{
|
||||||
if (type_tree == error_mark_node)
|
if (type_tree == error_mark_node)
|
||||||
return this->error_variable ();
|
return Bvariable::error_variable ();
|
||||||
tree decl = build_decl (location, VAR_DECL, get_identifier_from_string (name),
|
tree decl = build_decl (location, VAR_DECL, get_identifier_from_string (name),
|
||||||
type_tree);
|
type_tree);
|
||||||
DECL_CONTEXT (decl) = function;
|
DECL_CONTEXT (decl) = function;
|
||||||
|
@ -2134,7 +2140,7 @@ Gcc_backend::parameter_variable (tree function, const std::string &name,
|
||||||
tree type_tree, location_t location)
|
tree type_tree, location_t location)
|
||||||
{
|
{
|
||||||
if (type_tree == error_mark_node)
|
if (type_tree == error_mark_node)
|
||||||
return this->error_variable ();
|
return Bvariable::error_variable ();
|
||||||
tree decl = build_decl (location, PARM_DECL,
|
tree decl = build_decl (location, PARM_DECL,
|
||||||
get_identifier_from_string (name), type_tree);
|
get_identifier_from_string (name), type_tree);
|
||||||
DECL_CONTEXT (decl) = function;
|
DECL_CONTEXT (decl) = function;
|
||||||
|
@ -2151,7 +2157,7 @@ Gcc_backend::static_chain_variable (tree fndecl, const std::string &name,
|
||||||
tree type_tree, location_t location)
|
tree type_tree, location_t location)
|
||||||
{
|
{
|
||||||
if (type_tree == error_mark_node)
|
if (type_tree == error_mark_node)
|
||||||
return this->error_variable ();
|
return Bvariable::error_variable ();
|
||||||
tree decl = build_decl (location, PARM_DECL,
|
tree decl = build_decl (location, PARM_DECL,
|
||||||
get_identifier_from_string (name), type_tree);
|
get_identifier_from_string (name), type_tree);
|
||||||
DECL_CONTEXT (decl) = fndecl;
|
DECL_CONTEXT (decl) = fndecl;
|
||||||
|
@ -2188,7 +2194,7 @@ Gcc_backend::temporary_variable (tree fndecl, tree bind_tree, tree type_tree,
|
||||||
|| fndecl == error_mark_node)
|
|| fndecl == error_mark_node)
|
||||||
{
|
{
|
||||||
*pstatement = error_mark_node;
|
*pstatement = error_mark_node;
|
||||||
return this->error_variable ();
|
return Bvariable::error_variable ();
|
||||||
}
|
}
|
||||||
|
|
||||||
tree var;
|
tree var;
|
||||||
|
|
|
@ -49,6 +49,11 @@ public:
|
||||||
// Get the actual decl;
|
// Get the actual decl;
|
||||||
tree get_decl () const { return this->t_; }
|
tree get_decl () const { return this->t_; }
|
||||||
|
|
||||||
|
// Create an error variable. This is used for cases which should
|
||||||
|
// not occur in a correct program, in order to keep the compilation
|
||||||
|
// going without crashing.
|
||||||
|
static Bvariable *error_variable ();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
tree t_;
|
tree t_;
|
||||||
tree orig_type_;
|
tree orig_type_;
|
||||||
|
|
Loading…
Add table
Reference in a new issue