62 Commits
Author SHA1 Message Date
a60d994e25 Improve Performance of the Type System (#824)
* export the checker and ensure no methods or fields are exported

* make Checker reusable

* add PatchAndCheck method to Checker, and reuse it in visitors

* avoid unnecessary map and consolidate structs

* make all Nature methods use pointer-receiver

* added cache for type and nature information

* optimize type and nature checks

* more aggressively cache some partial results and add cheap checks

* cache reused values

* reduce copying in Nature by breaking down optional fields

* enforce use of cache

* improve ergonomics of FromType and NatureOf

* improve struct method fetching

* make cache private to Nature

* first iteration improving struct reflect caching

* cleaned up struct fields data

* improve caching of functions data

* simplify checker code

* simplify and remove dead code

* add checker benchmarks

* address PR comments and minor improvements

* rename from SetCache to Bind

* make the benchmarks more fair

* fix benchmark option not being applied

* move Cache to be argument instead of field

* merge FuncData into Optional

* rename Optional to TypeData

* simplify struct logic

* cache builtin numeric types

---------

Co-authored-by: Anton Medvedev <[email protected]>
2025-09-18 14:38:27 +02:00
Anton MedvedevandGitHub 037ef3dc3d Add expr.MaxNodes() option (#799)
* Add expr.MaxNodes() option

* Fix error message

* Add more tests and comments
2025-06-03 17:31:46 +02:00
Anton MedvedevandGitHub 452d355706 Make expr.Eval faster (#775)
* Make expr.Eval faster

* Add bench_call_test.go

* Make parser config optional
2025-03-24 14:48:41 +01:00
Anton Medvedev cd0943453d Remove print 2025-03-09 23:39:16 +01:00
Anton Medvedev 82ec7571df Correctly add OpDeref if needed
Fixes #739
2025-03-09 13:07:38 +01:00
Anton MedvedevandGitHub c953d0dde1 Refactor types table (#667) 2024-06-04 00:08:01 +02:00
Anton Medvedev 0d07afb7ae Add checker.ParseCheck func 2024-05-18 23:13:58 +02:00
Anton Medvedev c6cd675d6b Add default timezone option expr.Timezone() 2024-05-07 23:19:39 +02:00
Anton Medvedev c3a9aa8f44 Fix naming 2024-02-18 09:55:10 +01:00
Anton Medvedev b117e690fb Fix operator overloading recursive
Fixes #548
2024-02-18 00:15:39 +01:00
Anton Medvedev 96c6ad6087 Refactor operator override to be purely patcher pkg 2024-02-17 19:56:28 +01:00
Anton Medvedev 8ab750f2a2 Move operator override patcher to correct pkg 2024-02-17 19:17:27 +01:00
Nikolay MatrosovandGitHub 0ebf2c2574 feat: Operator overload from Function (#408)
* feat: rewritten Operator overload from Function

* fix: add test
2024-02-17 14:33:07 +01:00
Anton Medvedev 616653130e Make AsAny the new default 2024-01-21 11:55:30 +01:00
Anton Medvedev 1dca2cbdc2 Move ast.Function to builtin.Function 2023-12-29 21:04:25 +01:00
Anton Medvedev bf37f8d7e2 Use errors.As 2023-12-26 23:11:40 +01:00
Anton Medvedev 551d2a7e0f Use expr-lang/expr 2023-12-03 21:53:01 +01:00
Anton Medvedev 9d12d8fc39 Add expr.WithContext() 2023-11-27 21:52:44 +01:00
Anton Medvedev 32f5fde2eb Replace interface{} with any 2023-08-30 11:25:15 +02:00
Anton Medvedev 9a9cab2e4a Add sort builtin 2023-08-28 14:55:44 +02:00
Anton Medvedev eb03bcb945 Remove ExperimentalPipe() 2023-08-24 15:26:36 +02:00
Anton Medvedev 4ae978d384 Allow to disable builtins 2023-08-19 22:24:42 +02:00
Anton Medvedev bac96c2c29 Add expr.ExperimentalPipes() config 2023-08-15 15:39:59 +02:00
Anton Medvedev f1fa30776c Add AsAny() 2023-08-14 12:46:08 +02:00
SchneizelandGitHub 2b8c157625 remove duplicate codes (#356) 2023-04-18 14:09:01 +02:00
Anton Medvedev 72a4ce18e9 Add len() builtin 2023-01-29 20:34:15 +01:00
Anton Medvedev 4b7c89eff1 Add expr.Function feature 2023-01-29 20:34:15 +01:00
VladandGitHub f4ad8e3fa0 Do operator check after env is set (#309) 2023-01-20 18:42:24 +01:00
Anton Medvedev 1b6fe02337 Add AsKind and AsInt func 2022-11-10 21:32:32 +01:00
Anton Medvedev 00d167a791 Move code duplicate to conf package 2022-11-10 21:21:38 +01:00
Anton Medvedev 5938325d90 Update docs 2022-10-27 23:08:54 +02:00
Anton Medvedev 0b523f347e Sort imports 2022-10-22 13:39:04 +02:00
Anton Medvedev c19d6d15fc Refactor operator patcher 2022-10-22 13:30:57 +02:00
Anton Medvedev c4a3d22ff1 More fixes 2022-10-13 18:59:12 +02:00
Anton Medvedev 1a7df6aa1e Expose file.Error type for better error handling 2020-03-20 15:26:46 +03:00
Anton Medvedev 94400068f2 Add double type-check when a patch is present 2020-03-17 20:42:51 +03:00
Anton Medvedev 0b1b2e3f28 Add comment 2020-03-16 16:29:25 +03:00
Anton Medvedev e5049dfda3 Make conf top-level package 2020-03-16 16:29:25 +03:00
Anton Medvedev cd6348b6bf Add expr.Patch func 2020-03-16 16:29:25 +03:00
Anton MedvedevandGitHub acba548cab Add ConstExpr 2020-03-10 08:36:12 +03:00
Anton Medvedev 0223fa9f0c Make type checking non-strict by default 2020-03-06 14:26:58 +03:00
Anton Medvedev aaf5d24ecb Reimplement expr parser 2020-02-25 09:33:17 +03:00
TarasZakandAnton Medvedev 10b48c0915 Add compile checks for undefined variables (#85)
* Add compile checks for undefined variables

* Update expr_test.go

Co-authored-by: Anton Medvedev <[email protected]>
2020-01-24 14:53:53 +03:00
Anton Medvedev 8564cbf597 Add option to allow using undefined variables 2019-11-07 12:17:02 +03:00
ElliotandAnton Medvedev b7f2bedd10 Move conf.Options out of internal package 2019-10-18 10:32:59 +03:00
Anton Medvedev fa66cfd4d1 Add backward compatibility with v1 2019-10-05 15:12:36 +03:00
Anton Medvedev b81de7b2b7 Add extra check of correct eval usage 2019-09-26 22:00:31 +03:00
Anton Medvedev c50018a2f7 goimports 2019-07-02 14:36:09 +03:00
Anton Medvedev f956a43747 Add Operator comment 2019-06-25 18:31:47 +03:00
Anton Medvedev f718200b06 Add var in a..b optimization 2019-06-25 16:03:27 +03:00