// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package noder import "internal/pkgbits" // A codeStmt distinguishes among statement encodings. type codeStmt int func (c codeStmt) Marker() pkgbits.SyncMarker { return pkgbits.SyncStmt1 } func (c codeStmt) Value() int { return int(c) } const ( stmtEnd codeStmt = iota stmtLabel stmtBlock stmtExpr stmtSend stmtAssign stmtAssignOp stmtIncDec stmtBranch stmtCall stmtReturn stmtIf stmtFor stmtSwitch stmtSelect ) // A codeExpr distinguishes among expression encodings. type codeExpr int func (c codeExpr) Marker() pkgbits.SyncMarker { return pkgbits.SyncExpr } func (c codeExpr) Value() int { return int(c) } // TODO(mdempsky): Split expr into addr, for lvalues. const ( exprConst codeExpr = iota exprLocal // local variable exprGlobal // global variable or function exprCompLit exprFuncLit exprFieldVal exprMethodVal exprMethodExpr exprIndex exprSlice exprAssert exprUnaryOp exprBinaryOp exprCall exprConvert exprNew exprMake exprSizeof exprAlignof exprOffsetof exprZero exprFuncInst exprRecv exprReshape exprRuntimeBuiltin // a reference to a runtime function from transformed syntax. Followed by string name, e.g., "panicrangeexit" ) type codeAssign int func (c codeAssign) Marker() pkgbits.SyncMarker { return pkgbits.SyncAssign } func (c codeAssign) Value() int { return int(c) } const ( assignBlank codeAssign = iota assignDef assignExpr ) // A codeDecl distinguishes among declaration encodings. type codeDecl int func (c codeDecl) Marker() pkgbits.SyncMarker { return pkgbits.SyncDecl } func (c codeDecl) Value() int { return int(c) } const ( declEnd codeDecl = iota declFunc declMethod declVar declOther )