Add support for 'package' in expressions. (#3445)

This creates a namespace for `package` scope.

It looks like names of class_decls in namespaces lead to an unexpected
instref. This is already true, as best as I can tell. I'm not sure if
there's a preferred approach to address that, so I've left a TODO for
now.
This commit is contained in:
Jon Ross-Perkins
2023-12-04 21:05:41 +00:00
committed by GitHub
parent 1c4a35c76b
commit 30155dbb72
262 changed files with 721 additions and 129 deletions
@@ -15,6 +15,7 @@ fn Bar(a: i32, a: i32) {}
// CHECK:STDOUT: --- fail_param_name_conflict.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: package: <namespace> = namespace {.Bar = %Bar}
// CHECK:STDOUT: %Bar: <function> = fn_decl @Bar
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -11,6 +11,7 @@ fn Baz() {}
// CHECK:STDOUT: --- order.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: package: <namespace> = namespace {.Foo = %Foo, .Bar = %Bar, .Baz = %Baz}
// CHECK:STDOUT: %Foo: <function> = fn_decl @Foo
// CHECK:STDOUT: %Bar: <function> = fn_decl @Bar
// CHECK:STDOUT: %Baz: <function> = fn_decl @Baz
@@ -9,6 +9,7 @@ fn Foo(a: i32) {}
// CHECK:STDOUT: --- params_one.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: package: <namespace> = namespace {.Foo = %Foo}
// CHECK:STDOUT: %Foo: <function> = fn_decl @Foo
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -9,6 +9,7 @@ fn Foo(a: i32,) {}
// CHECK:STDOUT: --- params_one_comma.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: package: <namespace> = namespace {.Foo = %Foo}
// CHECK:STDOUT: %Foo: <function> = fn_decl @Foo
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -9,6 +9,7 @@ fn Foo(a: i32, b: i32) {}
// CHECK:STDOUT: --- params_two.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: package: <namespace> = namespace {.Foo = %Foo}
// CHECK:STDOUT: %Foo: <function> = fn_decl @Foo
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -9,6 +9,7 @@ fn Foo(a: i32, b: i32,) {}
// CHECK:STDOUT: --- params_two_comma.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: package: <namespace> = namespace {.Foo = %Foo}
// CHECK:STDOUT: %Foo: <function> = fn_decl @Foo
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -9,6 +9,7 @@ fn Foo() {}
// CHECK:STDOUT: --- params_zero.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: package: <namespace> = namespace {.Foo = %Foo}
// CHECK:STDOUT: %Foo: <function> = fn_decl @Foo
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -10,6 +10,7 @@ fn Bar(a: i32) {}
// CHECK:STDOUT: --- same_param_name.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: package: <namespace> = namespace {.Foo = %Foo, .Bar = %Bar}
// CHECK:STDOUT: %Foo: <function> = fn_decl @Foo
// CHECK:STDOUT: %Bar: <function> = fn_decl @Bar
// CHECK:STDOUT: }