func NominalWrapping(childExpression Expression, nominalType typegraph.TGTypeDecl, basis compilergraph.GraphNode) Expression { return &NominalWrappingNode{ expressionBase{domBase{basis}}, childExpression, nominalType.GetTypeReference(), nominalType.GetTypeReference(), true, } }
// GetTypePath returns the global path for the given type. func (p Pather) GetTypePath(typedecl typegraph.TGTypeDecl) string { if typedecl.TypeKind() == typegraph.GenericType { return typedecl.Name() } return p.GetModulePath(typedecl.ParentModule()) + "." + typedecl.Name() }
// generateType generates the given type into ES5. func (gen *es5generator) generateType(typedef typegraph.TGTypeDecl) esbuilder.SourceBuilder { generating := generatingType{typedef, gen} switch typedef.TypeKind() { case typegraph.ClassType: return esbuilder.Template("class", classTemplateStr, generating) case typegraph.ImplicitInterfaceType: return esbuilder.Template("interface", interfaceTemplateStr, generating) case typegraph.NominalType: return esbuilder.Template("nominal", nominalTemplateStr, generating) case typegraph.StructType: return esbuilder.Template("struct", structTemplateStr, generating) case typegraph.ExternalInternalType: return esbuilder.Snippet("") default: panic("Unknown typedef kind") } }
// 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} }
// GetStaticTypePath returns the global path for the given defined type. func (p Pather) GetStaticTypePath(typedecl typegraph.TGTypeDecl, referenceType typegraph.TypeReference) string { instanceTypeRef := typedecl.GetTypeReference().TransformUnder(referenceType) return p.TypeReferenceCall(instanceTypeRef) }