Adds a real 64-bit unsigned integer type with two equivalent names: UInt64 (Delphi style, matches the existing Int64) and QWord (FPC style). PtrUInt now aliases UInt64 too — it's the natural pointer- sized unsigned on 64-bit. Language semantics: - Arithmetic on UInt64 uses udiv/urem; add/sub/mul/and/or/xor/shl/shr are bit-identical to their signed counterparts. - Comparisons use unsigned QBE ops (cultl, cugtl, ...). - Int64 <-> UInt64 mixing requires an explicit cast; the two types are not implicitly convertible in either direction. - Decimal/hex literals in the (2^63, 2^64-1) range are typed as UInt64. Smaller literals stay Integer/Int64. - SizeOf(UInt64) = SizeOf(QWord) = 8. Runtime: - New _UInt64ToStr in blaise_str.pas plus a WriteDecimalU helper that uses UInt64 arithmetic. - SysWriteUInt64 added to the platform abstraction and implemented in the POSIX layer. WriteLn(UInt64) routes through it. - IntToStr(UInt64) routes to _UInt64ToStr; explicit UInt64ToStr is also exposed as a builtin. Bootstrap notes: - Older release binaries cannot compile the runtime any more because rtl.platform.pas declares SysWriteUInt64. A stage-2 rebuild from a fresh stage-1 is required after this commit on any worktree with an older stage-1, per CLAUDE.md. - The parser stages literal Value through local var-params rather than writing directly to the new TIntLiteral.IsUInt64 field via class-field out-params. Working around a stage-1 codegen bug where var-param calls that target a class field silently fail to write back. Docs: - docs/grammar.ebnf: built-in type list expanded with UInt64/QWord, integer-literal typing rules documented. - docs/language-rationale.adoc: integer types table updated with the unsigned variants, Int64<->UInt64 strict conversion rule explained. Tests: - 15 new tests in cp.test.uint64.pas covering symbol-table registration, codegen instruction picking (udiv/urem/cultl/cugtl), literal-range typing, and e2e round-trips. - Full suite: 2151 tests pass (up from 2132). - Fixpoint clean at stage-3/stage-4 (expected: type-system change).
79 lines
946 B
Plaintext
79 lines
946 B
Plaintext
# Local binary release archives (not tracked; see releases/ directory)
|
|
releases/
|
|
|
|
# FPC compiled output
|
|
*.ppu
|
|
*.o
|
|
*.a
|
|
*.or
|
|
*.res
|
|
*.rst
|
|
*.s
|
|
!runtime/src/main/asm/*.s
|
|
|
|
# Shared / dynamic libraries
|
|
*.so
|
|
*.so.*
|
|
*.dylib
|
|
*.dll
|
|
|
|
# Static libraries
|
|
*.lib
|
|
|
|
# PasBuild build output (per-module target/ directories)
|
|
target/
|
|
|
|
# QBE build artefacts (source is vendored; binary is built locally)
|
|
vendor/qbe/*.o
|
|
vendor/qbe/qbe
|
|
vendor/qbe/amd64/*.o
|
|
vendor/qbe/arm64/*.o
|
|
vendor/qbe/rv64/*.o
|
|
|
|
# FPC unit cache directories
|
|
lib/
|
|
units/
|
|
|
|
# PasBuild output
|
|
*.pbc
|
|
|
|
# Debug symbols
|
|
*.dbg
|
|
*.opdf
|
|
|
|
# Editor and IDE
|
|
.vscode/settings.json
|
|
.vscode/launch.json
|
|
*.swp
|
|
*.swo
|
|
*~
|
|
.idea/
|
|
*.iml
|
|
*.ipr
|
|
*.iws
|
|
|
|
# macOS
|
|
.DS_Store
|
|
.AppleDouble
|
|
.LSOverride
|
|
|
|
# Windows
|
|
Thumbs.db
|
|
ehthumbs.db
|
|
Desktop.ini
|
|
|
|
# Linux
|
|
.directory
|
|
|
|
# Temporary files
|
|
*.tmp
|
|
*.bak
|
|
*.orig
|
|
|
|
# Claude Code session notes — not for version control
|
|
CLAUDE.md
|
|
.ide/
|
|
|
|
# Local bug-tracking notes — not committed
|
|
bugs.txt
|