Skip to content

Commit 3c42c96

Browse files
committed
Updated changelog
1 parent 33b5386 commit 3c42c96

1 file changed

Lines changed: 62 additions & 0 deletions

File tree

debian/changelog

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,65 @@
1+
bpp (0.8.12) unstable; urgency=medium
2+
3+
* Correct and clarify spec page on dynamic casts
4+
Previously, the spec page was incorrect: it claimed that the result
5+
of the cast (i.e., the value to which the directive expands) would be
6+
'an exact copy of INPUT' if valid. This is not and never was accurate,
7+
although it happened to be correct for the majority of actual cases.
8+
The truth of it is this: pointers in Bash++ are implicitly
9+
dereferenced as needed, and the dynamic cast would chase any
10+
arbitrarily long chain of pointers until it arrived finally at the
11+
actual object itself. Then, if the cast was valid, the result would be
12+
the actual address of that object. Obviously, for the vast majority
13+
of real-world cases, the INPUT to a dynamic cast will be, directly,
14+
the address of the object to be cast, so this small difference might
15+
never have been noticed.
16+
* bpp-lsp: Update LSP to 3.18 standard
17+
Now that the LSP spec v3.18 has been finalized, upgrade our local
18+
metaModel (used to generate the LSP implementation) to the 3.18
19+
version from 3.17
20+
This does not result in any functional changes.
21+
* Minor optimization: no need to allocate when retrieving source file
22+
lists
23+
Previously, bpp_program::get_source_files() concatenated all keys
24+
from the std::unordered_map to return a new vector
25+
We can skip all that using C++23's fancy "range views", which means
26+
no copies and no allocations
27+
* Bug fix: calling 'delete' on pointers
28+
Previously, the generated reference code for the pointer was
29+
duplicated
30+
Fix this by guarding the first portion of codegen under the
31+
condition that the second portion will not run (which in this case
32+
is a check for whether the object is explicitly a nonprimitive vs
33+
if it's a pointer)
34+
Relevant test case ('delete') was amended to check this
35+
* Codegen: remove global object counter
36+
The object counter was a relic from earlier versions of the compiler.
37+
In the current implementation (that is, the latest-released version),
38+
the counter is completely unnecessary.
39+
This change makes an object's (or pointer's) address completely
40+
determined by properties of the Object entity, without reference to
41+
any mutable state at the time of code generation (e.g., the number
42+
of objects we've already instantiated, etc)
43+
This, incidentally, is also a bug fix.
44+
- File A instantiates object 1
45+
- File A dynamically includes file B
46+
- File B instantiates object 2
47+
Since file B is dynamically included, the two units are compiled
48+
separately. When File B is compiled, its object counter never goes
49+
higher than 1 -- it only ever instantiates a single object. When
50+
File A is compiled, by the time we reach object 2, our object
51+
counter has already been incremented once by an earlier object
52+
instantiation. Therefore the two counters disagree with each other,
53+
and when File A later references object 2, it guesses the *wrong
54+
address*. Removing any dependency on mutable codegen state for
55+
address determination means that the two units, despite being
56+
independently compiled, will always agree on an object's address.
57+
* bpp-lsp: Remove dependency on libfrozen
58+
We can use a simple std::array and linear searches, libfrozen was
59+
overkill for this
60+
61+
-- rail5 <andrew@rail5.org> Sun, 05 Jul 2026 09:04:45 +0800
62+
163
bpp (0.8.11) unstable; urgency=medium
264

365
* Performance:

0 commit comments

Comments
 (0)