From aca3a0522264237d1dfe99de56a4935986b3431f Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Mon, 29 Jul 2024 20:36:04 +0800 Subject: [PATCH] c/clang/symg:abstract json item fetch --- c/cjson/cjson.go | 2 -- chore/_xtool/llcppsymg/llcppsymg.go | 34 +++++++++++++++++++++-------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/c/cjson/cjson.go b/c/cjson/cjson.go index 51edb48e..af969e2d 100644 --- a/c/cjson/cjson.go +++ b/c/cjson/cjson.go @@ -137,8 +137,6 @@ func (o *JSON) PrintBuffered(prebuffer c.Int, fmt c.Int) *c.Char { return nil } // llgo:link (*JSON).GetObjectItemCaseSensitive C.cJSON_GetObjectItemCaseSensitive func (o *JSON) GetObjectItemCaseSensitive(key *c.Char) *JSON { return nil } -func (o *JSON) GetItem(key string) *JSON { return o.GetObjectItemCaseSensitive(c.AllocaCStr(key)) } - // llgo:link (*JSON).GetArraySize C.cJSON_GetArraySize func (o *JSON) GetArraySize() c.Int { return 0 } diff --git a/chore/_xtool/llcppsymg/llcppsymg.go b/chore/_xtool/llcppsymg/llcppsymg.go index 33aabe67..0296e0fa 100644 --- a/chore/_xtool/llcppsymg/llcppsymg.go +++ b/chore/_xtool/llcppsymg/llcppsymg.go @@ -52,6 +52,8 @@ func main() { check(err) config, err := getConf(data) + check(err) + if err != nil { fmt.Fprintln(os.Stderr, "Failed to parse config file:", cfgFile) } @@ -95,16 +97,30 @@ func getConf(data []byte) (config types.Config, err error) { if conf == nil { return config, errors.New("failed to parse config") } - config.Name = c.GoString(conf.GetItem("name").GetStringValue()) - config.CFlags = c.GoString(conf.GetItem("cflags").GetStringValue()) - config.Libs = c.GoString(conf.GetItem("libs").GetStringValue()) - config.Include = make([]string, conf.GetItem("include").GetArraySize()) - for i := range config.Include { - config.Include[i] = c.GoString(conf.GetItem("include").GetArrayItem(c.Int(i)).GetStringValue()) + config.Name = getStringItem(conf, "name", "") + config.CFlags = getStringItem(conf, "cflags", "") + config.Libs = getStringItem(conf, "libs", "") + config.Include = getStringArrayItem(conf, "include") + config.TrimPrefixes = getStringArrayItem(conf, "trimPrefixes") + return +} + +func getStringItem(obj *cjson.JSON, key string, defval string) (value string) { + item := obj.GetObjectItemCaseSensitive(c.AllocaCStr(key)) + if item == nil { + return defval } - config.TrimPrefixes = make([]string, conf.GetItem("trimPrefixes").GetArraySize()) - for i := range config.TrimPrefixes { - config.TrimPrefixes[i] = c.GoString(conf.GetItem("trimPrefixes").GetArrayItem(c.Int(i)).GetStringValue()) + return c.GoString(item.GetStringValue()) +} + +func getStringArrayItem(obj *cjson.JSON, key string) (value []string) { + item := obj.GetObjectItemCaseSensitive(c.AllocaCStr(key)) + if item == nil { + return + } + value = make([]string, item.GetArraySize()) + for i := range value { + value[i] = c.GoString(item.GetArrayItem(c.Int(i)).GetStringValue()) } return }