Skip to content

Commit

Permalink
Avoid resolve_target when its obviously possible (#205)
Browse files Browse the repository at this point in the history
Signed-off-by: Juan Cruz Viotti <[email protected]>
  • Loading branch information
jviotti authored Nov 21, 2024
1 parent acc801f commit 8f5a209
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 19 deletions.
28 changes: 10 additions & 18 deletions src/evaluator/dispatch.h
Original file line number Diff line number Diff line change
Expand Up @@ -276,8 +276,7 @@ HANDLER_START {
// before traversing into the actual property
target.is_object());
// Now here we refer to the actual property
const auto &effective_target{
resolve_target(property_target, target_check.value())};
const auto &effective_target{target_check.value().get()};
// In non-strict mode, we consider a real number that represents an
// integer to be an integer
result = effective_target.type() == assertion.value ||
Expand All @@ -293,8 +292,7 @@ HANDLER_START {
// before traversing into the actual property
target.is_object());
// Now here we refer to the actual property
const auto &effective_target{
resolve_target(property_target, target_check.value())};
const auto &effective_target{target_check.value().get()};
// In non-strict mode, we consider a real number that represents an
// integer to be an integer
result = effective_target.type() == assertion.value ||
Expand All @@ -316,8 +314,7 @@ HANDLER_START {
// before traversing into the actual property
target.is_object());
// Now here we refer to the actual property
result = resolve_target(property_target, target_check.value()).type() ==
assertion.value;
result = target_check.value().get().type() == assertion.value;
EVALUATE_END(assertion, AssertionPropertyTypeStrict);
}

Expand All @@ -328,8 +325,7 @@ HANDLER_START {
// before traversing into the actual property
target.is_object());
// Now here we refer to the actual property
result = resolve_target(property_target, target_check.value()).type() ==
assertion.value;
result = target_check.value().get().type() == assertion.value;

if (result) {
assert(track);
Expand All @@ -346,11 +342,9 @@ HANDLER_START {
// before traversing into the actual property
target.is_object());
// Now here we refer to the actual property
result =
(std::find(
assertion.value.cbegin(), assertion.value.cend(),
resolve_target(property_target, target_check.value()).type()) !=
assertion.value.cend());
result = (std::find(assertion.value.cbegin(), assertion.value.cend(),
target_check.value().get().type()) !=
assertion.value.cend());
EVALUATE_END(assertion, AssertionPropertyTypeStrictAny);
}

Expand All @@ -361,11 +355,9 @@ HANDLER_START {
// before traversing into the actual property
target.is_object());
// Now here we refer to the actual property
result =
(std::find(
assertion.value.cbegin(), assertion.value.cend(),
resolve_target(property_target, target_check.value()).type()) !=
assertion.value.cend());
result = (std::find(assertion.value.cbegin(), assertion.value.cend(),
target_check.value().get().type()) !=
assertion.value.cend());

if (result) {
assert(track);
Expand Down
2 changes: 1 addition & 1 deletion src/evaluator/evaluator.cc
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ auto evaluate_step(
// pass it to `.push()` so that it doesn't need to traverse it again.
#define EVALUATE_BEGIN_TRY_TARGET(step_category, step_type, precondition) \
SOURCEMETA_TRACE_START(trace_id, STRINGIFY(step_type)); \
const auto &target{resolve_target(property_target, instance)}; \
const auto &target{instance}; \
const auto &step_category{std::get<step_type>(step)}; \
if (!(precondition)) { \
SOURCEMETA_TRACE_END(trace_id, STRINGIFY(step_type)); \
Expand Down

5 comments on commit 8f5a209

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (macos/llvm)

Benchmark suite Current: 8f5a209 Previous: acc801f Ratio
Compiler_Draft6_AdaptiveCard 31690408790.99998 ns/iter 37025597375.00008 ns/iter 0.86
Compiler_2019_09_OMC_JSON_V2 6635070208.000115 ns/iter 8880079582.999996 ns/iter 0.75
Evaluator_Draft4_Meta_1_No_Callback 285.371550710853 ns/iter 370.15430680133716 ns/iter 0.77
Evaluator_Draft4_Required_Properties 350.3191366615375 ns/iter 400.5554021947569 ns/iter 0.87
Evaluator_Draft4_Many_Optional_Properties_Minimal_Match 22.667084771093393 ns/iter 27.063883823156377 ns/iter 0.84
Evaluator_Draft4_Few_Optional_Properties_Minimal_Match 10.51411225160657 ns/iter 12.100931966333993 ns/iter 0.87
Evaluator_Draft4_Items_Schema 706.8492599498057 ns/iter 784.558049470951 ns/iter 0.90
Evaluator_Draft4_Nested_Object 1.4227033943388905 ns/iter 1.6442799359304776 ns/iter 0.87
Evaluator_Draft4_Properties_Triad_Optional 1009.3904065952297 ns/iter 1150.2834132155895 ns/iter 0.88
Evaluator_Draft4_Properties_Triad_Closed 707.8902572300294 ns/iter 838.865896899604 ns/iter 0.84
Evaluator_Draft4_Properties_Triad_Required 1000.300639306516 ns/iter 1155.1430050511315 ns/iter 0.87
Evaluator_Draft4_Properties_Closed 94.29910089531346 ns/iter 103.89729811883957 ns/iter 0.91
Evaluator_Draft4_Non_Recursive_Ref 12.078923907611582 ns/iter 13.542604537161393 ns/iter 0.89
Evaluator_Draft4_Pattern_Properties_True 1184.0886458577727 ns/iter 1354.4873850483061 ns/iter 0.87
Evaluator_Draft4_Ref_To_Single_Property 11.590990241021917 ns/iter 12.887720633180765 ns/iter 0.90
Evaluator_Draft4_Additional_Properties_Type 26.00926006301659 ns/iter 29.13321815011551 ns/iter 0.89
Evaluator_Draft4_Nested_Oneof 91.89733985649704 ns/iter 96.88867798083832 ns/iter 0.95
Evaluator_Draft4_Long_Enum 21.147088394575697 ns/iter 23.230316211794886 ns/iter 0.91
Evaluator_Draft4_Type_Object 6.289068083593984 ns/iter 6.991376490962309 ns/iter 0.90
Evaluator_Draft6_Property_Names 286.6709362487123 ns/iter 313.2354168512261 ns/iter 0.92
Evaluator_Draft7_If_Then_Else 38.42392510320474 ns/iter 43.094047140348984 ns/iter 0.89
Evaluator_Draft7_Vercel_1 103235.43547914206 ns/iter 101928.91634298988 ns/iter 1.01
Evaluator_2019_09_Unevaluated_Properties 156.663985141258 ns/iter 163.56009844859224 ns/iter 0.96
Evaluator_2019_09_OMC_JSON_V2_1 6693.77188354066 ns/iter 7512.394399721322 ns/iter 0.89
Evaluator_2020_12_Dynamic_Ref 539.9164101588149 ns/iter 579.1575656271015 ns/iter 0.93

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (linux/llvm)

Benchmark suite Current: 8f5a209 Previous: acc801f Ratio
Compiler_Draft6_AdaptiveCard 58417201218.99999 ns/iter 57880214162.000015 ns/iter 1.01
Compiler_2019_09_OMC_JSON_V2 11069004919.999998 ns/iter 11004294662.999996 ns/iter 1.01
Evaluator_Draft4_Meta_1_No_Callback 465.4291309618219 ns/iter 472.99551097211014 ns/iter 0.98
Evaluator_Draft4_Required_Properties 901.6173909857649 ns/iter 894.5199188277011 ns/iter 1.01
Evaluator_Draft4_Many_Optional_Properties_Minimal_Match 48.37795097951381 ns/iter 49.83272061913577 ns/iter 0.97
Evaluator_Draft4_Few_Optional_Properties_Minimal_Match 29.066237446454757 ns/iter 29.160639443985552 ns/iter 1.00
Evaluator_Draft4_Items_Schema 1414.0923207453739 ns/iter 1456.5726003407497 ns/iter 0.97
Evaluator_Draft4_Nested_Object 4.947826417444941 ns/iter 4.950743098756933 ns/iter 1.00
Evaluator_Draft4_Properties_Triad_Optional 1333.3461037218528 ns/iter 1297.3808133488035 ns/iter 1.03
Evaluator_Draft4_Properties_Triad_Closed 1032.4359251412166 ns/iter 1024.0720243936182 ns/iter 1.01
Evaluator_Draft4_Properties_Triad_Required 1362.7154905108157 ns/iter 1337.130646212691 ns/iter 1.02
Evaluator_Draft4_Properties_Closed 163.01863706370926 ns/iter 171.6045213859255 ns/iter 0.95
Evaluator_Draft4_Non_Recursive_Ref 35.56610100912072 ns/iter 39.89016283855093 ns/iter 0.89
Evaluator_Draft4_Pattern_Properties_True 2041.2568078755796 ns/iter 2031.674244400487 ns/iter 1.00
Evaluator_Draft4_Ref_To_Single_Property 29.682556463721326 ns/iter 28.796616397017637 ns/iter 1.03
Evaluator_Draft4_Additional_Properties_Type 59.72099913767344 ns/iter 70.14980160460932 ns/iter 0.85
Evaluator_Draft4_Nested_Oneof 184.56963477874837 ns/iter 184.14120869153035 ns/iter 1.00
Evaluator_Draft4_Long_Enum 27.237908493631267 ns/iter 27.889389014238215 ns/iter 0.98
Evaluator_Draft4_Type_Object 16.43136483621932 ns/iter 17.015000867510278 ns/iter 0.97
Evaluator_Draft6_Property_Names 599.740013947606 ns/iter 630.1136428593205 ns/iter 0.95
Evaluator_Draft7_If_Then_Else 81.8319949155883 ns/iter 84.32898808208243 ns/iter 0.97
Evaluator_Draft7_Vercel_1 139529.46307661943 ns/iter 142100.437993117 ns/iter 0.98
Evaluator_2019_09_Unevaluated_Properties 218.0124796338991 ns/iter 220.7304332453824 ns/iter 0.99
Evaluator_2019_09_OMC_JSON_V2_1 10287.516622052932 ns/iter 10447.596592090307 ns/iter 0.98
Evaluator_2020_12_Dynamic_Ref 971.1169199861591 ns/iter 1015.2641745027734 ns/iter 0.96

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (linux/gcc)

Benchmark suite Current: 8f5a209 Previous: acc801f Ratio
Evaluator_2020_12_Dynamic_Ref 965.3781168376809 ns/iter 970.4059911490804 ns/iter 0.99
Evaluator_2019_09_Unevaluated_Properties 262.1518602574494 ns/iter 284.6982721818131 ns/iter 0.92
Evaluator_2019_09_OMC_JSON_V2_1 13099.731685252284 ns/iter 12565.580447250075 ns/iter 1.04
Evaluator_Draft7_If_Then_Else 71.22727512483424 ns/iter 70.50275470834484 ns/iter 1.01
Evaluator_Draft7_Vercel_1 154846.82036189488 ns/iter 149925.98851295415 ns/iter 1.03
Evaluator_Draft6_Property_Names 1337.9223260699764 ns/iter 1253.8878730356907 ns/iter 1.07
Evaluator_Draft4_Meta_1_No_Callback 531.1496089277114 ns/iter 532.01530299517 ns/iter 1.00
Evaluator_Draft4_Required_Properties 1852.0952500981143 ns/iter 1779.5819344727126 ns/iter 1.04
Evaluator_Draft4_Many_Optional_Properties_Minimal_Match 49.267585325949746 ns/iter 49.02998909656143 ns/iter 1.00
Evaluator_Draft4_Few_Optional_Properties_Minimal_Match 38.069244294290655 ns/iter 37.18503945970424 ns/iter 1.02
Evaluator_Draft4_Items_Schema 1203.1057628087135 ns/iter 1308.1010347468773 ns/iter 0.92
Evaluator_Draft4_Nested_Object 3.4880077564649965 ns/iter 3.439259393585263 ns/iter 1.01
Evaluator_Draft4_Properties_Triad_Optional 1365.7450102233202 ns/iter 1378.8940239668466 ns/iter 0.99
Evaluator_Draft4_Properties_Triad_Closed 1087.179139780953 ns/iter 1088.6001701273149 ns/iter 1.00
Evaluator_Draft4_Properties_Triad_Required 1425.706931303554 ns/iter 1428.150524826599 ns/iter 1.00
Evaluator_Draft4_Properties_Closed 214.07851435725755 ns/iter 208.97058780566863 ns/iter 1.02
Evaluator_Draft4_Non_Recursive_Ref 54.51821493596012 ns/iter 54.59439988156766 ns/iter 1.00
Evaluator_Draft4_Pattern_Properties_True 2216.3728082663115 ns/iter 2130.487439690778 ns/iter 1.04
Evaluator_Draft4_Ref_To_Single_Property 41.68571262269338 ns/iter 40.453291430573806 ns/iter 1.03
Evaluator_Draft4_Additional_Properties_Type 108.79365579503165 ns/iter 109.54199298299919 ns/iter 0.99
Evaluator_Draft4_Nested_Oneof 154.44394610551868 ns/iter 156.76916024677254 ns/iter 0.99
Evaluator_Draft4_Long_Enum 23.895251448221952 ns/iter 23.189975585013173 ns/iter 1.03
Evaluator_Draft4_Type_Object 13.421388078635806 ns/iter 13.867944803888966 ns/iter 0.97
Compiler_2019_09_OMC_JSON_V2 11241971961.999979 ns/iter 11411194610.000051 ns/iter 0.99
Compiler_Draft6_AdaptiveCard 64529825952.00001 ns/iter 65844507720.00002 ns/iter 0.98

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (macos/gcc)

Benchmark suite Current: 8f5a209 Previous: acc801f Ratio
Compiler_Draft6_AdaptiveCard 42013858079.91028 ns/iter 44964429855.34668 ns/iter 0.93
Compiler_2019_09_OMC_JSON_V2 7907115936.279297 ns/iter 9027891159.057617 ns/iter 0.88
Evaluator_Draft4_Meta_1_No_Callback 288.0376366259923 ns/iter 312.7106874545706 ns/iter 0.92
Evaluator_Draft4_Required_Properties 494.48913741119134 ns/iter 535.6725995475489 ns/iter 0.92
Evaluator_Draft4_Many_Optional_Properties_Minimal_Match 27.132642728096034 ns/iter 29.63188205450001 ns/iter 0.92
Evaluator_Draft4_Few_Optional_Properties_Minimal_Match 15.5844768721743 ns/iter 17.45538895704876 ns/iter 0.89
Evaluator_Draft4_Items_Schema 847.6248322037509 ns/iter 957.4067689247793 ns/iter 0.89
Evaluator_Draft4_Nested_Object 1.9493393086929647 ns/iter 2.098977301772247 ns/iter 0.93
Evaluator_Draft4_Properties_Triad_Optional 1052.6916205564548 ns/iter 1105.5282680767439 ns/iter 0.95
Evaluator_Draft4_Properties_Triad_Closed 841.6028154024199 ns/iter 997.7832939790832 ns/iter 0.84
Evaluator_Draft4_Properties_Triad_Required 1110.5852077464713 ns/iter 1156.9840572359788 ns/iter 0.96
Evaluator_Draft4_Properties_Closed 111.10166237354834 ns/iter 123.63913684708743 ns/iter 0.90
Evaluator_Draft4_Non_Recursive_Ref 23.30179939500205 ns/iter 22.922598696616188 ns/iter 1.02
Evaluator_Draft4_Pattern_Properties_True 1595.2625013424756 ns/iter 1717.4229753893414 ns/iter 0.93
Evaluator_Draft4_Ref_To_Single_Property 14.965381846136136 ns/iter 15.479721333819604 ns/iter 0.97
Evaluator_Draft4_Additional_Properties_Type 34.48474797162981 ns/iter 38.13724640357168 ns/iter 0.90
Evaluator_Draft4_Nested_Oneof 99.0015430841485 ns/iter 107.51658107173067 ns/iter 0.92
Evaluator_Draft4_Long_Enum 12.490843134349966 ns/iter 13.2164186556657 ns/iter 0.95
Evaluator_Draft4_Type_Object 8.19736841913941 ns/iter 8.776696866053394 ns/iter 0.93
Evaluator_Draft6_Property_Names 400.5852996942071 ns/iter 440.33385359927036 ns/iter 0.91
Evaluator_Draft7_If_Then_Else 42.74147773970708 ns/iter 46.30335753932707 ns/iter 0.92
Evaluator_Draft7_Vercel_1 97632.29200221137 ns/iter 120078.26075517028 ns/iter 0.81
Evaluator_2019_09_Unevaluated_Properties 165.7627129115346 ns/iter 185.43691607258313 ns/iter 0.89
Evaluator_2019_09_OMC_JSON_V2_1 6222.131879162783 ns/iter 6565.031250545159 ns/iter 0.95
Evaluator_2020_12_Dynamic_Ref 621.2897922026949 ns/iter 650.3611236081846 ns/iter 0.96

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (windows/msvc)

Benchmark suite Current: 8f5a209 Previous: acc801f Ratio
Compiler_Draft6_AdaptiveCard 118049018100.00002 ns/iter 119231063699.99994 ns/iter 0.99
Compiler_2019_09_OMC_JSON_V2 25094241899.999817 ns/iter 25221795100.000008 ns/iter 0.99
Evaluator_Draft4_Meta_1_No_Callback 812.0761999659316 ns/iter 841.911941964289 ns/iter 0.96
Evaluator_Draft4_Required_Properties 1189.032187500061 ns/iter 1301.975177689725 ns/iter 0.91
Evaluator_Draft4_Many_Optional_Properties_Minimal_Match 81.65447544643861 ns/iter 82.95674107142555 ns/iter 0.98
Evaluator_Draft4_Few_Optional_Properties_Minimal_Match 37.92866629463987 ns/iter 41.58990701452946 ns/iter 0.91
Evaluator_Draft4_Items_Schema 2608.6400358211217 ns/iter 2698.8695741264787 ns/iter 0.97
Evaluator_Draft4_Nested_Object 2.1769387500000903 ns/iter 2.813447898017909 ns/iter 0.77
Evaluator_Draft4_Properties_Triad_Optional 4749.8399999994945 ns/iter 4744.728894484019 ns/iter 1.00
Evaluator_Draft4_Properties_Triad_Closed 3804.6548131165882 ns/iter 3815.946578666879 ns/iter 1.00
Evaluator_Draft4_Properties_Triad_Required 4723.0129977972965 ns/iter 4774.456807551196 ns/iter 0.99
Evaluator_Draft4_Properties_Closed 283.78075518827313 ns/iter 288.53146556566537 ns/iter 0.98
Evaluator_Draft4_Non_Recursive_Ref 94.52862970854159 ns/iter 94.56424131408544 ns/iter 1.00
Evaluator_Draft4_Pattern_Properties_True 7700.130580357012 ns/iter 7693.456473214511 ns/iter 1.00
Evaluator_Draft4_Ref_To_Single_Property 38.2178028889668 ns/iter 42.293443827614006 ns/iter 0.90
Evaluator_Draft4_Additional_Properties_Type 180.41260806338056 ns/iter 180.0567776823758 ns/iter 1.00
Evaluator_Draft4_Nested_Oneof 309.1512132643863 ns/iter 312.4523214285294 ns/iter 0.99
Evaluator_Draft4_Long_Enum 54.93607142856912 ns/iter 56.6175357142892 ns/iter 0.97
Evaluator_Draft4_Type_Object 23.5443044247244 ns/iter 23.550090138948445 ns/iter 1.00
Evaluator_Draft6_Property_Names 1110.0589062497334 ns/iter 1126.5165624999795 ns/iter 0.99
Evaluator_Draft7_If_Then_Else 121.14823214285967 ns/iter 122.40753571429002 ns/iter 0.99
Evaluator_Draft7_Vercel_1 236984.80080351004 ns/iter 241702.54435889196 ns/iter 0.98
Evaluator_2019_09_Unevaluated_Properties 441.77931250004576 ns/iter 450.8637207508093 ns/iter 0.98
Evaluator_2019_09_OMC_JSON_V2_1 15832.279017854285 ns/iter 16121.381696428167 ns/iter 0.98
Evaluator_2020_12_Dynamic_Ref 1571.6372767857122 ns/iter 1634.8834811048785 ns/iter 0.96

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.