// 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;
}
