mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 20:42:01 +01:00
Start doing name lookup for references (#2472)
When binding a name, add it to name lookup. On NameReference nodes, use name lookup. - Switches from "identifiers" to the more generic "strings". Not strictly necessary here, but it's the overall direction I think we've agreed upon and wanted to do it while building more support out. - Starts doing deduplication of strings. - On BindName, registers names with name lookup. - Does name lookup based on the deduplicated string. - Per discussion with zygoloid, design is intended to be constant-time lookup regardless of the number of parent scopes. - Adds scopes so that we can track names which will be deregistered from lookup.
This commit is contained in:
+5
-4
@@ -10,16 +10,17 @@
|
||||
// CHECK:STDOUT: node_xref1 = xref(ir0, block0, node1);
|
||||
// CHECK:STDOUT: node_xref2 = xref(ir0, block0, node2);
|
||||
// CHECK:STDOUT: node_xref3 = xref(ir0, block0, node3);
|
||||
// CHECK:STDOUT: },
|
||||
// CHECK:STDOUT: identifiers = {
|
||||
// CHECK:STDOUT: ident0 = "Foo";
|
||||
// CHECK:STDOUT: node_xref4 = xref(ir1, block0, node1);
|
||||
// CHECK:STDOUT: },
|
||||
// CHECK:STDOUT: integer_literals = {
|
||||
// CHECK:STDOUT: },
|
||||
// CHECK:STDOUT: strings = {
|
||||
// CHECK:STDOUT: str0 = "Foo";
|
||||
// CHECK:STDOUT: },
|
||||
// CHECK:STDOUT: node_blocks = {
|
||||
// CHECK:STDOUT: block0 = {
|
||||
// CHECK:STDOUT: node0 = FunctionDeclaration();
|
||||
// CHECK:STDOUT: node1 = BindName(ident0, node0);
|
||||
// CHECK:STDOUT: node1 = BindName(str0, node0);
|
||||
// CHECK:STDOUT: node2 = FunctionDefinition(node0, block1);
|
||||
// CHECK:STDOUT: },
|
||||
// CHECK:STDOUT: block1 = {
|
||||
|
||||
+11
-8
@@ -10,24 +10,27 @@
|
||||
// CHECK:STDOUT: node_xref1 = xref(ir0, block0, node1);
|
||||
// CHECK:STDOUT: node_xref2 = xref(ir0, block0, node2);
|
||||
// CHECK:STDOUT: node_xref3 = xref(ir0, block0, node3);
|
||||
// CHECK:STDOUT: },
|
||||
// CHECK:STDOUT: identifiers = {
|
||||
// CHECK:STDOUT: ident0 = "Foo";
|
||||
// CHECK:STDOUT: ident1 = "Bar";
|
||||
// CHECK:STDOUT: ident2 = "Baz";
|
||||
// CHECK:STDOUT: node_xref4 = xref(ir1, block0, node1);
|
||||
// CHECK:STDOUT: node_xref5 = xref(ir1, block0, node4);
|
||||
// CHECK:STDOUT: node_xref6 = xref(ir1, block0, node7);
|
||||
// CHECK:STDOUT: },
|
||||
// CHECK:STDOUT: integer_literals = {
|
||||
// CHECK:STDOUT: },
|
||||
// CHECK:STDOUT: strings = {
|
||||
// CHECK:STDOUT: str0 = "Foo";
|
||||
// CHECK:STDOUT: str1 = "Bar";
|
||||
// CHECK:STDOUT: str2 = "Baz";
|
||||
// CHECK:STDOUT: },
|
||||
// CHECK:STDOUT: node_blocks = {
|
||||
// CHECK:STDOUT: block0 = {
|
||||
// CHECK:STDOUT: node0 = FunctionDeclaration();
|
||||
// CHECK:STDOUT: node1 = BindName(ident0, node0);
|
||||
// CHECK:STDOUT: node1 = BindName(str0, node0);
|
||||
// CHECK:STDOUT: node2 = FunctionDefinition(node0, block1);
|
||||
// CHECK:STDOUT: node3 = FunctionDeclaration();
|
||||
// CHECK:STDOUT: node4 = BindName(ident1, node3);
|
||||
// CHECK:STDOUT: node4 = BindName(str1, node3);
|
||||
// CHECK:STDOUT: node5 = FunctionDefinition(node3, block2);
|
||||
// CHECK:STDOUT: node6 = FunctionDeclaration();
|
||||
// CHECK:STDOUT: node7 = BindName(ident2, node6);
|
||||
// CHECK:STDOUT: node7 = BindName(str2, node6);
|
||||
// CHECK:STDOUT: node8 = FunctionDefinition(node6, block3);
|
||||
// CHECK:STDOUT: },
|
||||
// CHECK:STDOUT: block1 = {
|
||||
|
||||
Reference in New Issue
Block a user