summaryrefslogtreecommitdiffstats
path: root/vendor/modernc.org/ccgo/v3/lib/etc.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/modernc.org/ccgo/v3/lib/etc.go')
-rw-r--r--vendor/modernc.org/ccgo/v3/lib/etc.go110
1 files changed, 110 insertions, 0 deletions
diff --git a/vendor/modernc.org/ccgo/v3/lib/etc.go b/vendor/modernc.org/ccgo/v3/lib/etc.go
new file mode 100644
index 00000000..e3b8c577
--- /dev/null
+++ b/vendor/modernc.org/ccgo/v3/lib/etc.go
@@ -0,0 +1,110 @@
+// Copyright 2020 The CCGO Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package ccgo // import "modernc.org/ccgo/v3/lib"
+
+import (
+ "fmt"
+ "math"
+ "math/big"
+
+ "modernc.org/cc/v3"
+)
+
+var (
+ reservedNames = map[string]bool{
+ "bool": false, // ccgo can use
+ "break": true, // keyword
+ "case": true, // keyword
+ "chan": true, // keyword
+ "const": true, // keyword
+ "continue": true, // keyword
+ "default": true, // keyword
+ "defer": true, // keyword
+ "else": true, // keyword
+ "fallthrough": true, // keyword
+ "false": false, // ccgo can use
+ "float32": false, // ccgo can use
+ "float64": false, // ccgo can use
+ "for": true, // keyword
+ "func": true, // keyword
+ "go": true, // keyword
+ "goto": true, // keyword
+ "if": true, // keyword
+ "import": true, // keyword
+ "init": false, // special name
+ "int16": false, // ccgo can use
+ "int32": false, // ccgo can use
+ "int64": false, // ccgo can use
+ "int8": false, // ccgo can use
+ "interface": true, // keyword
+ "map": true, // keyword
+ "math": false, // package name
+ "nil": false, // ccgo can use
+ "package": true, // keyword
+ "range": true, // keyword
+ "return": true, // keyword
+ "select": true, // keyword
+ "struct": true, // keyword
+ "switch": true, // keyword
+ "true": false, // ccgo can use
+ "type": true, // keyword
+ "types": false, // package name
+ "uint16": false, // ccgo can use
+ "uint32": false, // ccgo can use
+ "uint64": false, // ccgo can use
+ "uint8": false, // ccgo can use
+ "uintptr": false, // ccgo can use
+ "unsafe": false, // package name
+ "var": true, // keyword
+ }
+
+ reservedIds []cc.StringID
+
+ maxInt32 = big.NewInt(math.MaxInt32)
+ maxInt64 = big.NewInt(math.MaxInt64)
+ maxUint32 = big.NewInt(math.MaxUint32)
+ maxUint64 = big.NewInt(0).SetUint64(math.MaxUint64)
+ minInt32 = big.NewInt(math.MinInt32)
+ minInt64 = big.NewInt(math.MinInt64)
+)
+
+func init() {
+ for k := range reservedNames {
+ reservedIds = append(reservedIds, cc.String(k))
+ }
+}
+
+type scope map[cc.StringID]int32
+
+func newScope() scope {
+ s := scope{}
+ for _, k := range reservedIds {
+ s[k] = 0
+ }
+ return s
+}
+
+func (s scope) take(t cc.StringID) string {
+ if t == 0 {
+ panic(todo("internal error"))
+ }
+
+ n, ok := s[t]
+ if !ok {
+ s[t] = 0
+ return t.String()
+ }
+
+ for {
+ n++
+ s[t] = n
+ r := fmt.Sprintf("%s%d", t, n)
+ id := cc.String(r)
+ if _, ok := s[id]; !ok {
+ s[id] = 0
+ return r
+ }
+ }
+}