mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-06 07:14:42 +01:00
Switch modifiers to use distinct parse nodes. (#3461)
This is supporting a direction that all parse nodes should correspond to a single token, allowing for reduced tokenized buffer access during checking (it's still necessary for diagnostics, and some literals). One of the justifications for a unified parse node was implementation LOC: note this is slightly smaller, using macros to reduce some duplication. While this does add more switching in HandleDeclScopeLoop, that's offset by less explicit switching in the check handlers. Also, I think the duplication in HandleDeclScopeLoop can be reduced by shifting the flow there, which I'll do in a separate PR.
This commit is contained in:
@@ -13,29 +13,29 @@ private impl default fn I();
|
||||
// CHECK:STDOUT: parse_tree: [
|
||||
// CHECK:STDOUT: {kind: 'FileStart', text: ''},
|
||||
// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'},
|
||||
// CHECK:STDOUT: {kind: 'DeclModifierKeyword', text: 'impl'},
|
||||
// CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'},
|
||||
// CHECK:STDOUT: {kind: 'Name', text: 'F'},
|
||||
// CHECK:STDOUT: {kind: 'ParamListStart', text: '('},
|
||||
// CHECK:STDOUT: {kind: 'ParamList', text: ')', subtree_size: 2},
|
||||
// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 6},
|
||||
// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'},
|
||||
// CHECK:STDOUT: {kind: 'DeclModifierKeyword', text: 'abstract'},
|
||||
// CHECK:STDOUT: {kind: 'DeclModifierKeyword', text: 'impl'},
|
||||
// CHECK:STDOUT: {kind: 'AbstractModifier', text: 'abstract'},
|
||||
// CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'},
|
||||
// CHECK:STDOUT: {kind: 'Name', text: 'G'},
|
||||
// CHECK:STDOUT: {kind: 'ParamListStart', text: '('},
|
||||
// CHECK:STDOUT: {kind: 'ParamList', text: ')', subtree_size: 2},
|
||||
// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 7},
|
||||
// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'},
|
||||
// CHECK:STDOUT: {kind: 'DeclModifierKeyword', text: 'impl'},
|
||||
// CHECK:STDOUT: {kind: 'DeclModifierKeyword', text: 'abstract'},
|
||||
// CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'},
|
||||
// CHECK:STDOUT: {kind: 'AbstractModifier', text: 'abstract'},
|
||||
// CHECK:STDOUT: {kind: 'Name', text: 'H'},
|
||||
// CHECK:STDOUT: {kind: 'ParamListStart', text: '('},
|
||||
// CHECK:STDOUT: {kind: 'ParamList', text: ')', subtree_size: 2},
|
||||
// CHECK:STDOUT: {kind: 'FunctionDecl', text: ';', subtree_size: 7},
|
||||
// CHECK:STDOUT: {kind: 'FunctionIntroducer', text: 'fn'},
|
||||
// CHECK:STDOUT: {kind: 'AccessModifierKeyword', text: 'private'},
|
||||
// CHECK:STDOUT: {kind: 'DeclModifierKeyword', text: 'impl'},
|
||||
// CHECK:STDOUT: {kind: 'DeclModifierKeyword', text: 'default'},
|
||||
// CHECK:STDOUT: {kind: 'PrivateModifier', text: 'private'},
|
||||
// CHECK:STDOUT: {kind: 'ImplModifier', text: 'impl'},
|
||||
// CHECK:STDOUT: {kind: 'DefaultModifier', text: 'default'},
|
||||
// CHECK:STDOUT: {kind: 'Name', text: 'I'},
|
||||
// CHECK:STDOUT: {kind: 'ParamListStart', text: '('},
|
||||
// CHECK:STDOUT: {kind: 'ParamList', text: ')', subtree_size: 2},
|
||||
|
||||
Reference in New Issue
Block a user