| // UNREVIEWED | |
| // 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 | |
| type code interface { | |
| marker() syncMarker | |
| value() int | |
| } | |
| type codeVal int | |
| func (c codeVal) marker() syncMarker { return syncVal } | |
| func (c codeVal) value() int { return int(c) } | |
| const ( | |
| valBool codeVal = iota | |
| valString | |
| valInt64 | |
| valBigInt | |
| valBigRat | |
| valBigFloat | |
| ) | |
| type codeType int | |
| func (c codeType) marker() syncMarker { return syncType } | |
| func (c codeType) value() int { return int(c) } | |
| const ( | |
| typeBasic codeType = iota | |
| typeNamed | |
| typePointer | |
| typeSlice | |
| typeArray | |
| typeChan | |
| typeMap | |
| typeSignature | |
| typeStruct | |
| typeInterface | |
| typeUnion | |
| typeTypeParam | |
| ) | |
| type codeObj int | |
| func (c codeObj) marker() syncMarker { return syncCodeObj } | |
| func (c codeObj) value() int { return int(c) } | |
| const ( | |
| objAlias codeObj = iota | |
| objConst | |
| objType | |
| objFunc | |
| objVar | |
| objStub | |
| ) | |
| type codeStmt int | |
| func (c codeStmt) marker() syncMarker { return 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 | |
| // TODO(mdempsky): Remove after we don't care about toolstash -cmp. | |
| stmtTypeDeclHack | |
| ) | |
| type codeExpr int | |
| func (c codeExpr) marker() syncMarker { return syncExpr } | |
| func (c codeExpr) value() int { return int(c) } | |
| // TODO(mdempsky): Split expr into addr, for lvalues. | |
| const ( | |
| exprNone codeExpr = iota | |
| exprConst | |
| exprType // type expression | |
| exprLocal // local variable | |
| exprName // global variable or function | |
| exprBlank | |
| exprCompLit | |
| exprFuncLit | |
| exprSelector | |
| exprIndex | |
| exprSlice | |
| exprAssert | |
| exprUnaryOp | |
| exprBinaryOp | |
| exprCall | |
| exprConvert | |
| ) | |
| type codeDecl int | |
| func (c codeDecl) marker() syncMarker { return syncDecl } | |
| func (c codeDecl) value() int { return int(c) } | |
| const ( | |
| declEnd codeDecl = iota | |
| declFunc | |
| declMethod | |
| declVar | |
| declOther | |
| ) |