mirror of
https://github.com/golang/go
synced 2024-11-18 12:24:48 -07:00
cmd/compile: inline convI2E
It's pretty simple. For: e = (interface{})(i) Do: tmp = i.itab if tmp != nil { tmp = tmp.typ_ // load type from itab } e = eface{tmp, i.data} It is smaller and faster than calling the runtime. Change-Id: I0ad27f62f4ec0b6cd53bc8530e4da0eae3e67a6c Reviewed-on: https://go-review.googlesource.com/31260 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
d5bd797ee5
commit
395d36a67d
@ -26,83 +26,82 @@ const runtimeimport = "" +
|
||||
"ne\x00\x03\x17\x0f@|S\x00 \x00\x01\x11|S\x00\t\x13decoderune\x00\x03 \x00\x02\x00\x04|S\rr" +
|
||||
"etv·1\x00\x00\x02\rretk·2\x00\x00\t\x11slicecopy\x00\x06:\tto·2\x00" +
|
||||
"\x00:\tfr·3\x00\x00\x16\vwid·4\x00\x1bunsafe-uintptr\x01\x02\x00\t\x1ds" +
|
||||
"licestringcopy\x00\x04:X\x00\x00:Z\x00\x00\x01\x02\x00\t\rconvI2E\x00\x02:\r" +
|
||||
"elem·2\x00\x00\x02:\vret·1\x00\x00\t\rconvI2I\x00\x04\x17\"\x06\x00\x00:\rel" +
|
||||
"em·3\x00\x00\x02:f\x00\x00\t\rconvT2E\x00\x04\x17\"\x06\x00\x00\x17:j\x00\x00\x02:f\x00\x00\t\r" +
|
||||
"convT2I\x00\x04\x17\"\vtab·2\x00\x00\x17:j\x00\x00\x02:f\x00\x00\t\x11assertE2" +
|
||||
"E\x00\x06\x17\"\vtyp·1\x00\x00:\x0fiface·2\x00\x00\x17:\vret·3\x00\x00\x00\t\x13" +
|
||||
"assertE2E2\x00\x06\x17\"\x06\x00\x00:\x0fiface·3\x00\x00\x17:\vret·4\x00\x00" +
|
||||
"\x01\x00\x00\t\x11assertE2I\x00\x06\x17\"t\x00\x00:v\x00\x00\x17:x\x00\x00\x00\t\x13assertE" +
|
||||
"2I2\x00\x06\x17\"\x06\x00\x00:||\x00\x00\x17:~\x00\x00\x01\x00\x00\t\x11assertE2T\x00\x06\x17\"t\x00" +
|
||||
"\x00:v\x00\x00\x17:x\x00\x00\x00\t\x13assertE2T2\x00\x06\x17\"\x06\x00\x00:||\x00\x00\x17:~\x00\x00" +
|
||||
"\x01\x00\x00\t\x11assertI2E\x00\x06\x17\"t\x00\x00:v\x00\x00\x17:x\x00\x00\x00\t\x13assertI" +
|
||||
"2E2\x00\x06\x17\"\x06\x00\x00:||\x00\x00\x17:~\x00\x00\x01\x00\x00\t\x11assertI2I\x00\x06\x17\"t\x00" +
|
||||
"\x00:v\x00\x00\x17:x\x00\x00\x00\t\x13assertI2I2\x00\x06\x17\"\x06\x00\x00:||\x00\x00\x17:~\x00\x00" +
|
||||
"\x01\x00\x00\t\x11assertI2T\x00\x06\x17\"t\x00\x00:v\x00\x00\x17:x\x00\x00\x00\t\x13assertI" +
|
||||
"2T2\x00\x06\x17\"\x06\x00\x00:||\x00\x00\x17:~\x00\x00\x01\x00\x00\t\x17panicdottype\x00\x06\x17" +
|
||||
"\"\rhave·1\x00\x00\x17\"\rwant·2\x00\x00\x17\"||\x00\x00\x00\t\rifaceeq\x00" +
|
||||
"\x04:\ti1·2\x00\x00:\ti2·3\x00\x00\x02\x00f\x00\x00\t\refaceeq\x00\x04:\x9c\x01\x00\x00" +
|
||||
":\x9e\x01\x00\x00\x02\x00f\x00\x00\t\rmakemap\x00\b\x17\"\x13mapType·2\x00\x00\n\rhi" +
|
||||
"nt·3\x00\x00\x17:\x11mapbuf·4\x00\x00\x17:\x17bucketbuf·5\x00\x00\x02\x1d" +
|
||||
"::\rhmap·1\x00\x00\t\x13mapaccess1\x00\x06\x17\"\xa4\x01\x00\x00\x1d::\rhmap" +
|
||||
"·3\x00\x00\x17:\vkey·4\x00\x00\x02\x17:\vval·1\x00\x00\t!mapaccess1" +
|
||||
"_fast32\x00\x06\x17\"\xa4\x01\x00\x00\x1d::\xb0\x01\x00\x00:\xb2\x01\x00\x00\x02\x17:\xb4\x01\x00\x00\t!mapa" +
|
||||
"ccess1_fast64\x00\x06\x17\"\xa4\x01\x00\x00\x1d::\xb0\x01\x00\x00:\xb2\x01\x00\x00\x02\x17:\xb4\x01\x00\x00" +
|
||||
"\t#mapaccess1_faststr\x00\x06\x17\"\xa4\x01\x00\x00\x1d::\xb0\x01\x00\x00:\xb2\x01\x00\x00" +
|
||||
"\x02\x17:\xb4\x01\x00\x00\t\x1bmapaccess1_fat\x00\b\x17\"\xa4\x01\x00\x00\x1d::\xb0\x01\x00\x00\x17:" +
|
||||
"\xb2\x01\x00\x00\x17\"\rzero·5\x00\x00\x02\x17:\xb4\x01\x00\x00\t\x13mapaccess2\x00\x06\x17\"\x13" +
|
||||
"mapType·3\x00\x00\x1d::\rhmap·4\x00\x00\x17:\vkey·5\x00\x00\x04\x17:\xb4" +
|
||||
"\x01\x00\x00\x00\rpres·2\x00\x00\t!mapaccess2_fast32\x00\x06\x17\"\xc2\x01\x00" +
|
||||
"\x00\x1d::\xc4\x01\x00\x00:\xc6\x01\x00\x00\x04\x17:\xb4\x01\x00\x00\x00\xc8\x01\x00\x00\t!mapaccess2_fa" +
|
||||
"st64\x00\x06\x17\"\xc2\x01\x00\x00\x1d::\xc4\x01\x00\x00:\xc6\x01\x00\x00\x04\x17:\xb4\x01\x00\x00\x00\xc8\x01\x00\x00\t#ma" +
|
||||
"paccess2_faststr\x00\x06\x17\"\xc2\x01\x00\x00\x1d::\xc4\x01\x00\x00:\xc6\x01\x00\x00\x04\x17:\xb4" +
|
||||
"\x01\x00\x00\x00\xc8\x01\x00\x00\t\x1bmapaccess2_fat\x00\b\x17\"\xc2\x01\x00\x00\x1d::\xc4\x01\x00\x00\x17" +
|
||||
":\xc6\x01\x00\x00\x17\"\rzero·6\x00\x00\x04\x17:\xb4\x01\x00\x00\x00\xc8\x01\x00\x00\t\x11mapassign" +
|
||||
"\x00\x06\x17\"\xa4\x01\x00\x00\x1d::\xb0\x01\x00\x00\x17:\xb2\x01\x00\x00\x02\x17:\xb4\x01\x00\x00\t\x15mapiterini" +
|
||||
"t\x00\x06\x17\"\x13mapType·1\x00\x00\x1d::\rhmap·2\x00\x00\x17:\x0fhiter\xc2" +
|
||||
"\xb73\x00\x00\x00\t\x11mapdelete\x00\x06\x17\"\xd8\x01\x00\x00\x1d::\xda\x01\x00\x00\x17:\vkey·3" +
|
||||
"\x00\x00\x00\t\x15mapiternext\x00\x02\x17:\x0fhiter·1\x00\x00\x00\t\x0fmakech" +
|
||||
"an\x00\x04\x17\"\x15chanType·2\x00\x00\n\xa6\x01\x00\x00\x02\x1f\x06:\x0fhchan·1\x00\x00" +
|
||||
"\t\x11chanrecv1\x00\x06\x17\"\x15chanType·1\x00\x00\x1f\x02:\x0fhchan·" +
|
||||
"2\x00\x00\x17:j\x00\x00\x00\t\x11chanrecv2\x00\x06\x17\"\xe8\x01\x00\x00\x1f\x02:\x0fhchan·3" +
|
||||
"\x00\x00\x17:\relem·4\x00\x00\x01\x00\x00\t\x11chansend1\x00\x06\x17\"\xee\x01\x00\x00\x1f\x04:\xf0" +
|
||||
"\x01\x00\x00\x17:j\x00\x00\x00\t\x11closechan\x00\x02:\xea\x01\x00\x00\x00\a\x17writeBarri" +
|
||||
"er\x00\x15\x06\renabled\x00\x00\x00\vneeded\x00\x00\x00\x05cgo\x00\x00\x00\t\x1dwrite" +
|
||||
"barrierptr\x00\x04\x17:\vdst·1\x00\x00:\vsrc·2\x00\x00\x00\t\x17type" +
|
||||
"dmemmove\x00\x06\x17\"t\x00\x00\x17:\vdst·2\x00\x00\x17:\vsrc·3\x00\x00\x00\t\x1b" +
|
||||
"typedslicecopy\x00\x06\x17\"\x06\x00\x00:\vdst·3\x00\x00:\vsrc·4\x00" +
|
||||
"\x00\x01\x02\x00\t\x17selectnbsend\x00\x06\x17\"\xe8\x01\x00\x00\x1f\x04:\xf4\x01\x00\x00\x17:\xf6\x01\x00\x00\x01" +
|
||||
"\x00\x00\t\x17selectnbrecv\x00\x06\x17\"\xe8\x01\x00\x00\x17:j\x00\x00\x1f\x02:\x0fhchan·" +
|
||||
"4\x00\x00\x01\x00\x00\t\x19selectnbrecv2\x00\b\x17\"\xe8\x01\x00\x00\x17:j\x00\x00\x17\x00\x15rec" +
|
||||
"eived·4\x00\x00\x1f\x02:\x0fhchan·5\x00\x00\x01\x00\x00\t\x11newselect\x00\x06" +
|
||||
"\x17\"\vsel·1\x00\x00\n\x13selsize·2\x00\x00\b\rsize·3\x00\x00\x00\t\x13s" +
|
||||
"electsend\x00\x06\x17\"\vsel·2\x00\x00\x1f\x04:\xf4\x01\x00\x00\x17:\xf6\x01\x00\x00\x02\x00\x15se" +
|
||||
"lected·1\x00\x00\t\x13selectrecv\x00\x06\x17\"\xac\x02\x00\x00\x1f\x02:\xf4\x01\x00\x00\x17:" +
|
||||
"\xf6\x01\x00\x00\x02\x00\xae\x02\x00\x00\t\x15selectrecv2\x00\b\x17\"\xac\x02\x00\x00\x1f\x02:\xf4\x01\x00\x00\x17:" +
|
||||
"\xf6\x01\x00\x00\x17\x00\x15received·5\x00\x00\x02\x00\xae\x02\x00\x00\t\x19selectdefaul" +
|
||||
"t\x00\x02\x17\"\xac\x02\x00\x00\x02\x00\xae\x02\x00\x00\t\x0fselectgo\x00\x02\x17\"\xa4\x02\x00\x00\x00\t\tbloc" +
|
||||
"k\x00\x00\x00\t\x11makeslice\x00\x06\x17\"\x06\x00\x00\x02\vlen·3\x00\x00\x02\vcap·4" +
|
||||
"\x00\x00\x02\x11:\vary·1\x00\x00\t\x15makeslice64\x00\x06\x17\"\x06\x00\x00\n\xbe\x02\x00\x00\n" +
|
||||
"\xc0\x02\x00\x00\x02\x11:\xc2\x02\x00\x00\t\x11growslice\x00\x06\x17\"\x06\x00\x00\x11:\vold·3\x00\x00" +
|
||||
"\x02\xc0\x02\x00\x00\x02\x11:\xc2\x02\x00\x00\t\rmemmove\x00\x06\x17:\tto·1\x00\x00\x17:\vfrm\xc2" +
|
||||
"\xb72\x00\x00\x16\x11length·3\x00^\x00\t\vmemclr\x00\x04\x17\"\vptr·1\x00\x00\x16" +
|
||||
"\x11length·2\x00^\x00\t\x0fmemequal\x00\x06\x17:\ax·2\x00\x00\x17:\ay·" +
|
||||
"3\x00\x00\x16\rsize·4\x00^\x01\x00\x00\t\x11memequal8\x00\x04\x17:\xda\x02\x00\x00\x17:\xdc\x02" +
|
||||
"\x00\x00\x01\x00\x00\t\x13memequal16\x00\x04\x17:\xda\x02\x00\x00\x17:\xdc\x02\x00\x00\x01\x00\x00\t\x13meme" +
|
||||
"qual32\x00\x04\x17:\xda\x02\x00\x00\x17:\xdc\x02\x00\x00\x01\x00\x00\t\x13memequal64\x00\x04\x17:\xda" +
|
||||
"\x02\x00\x00\x17:\xdc\x02\x00\x00\x01\x00\x00\t\x15memequal128\x00\x04\x17:\xda\x02\x00\x00\x17:\xdc\x02\x00\x00\x01" +
|
||||
"\x00\x00\t\x0fint64div\x00\x03\n\x00\n\x00\x01\n\x00\t\x11uint64div\x00\x03\x14\x00\x14\x00\x01\x14" +
|
||||
"\x00\t\x0fint64mod\x00\x03\n\x00\n\x00\x01\n\x00\t\x11uint64mod\x00\x03\x14\x00\x14\x00\x01\x14\x00" +
|
||||
"\t\x1bfloat64toint64\x00\x01\x1a\x00\x01\n\x00\t\x1dfloat64touint64" +
|
||||
"\x00\x01\x1a\x00\x01\x14\x00\t\x1dfloat64touint32\x00\x01\x1a\x00\x01\x12\x00\t\x1bint64to" +
|
||||
"float64\x00\x01\n\x00\x01\x1a\x00\t\x1duint64tofloat64\x00\x01\x14\x00\x01\x1a\x00\t\x1d" +
|
||||
"uint32tofloat64\x00\x01\x12\x00\x01\x1a\x00\t\x19complex128div\x00\x04\x1e" +
|
||||
"\vnum·2\x00\x00\x1e\vden·3\x00\x00\x02\x1e\vquo·1\x00\x00\t\x19racefunc" +
|
||||
"enter\x00\x01\x16^\x00\t\x17racefuncexit\x00\x00\x00\t\x0fraceread\x00\x01\x16" +
|
||||
"^\x00\t\x11racewrite\x00\x01\x16^\x00\t\x19racereadrange\x00\x04\x16\radd" +
|
||||
"r·1\x00^\x16\rsize·2\x00^\x00\t\x1bracewriterange\x00\x04\x16\x90\x03\x00" +
|
||||
"^\x16\x92\x03\x00^\x00\t\x0fmsanread\x00\x04\x16\x90\x03\x00^\x16\x92\x03\x00^\x00\t\x11msanwrit" +
|
||||
"e\x00\x04\x16\x90\x03\x00^\x16\x92\x03\x00^\x00\v\xf6\x01\v\x00\x01\x00\n$$\n"
|
||||
"licestringcopy\x00\x04:X\x00\x00:Z\x00\x00\x01\x02\x00\t\rconvI2I\x00\x04\x17\"" +
|
||||
"\x06\x00\x00:\relem·3\x00\x00\x02:\vret·1\x00\x00\t\rconvT2E\x00\x04\x17\"\x06\x00" +
|
||||
"\x00\x17:d\x00\x00\x02:f\x00\x00\t\rconvT2I\x00\x04\x17\"\vtab·2\x00\x00\x17:d\x00\x00\x02:" +
|
||||
"f\x00\x00\t\x11assertE2E\x00\x06\x17\"\vtyp·1\x00\x00:\x0fiface·2\x00\x00\x17" +
|
||||
":\vret·3\x00\x00\x00\t\x13assertE2E2\x00\x06\x17\"\x06\x00\x00:\x0fiface·3" +
|
||||
"\x00\x00\x17:\vret·4\x00\x00\x01\x00\x00\t\x11assertE2I\x00\x06\x17\"p\x00\x00:r\x00\x00\x17:" +
|
||||
"t\x00\x00\x00\t\x13assertE2I2\x00\x06\x17\"\x06\x00\x00:x\x00\x00\x17:z\x00\x00\x01\x00\x00\t\x11ass" +
|
||||
"ertE2T\x00\x06\x17\"p\x00\x00:r\x00\x00\x17:t\x00\x00\x00\t\x13assertE2T2\x00\x06\x17\"\x06" +
|
||||
"\x00\x00:x\x00\x00\x17:z\x00\x00\x01\x00\x00\t\x11assertI2E\x00\x06\x17\"p\x00\x00:r\x00\x00\x17:t\x00" +
|
||||
"\x00\x00\t\x13assertI2E2\x00\x06\x17\"\x06\x00\x00:x\x00\x00\x17:z\x00\x00\x01\x00\x00\t\x11asser" +
|
||||
"tI2I\x00\x06\x17\"p\x00\x00:r\x00\x00\x17:t\x00\x00\x00\t\x13assertI2I2\x00\x06\x17\"\x06\x00\x00" +
|
||||
":x\x00\x00\x17:z\x00\x00\x01\x00\x00\t\x11assertI2T\x00\x06\x17\"p\x00\x00:r\x00\x00\x17:t\x00\x00\x00" +
|
||||
"\t\x13assertI2T2\x00\x06\x17\"\x06\x00\x00:x\x00\x00\x17:z\x00\x00\x01\x00\x00\t\x17panicdo" +
|
||||
"ttype\x00\x06\x17\"\rhave·1\x00\x00\x17\"\rwant·2\x00\x00\x17\"x\x00\x00\x00\t\ri" +
|
||||
"faceeq\x00\x04:\ti1·2\x00\x00:\ti2·3\x00\x00\x02\x00f\x00\x00\t\refaceeq" +
|
||||
"\x00\x04:\x98\x01\x00\x00:\x9a\x01\x00\x00\x02\x00f\x00\x00\t\rmakemap\x00\b\x17\"\x13mapType·" +
|
||||
"2\x00\x00\n\rhint·3\x00\x00\x17:\x11mapbuf·4\x00\x00\x17:\x17bucketbuf" +
|
||||
"·5\x00\x00\x02\x1d::\rhmap·1\x00\x00\t\x13mapaccess1\x00\x06\x17\"\xa0\x01\x00\x00\x1d" +
|
||||
"::\rhmap·3\x00\x00\x17:\vkey·4\x00\x00\x02\x17:\vval·1\x00\x00\t!map" +
|
||||
"access1_fast32\x00\x06\x17\"\xa0\x01\x00\x00\x1d::\xac\x01\x00\x00:\xae\x01\x00\x00\x02\x17:\xb0\x01\x00" +
|
||||
"\x00\t!mapaccess1_fast64\x00\x06\x17\"\xa0\x01\x00\x00\x1d::\xac\x01\x00\x00:\xae\x01\x00\x00" +
|
||||
"\x02\x17:\xb0\x01\x00\x00\t#mapaccess1_faststr\x00\x06\x17\"\xa0\x01\x00\x00\x1d::\xac\x01" +
|
||||
"\x00\x00:\xae\x01\x00\x00\x02\x17:\xb0\x01\x00\x00\t\x1bmapaccess1_fat\x00\b\x17\"\xa0\x01\x00\x00\x1d:" +
|
||||
":\xac\x01\x00\x00\x17:\xae\x01\x00\x00\x17\"\rzero·5\x00\x00\x02\x17:\xb0\x01\x00\x00\t\x13mapacces" +
|
||||
"s2\x00\x06\x17\"\x13mapType·3\x00\x00\x1d::\rhmap·4\x00\x00\x17:\vkey·" +
|
||||
"5\x00\x00\x04\x17:\xb0\x01\x00\x00\x00\rpres·2\x00\x00\t!mapaccess2_fast32" +
|
||||
"\x00\x06\x17\"\xbe\x01\x00\x00\x1d::\xc0\x01\x00\x00:\xc2\x01\x00\x00\x04\x17:\xb0\x01\x00\x00\x00\xc4\x01\x00\x00\t!mapacc" +
|
||||
"ess2_fast64\x00\x06\x17\"\xbe\x01\x00\x00\x1d::\xc0\x01\x00\x00:\xc2\x01\x00\x00\x04\x17:\xb0\x01\x00\x00\x00\xc4" +
|
||||
"\x01\x00\x00\t#mapaccess2_faststr\x00\x06\x17\"\xbe\x01\x00\x00\x1d::\xc0\x01\x00\x00:\xc2" +
|
||||
"\x01\x00\x00\x04\x17:\xb0\x01\x00\x00\x00\xc4\x01\x00\x00\t\x1bmapaccess2_fat\x00\b\x17\"\xbe\x01\x00\x00\x1d" +
|
||||
"::\xc0\x01\x00\x00\x17:\xc2\x01\x00\x00\x17\"\rzero·6\x00\x00\x04\x17:\xb0\x01\x00\x00\x00\xc4\x01\x00\x00\t\x11ma" +
|
||||
"passign\x00\x06\x17\"\xa0\x01\x00\x00\x1d::\xac\x01\x00\x00\x17:\xae\x01\x00\x00\x02\x17:\xb0\x01\x00\x00\t\x15map" +
|
||||
"iterinit\x00\x06\x17\"\x13mapType·1\x00\x00\x1d::\rhmap·2\x00\x00\x17:" +
|
||||
"\x0fhiter·3\x00\x00\x00\t\x11mapdelete\x00\x06\x17\"\xd4\x01\x00\x00\x1d::\xd6\x01\x00\x00\x17:" +
|
||||
"\vkey·3\x00\x00\x00\t\x15mapiternext\x00\x02\x17:\x0fhiter·1\x00\x00\x00\t" +
|
||||
"\x0fmakechan\x00\x04\x17\"\x15chanType·2\x00\x00\n\xa2\x01\x00\x00\x02\x1f\x06:\x0fhch" +
|
||||
"an·1\x00\x00\t\x11chanrecv1\x00\x06\x17\"\x15chanType·1\x00\x00\x1f\x02:\x0f" +
|
||||
"hchan·2\x00\x00\x17:d\x00\x00\x00\t\x11chanrecv2\x00\x06\x17\"\xe4\x01\x00\x00\x1f\x02:\x0fh" +
|
||||
"chan·3\x00\x00\x17:\relem·4\x00\x00\x01\x00\x00\t\x11chansend1\x00\x06\x17\"\xea" +
|
||||
"\x01\x00\x00\x1f\x04:\xec\x01\x00\x00\x17:d\x00\x00\x00\t\x11closechan\x00\x02:\xe6\x01\x00\x00\x00\a\x17wri" +
|
||||
"teBarrier\x00\x15\x06\renabled\x00\x00\x00\vneeded\x00\x00\x00\x05cgo\x00\x00\x00" +
|
||||
"\t\x1dwritebarrierptr\x00\x04\x17:\vdst·1\x00\x00:\vsrc·2\x00\x00" +
|
||||
"\x00\t\x17typedmemmove\x00\x06\x17\"p\x00\x00\x17:\vdst·2\x00\x00\x17:\vsrc\xc2" +
|
||||
"\xb73\x00\x00\x00\t\x1btypedslicecopy\x00\x06\x17\"\x06\x00\x00:\vdst·3\x00\x00:\v" +
|
||||
"src·4\x00\x00\x01\x02\x00\t\x17selectnbsend\x00\x06\x17\"\xe4\x01\x00\x00\x1f\x04:\xf0\x01\x00\x00" +
|
||||
"\x17:\xf2\x01\x00\x00\x01\x00\x00\t\x17selectnbrecv\x00\x06\x17\"\xe4\x01\x00\x00\x17:d\x00\x00\x1f\x02:\x0f" +
|
||||
"hchan·4\x00\x00\x01\x00\x00\t\x19selectnbrecv2\x00\b\x17\"\xe4\x01\x00\x00\x17:d\x00" +
|
||||
"\x00\x17\x00\x15received·4\x00\x00\x1f\x02:\x0fhchan·5\x00\x00\x01\x00\x00\t\x11news" +
|
||||
"elect\x00\x06\x17\"\vsel·1\x00\x00\n\x13selsize·2\x00\x00\b\rsize·" +
|
||||
"3\x00\x00\x00\t\x13selectsend\x00\x06\x17\"\vsel·2\x00\x00\x1f\x04:\xf0\x01\x00\x00\x17:\xf2\x01" +
|
||||
"\x00\x00\x02\x00\x15selected·1\x00\x00\t\x13selectrecv\x00\x06\x17\"\xa8\x02\x00\x00\x1f\x02" +
|
||||
":\xf0\x01\x00\x00\x17:\xf2\x01\x00\x00\x02\x00\xaa\x02\x00\x00\t\x15selectrecv2\x00\b\x17\"\xa8\x02\x00\x00\x1f\x02" +
|
||||
":\xf0\x01\x00\x00\x17:\xf2\x01\x00\x00\x17\x00\x15received·5\x00\x00\x02\x00\xaa\x02\x00\x00\t\x19selec" +
|
||||
"tdefault\x00\x02\x17\"\xa8\x02\x00\x00\x02\x00\xaa\x02\x00\x00\t\x0fselectgo\x00\x02\x17\"\xa0\x02\x00\x00" +
|
||||
"\x00\t\tblock\x00\x00\x00\t\x11makeslice\x00\x06\x17\"\x06\x00\x00\x02\vlen·3\x00\x00\x02" +
|
||||
"\vcap·4\x00\x00\x02\x11:\vary·1\x00\x00\t\x15makeslice64\x00\x06\x17\"\x06\x00" +
|
||||
"\x00\n\xba\x02\x00\x00\n\xbc\x02\x00\x00\x02\x11:\xbe\x02\x00\x00\t\x11growslice\x00\x06\x17\"\x06\x00\x00\x11:\vo" +
|
||||
"ld·3\x00\x00\x02\xbc\x02\x00\x00\x02\x11:\xbe\x02\x00\x00\t\rmemmove\x00\x06\x17:\tto·1\x00\x00" +
|
||||
"\x17:\vfrm·2\x00\x00\x16\x11length·3\x00^\x00\t\vmemclr\x00\x04\x17\"\vpt" +
|
||||
"r·1\x00\x00\x16\x11length·2\x00^\x00\t\x0fmemequal\x00\x06\x17:\ax·2\x00" +
|
||||
"\x00\x17:\ay·3\x00\x00\x16\rsize·4\x00^\x01\x00\x00\t\x11memequal8\x00\x04\x17:\xd6" +
|
||||
"\x02\x00\x00\x17:\xd8\x02\x00\x00\x01\x00\x00\t\x13memequal16\x00\x04\x17:\xd6\x02\x00\x00\x17:\xd8\x02\x00\x00\x01\x00" +
|
||||
"\x00\t\x13memequal32\x00\x04\x17:\xd6\x02\x00\x00\x17:\xd8\x02\x00\x00\x01\x00\x00\t\x13memequal" +
|
||||
"64\x00\x04\x17:\xd6\x02\x00\x00\x17:\xd8\x02\x00\x00\x01\x00\x00\t\x15memequal128\x00\x04\x17:\xd6\x02\x00\x00" +
|
||||
"\x17:\xd8\x02\x00\x00\x01\x00\x00\t\x0fint64div\x00\x03\n\x00\n\x00\x01\n\x00\t\x11uint64div\x00" +
|
||||
"\x03\x14\x00\x14\x00\x01\x14\x00\t\x0fint64mod\x00\x03\n\x00\n\x00\x01\n\x00\t\x11uint64mod\x00\x03" +
|
||||
"\x14\x00\x14\x00\x01\x14\x00\t\x1bfloat64toint64\x00\x01\x1a\x00\x01\n\x00\t\x1dfloat64t" +
|
||||
"ouint64\x00\x01\x1a\x00\x01\x14\x00\t\x1dfloat64touint32\x00\x01\x1a\x00\x01\x12\x00\t\x1b" +
|
||||
"int64tofloat64\x00\x01\n\x00\x01\x1a\x00\t\x1duint64tofloat64\x00\x01" +
|
||||
"\x14\x00\x01\x1a\x00\t\x1duint32tofloat64\x00\x01\x12\x00\x01\x1a\x00\t\x19complex12" +
|
||||
"8div\x00\x04\x1e\vnum·2\x00\x00\x1e\vden·3\x00\x00\x02\x1e\vquo·1\x00\x00\t\x19r" +
|
||||
"acefuncenter\x00\x01\x16^\x00\t\x17racefuncexit\x00\x00\x00\t\x0frace" +
|
||||
"read\x00\x01\x16^\x00\t\x11racewrite\x00\x01\x16^\x00\t\x19racereadrange" +
|
||||
"\x00\x04\x16\raddr·1\x00^\x16\rsize·2\x00^\x00\t\x1bracewriterang" +
|
||||
"e\x00\x04\x16\x8c\x03\x00^\x16\x8e\x03\x00^\x00\t\x0fmsanread\x00\x04\x16\x8c\x03\x00^\x16\x8e\x03\x00^\x00\t\x11m" +
|
||||
"sanwrite\x00\x04\x16\x8c\x03\x00^\x16\x8e\x03\x00^\x00\v\xf4\x01\v\x00\x01\x00\n$$\n"
|
||||
|
||||
const unsafeimport = "" +
|
||||
"version 2\n\n\x00\x00\x01\vunsafe\x00\t\x0fOffsetof\x00\x01:\x00\x01\x16\x00\t" +
|
||||
|
@ -58,7 +58,6 @@ func slicecopy(to any, fr any, wid uintptr) int
|
||||
func slicestringcopy(to any, fr any) int
|
||||
|
||||
// interface conversions
|
||||
func convI2E(elem any) (ret any)
|
||||
func convI2I(typ *byte, elem any) (ret any)
|
||||
func convT2E(typ *byte, elem *any) (ret any)
|
||||
func convT2I(tab *byte, elem *any) (ret any)
|
||||
|
@ -410,16 +410,14 @@ func walkexprlistcheap(s []*Node, init *Nodes) {
|
||||
}
|
||||
}
|
||||
|
||||
// Build name of function: convI2E etc.
|
||||
// Build name of function for interface conversion.
|
||||
// Not all names are possible
|
||||
// (e.g., we'll never generate convE2E or convE2I).
|
||||
// (e.g., we'll never generate convE2E or convE2I or convI2E).
|
||||
func convFuncName(from, to *Type) string {
|
||||
tkind := to.iet()
|
||||
switch from.iet() {
|
||||
case 'I':
|
||||
switch tkind {
|
||||
case 'E':
|
||||
return "convI2E"
|
||||
case 'I':
|
||||
return "convI2I"
|
||||
}
|
||||
@ -1080,6 +1078,34 @@ opswitch:
|
||||
break
|
||||
}
|
||||
|
||||
// Implement interface to empty interface conversion.
|
||||
// tmp = i.itab
|
||||
// if tmp != nil {
|
||||
// tmp = tmp.type
|
||||
// }
|
||||
// e = iface{tmp, i.data}
|
||||
if n.Type.IsEmptyInterface() && n.Left.Type.IsInterface() && !n.Left.Type.IsEmptyInterface() {
|
||||
// Evaluate the input interface.
|
||||
c := temp(n.Left.Type)
|
||||
init.Append(nod(OAS, c, n.Left))
|
||||
|
||||
// Get the itab out of the interface.
|
||||
tmp := temp(ptrto(Types[TUINT8]))
|
||||
init.Append(nod(OAS, tmp, typecheck(nod(OITAB, c, nil), Erv)))
|
||||
|
||||
// Get the type out of the itab.
|
||||
nif := nod(OIF, typecheck(nod(ONE, tmp, nodnil()), Erv), nil)
|
||||
nif.Nbody.Set1(nod(OAS, tmp, itabType(tmp)))
|
||||
init.Append(nif)
|
||||
|
||||
// Build the result.
|
||||
e := nod(OEFACE, tmp, ifaceData(c, ptrto(Types[TUINT8])))
|
||||
e.Type = n.Type // assign type manually, typecheck doesn't understand OEFACE.
|
||||
e.Typecheck = 1
|
||||
n = e
|
||||
break
|
||||
}
|
||||
|
||||
var ll []*Node
|
||||
if n.Type.IsEmptyInterface() {
|
||||
if !n.Left.Type.IsInterface() {
|
||||
|
@ -264,16 +264,6 @@ func assertE2T2(t *_type, e eface, r unsafe.Pointer) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func convI2E(i iface) (r eface) {
|
||||
tab := i.tab
|
||||
if tab == nil {
|
||||
return
|
||||
}
|
||||
r._type = tab._type
|
||||
r.data = i.data
|
||||
return
|
||||
}
|
||||
|
||||
func assertI2E(inter *interfacetype, i iface, r *eface) {
|
||||
tab := i.tab
|
||||
if tab == nil {
|
||||
|
Loading…
Reference in New Issue
Block a user