blob: d24f35c58d3fca659376fd1e06a72856a9a61396 [file] [log] [blame]
// go-optimize.cc -- Go frontend optimizer flags.
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
#include "go-system.h"
#include "go-c.h"
#include "go-optimize.h"
namespace {
// The list of optimizations.
Go_optimize* optimizations;
} // End empty namespace.
// Create a new optimization.
Go_optimize::Go_optimize(const char* name, bool enabled)
: next_(optimizations), name_(name), is_enabled_(enabled)
{
optimizations = this;
}
// Enable an optimization by name.
bool
Go_optimize::enable_by_name(const char* name, bool value)
{
bool is_all = strcmp(name, "all") == 0;
bool found = false;
for (Go_optimize* p = optimizations; p != NULL; p = p->next_)
{
if (is_all || strcmp(name, p->name_) == 0)
{
p->is_enabled_ = value;
found = true;
}
}
return found;
}
// Enable/disable an optimization. Return 1 if this is a real name, 0 if not.
GO_EXTERN_C
int
go_enable_optimize(const char* name, int value)
{
return Go_optimize::enable_by_name(name, (bool)value) ? 1 : 0;
}