blaise/.gitignore
Graeme Geldenhuys b43a999f80 feat(types): add UInt64 / QWord type
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).
2026-05-22 08:08:35 +01:00

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