44 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
Diego Augusto MolinaandGitHub 98b021a54c Allow backticks to be quoted in string literals (#820)
* allow backticks to be quoted in string literals

* remove redundant empty string
2025-08-28 11:06:51 +02:00
Diego Augusto MolinaandGitHub fefc347053 Improve parser and lexer (#811)
* convert source to a struct and fix minor issue displaying error

* lexer: add byte and char pos

* improve parser to use string instead of []rune

* add lexer benchmarks

* make lexer work as an iterator

* make parser use the new iterator API in lexer

* allow reusing the parser

* cleanup code

* add parser benchmarks
2025-06-30 20:08: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
5000e417f5 Add if-else conditional (#736)
Co-authored-by: Anton Medvedev <[email protected]>
2025-02-23 14:19:51 +01:00
Anton MedvedevandGitHub 696844a709 Refactor lexer (#653) 2024-05-17 18:10:26 +02:00
Anton MedvedevandGitHub 68e3148c1f Vendor testify (#642) 2024-05-08 00:24:35 +02:00
Anton MedvedevandGitHub e7b1a64b58 Allow to override builtins (#522)
* Allow to override builtins

* Add :: syntax to access builtin in case of override
2024-01-13 15:56:49 +01:00
Ganesan KaruppasamyandGitHub 57a6bc8f7d Incorporate support for raw string literals (#485) 2023-12-25 18:05:25 +01:00
591e36fc00 Enhance the number parser to include support for parsing hexadecimal, binary, and octal literals. (#483)
* Enhance the number parser to include support for parsing hexadecimal, binary, and octal literals.

* added invalid literal test cases

* Refactoring code as per comment

---------

Co-authored-by: Ganesan Karuppasamy <[email protected]>
2023-12-08 18:33:50 +01:00
Anton Medvedev 551d2a7e0f Use expr-lang/expr 2023-12-03 21:53:01 +01:00
Anton Medvedev 113725207c Fix size check 2023-09-06 09:51:46 +02:00
Anton Medvedev e2c14ca624 Fix if 2023-09-06 09:42:58 +02:00
Anton Medvedev 3c4d579704 Check for an overflow before allocating 2023-09-06 09:42:58 +02:00
Anton Medvedev 32f5fde2eb Replace interface{} with any 2023-08-30 11:25:15 +02:00
Anton Medvedev 2fd03266f6 Add better pointer lexer 2023-08-25 15:50:57 +02:00
Anton Medvedev ed5f9bfbcb Add variables 2023-08-22 22:30:07 +02:00
Anton Medvedev eb023470c8 Refactor lexer_test.go 2023-08-22 14:02:53 +02:00
Anton Medvedev c8b485f6a8 Add String() to nodes 2023-08-17 17:23:18 +02:00
Anton MedvedevandGitHub 86f7951db2 Add pipe operator (#400) 2023-08-13 01:17:49 +02:00
Anton Medvedev 115af7af88 gofmt 2023-08-11 08:49:26 +02:00
Anton Medvedev 95f8b7ff17 Add nil coalescing operator 2023-02-03 15:53:43 +01:00
Anton Medvedev 5d34457179 Lexer: remove redundant case for ?. 2023-02-03 14:46:15 +01:00
Anton Medvedev 32b71b646d Add support for comments 2023-01-30 22:48:56 +01:00
Anton Medvedev 54c29bfda2 Simplify "not in" operators 2022-11-06 13:04:35 +01:00
Anton Medvedev 371e24c30d Add ^ as exponent operator 2022-11-05 20:21:48 +01:00
Anton Medvedev 360e0c27c3 Add ?. in lexer 2022-10-14 16:23:41 +02:00
Anton Medvedev 573ada7443 Fic bunch of checker errors 2022-10-13 23:51:05 +02:00
Anton Medvedev b24419bf76 Remove wrong nil safe implementation 2022-10-09 12:53:30 +02:00
Anton Medvedev 56127510a5 Refactor tests and start refactoring nil safe operator 2022-10-09 12:28:51 +02:00
Vladimir FetisovandGitHub 6adbfc5b37 acceptWord checks the rune after word (#184) 2021-06-15 23:57:54 +03:00
Zach BadgettandGitHub 3eb822d35a Add nil safe operator (#173) 2021-06-07 22:53:12 +03:00
subham sarkarandAnton Medvedev bd05ed40b7 Fix handling of space(s) in between operator 2021-02-25 09:44:07 +01:00
Anton Medvedev 1a7df6aa1e Expose file.Error type for better error handling 2020-03-20 15:26:46 +03:00
Anton Medvedev 05e1505fe0 Remove source pointer in error if wide chars are used 2020-03-04 11:00:50 +03:00
Anton Medvedev 146ecc2f95 Add support for $ symbol in identifiers 2020-03-04 10:50:26 +03:00
Anton Medvedev 7f64f785ad Fix lexer to emit correct location with range operator 2020-03-02 14:56:50 +03:00
Anton Medvedev 73c9cec4f6 Fix lexer for floats 2020-02-26 12:13:59 +03:00
Anton Medvedev ec490ece97 Improve lexer performance 2020-02-25 14:46:38 +03:00
Anton Medvedev bb54a08b53 Sort imports 2020-02-25 09:33:17 +03:00
Anton Medvedev 3c734b49a9 Improve error messages for eof 2020-02-25 09:33:17 +03:00
Anton Medvedev 0809f2c91b Refactor to use new parser 2020-02-25 09:33:17 +03:00
Anton Medvedev 9d3d522ff6 Add # operator support 2020-02-25 09:33:17 +03:00
Anton Medvedev aaf5d24ecb Reimplement expr parser 2020-02-25 09:33:17 +03:00