提示词:
对标 LinuxCNC,分阶段完善 Web 版数控系统仿真的 WASM 程序,继续补齐 G 代码语法并严格测试。 总结: - 对齐 LinuxCNC 字地址值中带符号一元函数的解析行为,支持类似 X-ABS[-2] 的写法。 - 在 smoke API 回归中新增 signed unary word value 覆盖。 - 已通过 ./test-native.sh 和 ./test-linuxcnc-source-link.sh。
This commit is contained in:
@@ -1493,10 +1493,18 @@ std::string expand_expressions_and_parameters(const std::string &line,
|
||||
out.reserve(line.size());
|
||||
for (size_t i = 0; i < line.size();) {
|
||||
if (std::isalpha(static_cast<unsigned char>(line[i])) && i + 1 < line.size()) {
|
||||
const size_t value_start = i + 1;
|
||||
size_t function_start = value_start;
|
||||
if ((line[function_start] == '+' || line[function_start] == '-') &&
|
||||
function_start + 1 < line.size() &&
|
||||
!std::isdigit(static_cast<unsigned char>(line[function_start + 1])) &&
|
||||
line[function_start + 1] != '.') {
|
||||
++function_start;
|
||||
}
|
||||
size_t function_end = 0;
|
||||
if (unary_function_span(line, i + 1, &function_end)) {
|
||||
if (unary_function_span(line, function_start, &function_end)) {
|
||||
double value = 0.0;
|
||||
if (!evaluate_expression(line.substr(i + 1, function_end - i - 1),
|
||||
if (!evaluate_expression(line.substr(value_start, function_end - value_start),
|
||||
call_stack,
|
||||
parameters,
|
||||
named_parameters,
|
||||
|
||||
Reference in New Issue
Block a user