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
@@ -16,6 +16,7 @@ fn F() -> i32 {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: package: <namespace> = namespace {.F = %F}
// CHECK:STDOUT: %F: <function> = fn_decl @F
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -26,6 +26,7 @@ fn F() {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: package: <namespace> = namespace {.F = %F}
// CHECK:STDOUT: %F: <function> = fn_decl @F
// CHECK:STDOUT: }
// CHECK:STDOUT:
+1
View File
@@ -14,6 +14,7 @@ fn F() -> i32 {
// CHECK:STDOUT: --- basic.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: package: <namespace> = namespace {.F = %F}
// CHECK:STDOUT: %F: <function> = fn_decl @F
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -26,6 +26,7 @@ fn Test() {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: package: <namespace> = namespace {.Test = %Test}
// CHECK:STDOUT: %Test: <function> = fn_decl @Test
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -96,6 +96,7 @@ fn AddressOfParam(param: i32) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: package: <namespace> = namespace {.G = %G, .H = %H, .AddressOfLiteral = %AddressOfLiteral, .AddressOfOperator = %AddressOfOperator, .AddressOfCall = %AddressOfCall, .AddressOfType = %AddressOfType, .AddressOfTupleElementValue = %AddressOfTupleElementValue, .AddressOfParam = %AddressOfParam}
// CHECK:STDOUT: %G: <function> = fn_decl @G
// CHECK:STDOUT: %H: <function> = fn_decl @H
// CHECK:STDOUT: %AddressOfLiteral: <function> = fn_decl @AddressOfLiteral
@@ -12,6 +12,7 @@ let n: i32 = *undeclared;
// CHECK:STDOUT: --- fail_deref_error.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: package: <namespace> = namespace {}
// CHECK:STDOUT: %undeclared.ref: <error> = name_ref undeclared, <error>
// CHECK:STDOUT: %.loc10: ref <error> = deref <error>
// CHECK:STDOUT: %n: i32 = bind_name n, <error>
@@ -14,6 +14,7 @@ fn A() {
// CHECK:STDOUT: --- fail_deref_function.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: package: <namespace> = namespace {.A = %A}
// CHECK:STDOUT: %A: <function> = fn_decl @A
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -16,6 +16,7 @@ fn F() {
// CHECK:STDOUT: --- fail_deref_namespace.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: package: <namespace> = namespace {.A = %.loc7, .F = %F}
// CHECK:STDOUT: %.loc7: <namespace> = namespace {}
// CHECK:STDOUT: %F: <function> = fn_decl @F
// CHECK:STDOUT: }
@@ -27,6 +27,7 @@ fn Deref(n: i32) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: package: <namespace> = namespace {.Deref = %Deref}
// CHECK:STDOUT: %Deref: <function> = fn_decl @Deref
// CHECK:STDOUT: }
// CHECK:STDOUT:
@@ -15,6 +15,7 @@ var p: *i32;
// CHECK:STDOUT: --- fail_deref_type.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: package: <namespace> = namespace {.p = %p}
// CHECK:STDOUT: %.loc13: ref <error> = deref i32
// CHECK:STDOUT: %p.var: ref <error> = var p
// CHECK:STDOUT: %p: ref <error> = bind_name p, %p.var
@@ -18,6 +18,7 @@ fn ConstMismatch(p: const {}*) -> const ({}*) {
// CHECK:STDOUT: }
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: package: <namespace> = namespace {.ConstMismatch = %ConstMismatch}
// CHECK:STDOUT: %ConstMismatch: <function> = fn_decl @ConstMismatch
// CHECK:STDOUT: }
// CHECK:STDOUT:
+1
View File
@@ -12,6 +12,7 @@ fn F(p: const (const (const i32*)*)) -> const i32 {
// CHECK:STDOUT: --- nested_const.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: package: <namespace> = namespace {.F = %F}
// CHECK:STDOUT: %F: <function> = fn_decl @F
// CHECK:STDOUT: }
// CHECK:STDOUT:
+1
View File
@@ -15,6 +15,7 @@ fn ConstPtr(p: const i32*) -> (const i32)* {
// CHECK:STDOUT: --- types.carbon
// CHECK:STDOUT:
// CHECK:STDOUT: file {
// CHECK:STDOUT: package: <namespace> = namespace {.Ptr = %Ptr, .ConstPtr = %ConstPtr}
// CHECK:STDOUT: %Ptr: <function> = fn_decl @Ptr
// CHECK:STDOUT: %ConstPtr: <function> = fn_decl @ConstPtr
// CHECK:STDOUT: }