opencrbasic 1.1.0__tar.gz → 1.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/PKG-INFO +4 -5
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/README.md +3 -4
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/pyproject.toml +4 -2
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/__init__.py +1 -1
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/analysis.py +1 -1
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/checker/__init__.py +7 -4
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/checker/cr3xx.py +268 -50
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/checker/expressions.py +314 -67
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/checker/instr_data.py +221 -56
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/checker/instr_measure.py +297 -47
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/checker/instr_rules.py +307 -58
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/checker/intervals.py +2 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/checker/structure.py +128 -36
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/checker/symbols.py +10 -5
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/checker/terminals.py +187 -9
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/checker/var_types.py +35 -6
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/checker/warnings.py +12 -9
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/checks.py +4 -4
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/cli.py +7 -2
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/compiler.py +1 -1
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr1000x/measure.json +3 -1
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr1000x/terminals.json +2 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr300/measure.json +7 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr300/status_members.json +0 -1
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr300/terminals.json +1 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr350/measure.json +7 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr350/terminals.json +1 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/measure.json +3 -1
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/notices_cr6.json +2 -61
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/terminals.json +11 -1
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/parser.py +96 -26
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/syntax.py +5 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/tables.py +13 -9
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/tests/corpus/README.md +21 -21
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/.gitignore +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/LICENSE +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/__main__.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/bindings.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/catalog.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/checkconfig.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/checker/ess.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/checker/instructions.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/checker/longconv.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/checker/scan_time.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/checker/storage.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/checker/structs.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/checker/unused.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/commands.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/consteval.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/background_calibration.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/before_beginprog.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr1000x/background_calibration.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr1000x/before_beginprog.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr1000x/ess_variables.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr1000x/fnotch.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr1000x/functions.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr1000x/instructions.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr1000x/mode.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr1000x/pipeline_tasks.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr1000x/settings_fields.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr1000x/status_members.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr1000x/symbols.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr300/before_beginprog.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr300/ess_variables.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr300/fnotch.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr300/functions.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr300/instructions.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr300/mode.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr300/settings_fields.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr300/symbols.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr350/before_beginprog.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr350/ess_variables.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr350/fnotch.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr350/functions.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr350/instructions.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr350/mode.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr350/settings_fields.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr350/status_members.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/cr350/symbols.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/ess_variables.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/fnotch.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/functions.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/instructions.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/mode.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/pipeline_tasks.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/settings_fields.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/status_members.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/status_table.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/symbols.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/data/type_codes.json +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/diagnostics.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/editing.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/formatting.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/helpdocs.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/hover.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/inlay.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/lexer.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/lsp/__init__.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/lsp/__main__.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/lsp/config.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/lsp/features.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/lsp/server.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/lsp/session.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/lsp/worker.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/macros.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/mode.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/navigation.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/positions.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/preprocess.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/profiles.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/provenance.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/quickfix.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/rename.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/signature.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/source.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/sources.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/tables_hook.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/tdf.py +0 -0
- {opencrbasic-1.1.0 → opencrbasic-1.2.0}/src/opencrbasic/timing.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: opencrbasic
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2.0
|
|
4
4
|
Summary: Open-source re-implementation of the Campbell Scientific CRBasic pre-compilers (CR6, CR1000X, CR300, CR350)
|
|
5
5
|
Project-URL: Repository, https://github.com/UtrechtUniversity/open-crbasic
|
|
6
6
|
Author: Utrecht University
|
|
@@ -38,8 +38,8 @@ Status, measured against the real compilers: `PROGRESS.md`. Design and the v1.0
|
|
|
38
38
|
## Scope
|
|
39
39
|
|
|
40
40
|
- **Gated profiles: CR6 and CR1000X.** On these, v1.0 gates the reference verdict in the relevant
|
|
41
|
-
area (the
|
|
42
|
-
first error for realistic mistakes on relevant rules, measured on the
|
|
41
|
+
area (the station/GEUS instruction set and language constructs), the execution mode, and the
|
|
42
|
+
first error for realistic mistakes on relevant rules, measured on the station programs, the 507
|
|
43
43
|
CRBasic help examples, the 66 GEUS programs, the saved fuzz replay and fresh `--relevant` fuzz
|
|
44
44
|
seeds. The help examples and GEUS programs are not redistributed here; see
|
|
45
45
|
[tests/corpus/README.md](tests/corpus/README.md) for running against local copies. One relevant-area false accept is known: a `Sub` name that is also another routine's
|
|
@@ -159,8 +159,7 @@ result.tables # list of tdf.TdfTable (Status, DataTables, DataTableInfo, ConstT
|
|
|
159
159
|
`parser.parse_file()` gives the syntax tree (`syntax.py`) for other tools.
|
|
160
160
|
|
|
161
161
|
[openloggernet](https://github.com/UtrechtUniversity/open-loggernet) uses opencrbasic when
|
|
162
|
-
`CR6COMP=opencrbasic` is set
|
|
163
|
-
CI.
|
|
162
|
+
`CR6COMP=opencrbasic` is set.
|
|
164
163
|
|
|
165
164
|
## Editor support
|
|
166
165
|
|
|
@@ -21,8 +21,8 @@ Status, measured against the real compilers: `PROGRESS.md`. Design and the v1.0
|
|
|
21
21
|
## Scope
|
|
22
22
|
|
|
23
23
|
- **Gated profiles: CR6 and CR1000X.** On these, v1.0 gates the reference verdict in the relevant
|
|
24
|
-
area (the
|
|
25
|
-
first error for realistic mistakes on relevant rules, measured on the
|
|
24
|
+
area (the station/GEUS instruction set and language constructs), the execution mode, and the
|
|
25
|
+
first error for realistic mistakes on relevant rules, measured on the station programs, the 507
|
|
26
26
|
CRBasic help examples, the 66 GEUS programs, the saved fuzz replay and fresh `--relevant` fuzz
|
|
27
27
|
seeds. The help examples and GEUS programs are not redistributed here; see
|
|
28
28
|
[tests/corpus/README.md](tests/corpus/README.md) for running against local copies. One relevant-area false accept is known: a `Sub` name that is also another routine's
|
|
@@ -142,8 +142,7 @@ result.tables # list of tdf.TdfTable (Status, DataTables, DataTableInfo, ConstT
|
|
|
142
142
|
`parser.parse_file()` gives the syntax tree (`syntax.py`) for other tools.
|
|
143
143
|
|
|
144
144
|
[openloggernet](https://github.com/UtrechtUniversity/open-loggernet) uses opencrbasic when
|
|
145
|
-
`CR6COMP=opencrbasic` is set
|
|
146
|
-
CI.
|
|
145
|
+
`CR6COMP=opencrbasic` is set.
|
|
147
146
|
|
|
148
147
|
## Editor support
|
|
149
148
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "opencrbasic"
|
|
3
|
-
version = "1.
|
|
3
|
+
version = "1.2.0"
|
|
4
4
|
description = "Open-source re-implementation of the Campbell Scientific CRBasic pre-compilers (CR6, CR1000X, CR300, CR350)"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "MIT"
|
|
@@ -31,7 +31,8 @@ crbc-lsp = "opencrbasic.lsp.server:main"
|
|
|
31
31
|
# `uv sync` installs `dev` by default: the test runner and the reverse-engineering tools
|
|
32
32
|
# (`tools/extract_tables.py`, `tools/message_catalog.py` read the exe with pefile), and pygls
|
|
33
33
|
# so the suite can test the language server; pytest-xdist for parallel test runs (`-n`); pyrefly
|
|
34
|
-
# checks the repository (`[tool.pyrefly]`); pre-commit runs ruff and pyrefly before each commit
|
|
34
|
+
# checks the repository (`[tool.pyrefly]`); pre-commit runs ruff and pyrefly before each commit;
|
|
35
|
+
# openloggernet drives a logger for `tools/logger_oracle.py`.
|
|
35
36
|
dev = [
|
|
36
37
|
"pytest>=8",
|
|
37
38
|
"pefile>=2024.8.26",
|
|
@@ -39,6 +40,7 @@ dev = [
|
|
|
39
40
|
"pytest-xdist>=3.6",
|
|
40
41
|
"pyrefly==1.3.1",
|
|
41
42
|
"pre-commit>=4",
|
|
43
|
+
"openloggernet>=0.3.0",
|
|
42
44
|
]
|
|
43
45
|
|
|
44
46
|
[build-system]
|
|
@@ -14,7 +14,7 @@ from .compiler import compile_file
|
|
|
14
14
|
from .sources import DiskSource, LimitedSource, OverlaySource, RecordingSource, SourceProvider
|
|
15
15
|
|
|
16
16
|
API_VERSION = 2 # 2: findings, notices, config_error, AnalysisRequest.checks (M6)
|
|
17
|
-
DOCS = "https://github.com/UtrechtUniversity/
|
|
17
|
+
DOCS = "https://github.com/UtrechtUniversity/open-crbasic/blob/main/"
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
def _no_overlays() -> Mapping[Path, bytes]:
|
|
@@ -111,6 +111,7 @@ from . import (
|
|
|
111
111
|
storage,
|
|
112
112
|
structs,
|
|
113
113
|
structure,
|
|
114
|
+
terminals,
|
|
114
115
|
var_types,
|
|
115
116
|
warnings,
|
|
116
117
|
)
|
|
@@ -265,6 +266,7 @@ def _check(program: S.Program, profile: Profile, diags: Diagnostics, result) ->
|
|
|
265
266
|
del diags.items[program.hash_cut :] # parser findings of later lines
|
|
266
267
|
program = structure.open_program_at_slowsequence(program, profile)
|
|
267
268
|
env = consteval.Env(profile, dict(program.consts))
|
|
269
|
+
expressions.set_arity_context(program, profile)
|
|
268
270
|
|
|
269
271
|
_run_pass(structure.check_pass1, program, profile, diags, env)
|
|
270
272
|
# Also pass 1 (unconditional -- oracle-confirmed, `docs/loggers.md`): a `Const`'s own value
|
|
@@ -411,6 +413,7 @@ def _check(program: S.Program, profile: Profile, diags: Diagnostics, result) ->
|
|
|
411
413
|
# "stop entirely at the first placement error" behaviour.
|
|
412
414
|
pass2_start = len(diags.items)
|
|
413
415
|
_run_pass(instr_rules.check_spi_open_order, _with_inline(program), profile, leading)
|
|
416
|
+
_run_pass(terminals.check_i2c_open_order, _with_inline(program), profile, ranges, env)
|
|
414
417
|
# Block-closer messages come before a same-line placement error (`EndIf illegally
|
|
415
418
|
# occurs before BeginProg.` follows `END IF without IF...`).
|
|
416
419
|
# CR300/CR350: collected aside in `leading` (printed first on their line, but they do not
|
|
@@ -743,6 +746,7 @@ def _check(program: S.Program, profile: Profile, diags: Diagnostics, result) ->
|
|
|
743
746
|
# instructions placed outside `DataTable...EndTable`, and an orphan `EndTable`.
|
|
744
747
|
table_stop = _run_pass_capture(instr_data.check_table_structure, _with_inline(program), profile, diags)
|
|
745
748
|
_run_pass(instr_data.check_fieldnames, program, profile, diags, env)
|
|
749
|
+
_run_pass(instr_data.check_fieldclassify, program, profile, diags, env)
|
|
746
750
|
apply_diags = Diagnostics()
|
|
747
751
|
_run_pass(structure.check_apply_restart_sequence, program, profile, apply_diags)
|
|
748
752
|
for extra in apply_diags.items: # in source order among the tier-C findings
|
|
@@ -953,10 +957,9 @@ def _check(program: S.Program, profile: Profile, diags: Diagnostics, result) ->
|
|
|
953
957
|
|
|
954
958
|
if not diags.errors:
|
|
955
959
|
# `When Main Sequence Scan %d is running, background calibration will be disabled.`:
|
|
956
|
-
#
|
|
957
|
-
#
|
|
958
|
-
#
|
|
959
|
-
# `check_background_calibration` docstring has the oracle evidence). Independent of
|
|
960
|
+
# oracle-confirmed *not* ungated the way `_check_reachability`/`_check_fnotch` are
|
|
961
|
+
# (`checker/warnings.py`'s `check_background_calibration` docstring has the oracle evidence).
|
|
962
|
+
# Independent of
|
|
960
963
|
# `tables_hook`'s own availability, so called ahead of that guard rather than inside it.
|
|
961
964
|
_run_pass(warnings.check_background_calibration, program, profile, diags, env)
|
|
962
965
|
_run_pass(warnings.check_slow_scan_skips, program, profile, diags, env)
|