当前位置: 首页>>代码示例>>Golang>>正文


Golang Type.Declarator方法代码示例

本文整理汇总了Golang中github.com/cznic/cc.Type.Declarator方法的典型用法代码示例。如果您正苦于以下问题:Golang Type.Declarator方法的具体用法?Golang Type.Declarator怎么用?Golang Type.Declarator使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在github.com/cznic/cc.Type的用法示例。


在下文中一共展示了Type.Declarator方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。

示例1: addTag

func (j *Job) addTag(t cc.Type) {
	for t.Kind() == cc.Ptr || t.Kind() == cc.Array {
		t = t.Element()
	}
	tag := t.Tag()
	if tag == 0 {
		return
	}

	n := j.In.Declarations.Tags[tag].Node
	d := t.Declarator()
	if j.ImportPath(n) == 0 && j.tags[tag] == nil {
		j.tags[tag] = d
	}
}
开发者ID:cznic,项目名称:c,代码行数:15,代码来源:job.go

示例2: addTag2

func (j *Job) addTag2(t cc.Type) {
	for t.Kind() == cc.Ptr || t.Kind() == cc.Array {
		t = t.Element()
	}
	tag := t.Tag()
	var n cc.Node
	if tag != 0 {
		n = j.In.Declarations.Tags[tag].Node
	}
	d := t.Declarator()
	if (n != nil && j.ImportPath(n) != 0) || j.tags[tag] != nil {
		return
	}

	if tag != 0 {
		j.tags[tag] = d
	}
	m, _ := t.Members()
	for _, v := range m {
		j.addTag2(v.Type)
	}
}
开发者ID:cznic,项目名称:c,代码行数:22,代码来源:job.go

示例3: typ

func (j *Job) typ(n cc.Node, t cc.Type) {
	if t.Declarator().RawSpecifier().TypedefName() == idVaList {
		j.body("[]interface{}")
		return
	}

	stars := 0
	for t.Kind() == cc.Ptr {
		stars++
		t = t.Element()
	}
	stars0 := stars
	if (t.Kind() == cc.Void || t.Kind() == cc.Function) && stars > 0 {
		stars--
	}
	j.body("%s", strings.Repeat("*", stars))
	switch k := t.Kind(); k {
	case cc.Char, cc.Double, cc.Int, cc.Long, cc.LongDouble, cc.LongLong, cc.SChar,
		cc.Short, cc.UChar, cc.ULong, cc.ULongLong, cc.UInt, cc.UShort:
		j.body(" %s", j.Model.Items[k].More)
	case cc.Void:
		if stars0 == 0 {
			todo(n)
		}

		j.body(" unsafe.Pointer")
		j.imports[idUnsafe] = struct{}{}
	case cc.Struct, cc.Union:
		// Use tag if available.
		if tag := t.Tag(); tag != 0 {
			nm := mangleTag(tag, true)
			j.qualifier(j.In.Declarations.Tags[tag].Node)
			j.body(" %s", xc.Dict.S(nm))
			break
		}

		// Use typedef name if available.
		if tdn := t.Declarator().RawSpecifier().TypedefName(); tdn != 0 {
			nm := mangleIdent(tdn, true)
			j.qualifier(j.In.Declarations.Identifiers[tdn].Node)
			j.body(" %s", xc.Dict.S(nm))
			break
		}

		j.body(" struct {")
		switch m, incomplete := t.Members(); {
		case incomplete:
			j.body("// Incomplete type\n_ byte")
		case t.Kind() == cc.Union:
			j.union(n, t)
			var f func(cc.Type)
			f = func(t cc.Type) {
				j.addTag(t)
				m, _ := t.Members()
				for _, v := range m {
					f(v.Type)
				}
			}
		default:
			for _, v := range m {
				if v.Bits != 0 {
					j.bits(n, v)
					continue
				}

				j.addTag(v.Type)
				id := v.Name
				nm := mangleIdent(id, true)
				j.body("\n%s", xc.Dict.S(nm))
				j.typ(v.Declarator, v.Type)
				if t := v.Type; t.Kind() != cc.Union && t.Kind() != cc.Struct {
					j.body("// %s", v.Type)
				}
			}
		}
		j.body("\n}")
	case cc.Function:
		j.body(" func")
		j.signature(n, t)
	case cc.Array:
		j.arrayType(n, t)
	default:
		todo(n, t, t.Kind())
	}
}
开发者ID:cznic,项目名称:c,代码行数:85,代码来源:job.go


注:本文中的github.com/cznic/cc.Type.Declarator方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。