コード例 #1
0
ファイル: typesig.go プロジェクト: Serulian/compiler
// computeTypeSignature computes and returns the type signature for the given type.
func computeTypeSignature(typedecl typegraph.TGTypeDecl) typeSignature {
	// We only need non-field members, as fields are never in interfaces.
	nonFieldMembers := typedecl.NonFieldMembers()

	staticSignatures := make([]memberSignature, 0, len(nonFieldMembers))
	dynamicSignatures := make([]memberSignature, 0, len(nonFieldMembers))

	for _, member := range nonFieldMembers {
		// We only need exported members as interfaces cannot contain or match
		// private members.
		if !member.IsExported() {
			continue
		}

		signature := computeMemberSignature(member)
		if signature.IsDynamic() {
			dynamicSignatures = append(dynamicSignatures, signature)
		} else {
			staticSignatures = append(staticSignatures, signature)
		}
	}

	return typeSignature{staticSignatures, dynamicSignatures}
}