Compare commits
1 Commits
18b30b753b
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
c5d13f00f6
|
@@ -282,7 +282,7 @@ jobs:
|
||||
# avoid the file: almost every survivor is in akbasic_audio_state_init,
|
||||
# where nothing asserts that a freshly initialised audio state is actually
|
||||
# zeroed and defaulted -- the same gap this job's own history records
|
||||
# closing for src/symtab.c. Recorded in TODO.md; add the file back when it
|
||||
# closing for src/symtab.c. That is issue #25; add the file back when it
|
||||
# is closed.
|
||||
#
|
||||
# It was 73.1% before writing this job. The run's own findings closed the
|
||||
@@ -297,7 +297,7 @@ jobs:
|
||||
#
|
||||
# The 21 remaining survivors are listed in the published report. Most are
|
||||
# ICR mutants on loop and accumulator initialisers that a stronger
|
||||
# placement assertion would catch. Recorded in TODO.md.
|
||||
# placement assertion would catch. Issue #25.
|
||||
- name: mutation testing
|
||||
run: |
|
||||
python3 scripts/mutation_test.py \
|
||||
|
||||
@@ -3,9 +3,9 @@ cmake_minimum_required(VERSION 3.10)
|
||||
# libakgl both use. It flows into the library SOVERSION and nothing else spells
|
||||
# a version number.
|
||||
#
|
||||
# 0.x on purpose: TODO.md section 12 records eleven defects carried over from the
|
||||
# Go reference that are deliberately reproduced and not yet fixed, so the
|
||||
# language surface is not being promised yet.
|
||||
# 0.x on purpose: the language surface is not being promised yet. TODO.md §6
|
||||
# records the defects inherited from the Go reference and what became of each;
|
||||
# the ones still open are in the issue tracker.
|
||||
project(akbasic VERSION 0.1.0 LANGUAGES C)
|
||||
|
||||
# Pre-1.0 the ABI may break on a minor bump, so the soname carries MAJOR.MINOR.
|
||||
@@ -56,7 +56,7 @@ option(AKBASIC_SANITIZE "Build with ASan + UBSan" OFF
|
||||
# coverage build collides on the `coverage` target and fails to configure at all.
|
||||
# Rename the dependency's on the way past. Remove this once libakerror applies
|
||||
# the same CMAKE_SOURCE_DIR test to `coverage` that it already applies to
|
||||
# `mutation` -- filed in deps/libakstdlib/TODO.md section 2.3.
|
||||
# `mutation` -- filed as libakerror issue #15.
|
||||
#
|
||||
# **Only one project in a tree may shadow add_test(), and this is that project.**
|
||||
# CMake exposes an overridden command as `_name` and chains exactly one level: a
|
||||
@@ -276,7 +276,7 @@ endif()
|
||||
# AKBASIC_TESTS must exit 0
|
||||
# AKBASIC_WILL_FAIL_TESTS abort by design
|
||||
# AKBASIC_KNOWN_FAILING_TESTS assert the *correct* contract for a defect
|
||||
# recorded in TODO.md and are expected to fail.
|
||||
# tracked as issues and are expected to fail.
|
||||
# When one starts passing CTest reports
|
||||
# "unexpectedly passed" -- that is the cue to move
|
||||
# it into AKBASIC_TESTS along with the fix.
|
||||
|
||||
2
TODO.md
2
TODO.md
@@ -2331,7 +2331,7 @@ gitignored is exactly what makes it invisible. **Keep build trees out of the sou
|
||||
and if a coverage number looks suspiciously unchanged, `find . -name '*.gcda'` before believing
|
||||
it.
|
||||
|
||||
Branch coverage reads 18.0% and is not a target, for the reason `libakgl/TODO.md` and
|
||||
Branch coverage reads 18.0% and is not a target, for the reason `libakgl` and
|
||||
`libakstdlib` both give: the akerror control-flow macros expand into large branch trees
|
||||
at every call site, most of them unreachable in normal operation. Track line and function
|
||||
coverage.
|
||||
|
||||
@@ -458,7 +458,7 @@ Three consequences follow, and all three are things people report as bugs:
|
||||
|
||||
`akbasic_Value` carries its string **inline**, not behind a pointer, so a copy is a struct
|
||||
assignment with no allocator, no refcount and no lifetime question. It costs 256 bytes per
|
||||
value; that is the trade, and it is recorded in `TODO.md`.
|
||||
value; that is the trade, and it is recorded in `TODO.md` §6.
|
||||
|
||||
Type comes from the identifier's suffix and nothing else: `A#` integer, `A%` float, `A$`
|
||||
string, and a bare name with no suffix is a *label*. That is `akbasic_leaf_identifier_type()`,
|
||||
@@ -596,7 +596,7 @@ script's mistake into an error line are wrapped around *parsing* and *interpreta
|
||||
not around *scanning*. A line with more than 32 tokens therefore escapes as an
|
||||
interpreter error — the driver prints a stack trace and exits 1, and an embedding host is
|
||||
handed a context for what is really a script's mistake. It is the same shape as the
|
||||
`VERIFY` defect above, on a path that fix did not cover. Filed in `TODO.md`; until it is
|
||||
`VERIFY` defect above, on a path that fix did not cover. That is issue #4; until it is
|
||||
closed, a host that cannot tolerate that should refuse over-long lines itself.
|
||||
|
||||
## Devices, and how a capability is withheld
|
||||
@@ -808,7 +808,7 @@ by name when the pointer is `NULL`**, so an older host or a different backend ge
|
||||
error rather than silence.
|
||||
|
||||
If `libakgl` cannot supply what the verb needs, **do not work around it here**. File it in
|
||||
`deps/libakgl/TODO.md`: what the BASIC verb requires, what the `akgl_*` entry point should
|
||||
`libakgl`'s issue tracker: what the BASIC verb requires, what the `akgl_*` entry point should
|
||||
look like, and what tests would cover it. Four gaps have gone upstream that way and all
|
||||
four landed.
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
* These are akgl_UiAnchor's five values and its numbering, so the adaptor maps
|
||||
* them across without a table. **There is deliberately no top-centre or
|
||||
* bottom-centre**, because libakgl has neither and this repository does not edit
|
||||
* its dependencies to add one; see TODO.md.
|
||||
* its dependencies to add one; see libakgl issues #79 and #80.
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
* @brief Declares the strongly-typed BASIC value and its operators.
|
||||
*
|
||||
* Ported from the reference's basicvalue.go. The arithmetic is reproduced
|
||||
* exactly, including the parts that look wrong -- see TODO.md section 12 for the
|
||||
* catalogue and the reason they are not fixed yet.
|
||||
* exactly, except where a defect has since been fixed on its own merits -- see
|
||||
* TODO.md §6 for the catalogue and what became of each.
|
||||
*
|
||||
* **The left operand decides whether an operation is done in integers or in
|
||||
* floats**, and this is deliberate rather than an oversight: every operator
|
||||
|
||||
@@ -172,7 +172,7 @@ akerr_ErrorContext *akbasic_environment_stop_waiting(akbasic_Environment *obj, c
|
||||
"NULL argument in stop_waiting");
|
||||
/*
|
||||
* The reference ignores `command` and clears unconditionally, which lets an
|
||||
* inner block clear an outer block's wait (TODO.md section 12 item 3). The
|
||||
* inner block clear an outer block's wait (TODO.md §6 item 3). The
|
||||
* argument is honoured here only to the extent of walking to the environment
|
||||
* that is actually waiting for it -- clearing the wrong one outright would
|
||||
* change observable control flow, so the search stops at the first match and
|
||||
|
||||
@@ -1056,7 +1056,7 @@ akerr_ErrorContext *akbasic_runtime_call_function(akbasic_Runtime *obj, const ch
|
||||
* rule.** A multi-line function called at the REPL falls straight past this
|
||||
* loop and returns whatever is in the caller's return slot -- zero -- so
|
||||
* `PRINT TRIPLE(14)` answers "(UNDEFINED STRING REPRESENTATION FOR 0)" with
|
||||
* no error and no diagnostic. Recorded as TODO.md section 6 item 41.
|
||||
* no error and no diagnostic. Issue #8.
|
||||
*
|
||||
* Widening it to `mode != AKBASIC_MODE_QUIT` is the obvious fix and is
|
||||
* *wrong*: akbasic_runtime_process_line_run() does not advance a REPL-mode
|
||||
|
||||
@@ -617,7 +617,7 @@ akerr_ErrorContext *akbasic_cmd_dload(akbasic_Runtime *obj, akbasic_ASTLeaf *exp
|
||||
/*
|
||||
* aksl_fopen does not NULL-check pathname or mode and fopen(NULL, ...) is
|
||||
* undefined, so the name is validated here before it is handed over --
|
||||
* deps/libakstdlib/TODO.md 2.2.2.
|
||||
* libakstdlib's UPGRADING.md.
|
||||
*/
|
||||
PASS(errctx, filename_argument(obj, expr, filename, sizeof(filename)));
|
||||
|
||||
|
||||
@@ -389,7 +389,7 @@ akerr_ErrorContext *akbasic_cmd_directory(akbasic_Runtime *obj, akbasic_ASTLeaf
|
||||
* Refused rather than half-built. Listing a directory needs opendir/readdir,
|
||||
* which `libakstdlib` does not wrap -- and this project's rule is that a
|
||||
* missing capability gets filed upstream rather than worked around here
|
||||
* (MAINTENANCE.md). Filed in deps/libakstdlib/TODO.md.
|
||||
* (MAINTENANCE.md). Filed as libakstdlib issue #10.
|
||||
*
|
||||
* The alternative was shelling out to `ls`, which a library has no business
|
||||
* doing, or calling readdir directly and stepping outside the error
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* Probe for `key`. On success *slot points at either the slot holding the key or
|
||||
* the first free slot it could occupy; *found says which. Uses
|
||||
* aksl_strhash_djb2 rather than a private hash. That wrapper sign-extends char,
|
||||
* so a high-bit byte hashes wrong (deps/libakstdlib/TODO.md 1.6) -- harmless
|
||||
* so a high-bit byte hashes wrong (libakstdlib's UPGRADING.md) -- harmless
|
||||
* here because BASIC identifiers are 7-bit ASCII, and it would only ever cost
|
||||
* probe efficiency, never correctness, since the key comparison is a strcmp.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user