code: func (t *tree) parseListOrMap(token item) ast.Node {
  	// check if it's empty
  	switch t.next().typ {
  	case itemColon:
  		t.expect(itemRightBracket, "map literal")
  		return &ast.MapLiteralNode{token.pos, nil}
  	case itemRightBracket:
  		return &ast.ListLiteralNode{token.pos, nil}
  	}
  	t.backup()
  
  	// parse the first expression, and check the subsequent delimiter
  	var firstExpr = t.parseExpr(0)
  	switch tok := t.next(); tok.typ {
  	case itemColon:
  		return t.parseMapLiteral(token, firstExpr)
  	case itemComma:
  		return t.parseListLiteral(token, firstExpr)
  	case itemRightBracket:
  		return &ast.ListLiteralNode{token.pos, []ast.Node{firstExpr}}
  	default:
  		t.unexpected(tok, "list/map literal")
  	}
  	return nil
  }
docs: // "[" has just been read