unsigned integer constraint (uint)
This commit is contained in:
+5
-4
@@ -24,7 +24,7 @@ roadmap and milestone history.
|
||||
|
||||
### scalar, aggregate, and pointer types
|
||||
|
||||
- exact-width integers, `isize`, `usize`, `f32`, `f64`, `bool`, `void`, `anyopaque`, and contextual `int`, `float`, and `range` constraints
|
||||
- exact-width integers, concrete pointer-sized `isize` / `usize`, `f32`, `f64`, `bool`, `void`, and `anyopaque`; contextual `int` accepts the whole integer family, while `uint` accepts only unsigned native and target-classified C integers
|
||||
- target-dependent C scalar primitives from `c_char` through `c_longdouble`, kept semantically distinct from native scalars
|
||||
- contextual integer/float/character literals, backward type-demand inference through names and arithmetic, and compile-time folding for numeric constant expressions
|
||||
- strict numeric conversion by default, widening where valid, C scalar coercions at C boundaries, and explicit scalar keyword casts such as `i32(x)` / `c_float(x)`
|
||||
@@ -44,16 +44,17 @@ roadmap and milestone history.
|
||||
|
||||
#### native record constraint fields
|
||||
|
||||
A direct `int`, `float`, or `range` field in a named native struct or union is a
|
||||
A direct `int`, `uint`, `float`, or `range` field in a named native struct or union is a
|
||||
program-wide constraint, not per-value polymorphism. Before record layout, all reachable keyed
|
||||
constructors, field assignments, and concrete uses of field reads contribute demands and the field
|
||||
resolves once to one concrete runtime type. Compatible scalar demands widen normally. Integer
|
||||
literals remain provisional until inference settles, so a later `usize` use can resolve an `int`
|
||||
field to `usize`; otherwise literal-only `int` fields use the widest smallest-signed type required,
|
||||
and literal-only `float` fields use `f64`.
|
||||
literal-only `uint` fields use the widest smallest-unsigned type required, and literal-only `float`
|
||||
fields use `f64`.
|
||||
|
||||
An undemanded field or incompatible demands are errors. This inference applies only to direct
|
||||
fields of named native records. `c_struct` fields, nested constraints such as `[]int`, and fields in
|
||||
fields of named native records. `c_struct` fields, nested constraints such as `[]int` / `[]uint`, and fields in
|
||||
anonymous generated records still require concrete runtime types.
|
||||
|
||||
#### keyword member names
|
||||
|
||||
Reference in New Issue
Block a user