Make Core.Float a class. Add missing builtins for float support. (#5932)

Add missing builtins for float compound assignment, for building a
FloatType, and for converting a float literal to FloatType. Switch
`Core.Float` to being a class and add impls for the various
floating-point operators.

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: Carbon Infra Bot <carbon-external-infra@google.com>
This commit is contained in:
Richard Smith
2025-08-11 21:01:34 +00:00
committed by GitHub
co-authored by google-labs-jules[bot] Carbon Infra Bot
parent f616817b71
commit 694c00c7eb
66 changed files with 2158 additions and 583 deletions
+18 -1
View File
@@ -2,12 +2,29 @@
// Exceptions. See /LICENSE for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/parts/as.carbon
// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/parts/float_literal.carbon
// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/parts/int_literal.carbon
// --- min_prelude/parts/float.carbon
package Core library "prelude/parts/float";
export import library "prelude/parts/as";
export import library "prelude/parts/float_literal";
export import library "prelude/parts/int_literal";
fn Float(size: IntLiteral()) -> type = "float.make_type";
private fn MakeFloat(size: IntLiteral()) -> type = "float.make_type";
class Float(N:! IntLiteral()) {
adapt MakeFloat(N);
}
impl forall [To:! IntLiteral()] FloatLiteral() as ImplicitAs(Float(To)) {
fn Convert[self: Self]() -> Float(To) = "float.convert_checked";
}
// TODO: Remove this once ImplicitAs extends As.
impl forall [To:! IntLiteral()] FloatLiteral() as As(Float(To)) {
fn Convert[self: Self]() -> Float(To) = "float.convert_checked";
}
@@ -0,0 +1,9 @@
// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
// Exceptions. See /LICENSE for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// --- min_prelude/parts/float_literal.carbon
package Core library "prelude/parts/float_literal";
fn FloatLiteral() -> type = "float_literal.make_type";