mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Sorting out how bindings are added to name lookup. (#2869)
This shifts logic so that bindings are added to name lookup only after the scope is complete, removing logic around adding/removing/re-adding names in certain scopes. This does mean that things like a function's forward declaration will need to go through an extra hoop for name conflict checks, because under this approach a function definition does conflict checking when it adds names for the body's use. But, that seems easy to address, and better than the current hoops.
This commit is contained in:
+3
-5
@@ -4,8 +4,8 @@
|
||||
//
|
||||
// AUTOUPDATE
|
||||
// CHECK:STDOUT: cross_reference_irs_size: 1
|
||||
// CHECK:STDOUT: callables: [
|
||||
// CHECK:STDOUT: {param_refs: block2},
|
||||
// CHECK:STDOUT: functions: [
|
||||
// CHECK:STDOUT: {name: str1, param_refs: block2, body: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: integer_literals: [
|
||||
// CHECK:STDOUT: ]
|
||||
@@ -24,8 +24,7 @@
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node+0, type: type0},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: type0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node+2, type: type0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node+4, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: function0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
@@ -42,7 +41,6 @@
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node+4,
|
||||
// CHECK:STDOUT: node+5,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
//
|
||||
// AUTOUPDATE
|
||||
// CHECK:STDOUT: cross_reference_irs_size: 1
|
||||
// CHECK:STDOUT: callables: [
|
||||
// CHECK:STDOUT: {param_refs: block0},
|
||||
// CHECK:STDOUT: {param_refs: block0},
|
||||
// CHECK:STDOUT: {param_refs: block0},
|
||||
// CHECK:STDOUT: functions: [
|
||||
// CHECK:STDOUT: {name: str0, param_refs: block0, body: block0},
|
||||
// CHECK:STDOUT: {name: str1, param_refs: block0, body: block0},
|
||||
// CHECK:STDOUT: {name: str2, param_refs: block0, body: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: integer_literals: [
|
||||
// CHECK:STDOUT: ]
|
||||
@@ -22,12 +22,9 @@
|
||||
// CHECK:STDOUT: nodeEmptyTupleType,
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: nodes: [
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node+0, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable1},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node+2, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable2},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node+4, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: function0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: function1},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: function2},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
@@ -36,9 +33,6 @@
|
||||
// CHECK:STDOUT: node+0,
|
||||
// CHECK:STDOUT: node+1,
|
||||
// CHECK:STDOUT: node+2,
|
||||
// CHECK:STDOUT: node+3,
|
||||
// CHECK:STDOUT: node+4,
|
||||
// CHECK:STDOUT: node+5,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
//
|
||||
// AUTOUPDATE
|
||||
// CHECK:STDOUT: cross_reference_irs_size: 1
|
||||
// CHECK:STDOUT: callables: [
|
||||
// CHECK:STDOUT: {param_refs: block2},
|
||||
// CHECK:STDOUT: functions: [
|
||||
// CHECK:STDOUT: {name: str1, param_refs: block2, body: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: integer_literals: [
|
||||
// CHECK:STDOUT: ]
|
||||
@@ -22,8 +22,7 @@
|
||||
// CHECK:STDOUT: nodes: [
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: type0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node+0, type: type0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node+2, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: function0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
@@ -37,7 +36,6 @@
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node+2,
|
||||
// CHECK:STDOUT: node+3,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
//
|
||||
// AUTOUPDATE
|
||||
// CHECK:STDOUT: cross_reference_irs_size: 1
|
||||
// CHECK:STDOUT: callables: [
|
||||
// CHECK:STDOUT: {param_refs: block2},
|
||||
// CHECK:STDOUT: functions: [
|
||||
// CHECK:STDOUT: {name: str1, param_refs: block2, body: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: integer_literals: [
|
||||
// CHECK:STDOUT: ]
|
||||
@@ -22,8 +22,7 @@
|
||||
// CHECK:STDOUT: nodes: [
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: type0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node+0, type: type0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node+2, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: function0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
@@ -37,7 +36,6 @@
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node+2,
|
||||
// CHECK:STDOUT: node+3,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
//
|
||||
// AUTOUPDATE
|
||||
// CHECK:STDOUT: cross_reference_irs_size: 1
|
||||
// CHECK:STDOUT: callables: [
|
||||
// CHECK:STDOUT: {param_refs: block2},
|
||||
// CHECK:STDOUT: functions: [
|
||||
// CHECK:STDOUT: {name: str2, param_refs: block2, body: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: integer_literals: [
|
||||
// CHECK:STDOUT: ]
|
||||
@@ -25,8 +25,7 @@
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node+0, type: type0},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: type0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node+2, type: type0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node+4, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: function0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
@@ -43,7 +42,6 @@
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node+4,
|
||||
// CHECK:STDOUT: node+5,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
//
|
||||
// AUTOUPDATE
|
||||
// CHECK:STDOUT: cross_reference_irs_size: 1
|
||||
// CHECK:STDOUT: callables: [
|
||||
// CHECK:STDOUT: {param_refs: block2},
|
||||
// CHECK:STDOUT: functions: [
|
||||
// CHECK:STDOUT: {name: str2, param_refs: block2, body: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: integer_literals: [
|
||||
// CHECK:STDOUT: ]
|
||||
@@ -25,8 +25,7 @@
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node+0, type: type0},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: type0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node+2, type: type0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node+4, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: function0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
@@ -43,7 +42,6 @@
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node+4,
|
||||
// CHECK:STDOUT: node+5,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
//
|
||||
// AUTOUPDATE
|
||||
// CHECK:STDOUT: cross_reference_irs_size: 1
|
||||
// CHECK:STDOUT: callables: [
|
||||
// CHECK:STDOUT: {param_refs: block0},
|
||||
// CHECK:STDOUT: functions: [
|
||||
// CHECK:STDOUT: {name: str0, param_refs: block0, body: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: integer_literals: [
|
||||
// CHECK:STDOUT: ]
|
||||
@@ -18,15 +18,13 @@
|
||||
// CHECK:STDOUT: nodeEmptyTupleType,
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: nodes: [
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node+0, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: function0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node+0,
|
||||
// CHECK:STDOUT: node+1,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
//
|
||||
// AUTOUPDATE
|
||||
// CHECK:STDOUT: cross_reference_irs_size: 1
|
||||
// CHECK:STDOUT: callables: [
|
||||
// CHECK:STDOUT: {param_refs: block2},
|
||||
// CHECK:STDOUT: {param_refs: block5},
|
||||
// CHECK:STDOUT: functions: [
|
||||
// CHECK:STDOUT: {name: str1, param_refs: block2, body: block0},
|
||||
// CHECK:STDOUT: {name: str2, param_refs: block5, body: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: integer_literals: [
|
||||
// CHECK:STDOUT: ]
|
||||
@@ -24,12 +24,10 @@
|
||||
// CHECK:STDOUT: nodes: [
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: type0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node+0, type: type0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node+2, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: function0},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: type0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node+4, type: type0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node+6, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node+3, type: type0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: function1},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
@@ -43,16 +41,14 @@
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node+2,
|
||||
// CHECK:STDOUT: node+5,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node+3,
|
||||
// CHECK:STDOUT: node+6,
|
||||
// CHECK:STDOUT: node+7,
|
||||
// CHECK:STDOUT: node+4,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node+4,
|
||||
// CHECK:STDOUT: node+5,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node+5,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user