mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: implement unsafe.Add and unsafe.Slice
Updates #19367. Updates #40481. Change-Id: Iabd2afdd0d520e5d68fd9e6dedd013335a4b3886 Reviewed-on: https://go-review.googlesource.com/c/go/+/312214 Run-TryBot: Matthew Dempsky <mdempsky@google.com> Trust: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
0d32d9e8a8
commit
fadad851a3
20 changed files with 439 additions and 204 deletions
|
|
@ -25,69 +25,71 @@ import (
|
|||
// Op
|
||||
|
||||
var OpNames = []string{
|
||||
OADDR: "&",
|
||||
OADD: "+",
|
||||
OADDSTR: "+",
|
||||
OALIGNOF: "unsafe.Alignof",
|
||||
OANDAND: "&&",
|
||||
OANDNOT: "&^",
|
||||
OAND: "&",
|
||||
OAPPEND: "append",
|
||||
OAS: "=",
|
||||
OAS2: "=",
|
||||
OBREAK: "break",
|
||||
OCALL: "function call", // not actual syntax
|
||||
OCAP: "cap",
|
||||
OCASE: "case",
|
||||
OCLOSE: "close",
|
||||
OCOMPLEX: "complex",
|
||||
OBITNOT: "^",
|
||||
OCONTINUE: "continue",
|
||||
OCOPY: "copy",
|
||||
ODELETE: "delete",
|
||||
ODEFER: "defer",
|
||||
ODIV: "/",
|
||||
OEQ: "==",
|
||||
OFALL: "fallthrough",
|
||||
OFOR: "for",
|
||||
OFORUNTIL: "foruntil", // not actual syntax; used to avoid off-end pointer live on backedge.892
|
||||
OGE: ">=",
|
||||
OGOTO: "goto",
|
||||
OGT: ">",
|
||||
OIF: "if",
|
||||
OIMAG: "imag",
|
||||
OINLMARK: "inlmark",
|
||||
ODEREF: "*",
|
||||
OLEN: "len",
|
||||
OLE: "<=",
|
||||
OLSH: "<<",
|
||||
OLT: "<",
|
||||
OMAKE: "make",
|
||||
ONEG: "-",
|
||||
OMOD: "%",
|
||||
OMUL: "*",
|
||||
ONEW: "new",
|
||||
ONE: "!=",
|
||||
ONOT: "!",
|
||||
OOFFSETOF: "unsafe.Offsetof",
|
||||
OOROR: "||",
|
||||
OOR: "|",
|
||||
OPANIC: "panic",
|
||||
OPLUS: "+",
|
||||
OPRINTN: "println",
|
||||
OPRINT: "print",
|
||||
ORANGE: "range",
|
||||
OREAL: "real",
|
||||
ORECV: "<-",
|
||||
ORECOVER: "recover",
|
||||
ORETURN: "return",
|
||||
ORSH: ">>",
|
||||
OSELECT: "select",
|
||||
OSEND: "<-",
|
||||
OSIZEOF: "unsafe.Sizeof",
|
||||
OSUB: "-",
|
||||
OSWITCH: "switch",
|
||||
OXOR: "^",
|
||||
OADDR: "&",
|
||||
OADD: "+",
|
||||
OADDSTR: "+",
|
||||
OALIGNOF: "unsafe.Alignof",
|
||||
OANDAND: "&&",
|
||||
OANDNOT: "&^",
|
||||
OAND: "&",
|
||||
OAPPEND: "append",
|
||||
OAS: "=",
|
||||
OAS2: "=",
|
||||
OBREAK: "break",
|
||||
OCALL: "function call", // not actual syntax
|
||||
OCAP: "cap",
|
||||
OCASE: "case",
|
||||
OCLOSE: "close",
|
||||
OCOMPLEX: "complex",
|
||||
OBITNOT: "^",
|
||||
OCONTINUE: "continue",
|
||||
OCOPY: "copy",
|
||||
ODELETE: "delete",
|
||||
ODEFER: "defer",
|
||||
ODIV: "/",
|
||||
OEQ: "==",
|
||||
OFALL: "fallthrough",
|
||||
OFOR: "for",
|
||||
OFORUNTIL: "foruntil", // not actual syntax; used to avoid off-end pointer live on backedge.892
|
||||
OGE: ">=",
|
||||
OGOTO: "goto",
|
||||
OGT: ">",
|
||||
OIF: "if",
|
||||
OIMAG: "imag",
|
||||
OINLMARK: "inlmark",
|
||||
ODEREF: "*",
|
||||
OLEN: "len",
|
||||
OLE: "<=",
|
||||
OLSH: "<<",
|
||||
OLT: "<",
|
||||
OMAKE: "make",
|
||||
ONEG: "-",
|
||||
OMOD: "%",
|
||||
OMUL: "*",
|
||||
ONEW: "new",
|
||||
ONE: "!=",
|
||||
ONOT: "!",
|
||||
OOFFSETOF: "unsafe.Offsetof",
|
||||
OOROR: "||",
|
||||
OOR: "|",
|
||||
OPANIC: "panic",
|
||||
OPLUS: "+",
|
||||
OPRINTN: "println",
|
||||
OPRINT: "print",
|
||||
ORANGE: "range",
|
||||
OREAL: "real",
|
||||
ORECV: "<-",
|
||||
ORECOVER: "recover",
|
||||
ORETURN: "return",
|
||||
ORSH: ">>",
|
||||
OSELECT: "select",
|
||||
OSEND: "<-",
|
||||
OSIZEOF: "unsafe.Sizeof",
|
||||
OSUB: "-",
|
||||
OSWITCH: "switch",
|
||||
OUNSAFEADD: "unsafe.Add",
|
||||
OUNSAFESLICE: "unsafe.Slice",
|
||||
OXOR: "^",
|
||||
}
|
||||
|
||||
// GoString returns the Go syntax for the Op, or else its name.
|
||||
|
|
@ -218,6 +220,8 @@ var OpPrec = []int{
|
|||
OTMAP: 8,
|
||||
OTSTRUCT: 8,
|
||||
OTYPE: 8,
|
||||
OUNSAFEADD: 8,
|
||||
OUNSAFESLICE: 8,
|
||||
OINDEXMAP: 8,
|
||||
OINDEX: 8,
|
||||
OSLICE: 8,
|
||||
|
|
@ -794,7 +798,7 @@ func exprFmt(n Node, s fmt.State, prec int) {
|
|||
n := n.(*SliceHeaderExpr)
|
||||
fmt.Fprintf(s, "sliceheader{%v,%v,%v}", n.Ptr, n.Len, n.Cap)
|
||||
|
||||
case OCOMPLEX, OCOPY:
|
||||
case OCOMPLEX, OCOPY, OUNSAFEADD, OUNSAFESLICE:
|
||||
n := n.(*BinaryExpr)
|
||||
fmt.Fprintf(s, "%v(%v, %v)", n.Op(), n.X, n.Y)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue