33 Commits
Author SHA1 Message Date
Anton Medvedev 127f965eeb Do not optimize filter_map if #index used
Fixes #758
2025-03-07 20:39:53 +01:00
Anton MedvedevandGitHub c953d0dde1 Refactor types table (#667) 2024-06-04 00:08:01 +02:00
Anton MedvedevandGitHub fee5690347 Refactor checker to use Nature (#665)
This PR introduces a new concept inside Expr's type checker - Nature.

It's an abstraction other reflect.Type which carries additional information about possible type, methods and builtin function.

I was able to find and fix a few bugs in type checker and optimizer. Implementation of nature concept has proven itself. As well nature will allow to bring more feature for type checker in future.

Why Nature? I was looking for a name to replace Type. Type name already carries much information, as well can be confused with reflect.Type. Nature name should be understood as "nature of the node", same as "type of the node".
2024-06-01 00:09:22 +02:00
Anton MedvedevandGitHub 68e3148c1f Vendor testify (#642) 2024-05-08 00:24:35 +02:00
Anton Medvedev ba3bae5017 Add more optimizer tests 2024-04-13 23:50:53 +02:00
Anton Medvedev 8589d34039 Add sum([]) optimization 2024-04-13 23:16:08 +02:00
SergeyandGitHub 2835692a5f Optimize boolean operations between all, any, none functions (#626) 2024-04-12 18:49:41 +02:00
Anton MedvedevandGitHub 3205e4186b Revert "Optimize boolean operations between all, any, one, none functions (#555)" (#625)
This reverts commit 8037acf0bb.
2024-04-10 10:58:17 +02:00
SergeyandGitHub 8037acf0bb Optimize boolean operations between all, any, one, none functions (#555) 2024-02-11 22:23:48 +01:00
Anton Medvedev 811a16b4fa Remove const range optimization 2023-12-22 22:49:31 +01:00
Anton Medvedev 551d2a7e0f Use expr-lang/expr 2023-12-03 21:53:01 +01:00
Anton Medvedev 32f5fde2eb Replace interface{} with any 2023-08-30 11:25:15 +02:00
Anton Medvedev e37105ef90 Fix float folding optimization 2023-08-28 22:24:46 +02:00
Anton Medvedev 16403049ac Apply in range optimization only for int type on lhs 2023-08-28 17:36:33 +02:00
Anton Medvedev 46929e4646 Add map(filter()) optimization 2023-08-24 11:15:43 +02:00
Anton Medvedev 166d8b8ce9 Add filter()[-1] optimization 2023-08-24 11:15:43 +02:00
Anton Medvedev 8c52bd6d8b Add filter()[0] optimization 2023-08-24 11:15:43 +02:00
Anton Medvedev 22b3d6bf74 Add len(filter()) optimization 2023-08-24 11:15:43 +02:00
Anton Medvedev 719f30d3ad Add builtin functions 2023-08-14 15:37:06 +02:00
Andrew BentonandAnton Medvedev ab25d4658b Adds simple bool condition optimization
This change introduces simple boolean condition optimization when
dealing with boolean `and`, `or`, and `==` expressions to help trim
unnecessary AST nodes.
2023-02-01 20:44:32 +01:00
Anton Medvedev c64d7ad215 Add optimize float folds test 2022-11-08 21:01:50 +01:00
Anton Medvedev 6e7a89b65c Optimizer should return []interface{} as well. 2022-11-05 20:33:41 +01:00
Anton Medvedev 514a6dcfa7 Fix OpCall 2022-10-13 10:39:56 +02:00
Anton Medvedev e5049dfda3 Make conf top-level package 2020-03-16 16:29:25 +03:00
Anton MedvedevandGitHub acba548cab Add ConstExpr 2020-03-10 08:36:12 +03:00
Anton Medvedev 7f64f785ad Fix lexer to emit correct location with range operator 2020-03-02 14:56:50 +03:00
Anton Medvedev e2f2207d81 goimports 2019-07-02 14:34:48 +03:00
Anton Medvedev 4c32accdba Fix optimizer for in array 2019-06-26 15:12:36 +03:00
Anton Medvedev 37a0db14ff Make optimized program unmarshalable 2019-06-26 11:21:45 +03:00
Anton Medvedev 83979d9691 Add in array optimization 2019-06-26 10:35:59 +03:00
Anton Medvedev 02ca6fbf39 Add more optimizations 2019-06-25 16:25:14 +03:00
Anton Medvedev f718200b06 Add var in a..b optimization 2019-06-25 16:03:27 +03:00
Anton Medvedev 4547b362d9 Add constant folding optimization 2019-06-25 15:42:57 +03:00