github.com/kidsbmilk/gofronted_all@v0.0.0-20220701224323-6479d5976c5d/go/go-optimize.cc (about) 1 // go-optimize.cc -- Go frontend optimizer flags. 2 3 // Copyright 2011 The Go Authors. All rights reserved. 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file. 6 7 #include "go-system.h" 8 9 #include "go-c.h" 10 #include "go-optimize.h" 11 12 namespace { 13 14 // The list of optimizations. 15 16 Go_optimize* optimizations; 17 18 } // End empty namespace. 19 20 // Create a new optimization. 21 22 Go_optimize::Go_optimize(const char* name, bool enabled) 23 : next_(optimizations), name_(name), is_enabled_(enabled) 24 { 25 optimizations = this; 26 } 27 28 // Enable an optimization by name. 29 30 bool 31 Go_optimize::enable_by_name(const char* name, bool value) 32 { 33 bool is_all = strcmp(name, "all") == 0; 34 bool found = false; 35 for (Go_optimize* p = optimizations; p != NULL; p = p->next_) 36 { 37 if (is_all || strcmp(name, p->name_) == 0) 38 { 39 p->is_enabled_ = value; 40 found = true; 41 } 42 } 43 return found; 44 } 45 46 // Enable/disable an optimization. Return 1 if this is a real name, 0 if not. 47 48 GO_EXTERN_C 49 int 50 go_enable_optimize(const char* name, int value) 51 { 52 return Go_optimize::enable_by_name(name, (bool)value) ? 1 : 0; 53 }