GoPLS Viewer

Home|gopls/cmd/signature-fuzzer/internal/fuzz-generator/typedefparm.go
1// Copyright 2021 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package generator
6
7import (
8    "bytes"
9    "fmt"
10)
11
12// typedefparm describes a parameter that is a typedef of some other
13// type; it implements the "parm" interface
14type typedefparm struct {
15    aname  string
16    qname  string
17    target parm
18    isBlank
19    addrTakenHow
20    isGenValFunc
21    skipCompare
22}
23
24func (p typedefparmDeclare(b *bytes.Bufferprefix stringsuffix stringcaller bool) {
25    n := p.aname
26    if caller {
27        n = p.qname
28    }
29    b.WriteString(fmt.Sprintf("%s %s%s"prefixnsuffix))
30}
31
32func (p typedefparmGenElemRef(elidx intpath string) (stringparm) {
33    _isarr := p.target.(*arrayparm)
34    _isstruct := p.target.(*structparm)
35    _ismap := p.target.(*mapparm)
36    rvrp := p.target.GenElemRef(elidxpath)
37    // this is hacky, but I don't see a nicer way to do this
38    if isarr || isstruct || ismap {
39        return rvrp
40    }
41    rp = &p
42    return rvrp
43}
44
45func (p typedefparmGenValue(s *genstatef *funcdefvalue intcaller bool) (stringint) {
46    n := p.aname
47    if caller {
48        n = p.qname
49    }
50    rvv := s.GenValue(fp.targetvaluecaller)
51    rv = n + "(" + rv + ")"
52    return rvv
53}
54
55func (p typedefparmIsControl() bool {
56    return false
57}
58
59func (p typedefparmNumElements() int {
60    return p.target.NumElements()
61}
62
63func (p typedefparmString() string {
64    return fmt.Sprintf("%s typedef of %s"p.anamep.target.String())
65
66}
67
68func (p typedefparmTypeName() string {
69    return p.aname
70
71}
72
73func (p typedefparmQualName() string {
74    return p.qname
75}
76
77func (p typedefparmHasPointer() bool {
78    return p.target.HasPointer()
79}
80
81func (s *genstatemakeTypedefParm(f *funcdeftarget parmpidx intparm {
82    var tdp typedefparm
83    ns := len(f.typedefs)
84    tdp.aname = fmt.Sprintf("MyTypeF%dS%d"f.idxns)
85    tdp.qname = fmt.Sprintf("%s.MyTypeF%dS%d"s.checkerPkg(pidx), f.idxns)
86    tdp.target = target
87    tdp.SetBlank(uint8(s.wr.Intn(100)) < tunables.blankPerc)
88    f.typedefs = append(f.typedefstdp)
89    return &tdp
90}
91
MembersX
typedefparm.Declare.prefix
typedefparm.GenElemRef.rv
typedefparm.GenValue.n
typedefparm.GenValue.v
typedefparm.NumElements
typedefparm.target
typedefparm.GenValue.caller
typedefparm.Declare.b
typedefparm.GenElemRef.rp
typedefparm.GenValue.rv
typedefparm.IsControl.p
typedefparm.IsControl
typedefparm.String.p
typedefparm.String
typedefparm.QualName.p
typedefparm.Declare.suffix
genstate.makeTypedefParm.pidx
typedefparm.HasPointer
typedefparm.GenValue.f
typedefparm.HasPointer.p
genstate.makeTypedefParm.s
typedefparm.Declare.p
typedefparm.GenElemRef.path
typedefparm.GenValue.p
typedefparm.QualName
genstate.makeTypedefParm
genstate.makeTypedefParm.f
genstate.makeTypedefParm.ns
typedefparm.qname
typedefparm.GenValue
typedefparm.GenValue.s
typedefparm.NumElements.p
typedefparm.TypeName.p
genstate.makeTypedefParm.target
typedefparm.GenElemRef
typedefparm.Declare
typedefparm.Declare.caller
typedefparm.GenElemRef.p
genstate.makeTypedefParm.tdp
typedefparm.aname
typedefparm.Declare.n
typedefparm.GenElemRef.elidx
typedefparm.GenValue.value
typedefparm.TypeName
typedefparm
Members
X