(a: BasicExpression, b: BasicExpression)
| 1047 | } |
| 1048 | |
| 1049 | function areExpressionsEqual(a: BasicExpression, b: BasicExpression): boolean { |
| 1050 | if (a.type !== b.type) { |
| 1051 | return false |
| 1052 | } |
| 1053 | |
| 1054 | if (a.type === `val` && b.type === `val`) { |
| 1055 | return areValuesEqual(a.value, b.value) |
| 1056 | } |
| 1057 | |
| 1058 | if (a.type === `ref` && b.type === `ref`) { |
| 1059 | return areRefsEqual(a, b) |
| 1060 | } |
| 1061 | |
| 1062 | if (a.type === `func` && b.type === `func`) { |
| 1063 | const aFunc = a |
| 1064 | const bFunc = b |
| 1065 | if (aFunc.name !== bFunc.name) { |
| 1066 | return false |
| 1067 | } |
| 1068 | if (aFunc.args.length !== bFunc.args.length) { |
| 1069 | return false |
| 1070 | } |
| 1071 | return aFunc.args.every((arg, i) => |
| 1072 | areExpressionsEqual(arg, bFunc.args[i]!), |
| 1073 | ) |
| 1074 | } |
| 1075 | |
| 1076 | return false |
| 1077 | } |
| 1078 | |
| 1079 | function areValuesEqual(a: any, b: any): boolean { |
| 1080 | // Simple equality check - could be enhanced for deep object comparison |
no test coverage detected