the debugger has a problem in this console application (in build 902):
Code: Select all
implement main
clauses
run() :-
ArM = arrayM::new(1),
ArM:set(0, ""),
stdIO::write(ArM). %set a breakpoint here
end implement main
goal
console::runUtf8(main::run).
Code: Select all
namespace collectionSupport
interface memoryAccessor{@Elem}
open core
properties
size : byteCount (o).
% @short Size of <b>@Elem</b> values in bytes.
% @end
properties
isAtomic : boolean (o).
% @short States whether <b>@Elem</b> values are atomic.
% @end
properties
set : predicate{pointer Pointer, @Elem Elem} (o).
% @short Store #Elem at memory location #Pointer.
% @end
properties
get : function{pointer Pointer, @Elem Elem} (o).
% @short Retrieve #Elem from memory location #Pointer.
% @end
end interface memoryAccessor
Code: Select all
namespace collectionSupport
implement memoryAccessor{@Elem}
open core
facts
size : byteCount [constant].
isAtomic : boolean [constant].
set : predicate{pointer, @Elem} [constant].
get : function{pointer, @Elem} [constant].
#if platform_bits = 32 #then
clauses
new() :-
TL = typeLibraryOf(@Elem),
% The relevant change is omitting exceptions by using sizeOfDomain(@Elem)
% instead of V = uncheckedConvert(@Elem, 0x10) and sizeOf(V):
SV = if TL:isFunctorType() = _ then sizeOfDomain(pointer) else sizeOfDomain(@Elem) end if,
isAtomic := toBoolean(pfc\reflection\reflection_native::termRepresentedByValue(TL)),
if SV <= 1 then
size := 1,
set := set1,
get := get1
elseif SV <= 2 then
size := 2,
set := set2,
get := get2
else
size := 4,
set := set4,
get := get4
end if.
#elseif platform_bits = 64 #then
clauses
new() :-
TL = typeLibraryOf(@Elem),
SV = if TL:isFunctorType() = _ then sizeOfDomain(pointer) else sizeOfDomain(@Elem) end if,
isAtomic := toBoolean(pfc\reflection\reflection_native::termRepresentedByValue(TL)),
if SV <= 1 then
size := 1,
set := set1,
get := get1
elseif SV <= 2 then
size := 2,
set := set2,
get := get2
elseif SV <= 4 then
size := 4,
set := set4,
get := get4
else
size := 8,
set := set8,
get := get8
end if.
#else
#error "platform_bits has unexpected value"
#endif
predicates
get1 : (pointer P) -> @Elem E.
clauses
get1(P) = uncheckedConvert(@Elem, convert(unsignedNative, memory::getUnsigned8(P))).
predicates
get2 : (pointer P) -> @Elem E.
clauses
get2(P) = uncheckedConvert(@Elem, convert(unsignedNative, memory::getUnsigned16(P))).
predicates
get4 : (pointer P) -> @Elem E.
clauses
get4(P) = uncheckedConvert(@Elem, convert(unsignedNative, memory::getUnsigned(P))).
#if platform_bits = 64 #then
predicates
get8 : (pointer P) -> @Elem E.
clauses
get8(P) = uncheckedConvert(@Elem, convert(unsignedNative, memory::getUnsigned64(P))).
#endif
predicates
set1 : (pointer P, @Elem E).
clauses
set1(P, E) :-
memory::move(P, uncheckedConvert(pointer, memory::pUnsignedNative(uncheckedConvert(unsignedNative, E))), 1).
predicates
set2 : (pointer P, @Elem E).
clauses
set2(P, E) :-
memory::move(P, uncheckedConvert(pointer, memory::pUnsignedNative(uncheckedConvert(unsignedNative, E))), 2).
predicates
set4 : (pointer P, @Elem E).
clauses
set4(P, E) :-
memory::move(P, uncheckedConvert(pointer, memory::pUnsignedNative(uncheckedConvert(unsignedNative, E))), 4).
#if platform_bits = 64 #then
predicates
set8 : (pointer P, @Elem E).
clauses
set8(P, E) :-
memory::move(P, uncheckedConvert(pointer, memory::pUnsignedNative(uncheckedConvert(unsignedNative, E))), 8).
#endif
end implement memoryAccessor