mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
New faults and syntax (#2034)
- Remove `[?]` syntax. - Change `int!` to `int?` syntax. - New `fault` declarations. - Enum associated values can reference the calling enum.
This commit is contained in:
committed by
GitHub
parent
fefce25081
commit
25bccf4883
@@ -5,7 +5,7 @@ distinct Foo = float;
|
||||
fn void main()
|
||||
{
|
||||
Foo a = 12.3;
|
||||
Foo! b = 33.5;
|
||||
Foo? b = 33.5;
|
||||
(void)printf("%f %f %f", (float)a, a, b);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
|
||||
int z;
|
||||
|
||||
fault MyError
|
||||
{
|
||||
FOO,
|
||||
}
|
||||
fault FOO;
|
||||
|
||||
fn void test(int a = z) {}
|
||||
|
||||
fn void test2(int b = MyError.FOO?) {}
|
||||
fn void test2(int b = FOO?) {}
|
||||
@@ -1,3 +1,3 @@
|
||||
module test;
|
||||
|
||||
fn void test4(void!); // #error: Parameters may not be optional.
|
||||
fn void test4(void?); // #error: Parameters may not be optional.
|
||||
|
||||
@@ -14,8 +14,8 @@ fn Callback**[][123]* tester()
|
||||
GetCallback x = &tester;
|
||||
|
||||
|
||||
def GetCallbackOpt = fn Callback2!();
|
||||
def GetCallbackOpt = fn Callback2?();
|
||||
|
||||
fn Callback2! tester2() => null;
|
||||
fn Callback2? tester2() => null;
|
||||
|
||||
GetCallbackOpt y = &tester2;
|
||||
@@ -8,8 +8,8 @@ def FuncSame = fn int(int z = 444);
|
||||
fn int test(int a) { return a; }
|
||||
fn int test2(int b = 3) { return b; }
|
||||
|
||||
fn int! test3(int b = 3) { return b; }
|
||||
fn int! test4(int b = 3) { return b; }
|
||||
fn int? test3(int b = 3) { return b; }
|
||||
fn int? test4(int b = 3) { return b; }
|
||||
|
||||
fn void main()
|
||||
{
|
||||
@@ -37,8 +37,8 @@ fn void main()
|
||||
@.str.2 = private unnamed_addr constant [3 x i8] c"%d\00", align 1
|
||||
@.str.3 = private unnamed_addr constant [3 x i8] c"%s\00", align 1
|
||||
@.str.4 = private unnamed_addr constant [12 x i8] c"fn int(int)\00", align 1
|
||||
@"$ct.String" = linkonce global %.introspect { i8 18, i64 ptrtoint (ptr @"$ct.sa$char" to i64), ptr null, i64 16, i64 ptrtoint (ptr @"$ct.sa$char" to i64), i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.sa$char" = linkonce global %.introspect { i8 16, i64 0, ptr null, i64 16, i64 ptrtoint (ptr @"$ct.char" to i64), i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.String" = linkonce global %.introspect { i8 17, i64 ptrtoint (ptr @"$ct.sa$char" to i64), ptr null, i64 16, i64 ptrtoint (ptr @"$ct.sa$char" to i64), i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.sa$char" = linkonce global %.introspect { i8 15, i64 0, ptr null, i64 16, i64 ptrtoint (ptr @"$ct.char" to i64), i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.char" = linkonce global %.introspect { i8 3, i64 0, ptr null, i64 1, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@.str.5 = private unnamed_addr constant [3 x i8] c"%s\00", align 1
|
||||
@.str.6 = private unnamed_addr constant [12 x i8] c"fn int(int)\00", align 1
|
||||
@@ -48,7 +48,7 @@ fn void main()
|
||||
@.str.10 = private unnamed_addr constant [12 x i8] c"fn int(int)\00", align 1
|
||||
@.str.11 = private unnamed_addr constant [3 x i8] c"%s\00", align 1
|
||||
@.str.12 = private unnamed_addr constant [13 x i8] c"fn int!(int)\00", align 1
|
||||
@"$ct.fn$int$int$" = linkonce global %.introspect { i8 13, i64 0, ptr null, i64 8, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.fn$int$int$" = linkonce global %.introspect { i8 12, i64 0, ptr null, i64 8, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
|
||||
define void @test.main() #0 {
|
||||
entry:
|
||||
|
||||
@@ -12,7 +12,7 @@ struct Foo
|
||||
List{FnB} bFuncs;
|
||||
}
|
||||
|
||||
fn void! Foo.deinit(&self)
|
||||
fn void? Foo.deinit(&self)
|
||||
{
|
||||
self.aFuncs.free();
|
||||
self.bFuncs.free();
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import std::io::path;
|
||||
|
||||
fn void! process_dir(String dir_name)
|
||||
fn void? process_dir(String dir_name)
|
||||
{
|
||||
path::Path p = path::temp(dir_name)!;
|
||||
path::PathWalker fnwalk = fn bool!(Path p, bool is_dir, void*) { // #error: issing return statement at the end
|
||||
path::PathWalker fnwalk = fn bool?(Path p, bool is_dir, void*) { // #error: issing return statement at the end
|
||||
io::printfn("path is %s", p);
|
||||
};
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
int[?] foo = {1,2,3};
|
||||
int[*] foo = {1,2,3};
|
||||
fn int* bar(int index)
|
||||
{
|
||||
int* array = &foo;
|
||||
|
||||
@@ -5,7 +5,7 @@ fn void main()
|
||||
{
|
||||
}
|
||||
|
||||
def FooFunc = fn void! (Bar); // #error: Recursive definition
|
||||
def FooFunc = fn void? (Bar); // #error: Recursive definition
|
||||
def Foo = HashMap{String, FooFunc};
|
||||
|
||||
struct Bar
|
||||
|
||||
@@ -201,11 +201,7 @@ fn Type getMult(Type a)
|
||||
}
|
||||
Type argh = 234;
|
||||
|
||||
fault MyErr
|
||||
{
|
||||
X,
|
||||
Y
|
||||
}
|
||||
fault X, Y;
|
||||
|
||||
enum Hello : int
|
||||
{
|
||||
@@ -243,11 +239,11 @@ fn Type getValue(Blob blob)
|
||||
%List = type { i64, i64, %any, ptr }
|
||||
%Foo = type { i32, i32 }
|
||||
|
||||
@"$ct.test.Bobo" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 20, i64 0, i64 6, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Blob" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Foor" = linkonce global %.introspect { i8 11, i64 0, ptr null, i64 16, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Foo2" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Foo" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Bobo" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 20, i64 0, i64 6, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Blob" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Foor" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 16, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Foo2" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.Foo" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.int" = linkonce global %.introspect { i8 2, i64 0, ptr null, i64 4, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8
|
||||
@"$ct.test.MyEnum" = linkonce global { i8, i64, ptr, i64, i64, i64, [3 x %"char[]"] } { i8 8, i64 0, ptr null, i64 4, i64 ptrtoint (ptr @"$ct.int" to i64), i64 3, [3 x %"char[]"] [%"char[]" { ptr @.enum.HELO, i64 4 }, %"char[]" { ptr @.enum.WORLD, i64 5 }, %"char[]" { ptr @.enum.BYE, i64 3 }] }, align 8
|
||||
@test_static.x = internal unnamed_addr global i32 1, align 4
|
||||
|
||||
@@ -203,11 +203,7 @@ fn Type getMult(Type a)
|
||||
}
|
||||
Type argh = 234;
|
||||
|
||||
fault MyErr
|
||||
{
|
||||
X,
|
||||
Y
|
||||
}
|
||||
fault X, Y;
|
||||
|
||||
enum Hello : int
|
||||
{
|
||||
@@ -259,11 +255,11 @@ $"$ct.int" = comdat any
|
||||
|
||||
$"$ct.test.MyEnum" = comdat any
|
||||
|
||||
@"$ct.test.Bobo" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 20, i64 0, i64 6, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$ct.test.Blob" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$ct.test.Foor" = linkonce global %.introspect { i8 11, i64 0, ptr null, i64 16, i64 0, i64 2, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$ct.test.Foo2" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$ct.test.Foo" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$ct.test.Bobo" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 20, i64 0, i64 6, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$ct.test.Blob" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$ct.test.Foor" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 16, i64 0, i64 2, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$ct.test.Foo2" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 4, i64 0, i64 1, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@"$ct.test.Foo" = linkonce global %.introspect { i8 9, i64 0, ptr null, i64 8, i64 0, i64 2, [0 x i64] zeroinitializer }, comdat, align 8
|
||||
@.enum.HELO = internal constant [5 x i8] c"HELO\00", align 1
|
||||
@.enum.WORLD = internal constant [6 x i8] c"WORLD\00", align 1
|
||||
@.enum.BYE = internal constant [4 x i8] c"BYE\00", align 1
|
||||
|
||||
Reference in New Issue
Block a user