github.com/bir3/gocompiler@v0.3.205/src/cmd/compile/internal/noder/codes.go (about)

     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  
     5  package noder
     6  
     7  import "github.com/bir3/gocompiler/src/internal/pkgbits"
     8  
     9  // A codeStmt distinguishes among statement encodings.
    10  type codeStmt int
    11  
    12  func (c codeStmt) Marker() pkgbits.SyncMarker { return pkgbits.SyncStmt1 }
    13  func (c codeStmt) Value() int                 { return int(c) }
    14  
    15  const (
    16  	stmtEnd codeStmt = iota
    17  	stmtLabel
    18  	stmtBlock
    19  	stmtExpr
    20  	stmtSend
    21  	stmtAssign
    22  	stmtAssignOp
    23  	stmtIncDec
    24  	stmtBranch
    25  	stmtCall
    26  	stmtReturn
    27  	stmtIf
    28  	stmtFor
    29  	stmtSwitch
    30  	stmtSelect
    31  )
    32  
    33  // A codeExpr distinguishes among expression encodings.
    34  type codeExpr int
    35  
    36  func (c codeExpr) Marker() pkgbits.SyncMarker { return pkgbits.SyncExpr }
    37  func (c codeExpr) Value() int                 { return int(c) }
    38  
    39  // TODO(mdempsky): Split expr into addr, for lvalues.
    40  const (
    41  	exprConst  codeExpr = iota
    42  	exprLocal           // local variable
    43  	exprGlobal          // global variable or function
    44  	exprCompLit
    45  	exprFuncLit
    46  	exprFieldVal
    47  	exprMethodVal
    48  	exprMethodExpr
    49  	exprIndex
    50  	exprSlice
    51  	exprAssert
    52  	exprUnaryOp
    53  	exprBinaryOp
    54  	exprCall
    55  	exprConvert
    56  	exprNew
    57  	exprMake
    58  	exprNil
    59  	exprFuncInst
    60  	exprRecv
    61  	exprReshape
    62  )
    63  
    64  type codeAssign int
    65  
    66  func (c codeAssign) Marker() pkgbits.SyncMarker { return pkgbits.SyncAssign }
    67  func (c codeAssign) Value() int                 { return int(c) }
    68  
    69  const (
    70  	assignBlank codeAssign = iota
    71  	assignDef
    72  	assignExpr
    73  )
    74  
    75  // A codeDecl distinguishes among declaration encodings.
    76  type codeDecl int
    77  
    78  func (c codeDecl) Marker() pkgbits.SyncMarker { return pkgbits.SyncDecl }
    79  func (c codeDecl) Value() int                 { return int(c) }
    80  
    81  const (
    82  	declEnd codeDecl = iota
    83  	declFunc
    84  	declMethod
    85  	declVar
    86  	declOther
    87  )