c/clang/symg:abstract json item fetch

This commit is contained in:
luoliwoshang
2024-07-29 20:36:04 +08:00
parent 84ca145663
commit aca3a05222
2 changed files with 25 additions and 11 deletions

View File

@@ -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 // llgo:link (*JSON).GetObjectItemCaseSensitive C.cJSON_GetObjectItemCaseSensitive
func (o *JSON) GetObjectItemCaseSensitive(key *c.Char) *JSON { return nil } 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 // llgo:link (*JSON).GetArraySize C.cJSON_GetArraySize
func (o *JSON) GetArraySize() c.Int { return 0 } func (o *JSON) GetArraySize() c.Int { return 0 }

View File

@@ -52,6 +52,8 @@ func main() {
check(err) check(err)
config, err := getConf(data) config, err := getConf(data)
check(err)
if err != nil { if err != nil {
fmt.Fprintln(os.Stderr, "Failed to parse config file:", cfgFile) 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 { if conf == nil {
return config, errors.New("failed to parse config") return config, errors.New("failed to parse config")
} }
config.Name = c.GoString(conf.GetItem("name").GetStringValue()) config.Name = getStringItem(conf, "name", "")
config.CFlags = c.GoString(conf.GetItem("cflags").GetStringValue()) config.CFlags = getStringItem(conf, "cflags", "")
config.Libs = c.GoString(conf.GetItem("libs").GetStringValue()) config.Libs = getStringItem(conf, "libs", "")
config.Include = make([]string, conf.GetItem("include").GetArraySize()) config.Include = getStringArrayItem(conf, "include")
for i := range config.Include { config.TrimPrefixes = getStringArrayItem(conf, "trimPrefixes")
config.Include[i] = c.GoString(conf.GetItem("include").GetArrayItem(c.Int(i)).GetStringValue()) return
} }
config.TrimPrefixes = make([]string, conf.GetItem("trimPrefixes").GetArraySize())
for i := range config.TrimPrefixes { func getStringItem(obj *cjson.JSON, key string, defval string) (value string) {
config.TrimPrefixes[i] = c.GoString(conf.GetItem("trimPrefixes").GetArrayItem(c.Int(i)).GetStringValue()) item := obj.GetObjectItemCaseSensitive(c.AllocaCStr(key))
if item == nil {
return defval
}
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 return
} }