@@ -660,7 +660,7 @@ func (v *checker) functionReturnType(node *ast.CallNode) Nature {
660660func (v * checker ) BuiltinNode (node * ast.BuiltinNode ) Nature {
661661 switch node .Name {
662662 case "all" , "none" , "any" , "one" :
663- collection := v .visit (node .Arguments [0 ])
663+ collection := v .visit (node .Arguments [0 ]). Deref ()
664664 if ! isArray (collection ) && ! isUnknown (collection ) {
665665 return v .error (node .Arguments [0 ], "builtin %v takes only array (got %v)" , node .Name , collection )
666666 }
@@ -681,7 +681,7 @@ func (v *checker) BuiltinNode(node *ast.BuiltinNode) Nature {
681681 return v .error (node .Arguments [1 ], "predicate should has one input and one output param" )
682682
683683 case "filter" :
684- collection := v .visit (node .Arguments [0 ])
684+ collection := v .visit (node .Arguments [0 ]). Deref ()
685685 if ! isArray (collection ) && ! isUnknown (collection ) {
686686 return v .error (node .Arguments [0 ], "builtin %v takes only array (got %v)" , node .Name , collection )
687687 }
@@ -705,7 +705,7 @@ func (v *checker) BuiltinNode(node *ast.BuiltinNode) Nature {
705705 return v .error (node .Arguments [1 ], "predicate should has one input and one output param" )
706706
707707 case "map" :
708- collection := v .visit (node .Arguments [0 ])
708+ collection := v .visit (node .Arguments [0 ]). Deref ()
709709 if ! isArray (collection ) && ! isUnknown (collection ) {
710710 return v .error (node .Arguments [0 ], "builtin %v takes only array (got %v)" , node .Name , collection )
711711 }
@@ -723,7 +723,7 @@ func (v *checker) BuiltinNode(node *ast.BuiltinNode) Nature {
723723 return v .error (node .Arguments [1 ], "predicate should has one input and one output param" )
724724
725725 case "count" :
726- collection := v .visit (node .Arguments [0 ])
726+ collection := v .visit (node .Arguments [0 ]). Deref ()
727727 if ! isArray (collection ) && ! isUnknown (collection ) {
728728 return v .error (node .Arguments [0 ], "builtin %v takes only array (got %v)" , node .Name , collection )
729729 }
@@ -748,7 +748,7 @@ func (v *checker) BuiltinNode(node *ast.BuiltinNode) Nature {
748748 return v .error (node .Arguments [1 ], "predicate should has one input and one output param" )
749749
750750 case "sum" :
751- collection := v .visit (node .Arguments [0 ])
751+ collection := v .visit (node .Arguments [0 ]). Deref ()
752752 if ! isArray (collection ) && ! isUnknown (collection ) {
753753 return v .error (node .Arguments [0 ], "builtin %v takes only array (got %v)" , node .Name , collection )
754754 }
@@ -771,7 +771,7 @@ func (v *checker) BuiltinNode(node *ast.BuiltinNode) Nature {
771771 }
772772
773773 case "find" , "findLast" :
774- collection := v .visit (node .Arguments [0 ])
774+ collection := v .visit (node .Arguments [0 ]). Deref ()
775775 if ! isArray (collection ) && ! isUnknown (collection ) {
776776 return v .error (node .Arguments [0 ], "builtin %v takes only array (got %v)" , node .Name , collection )
777777 }
@@ -795,7 +795,7 @@ func (v *checker) BuiltinNode(node *ast.BuiltinNode) Nature {
795795 return v .error (node .Arguments [1 ], "predicate should has one input and one output param" )
796796
797797 case "findIndex" , "findLastIndex" :
798- collection := v .visit (node .Arguments [0 ])
798+ collection := v .visit (node .Arguments [0 ]). Deref ()
799799 if ! isArray (collection ) && ! isUnknown (collection ) {
800800 return v .error (node .Arguments [0 ], "builtin %v takes only array (got %v)" , node .Name , collection )
801801 }
@@ -816,7 +816,7 @@ func (v *checker) BuiltinNode(node *ast.BuiltinNode) Nature {
816816 return v .error (node .Arguments [1 ], "predicate should has one input and one output param" )
817817
818818 case "groupBy" :
819- collection := v .visit (node .Arguments [0 ])
819+ collection := v .visit (node .Arguments [0 ]). Deref ()
820820 if ! isArray (collection ) && ! isUnknown (collection ) {
821821 return v .error (node .Arguments [0 ], "builtin %v takes only array (got %v)" , node .Name , collection )
822822 }
@@ -835,7 +835,7 @@ func (v *checker) BuiltinNode(node *ast.BuiltinNode) Nature {
835835 return v .error (node .Arguments [1 ], "predicate should has one input and one output param" )
836836
837837 case "sortBy" :
838- collection := v .visit (node .Arguments [0 ])
838+ collection := v .visit (node .Arguments [0 ]). Deref ()
839839 if ! isArray (collection ) && ! isUnknown (collection ) {
840840 return v .error (node .Arguments [0 ], "builtin %v takes only array (got %v)" , node .Name , collection )
841841 }
@@ -857,7 +857,7 @@ func (v *checker) BuiltinNode(node *ast.BuiltinNode) Nature {
857857 return v .error (node .Arguments [1 ], "predicate should has one input and one output param" )
858858
859859 case "reduce" :
860- collection := v .visit (node .Arguments [0 ])
860+ collection := v .visit (node .Arguments [0 ]). Deref ()
861861 if ! isArray (collection ) && ! isUnknown (collection ) {
862862 return v .error (node .Arguments [0 ], "builtin %v takes only array (got %v)" , node .Name , collection )
863863 }
0 commit comments