验证 Fanuc 子程序禁用

提示词:快速推进,非纯 source-map-only,保留源依据、自动测试、本地提交且不自动推送。

结论:基于 LinuxCNC rs274ngc_pre.cc 读取 DISABLE_FANUC_STYLE_SUB 以及 interp_read.cc 对 M98、Fanuc-style M99、bare O-word 的禁用分支,新增 INI/G-code fixture 并接入 native/source-link 错误断言;./test-native.sh 和 ./test-linuxcnc-source-link.sh 通过。
This commit is contained in:
cnc
2026-06-06 06:48:17 +08:00
parent 5aa328b413
commit 7ba3a22441
6 changed files with 60 additions and 0 deletions

View File

@@ -43,6 +43,7 @@ var_file="$build_dir/rs274ngc.var"
base_var_file="$build_dir/rs274ngc-base.var"
ini_named_parameter_file="$(pwd)/tests/gcode/linuxcnc_ini_named_parameter.ini"
disable_g92_persistence_ini_file="$(pwd)/tests/gcode/linuxcnc_disable_g92_persistence.ini"
disable_fanuc_style_sub_ini_file="$(pwd)/tests/gcode/linuxcnc_disable_fanuc_style_sub.ini"
output_dir="$build_dir/outputs"
mkdir -p "$output_dir"
cp "$linuxcnc_root/tests/halui/jogging/sim.var" "$base_var_file"
@@ -823,6 +824,25 @@ for case in "${oword_reader_error_cases[@]}"; do
fi
grep -Fq "$expected" "$output_dir/cnc_sim_linuxcnc_$fixture.err"
done
# Source basis: LinuxCNC src/emc/rs274ngc/rs274ngc_pre.cc init reads
# [RS274NGC] DISABLE_FANUC_STYLE_SUB, and interp_read.cc rejects
# Fanuc-style M98/M99 and bare O-word subroutine forms when enabled.
disable_fanuc_style_error_cases=(
"linuxcnc_disable_fanuc_style_m98_error|DISABLE_FANUC_STYLE_SUB set in INI file, but found m98"
"linuxcnc_disable_fanuc_style_m99_error|DISABLE_FANUC_STYLE_SUB set in INI file, but found m99"
"linuxcnc_disable_fanuc_style_bare_oword_error|DISABLE_FANUC_STYLE_SUB disabled in INI file, but found bare O-word"
)
for case in "${disable_fanuc_style_error_cases[@]}"; do
fixture=${case%%|*}
expected=${case#*|}
if INI_FILE_NAME="$disable_fanuc_style_sub_ini_file" CNC_SIM_RS274_FILE_MODE=1 CNC_SIM_RS274_VAR="$var_file" \
"$build_dir/linuxcnc_rs274_dump" "tests/gcode/$fixture.ngc" \
>"$output_dir/cnc_sim_linuxcnc_$fixture.json" 2>"$output_dir/cnc_sim_linuxcnc_$fixture.err"; then
echo "expected $fixture.ngc to fail" >&2
exit 1
fi
grep -Fq "$expected" "$output_dir/cnc_sim_linuxcnc_$fixture.err"
done
# Source basis: LinuxCNC src/emc/rs274ngc/interp_o_word.cc
# convert_control_functions() rejects unmatched, duplicate, and
# out-of-context O-word control labels during execution. control_save_offset()