Tomasz Wlostowski
1051f11683
libeval_compiler: thou shalt not return pointers to std::vector members! (fixes an use-after-free crash in complex rule evaluation invoked by the router)
...
Fixes: https://gitlab.com/kicad/code/kicad/-/issues/9451
2021-10-29 16:48:36 +02:00
Jeff Young
048e13f423
Defer DRC rule function eval to make use of short-circuit bools.
...
The lemon parser doesn't lend itself to short-circuiting booleans,
but if we defer processing until we fetch the second value when
processing the TR_OP_BOOLEAN opcode then we get to piggy-back on
C++'s boolean short-circuiting.
2021-08-21 16:43:11 +01:00
Jeff Young
1a252b4f96
Add a compile error for ill-defined rules, and more performance.
...
Also adds const-safety to GetBoard().
2021-08-16 12:14:17 +01:00
Jeff Young
e93e9fa3e5
Add rudimentary type checking to rule eval with reporter.
...
Also cleaned up existing error reporting to not expend CPU cycles
when there was no reporter.
Fixes https://gitlab.com/kicad/code/kicad/issues/8438
2021-05-20 23:06:24 +01:00
Ian McInerney
44655b98de
Initialize variables properly
2021-01-18 18:35:10 +00:00
Jeff Young
63e2046eb0
Performance improvements for DRC rules.
2021-01-11 22:09:36 +00:00
Jeff Young
1ce1e493d6
A rule zone is not really a BOARD_CONNECTED_ITEM.
...
Or at least it shouldn't always be treated as one.
Fixes https://gitlab.com/kicad/code/kicad/issues/6382
2020-11-15 20:23:15 +00:00
Werni
a7d5d1f091
Add more consts all over the place
2020-10-27 11:03:35 +00:00
Marek Roszko
e928b2d8fd
Split EDA_UNITS out from common.
2020-10-25 00:02:52 -04:00
Jeff Young
948036372e
Ban unitless numbers in DRC rules.
...
Fixes https://gitlab.com/kicad/code/kicad/issues/6029
2020-10-17 10:58:08 +01:00
Jeff Young
09ab269770
Support for 'L' in DRC expression language.
...
Also make layer testing work again against both canonical names and
user names.
2020-09-27 21:33:37 +01:00
Tomasz Wlostowski
0c885c9c31
libeval_compiler: == operator now does wildcard string comparison
2020-09-27 16:45:46 +02:00
Tomasz Wlostowski
5023d9a780
libeval_compiler: initial support for multiple (>1) function/method arguments
2020-09-27 16:45:46 +02:00
Jeff Young
6d18f20093
ADDED constraints reporter for diagnosing constraints.
...
Also fixes an issue with via type property and makes property
comparisons in rule case-insensitive.
Fixes https://gitlab.com/kicad/code/kicad/issues/5754
2020-09-23 01:14:35 +01:00
Mark Roszko
7656663a2f
Fix Python integration to build with vcpkg
...
* Add vcpkg support to find Oython using CMake
* Fix pid_t conflict with python
* Fix COMPILER conflict with python
2020-09-22 12:39:05 +00:00
Jeff Young
0763a8962c
Implement boolean not processing in expression language.
...
Also adds some more error catching to be more robust in the face
of malformed customer rules.
Fixes https://gitlab.com/kicad/code/kicad/issues/5694
2020-09-19 12:08:18 +01:00
Tomasz Wlostowski
466cbe2f00
libeval_compiler: fixhandling of method calls with empty argument list (e.g. 'A.method()' )
2020-09-08 01:31:42 +02:00
Jeff Young
050bbcdb4f
Fix error reporting from function pre-flighting.
2020-08-26 12:56:17 +01:00
Jeff Young
edda024285
Fix up some Coverity and CLion warnings.
2020-08-14 12:41:20 +01:00
Jeff Young
519bc80394
Replace error reporting in DRC rule compiler.
2020-08-13 18:47:41 +01:00
Jeff Young
0b17dbd123
Fix nesting issues in the DRC rule expression code generator.
...
We were executing function calls multiple times because we were
processing them at a depth the traversal algorithm wasn't expecting.
2020-08-13 18:36:10 +01:00
Tomasz Wlostowski
a5a06e3c89
libeval_compiler: general clean up of the Lemon grammar + some smart pointers + killed all memory leaks. WIP!
2020-08-13 14:50:59 +02:00
Tomasz Wlostowski
29a01e5515
libeval_compiler: wxString()-ification WIP
2020-08-13 14:50:59 +02:00
Jeff Young
84425f5a40
Fix crash bug from bad static_cast.
2020-08-12 22:20:07 +01:00
Jeff Young
f27661fa39
Be more flexible with user input; more multibyte safety.
2020-08-06 19:38:06 +01:00
Jeff Young
577c1be391
Report all DRC rule errors, not just the first.
2020-07-30 14:27:42 +01:00
Tomasz Wlostowski
fe4695719d
libeval_compiler: post-rebase fixes
2020-07-29 23:14:34 +02:00
Tomasz Wlostowski
3c80b98d1c
libeval_compiler: CONTEXT runs the UCODE now (thread-safe solution), fixed some memory leaks
2020-07-29 23:14:03 +02:00
Jeff Young
0fecb5f277
Be more explicit about string/character conversions.
...
This *may* fix the bug where a layer name isn't displayed correctly
in the error dialog. But probably not.
2020-07-28 20:44:40 +01:00
Jeff Young
552dde8976
Fix return value going out of scope.
...
(From Coverity report.)
2020-07-26 13:41:43 +01:00
Jeff Young
bf445c1a95
Performance enhancements.
...
1) cache pad polygon outlines
huge improvement in connectivity performance and a decent
improvement in DRC performance
2) don't pre-allocate CONTEXT stack
significant improvement in DRC rule performance
2) don't keep re-encoding strings
decent improvement in DRC rule performance
2020-07-25 13:03:33 +01:00
Jeff Young
6529e339a9
Don't store context in the uCode. (It's not thread-safe.)
...
Although it does give some pretty funny results when filling zones.
2020-07-23 22:21:13 +01:00
Jeff Young
f2812773d4
Better handling of undefined values in Rule expressions.
...
This is particularly important to keep the user from having to
enter overly verbose statements such as:
A.Type == 'via' && A.Via_Type == 'buried'
when:
A.Via_Type == 'buried'
is perfectly clear.
2020-07-23 16:41:58 +01:00
Jeff Young
a6b6084a60
Add preflighting for DRC rule function calls.
2020-07-22 14:33:32 +01:00
Jeff Young
095937563b
Hook libeval compiler up to rule parser
...
- convert expression string tokens to single-quote-delimited
- fix bug where netclass assignments weren't getting updated after
board setup dialog
- move property manager rebuild to lazy evaluation
- improve performance with wider use of const&
- retire DRC_SELECTOR stuff
- use wxString for GUI stuff (particularly translated stuff)
- fix EqualTo() to return false instead of asserting when op types
don't match
- fix buffer overruns with fixed-size string buffers
- make expression function calls case-insensitive
- integrate expression errors into rule parser
- produce more and better error messages
- keep BOARD_ITEM ptrs const as long as possible
- fix a couple of uninitialized variables
2020-07-20 22:11:53 +01:00
Jeff Young
bcb29b6bf8
Fix security issue (buffer overrun).
2020-07-18 11:44:12 +01:00
Tomasz Wlostowski
49c37014f7
Updated copyright headers in expression evaluator code
2020-07-05 22:44:38 +02:00
Tomasz Wlostowski
3268f98fd7
libeval_compiler: support for method calls (e.g. item.onlayer('layer') )
2020-07-05 22:44:38 +02:00
Tomasz Wlostowski
aaa91655aa
libeval_compiler: integrated in common/
2020-07-05 22:44:38 +02:00