func phelp(t xc.Token) string { if len(t.S()) != 0 { return fmt.Sprintf(" %s", t.S()) } return "" }
func (l *lexer) mustIdent(t xc.Token) (Node, int) { b, f := l.scope.lookup(t.Val) if b == nil { l.report.ErrTok(t, "undeclared identifier %s", t.S()) return nil, -1 } return b.Node, f }
func (l *lexer) mustProc(t xc.Token) (Node, int) { n, f := l.mustIdent(t) if n == nil { return nil, -1 } if _, ok := n.(*ProcSpec); !ok { l.report.ErrTok(t, "%s is not a procedure", t.S()) return nil, -1 } return n, f }
func (l *lexer) mustVar(t xc.Token) (Node, int) { n, f := l.mustIdent(t) if n == nil { return nil, -1 } if _, ok := n.(*Variable); !ok { l.report.ErrTok(t, "%s is not a variable", t.S()) return nil, -1 } return n, f }
func (l *lexer) mustVarOrConst(t xc.Token) (Node, int) { n, f := l.mustIdent(t) if n == nil { return nil, -1 } switch n.(type) { case *Variable, *ConstSpec: return n, f default: l.report.ErrTok(t, "%s is not a constant or a variable", t.S()) return nil, -1 } }