code: func (t *tree) parseMapLiteral(first item, expr ast.Node) ast.Node {
  	firstKey, ok := expr.(*ast.StringNode)
  	if !ok {
  		t.errorf("expected a string as map key, got: %T", expr)
  	}
  
  	var items = make(map[string]ast.Node)
  	var key = firstKey.Value
  	for {
  		items[key] = t.parseExpr(0)
  		next := t.next()
  		if next.typ == itemRightBracket {
  			return &ast.MapLiteralNode{first.pos, items}
  		}
  		if next.typ != itemComma {
  			t.unexpected(next, "map literal")
  		}
  		tok := t.expect(itemString, "map literal")
  		var err error
  		key, err = unquoteString(tok.val)
  		if err != nil {
  			t.error(err)
  		}
  		t.expect(itemColon, "map literal")
  	}
  }
docs: // the first key in the map is provided
  // ":" has just been read.
  // MapLiteral -> "[" ( ":" | Expr ":" Expr ( "," Expr ":" Expr )* [ "," ] ) "]"