if nam.Sym == nil {
Fatalf("gdata nil nam sym")
}
+ s := Linksym(nam.Sym)
switch nr.Op {
case OLITERAL:
switch u := nr.Val().U.(type) {
- case *Mpcplx:
- gdatacomplex(nam, u)
-
- case string:
- gdatastring(nam, u)
-
case bool:
i := int64(obj.Bool2int(u))
- Linksym(nam.Sym).WriteInt(Ctxt, nam.Xoffset, wid, i)
+ s.WriteInt(Ctxt, nam.Xoffset, wid, i)
case *Mpint:
- Linksym(nam.Sym).WriteInt(Ctxt, nam.Xoffset, wid, u.Int64())
+ s.WriteInt(Ctxt, nam.Xoffset, wid, u.Int64())
case *Mpflt:
- s := Linksym(nam.Sym)
f := u.Float64()
switch nam.Type.Etype {
case TFLOAT32:
s.WriteFloat64(Ctxt, nam.Xoffset, f)
}
+ case *Mpcplx:
+ r := u.Real.Float64()
+ i := u.Imag.Float64()
+ switch nam.Type.Etype {
+ case TCOMPLEX64:
+ s.WriteFloat32(Ctxt, nam.Xoffset, float32(r))
+ s.WriteFloat32(Ctxt, nam.Xoffset+4, float32(i))
+ case TCOMPLEX128:
+ s.WriteFloat64(Ctxt, nam.Xoffset, r)
+ s.WriteFloat64(Ctxt, nam.Xoffset+8, i)
+ }
+
+ case string:
+ symdata := stringsym(u)
+ s.WriteAddr(Ctxt, nam.Xoffset, Widthptr, symdata, 0)
+ s.WriteInt(Ctxt, nam.Xoffset+int64(Widthptr), Widthint, int64(len(u)))
+
default:
Fatalf("gdata unhandled OLITERAL %v", nr)
}
Fatalf("gdata ADDR left op %v", nr.Left.Op)
}
to := nr.Left
- Linksym(nam.Sym).WriteAddr(Ctxt, nam.Xoffset, wid, Linksym(to.Sym), to.Xoffset)
+ s.WriteAddr(Ctxt, nam.Xoffset, wid, Linksym(to.Sym), to.Xoffset)
case ONAME:
if nr.Class != PFUNC {
Fatalf("gdata NAME not PFUNC %d", nr.Class)
}
- Linksym(nam.Sym).WriteAddr(Ctxt, nam.Xoffset, wid, Linksym(funcsym(nr.Sym)), nr.Xoffset)
+ s.WriteAddr(Ctxt, nam.Xoffset, wid, Linksym(funcsym(nr.Sym)), nr.Xoffset)
default:
Fatalf("gdata unhandled op %v %v\n", nr, nr.Op)
}
}
-
-func gdatacomplex(nam *Node, cval *Mpcplx) {
- t := Types[cplxsubtype(nam.Type.Etype)]
- r := cval.Real.Float64()
- i := cval.Imag.Float64()
- s := Linksym(nam.Sym)
-
- switch t.Etype {
- case TFLOAT32:
- s.WriteFloat32(Ctxt, nam.Xoffset, float32(r))
- s.WriteFloat32(Ctxt, nam.Xoffset+4, float32(i))
- case TFLOAT64:
- s.WriteFloat64(Ctxt, nam.Xoffset, r)
- s.WriteFloat64(Ctxt, nam.Xoffset+8, i)
- }
-}
-
-func gdatastring(nam *Node, sval string) {
- s := Linksym(nam.Sym)
- symdata := stringsym(sval)
- s.WriteAddr(Ctxt, nam.Xoffset, Widthptr, symdata, 0)
- s.WriteInt(Ctxt, nam.Xoffset+int64(Widthptr), Widthint, int64(len(sval)))
-}
return true
case OLITERAL:
- break
- }
-
- switch nr.Type.Etype {
- default:
- return false
-
- case TBOOL, TINT8, TUINT8, TINT16, TUINT16,
- TINT32, TUINT32, TINT64, TUINT64,
- TINT, TUINT, TUINTPTR, TUNSAFEPTR,
- TPTR32, TPTR64,
- TFLOAT32, TFLOAT64:
if !reportOnly {
gdata(&nam, nr, int(nr.Type.Width))
}
-
- case TCOMPLEX64, TCOMPLEX128:
- if !reportOnly {
- gdatacomplex(&nam, nr.Val().U.(*Mpcplx))
- }
-
- case TSTRING:
- if !reportOnly {
- gdatastring(&nam, nr.Val().U.(string))
- }
+ return true
}
- return true
+ return false
}