mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Distinguish between name IDs and string IDs in the type system. (#3341)
Add a `NameId` that is effectively just a wrapper around a `StringId`, with some additional predefined values for names that don't correspond to strings, such as the name of `self` or the function's return slot.
This commit is contained in:
@@ -24,13 +24,13 @@ fn Main() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Echo(%a: {}) -> {} {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %a.ref: {} = name_reference "a", %a
|
||||
// CHECK:STDOUT: %a.ref: {} = name_reference a, %a
|
||||
// CHECK:STDOUT: return %a.ref
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Main() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Echo.ref: <function> = name_reference "Echo", file.%Echo
|
||||
// CHECK:STDOUT: %Echo.ref: <function> = name_reference Echo, file.%Echo
|
||||
// CHECK:STDOUT: %.loc12_9.1: {} = struct_literal ()
|
||||
// CHECK:STDOUT: %.loc12_9.2: {} = struct_value %.loc12_9.1, ()
|
||||
// CHECK:STDOUT: %.loc12_7: init {} = call %Echo.ref(%.loc12_9.2)
|
||||
|
||||
@@ -23,13 +23,13 @@ fn Main() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Echo(%a: ()) -> () {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %a.ref: () = name_reference "a", %a
|
||||
// CHECK:STDOUT: %a.ref: () = name_reference a, %a
|
||||
// CHECK:STDOUT: return %a.ref
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Main() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Echo.ref: <function> = name_reference "Echo", file.%Echo
|
||||
// CHECK:STDOUT: %Echo.ref: <function> = name_reference Echo, file.%Echo
|
||||
// CHECK:STDOUT: %.loc12_9.1: () = tuple_literal ()
|
||||
// CHECK:STDOUT: %.loc12_9.2: () = tuple_value %.loc12_9.1, ()
|
||||
// CHECK:STDOUT: %.loc12_7: init () = call %Echo.ref(%.loc12_9.2)
|
||||
|
||||
@@ -21,8 +21,8 @@ fn Run() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Run() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %x.var: ref i32 = var "x"
|
||||
// CHECK:STDOUT: %x: ref i32 = bind_name "x", %x.var
|
||||
// CHECK:STDOUT: %x.var: ref i32 = var x
|
||||
// CHECK:STDOUT: %x: ref i32 = bind_name x, %x.var
|
||||
// CHECK:STDOUT: %.loc11: String = string_literal "hello"
|
||||
// CHECK:STDOUT: assign %x.var, <error>
|
||||
// CHECK:STDOUT: return
|
||||
|
||||
@@ -83,22 +83,22 @@ fn Main() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Main() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Run0.ref.loc18: <function> = name_reference "Run0", file.%Run0
|
||||
// CHECK:STDOUT: %Run0.ref.loc18: <function> = name_reference Run0, file.%Run0
|
||||
// CHECK:STDOUT: %.loc18_8: i32 = int_literal 1
|
||||
// CHECK:STDOUT: %.loc18_7: init () = call %Run0.ref.loc18(<invalid>)
|
||||
// CHECK:STDOUT: %Run0.ref.loc25: <function> = name_reference "Run0", file.%Run0
|
||||
// CHECK:STDOUT: %Run0.ref.loc25: <function> = name_reference Run0, file.%Run0
|
||||
// CHECK:STDOUT: %.loc25_8: i32 = int_literal 0
|
||||
// CHECK:STDOUT: %.loc25_11: i32 = int_literal 1
|
||||
// CHECK:STDOUT: %.loc25_7: init () = call %Run0.ref.loc25(<invalid>)
|
||||
// CHECK:STDOUT: %Run1.ref.loc33: <function> = name_reference "Run1", file.%Run1
|
||||
// CHECK:STDOUT: %Run1.ref.loc33: <function> = name_reference Run1, file.%Run1
|
||||
// CHECK:STDOUT: %.loc33: init () = call %Run1.ref.loc33(<invalid>)
|
||||
// CHECK:STDOUT: %Run1.ref.loc40: <function> = name_reference "Run1", file.%Run1
|
||||
// CHECK:STDOUT: %Run1.ref.loc40: <function> = name_reference Run1, file.%Run1
|
||||
// CHECK:STDOUT: %.loc40_8: i32 = int_literal 0
|
||||
// CHECK:STDOUT: %.loc40_11: i32 = int_literal 1
|
||||
// CHECK:STDOUT: %.loc40_7: init () = call %Run1.ref.loc40(<invalid>)
|
||||
// CHECK:STDOUT: %Run2.ref.loc48: <function> = name_reference "Run2", file.%Run2
|
||||
// CHECK:STDOUT: %Run2.ref.loc48: <function> = name_reference Run2, file.%Run2
|
||||
// CHECK:STDOUT: %.loc48: init () = call %Run2.ref.loc48(<invalid>)
|
||||
// CHECK:STDOUT: %Run2.ref.loc55: <function> = name_reference "Run2", file.%Run2
|
||||
// CHECK:STDOUT: %Run2.ref.loc55: <function> = name_reference Run2, file.%Run2
|
||||
// CHECK:STDOUT: %.loc55_8: i32 = int_literal 0
|
||||
// CHECK:STDOUT: %.loc55_7: init () = call %Run2.ref.loc55(<invalid>)
|
||||
// CHECK:STDOUT: return
|
||||
|
||||
@@ -32,7 +32,7 @@ fn F() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @F() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %G.ref: <function> = name_reference "G", file.%G
|
||||
// CHECK:STDOUT: %G.ref: <function> = name_reference G, file.%G
|
||||
// CHECK:STDOUT: %.loc16_5: f64 = real_literal 10e-1
|
||||
// CHECK:STDOUT: %.loc16_4: init () = call %G.ref(<invalid>)
|
||||
// CHECK:STDOUT: return
|
||||
|
||||
@@ -26,9 +26,9 @@ fn Run() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Run() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %x.var: ref i32 = var "x"
|
||||
// CHECK:STDOUT: %x: ref i32 = bind_name "x", %x.var
|
||||
// CHECK:STDOUT: %Foo.ref: <function> = name_reference "Foo", file.%Foo
|
||||
// CHECK:STDOUT: %x.var: ref i32 = var x
|
||||
// CHECK:STDOUT: %x: ref i32 = bind_name x, %x.var
|
||||
// CHECK:STDOUT: %Foo.ref: <function> = name_reference Foo, file.%Foo
|
||||
// CHECK:STDOUT: %.loc13: init f64 = call %Foo.ref()
|
||||
// CHECK:STDOUT: assign %x.var, <error>
|
||||
// CHECK:STDOUT: return
|
||||
|
||||
+4
-4
@@ -19,15 +19,15 @@ fn Main() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Echo(%a: i32) -> i32 {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %a.ref: i32 = name_reference "a", %a
|
||||
// CHECK:STDOUT: %a.ref: i32 = name_reference a, %a
|
||||
// CHECK:STDOUT: return %a.ref
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Main() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %b.var: ref i32 = var "b"
|
||||
// CHECK:STDOUT: %b: ref i32 = bind_name "b", %b.var
|
||||
// CHECK:STDOUT: %Echo.ref: <function> = name_reference "Echo", file.%Echo
|
||||
// CHECK:STDOUT: %b.var: ref i32 = var b
|
||||
// CHECK:STDOUT: %b: ref i32 = bind_name b, %b.var
|
||||
// CHECK:STDOUT: %Echo.ref: <function> = name_reference Echo, file.%Echo
|
||||
// CHECK:STDOUT: %.loc12_21: i32 = int_literal 1
|
||||
// CHECK:STDOUT: %.loc12_20: init i32 = call %Echo.ref(%.loc12_21)
|
||||
// CHECK:STDOUT: assign %b.var, %.loc12_20
|
||||
|
||||
@@ -27,7 +27,7 @@ fn Main() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Main() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Foo.ref: <function> = name_reference "Foo", file.%Foo
|
||||
// CHECK:STDOUT: %Foo.ref: <function> = name_reference Foo, file.%Foo
|
||||
// CHECK:STDOUT: %.loc11_7: i32 = int_literal 1
|
||||
// CHECK:STDOUT: %.loc11_11: i32 = int_literal 2
|
||||
// CHECK:STDOUT: %.loc11_9: i32 = add %.loc11_7, %.loc11_11
|
||||
|
||||
@@ -26,7 +26,7 @@ fn Main() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Main() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Foo.ref: <function> = name_reference "Foo", file.%Foo
|
||||
// CHECK:STDOUT: %Foo.ref: <function> = name_reference Foo, file.%Foo
|
||||
// CHECK:STDOUT: %.loc10_7: i32 = int_literal 1
|
||||
// CHECK:STDOUT: %.loc10_6: init () = call %Foo.ref(%.loc10_7)
|
||||
// CHECK:STDOUT: return
|
||||
|
||||
@@ -27,10 +27,10 @@ fn Main() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Main() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Foo.ref.loc10: <function> = name_reference "Foo", file.%Foo
|
||||
// CHECK:STDOUT: %Foo.ref.loc10: <function> = name_reference Foo, file.%Foo
|
||||
// CHECK:STDOUT: %.loc10_7: i32 = int_literal 1
|
||||
// CHECK:STDOUT: %.loc10_6: init () = call %Foo.ref.loc10(%.loc10_7)
|
||||
// CHECK:STDOUT: %Foo.ref.loc11: <function> = name_reference "Foo", file.%Foo
|
||||
// CHECK:STDOUT: %Foo.ref.loc11: <function> = name_reference Foo, file.%Foo
|
||||
// CHECK:STDOUT: %.loc11_7: i32 = int_literal 1
|
||||
// CHECK:STDOUT: %.loc11_6: init () = call %Foo.ref.loc11(%.loc11_7)
|
||||
// CHECK:STDOUT: return
|
||||
|
||||
@@ -26,7 +26,7 @@ fn Main() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Main() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Foo.ref: <function> = name_reference "Foo", file.%Foo
|
||||
// CHECK:STDOUT: %Foo.ref: <function> = name_reference Foo, file.%Foo
|
||||
// CHECK:STDOUT: %.loc10_7: i32 = int_literal 1
|
||||
// CHECK:STDOUT: %.loc10_10: i32 = int_literal 2
|
||||
// CHECK:STDOUT: %.loc10_6: init () = call %Foo.ref(%.loc10_7, %.loc10_10)
|
||||
|
||||
@@ -27,11 +27,11 @@ fn Main() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Main() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Foo.ref.loc10: <function> = name_reference "Foo", file.%Foo
|
||||
// CHECK:STDOUT: %Foo.ref.loc10: <function> = name_reference Foo, file.%Foo
|
||||
// CHECK:STDOUT: %.loc10_7: i32 = int_literal 1
|
||||
// CHECK:STDOUT: %.loc10_10: i32 = int_literal 2
|
||||
// CHECK:STDOUT: %.loc10_6: init () = call %Foo.ref.loc10(%.loc10_7, %.loc10_10)
|
||||
// CHECK:STDOUT: %Foo.ref.loc11: <function> = name_reference "Foo", file.%Foo
|
||||
// CHECK:STDOUT: %Foo.ref.loc11: <function> = name_reference Foo, file.%Foo
|
||||
// CHECK:STDOUT: %.loc11_7: i32 = int_literal 1
|
||||
// CHECK:STDOUT: %.loc11_10: i32 = int_literal 2
|
||||
// CHECK:STDOUT: %.loc11_6: init () = call %Foo.ref.loc11(%.loc11_7, %.loc11_10)
|
||||
|
||||
@@ -26,7 +26,7 @@ fn Main() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Main() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Foo.ref: <function> = name_reference "Foo", file.%Foo
|
||||
// CHECK:STDOUT: %Foo.ref: <function> = name_reference Foo, file.%Foo
|
||||
// CHECK:STDOUT: %.loc10: init () = call %Foo.ref()
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
|
||||
@@ -28,9 +28,9 @@ fn Main() {
|
||||
// CHECK:STDOUT: fn @Main() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %.loc11_11: () = tuple_literal ()
|
||||
// CHECK:STDOUT: %b.var: ref () = var "b"
|
||||
// CHECK:STDOUT: %b: ref () = bind_name "b", %b.var
|
||||
// CHECK:STDOUT: %MakeImplicitEmptyTuple.ref: <function> = name_reference "MakeImplicitEmptyTuple", file.%MakeImplicitEmptyTuple
|
||||
// CHECK:STDOUT: %b.var: ref () = var b
|
||||
// CHECK:STDOUT: %b: ref () = bind_name b, %b.var
|
||||
// CHECK:STDOUT: %MakeImplicitEmptyTuple.ref: <function> = name_reference MakeImplicitEmptyTuple, file.%MakeImplicitEmptyTuple
|
||||
// CHECK:STDOUT: %.loc11_37: init () = call %MakeImplicitEmptyTuple.ref()
|
||||
// CHECK:STDOUT: assign %b.var, %.loc11_37
|
||||
// CHECK:STDOUT: return
|
||||
|
||||
@@ -21,7 +21,7 @@ fn G() { F(); }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @G() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %F.ref: <function> = name_reference "F", file.%F
|
||||
// CHECK:STDOUT: %F.ref: <function> = name_reference F, file.%F
|
||||
// CHECK:STDOUT: %.loc9: init () = call %F.ref()
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
|
||||
Reference in New Issue
Block a user