mirror of
https://github.com/fumiama/gozel.git
synced 2026-07-02 08:40:24 +08:00
feat(gen): finish core/common
This commit is contained in:
@@ -13,6 +13,10 @@
|
|||||||
|
|
||||||
package core
|
package core
|
||||||
|
|
||||||
|
import (
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
// ZE_MAKE_VERSION Generates generic 'oneAPI' API versions
|
// ZE_MAKE_VERSION Generates generic 'oneAPI' API versions
|
||||||
func ZE_MAKE_VERSION[T ~int| ~uint32 | ~uint64 | ~uintptr](_major T, _minor T) T {
|
func ZE_MAKE_VERSION[T ~int| ~uint32 | ~uint64 | ~uintptr](_major T, _minor T) T {
|
||||||
return (( _major << 16 )|( _minor & 0x0000ffff))
|
return (( _major << 16 )|( _minor & 0x0000ffff))
|
||||||
@@ -373,3 +377,30 @@ type ZeUuid struct {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ZeBaseCbParams (ze_base_cb_params_t) Base for all callback function parameter types
|
||||||
|
type ZeBaseCbParams struct {
|
||||||
|
Stype ZeStructureType // Stype [in] type of this structure
|
||||||
|
Pnext unsafe.Pointer // Pnext [in,out][optional] must be null or a pointer to an extension-specific structure (i.e. contains stype and pNext).
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// ZeBaseProperties (ze_base_properties_t) Base for all properties types
|
||||||
|
type ZeBaseProperties struct {
|
||||||
|
Stype ZeStructureType // Stype [in] type of this structure
|
||||||
|
Pnext unsafe.Pointer // Pnext [in,out][optional] must be null or a pointer to an extension-specific structure (i.e. contains stype and pNext).
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// ZeBaseDesc (ze_base_desc_t) Base for all descriptor types
|
||||||
|
type ZeBaseDesc struct {
|
||||||
|
Stype ZeStructureType // Stype [in] type of this structure
|
||||||
|
Pnext unsafe.Pointer // Pnext [in][optional] must be null or a pointer to an extension-specific structure (i.e. contains stype and pNext).
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// ZeIpcEventCounterBasedHandle (ze_ipc_event_counter_based_handle_t) IPC handle to counter based event
|
||||||
|
type ZeIpcEventCounterBasedHandle struct {
|
||||||
|
Data [ZE_MAX_IPC_HANDLE_SIZE]byte // Data [out] Opaque data representing an IPC handle
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
28
core/driver.go
Normal file
28
core/driver.go
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
// Code generated by gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (C) 2019-2025 Intel Corporation
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*
|
||||||
|
* @file ze_api.h
|
||||||
|
* @version v1.15-r1.15.31
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package core
|
||||||
|
|
||||||
|
import (
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ZeInitFlags (ze_init_flags_t) Supported initialization flags
|
||||||
|
type ZeInitFlags uint32
|
||||||
|
const (
|
||||||
|
ZE_INIT_FLAG_GPU_ONLY ZeInitFlags = /* ZE_BIT(0) */(( 1 << 0 )) // ZE_INIT_FLAG_GPU_ONLY only initialize GPU drivers
|
||||||
|
ZE_INIT_FLAG_VPU_ONLY ZeInitFlags = /* ZE_BIT(1) */(( 1 << 1 )) // ZE_INIT_FLAG_VPU_ONLY only initialize VPU drivers
|
||||||
|
ZE_INIT_FLAG_FORCE_UINT32 ZeInitFlags = 0x7fffffff // ZE_INIT_FLAG_FORCE_UINT32 Value marking end of ZE_INIT_FLAG_* ENUMs
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
121
gen/scan.go
121
gen/scan.go
@@ -2,6 +2,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
@@ -13,6 +14,14 @@ const (
|
|||||||
numbergenerics = "~int| ~uint32 | ~uint64 | ~uintptr"
|
numbergenerics = "~int| ~uint32 | ~uint64 | ~uintptr"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
typemap = map[string]string{
|
||||||
|
"char": "byte",
|
||||||
|
"void*": "unsafe.Pointer",
|
||||||
|
"const void*": "unsafe.Pointer",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
var infhcache = make(map[string]string, 1024)
|
var infhcache = make(map[string]string, 1024)
|
||||||
|
|
||||||
func infh(name string) string {
|
func infh(name string) string {
|
||||||
@@ -28,12 +37,17 @@ func scanHeader(name string, scan *bufio.Scanner) {
|
|||||||
ln := 0
|
ln := 0
|
||||||
var regionfile *os.File
|
var regionfile *os.File
|
||||||
symtab := symbolTable{
|
symtab := symbolTable{
|
||||||
"ZE_APICALL": symbol{symbolTypeConst, "ZE_APICALL", []string{""}},
|
"ZE_APICALL": &symbol{symbolTypeConst, "ZE_APICALL", []string{""}},
|
||||||
"ZE_APIEXPORT": symbol{symbolTypeConst, "ZE_APIEXPORT", []string{""}},
|
"ZE_APIEXPORT": &symbol{symbolTypeConst, "ZE_APIEXPORT", []string{""}},
|
||||||
"ZE_DLLEXPORT": symbol{symbolTypeConst, "ZE_DLLEXPORT", []string{""}},
|
"ZE_DLLEXPORT": &symbol{symbolTypeConst, "ZE_DLLEXPORT", []string{""}},
|
||||||
}
|
}
|
||||||
fileheadersb := strings.Builder{}
|
fileheadersb := strings.Builder{}
|
||||||
region := ""
|
region := ""
|
||||||
|
_ = os.RemoveAll(name)
|
||||||
|
err := os.MkdirAll(name, 0755)
|
||||||
|
if err != nil {
|
||||||
|
panic(fmt.Sprintf("%s L%d: cannot create region folder %s, err: %v", name, ln, region, err))
|
||||||
|
}
|
||||||
for scan.Scan() {
|
for scan.Scan() {
|
||||||
ln++
|
ln++
|
||||||
t := scan.Text()
|
t := scan.Text()
|
||||||
@@ -49,11 +63,6 @@ func scanHeader(name string, scan *bufio.Scanner) {
|
|||||||
panic(fmt.Sprintf("%s L%d: unexpected empty region", name, ln))
|
panic(fmt.Sprintf("%s L%d: unexpected empty region", name, ln))
|
||||||
}
|
}
|
||||||
fmt.Println(infh(name), "scanning region", region)
|
fmt.Println(infh(name), "scanning region", region)
|
||||||
_ = os.RemoveAll(name)
|
|
||||||
err := os.MkdirAll(name, 0755)
|
|
||||||
if err != nil {
|
|
||||||
panic(fmt.Sprintf("%s L%d: cannot create region folder %s, err: %v", name, ln, region, err))
|
|
||||||
}
|
|
||||||
f, err := os.Create(path.Join(name, region+".go"))
|
f, err := os.Create(path.Join(name, region+".go"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(fmt.Sprintf("%s L%d: cannot create region %s, err: %v", name, ln, region, err))
|
panic(fmt.Sprintf("%s L%d: cannot create region %s, err: %v", name, ln, region, err))
|
||||||
@@ -63,7 +72,7 @@ func scanHeader(name string, scan *bufio.Scanner) {
|
|||||||
f.WriteString("\n")
|
f.WriteString("\n")
|
||||||
f.WriteString("package ")
|
f.WriteString("package ")
|
||||||
f.WriteString(name)
|
f.WriteString(name)
|
||||||
f.WriteString("\n\n")
|
f.WriteString("\n\nimport (\n\t\"unsafe\"\n)\n\n")
|
||||||
regionfile = f
|
regionfile = f
|
||||||
// block barrier
|
// block barrier
|
||||||
case strings.HasPrefix(t, "///////////////////////////////////////////////////////////////////////////////"):
|
case strings.HasPrefix(t, "///////////////////////////////////////////////////////////////////////////////"):
|
||||||
@@ -88,7 +97,7 @@ func scanHeader(name string, scan *bufio.Scanner) {
|
|||||||
|
|
||||||
func checkSymbolName(
|
func checkSymbolName(
|
||||||
symtab symbolTable, ln int, name, sname, goname string,
|
symtab symbolTable, ln int, name, sname, goname string,
|
||||||
sb *strings.Builder, f *os.File, eq func() symbol) bool {
|
sb *strings.Builder, f *os.File, eq func() *symbol) bool {
|
||||||
if _, ok := symtab[sname]; ok {
|
if _, ok := symtab[sname]; ok {
|
||||||
panic(fmt.Sprintf("%s L%d: func #define %s has been defined", name, ln, sname))
|
panic(fmt.Sprintf("%s L%d: func #define %s has been defined", name, ln, sname))
|
||||||
}
|
}
|
||||||
@@ -131,7 +140,7 @@ func scanBlocks(
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if sb.Len() != 0 {
|
if sb.Len() != 0 {
|
||||||
panic(fmt.Sprintf("%s L%d: unexpected non-0 sb at block end: %s", name, ln, &sb))
|
fmt.Printf("[warn] %s L%d: non-0 sb at block end: %s\n", name, ln, &sb)
|
||||||
}
|
}
|
||||||
return ln
|
return ln
|
||||||
case skip2nextblk:
|
case skip2nextblk:
|
||||||
@@ -171,7 +180,7 @@ func scanBlocks(
|
|||||||
}
|
}
|
||||||
sname := strings.TrimSpace(argseval[0])
|
sname := strings.TrimSpace(argseval[0])
|
||||||
val := strings.TrimSpace(argseval[1])
|
val := strings.TrimSpace(argseval[1])
|
||||||
checkSymbolName(symtab, ln, name, sname, sname, &sb, f, func() symbol {
|
checkSymbolName(symtab, ln, name, sname, sname, &sb, f, func() *symbol {
|
||||||
return newSymbolConst(sname, val)
|
return newSymbolConst(sname, val)
|
||||||
})
|
})
|
||||||
f.WriteString("const ")
|
f.WriteString("const ")
|
||||||
@@ -192,7 +201,7 @@ func scanBlocks(
|
|||||||
sname = strings.TrimSpace(sname)
|
sname = strings.TrimSpace(sname)
|
||||||
args = strings.TrimSpace(args)
|
args = strings.TrimSpace(args)
|
||||||
eval := strings.TrimSpace(argseval[n+1:])
|
eval := strings.TrimSpace(argseval[n+1:])
|
||||||
checkSymbolName(symtab, ln, name, sname, sname, &sb, f, func() symbol {
|
checkSymbolName(symtab, ln, name, sname, sname, &sb, f, func() *symbol {
|
||||||
return newSymbolFunc(sname, args, eval)
|
return newSymbolFunc(sname, args, eval)
|
||||||
})
|
})
|
||||||
f.WriteString("func ")
|
f.WriteString("func ")
|
||||||
@@ -220,7 +229,7 @@ func scanBlocks(
|
|||||||
}
|
}
|
||||||
switch {
|
switch {
|
||||||
case strings.Contains(lines[0], " struct "):
|
case strings.Contains(lines[0], " struct "):
|
||||||
fsb := strings.Builder{}
|
fsb := bytes.NewBuffer(make([]byte, 0, 256))
|
||||||
for i, stat := range lines[2:] {
|
for i, stat := range lines[2:] {
|
||||||
if strings.HasPrefix(stat, "}") {
|
if strings.HasPrefix(stat, "}") {
|
||||||
lines = lines[2+i:]
|
lines = lines[2+i:]
|
||||||
@@ -234,50 +243,77 @@ func scanBlocks(
|
|||||||
vname := ""
|
vname := ""
|
||||||
c := ""
|
c := ""
|
||||||
switch {
|
switch {
|
||||||
case strings.HasPrefix(stat, "char"):
|
case strings.HasPrefix(stat, "char ") || strings.HasPrefix(stat, "void* ") ||
|
||||||
szc, sz := "", ""
|
strings.HasPrefix(stat, "const void*"):
|
||||||
|
remains, sz := "", ""
|
||||||
ok := false
|
ok := false
|
||||||
vname, szc, ok = strings.Cut(stat[4:], "[")
|
remains, c, ok = strings.Cut(stat, ";")
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Sprintf("%s L%d: unsupported non-end line %s", name, ln, stat))
|
||||||
|
}
|
||||||
|
c = strings.TrimPrefix(strings.TrimSpace(c), "//")
|
||||||
|
remains = strings.TrimSpace(remains)
|
||||||
|
i := strings.LastIndex(remains, " ")
|
||||||
|
vname = remains[i+1:]
|
||||||
|
tn := strings.TrimSpace(remains[:i])
|
||||||
|
tname, ok := typemap[tn]
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Sprintf("%s L%d: unsupported type %s", name, ln, tname))
|
||||||
|
}
|
||||||
|
vname, sz, ok = strings.Cut(vname, "[")
|
||||||
vname = us2camel(strings.TrimSpace(vname))
|
vname = us2camel(strings.TrimSpace(vname))
|
||||||
if ok { // is array
|
|
||||||
sz, c, _ = strings.Cut(szc, "//")
|
|
||||||
fsb.WriteString("\t")
|
fsb.WriteString("\t")
|
||||||
|
if ok { // is array
|
||||||
fsb.WriteString(vname)
|
fsb.WriteString(vname)
|
||||||
fsb.WriteString(" [")
|
fsb.WriteString(" [")
|
||||||
fsb.WriteString(strings.TrimSuffix(strings.TrimSpace(sz), ";"))
|
fsb.WriteString(sz)
|
||||||
fsb.WriteString("byte")
|
fsb.WriteString(tname)
|
||||||
} else {
|
} else {
|
||||||
vname, c, _ = strings.Cut(vname, "//")
|
fsb.WriteString(vname)
|
||||||
fsb.WriteString(us2camel(strings.TrimSuffix(strings.TrimSpace(vname), ";")))
|
fsb.WriteString(" ")
|
||||||
fsb.WriteString(" byte")
|
fsb.WriteString(tname)
|
||||||
}
|
}
|
||||||
case strings.Contains(stat, "_t "):
|
case strings.Contains(stat, "_t "):
|
||||||
tname, remains, ok := strings.Cut(stat, "_t ")
|
remains, sz := "", ""
|
||||||
|
ok := false
|
||||||
|
remains, c, ok = strings.Cut(stat, ";")
|
||||||
|
if !ok {
|
||||||
|
panic(fmt.Sprintf("%s L%d: unsupported non-end line %s", name, ln, stat))
|
||||||
|
}
|
||||||
|
c = strings.TrimPrefix(strings.TrimSpace(c), "//")
|
||||||
|
tname, remains, ok := strings.Cut(remains, "_t ")
|
||||||
if !ok {
|
if !ok {
|
||||||
panic(fmt.Sprintf("%s L%d: unexpected statement %s", name, ln, stat))
|
panic(fmt.Sprintf("%s L%d: unexpected statement %s", name, ln, stat))
|
||||||
}
|
}
|
||||||
szc, sz := "", ""
|
tname = strings.TrimSpace(tname)
|
||||||
vname, szc, ok = strings.Cut(remains, "[")
|
k := tname + "_t"
|
||||||
|
if symtab.contains(k) {
|
||||||
|
tname = symtab[k].replace(k)
|
||||||
|
}
|
||||||
|
vname, sz, ok = strings.Cut(remains, "[")
|
||||||
vname = us2camel(strings.TrimSpace(vname))
|
vname = us2camel(strings.TrimSpace(vname))
|
||||||
if ok { // is array
|
|
||||||
sz, c, _ = strings.Cut(szc, "//")
|
|
||||||
fsb.WriteString("\t")
|
fsb.WriteString("\t")
|
||||||
|
if ok { // is array
|
||||||
fsb.WriteString(vname)
|
fsb.WriteString(vname)
|
||||||
fsb.WriteString(" [")
|
fsb.WriteString(" [")
|
||||||
fsb.WriteString(strings.TrimSuffix(strings.TrimSpace(sz), ";"))
|
fsb.WriteString(sz)
|
||||||
fsb.WriteString(strings.TrimSpace(tname))
|
fsb.WriteString(tname)
|
||||||
} else {
|
} else {
|
||||||
vname, c, _ = strings.Cut(vname, "//")
|
fsb.WriteString(vname)
|
||||||
fsb.WriteString(us2camel(strings.TrimSuffix(strings.TrimSpace(vname), ";")))
|
|
||||||
fsb.WriteString(" ")
|
fsb.WriteString(" ")
|
||||||
fsb.WriteString(strings.TrimSpace(tname))
|
fsb.WriteString(tname)
|
||||||
}
|
}
|
||||||
|
case strings.HasPrefix(stat, "///< "):
|
||||||
|
fsb.Truncate(fsb.Len() - 1)
|
||||||
|
fsb.WriteString(stat[4:])
|
||||||
default:
|
default:
|
||||||
panic(fmt.Sprintf("%s L%d: unexpected statement %s", name, ln, stat))
|
panic(fmt.Sprintf("%s L%d: unexpected statement %s", name, ln, stat))
|
||||||
}
|
}
|
||||||
|
if c != "" {
|
||||||
fsb.WriteString("\t// ")
|
fsb.WriteString("\t// ")
|
||||||
fsb.WriteString(strings.Replace(c, "/<", vname, 1))
|
fsb.WriteString(strings.Replace(c, "/<", vname, 1))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if len(lines) != 1 {
|
if len(lines) != 1 {
|
||||||
panic(fmt.Sprintf("%s L%d: unexpected len > 1 last lines %s", name, ln, strings.Join(lines, "\n")))
|
panic(fmt.Sprintf("%s L%d: unexpected len > 1 last lines %s", name, ln, strings.Join(lines, "\n")))
|
||||||
}
|
}
|
||||||
@@ -286,13 +322,13 @@ func scanBlocks(
|
|||||||
}
|
}
|
||||||
sname := strings.TrimSuffix(strings.TrimSpace(lines[0][1:]), ";")
|
sname := strings.TrimSuffix(strings.TrimSpace(lines[0][1:]), ";")
|
||||||
val := us2camel(strings.TrimSuffix(sname, "_t"))
|
val := us2camel(strings.TrimSuffix(sname, "_t"))
|
||||||
checkSymbolName(symtab, ln, name, sname, val, &sb, f, func() symbol {
|
checkSymbolName(symtab, ln, name, sname, val, &sb, f, func() *symbol {
|
||||||
return newSymbolConst(sname, val)
|
return newSymbolConst(sname, val)
|
||||||
})
|
})
|
||||||
f.WriteString("type ")
|
f.WriteString("type ")
|
||||||
f.WriteString(val)
|
f.WriteString(val)
|
||||||
f.WriteString(" struct {")
|
f.WriteString(" struct {")
|
||||||
f.WriteString(fsb.String())
|
_, _ = io.Copy(f, fsb)
|
||||||
f.WriteString("\n}\n\n")
|
f.WriteString("\n}\n\n")
|
||||||
continue
|
continue
|
||||||
case strings.Contains(lines[0], " enum "):
|
case strings.Contains(lines[0], " enum "):
|
||||||
@@ -339,7 +375,7 @@ func scanBlocks(
|
|||||||
}
|
}
|
||||||
sname := strings.TrimSuffix(strings.TrimSpace(lines[0][1:]), ";")
|
sname := strings.TrimSuffix(strings.TrimSpace(lines[0][1:]), ";")
|
||||||
val := us2camel(strings.TrimSuffix(sname, "_t"))
|
val := us2camel(strings.TrimSuffix(sname, "_t"))
|
||||||
redirect := checkSymbolName(symtab, ln, name, sname, val, &sb, f, func() symbol {
|
redirect := checkSymbolName(symtab, ln, name, sname, val, &sb, f, func() *symbol {
|
||||||
return newSymbolConst(sname, val)
|
return newSymbolConst(sname, val)
|
||||||
})
|
})
|
||||||
replaces := ""
|
replaces := ""
|
||||||
@@ -370,7 +406,12 @@ func scanBlocks(
|
|||||||
if strings.TrimSpace(typs[0]) == "struct" {
|
if strings.TrimSpace(typs[0]) == "struct" {
|
||||||
if len(typs) != 3 || !strings.Contains(typs[1], "handle_t") ||
|
if len(typs) != 3 || !strings.Contains(typs[1], "handle_t") ||
|
||||||
!strings.Contains(typs[2], "*") {
|
!strings.Contains(typs[2], "*") {
|
||||||
panic(fmt.Sprintf("%s L%d: unexpected single typdef line %s", name, ln, t))
|
if symtab.contains(strings.TrimSuffix(typs[2], ";")) {
|
||||||
|
fmt.Printf("[warn] %s L%d: skip duplicated single typdef %s\n", name, ln, strings.Join(typs, "_____"))
|
||||||
|
} else {
|
||||||
|
fmt.Printf("[warn] %s L%d: skip future expected single typdef %s\n", name, ln, strings.Join(typs, "_____"))
|
||||||
|
}
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
typs = typs[1:]
|
typs = typs[1:]
|
||||||
typs[0] = "uintptr"
|
typs[0] = "uintptr"
|
||||||
@@ -382,7 +423,7 @@ func scanBlocks(
|
|||||||
sname := strings.TrimSpace(strings.TrimSuffix(strings.TrimSpace(typs[1]), ";"))
|
sname := strings.TrimSpace(strings.TrimSuffix(strings.TrimSpace(typs[1]), ";"))
|
||||||
val := us2camel(strings.TrimSuffix(sname, "_t"))
|
val := us2camel(strings.TrimSuffix(sname, "_t"))
|
||||||
origtyp := strings.TrimSuffix(strings.TrimSpace(typs[0]), "_t")
|
origtyp := strings.TrimSuffix(strings.TrimSpace(typs[0]), "_t")
|
||||||
checkSymbolName(symtab, ln, name, sname, val, &sb, f, func() symbol {
|
checkSymbolName(symtab, ln, name, sname, val, &sb, f, func() *symbol {
|
||||||
return newSymbolConst(sname, val)
|
return newSymbolConst(sname, val)
|
||||||
})
|
})
|
||||||
f.WriteString("type ")
|
f.WriteString("type ")
|
||||||
@@ -390,6 +431,8 @@ func scanBlocks(
|
|||||||
f.WriteString(" ")
|
f.WriteString(" ")
|
||||||
f.WriteString(origtyp)
|
f.WriteString(origtyp)
|
||||||
f.WriteString("\n\n")
|
f.WriteString("\n\n")
|
||||||
|
default:
|
||||||
|
panic(fmt.Sprintf("%s L%d: unexpected line %s", name, ln, t))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ln
|
return ln
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ var (
|
|||||||
errNoSuchSymbol = errors.New("no such sybmol")
|
errNoSuchSymbol = errors.New("no such sybmol")
|
||||||
)
|
)
|
||||||
|
|
||||||
type symbolTable map[string]symbol
|
type symbolTable map[string]*symbol
|
||||||
|
|
||||||
func (st symbolTable) apply(t string) string {
|
func (st symbolTable) apply(t string) string {
|
||||||
for _, s := range st {
|
for _, s := range st {
|
||||||
@@ -20,6 +20,11 @@ func (st symbolTable) apply(t string) string {
|
|||||||
return t
|
return t
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (st symbolTable) contains(name string) bool {
|
||||||
|
_, ok := st[name]
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
type symbolType uintptr
|
type symbolType uintptr
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -40,16 +45,16 @@ type symbol struct {
|
|||||||
fields []string
|
fields []string
|
||||||
}
|
}
|
||||||
|
|
||||||
func newSymbolConst(name, val string) symbol {
|
func newSymbolConst(name, val string) *symbol {
|
||||||
return symbol{
|
return &symbol{
|
||||||
stype: symbolTypeConst,
|
stype: symbolTypeConst,
|
||||||
name: name,
|
name: name,
|
||||||
fields: []string{val},
|
fields: []string{val},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func newSymbolFunc(name, paras, evals string) symbol {
|
func newSymbolFunc(name, paras, evals string) *symbol {
|
||||||
return symbol{
|
return &symbol{
|
||||||
stype: symbolTypeFunc,
|
stype: symbolTypeFunc,
|
||||||
name: name,
|
name: name,
|
||||||
fields: []string{paras, evals},
|
fields: []string{paras, evals},
|
||||||
|
|||||||
@@ -59,7 +59,8 @@ func get1sentence(firstln string, scan *bufio.Scanner, ln int) (string, int) {
|
|||||||
ln++
|
ln++
|
||||||
if strings.Contains(t, "{") {
|
if strings.Contains(t, "{") {
|
||||||
bracedepth++
|
bracedepth++
|
||||||
} else if strings.Contains(t, "}") {
|
}
|
||||||
|
if strings.Contains(t, "}") {
|
||||||
bracedepth--
|
bracedepth--
|
||||||
}
|
}
|
||||||
sb.WriteString(t)
|
sb.WriteString(t)
|
||||||
|
|||||||
Reference in New Issue
Block a user