func (b *Builder) ParseListVariableOrMakeArray(ctx *builderCtx) node.Node { list := b.PeekNonSpace(ctx) var n node.Node switch list.Type() { case ItemIdentifier: b.NextNonSpace(ctx) if idx, ok := ctx.HasLocalVar(list.Value()); ok { n = node.NewLocalVarNode(list.Pos(), list.Value(), idx) } else { n = node.NewFetchSymbolNode(list.Pos(), list.Value()) } if b.PeekNonSpace(ctx).Type() == ItemPeriod { b.NextNonSpace(ctx) n = b.ParseMethodCallOrMapLookup(ctx, n) } case ItemOpenSquareBracket: n = b.ParseMakeArray(ctx) default: panic("f**k") } return n }
func (b *Builder) LocalVarOrFetchSymbol(ctx *builderCtx, token lex.LexItem) node.Node { if idx, ok := ctx.HasLocalVar(token.Value()); ok { return node.NewLocalVarNode(token.Pos(), token.Value(), idx) } return node.NewFetchSymbolNode(token.Pos(), token.Value()) }