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