A str `def` has no name(SB) header; the streq push arms read a frame slot that does not exist. Load the literal through cgexpr (AX=ptr, BX=len) instead. Both stages.
21 lines
675 B
Plaintext
21 lines
675 B
Plaintext
// String equality must materialise a module def literal instead of treating
|
|
// its name as a frame-local string header. Use a duplicated local so pointer
|
|
// equality cannot accidentally satisfy the content comparison.
|
|
|
|
package str_def_equality_test;
|
|
|
|
import strings;
|
|
|
|
def expected: str = "dynamic string versus def";
|
|
|
|
@test fn dynamic_string_and_def_compare_by_content() void = {
|
|
let observed: str = strings.dup(expected);
|
|
assert(observed == expected);
|
|
assert(expected == observed);
|
|
assert(!(observed != expected));
|
|
assert(!(expected != observed));
|
|
let different: str = strings.concat(observed, "!");
|
|
assert(different != expected);
|
|
assert(expected != different);
|
|
};
|