mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-06 07:34:45 +01:00
Start reorienting the ParseTree towards a more efficient SemanticsIR production. (#2275)
In summary - some of the changes here are focused on producing the same test results for SemanticsIR, but I think the next step will be to change the SemanticsIR structure to reduce how much is added to the traversal stack.
Switching semantics to a postorder traversal is intended to be more efficient. The traversal stack is to eliminate risk of recursion limits within the semantic analysis that could come from layered code structures. However, we need to start considering the implications for type-checking and what the ParseTree looks like, as well as copying of data here.
As we start thinking about type-checking in SemanticsIR, it's helpful for a function to know its own signature in order to perform lookup recursive calls. The challenge in the post-order walk without this change is it doesn't know it's in a function definition (or similar) until it reaches the FunctionDeclaration; this restructures so that either:
1. For a declaration, the signature is a child of FunctionDeclaration(";")
2. For a definition, the signature is a child of FunctionDefinitionStart("{") which pairs with FunctionDefinition("}"), replacing CodeBlock.
This similarly reorients CodeBlock to be CodeBlockStart("{") as the first child of CodeBlock("}"). I'm not doing that with ParameterList here just because it affects a bit more, and felt like it could be delayed.
Overall, my goal is making the postorder traversal more intuitive along scope boundaries. I think we may also not need subtree_size, so I'm avoiding use of that now.
Currently the SemanticsIRFactory implementation is less clean than I might like (there are a couple comments to this point), but I was starting to feel like a more complete rewrite would be appropriate rather than trying to clean it up further: in particular, I think the node structures are off, but changing them is significant and also changes test output; in turn it may also warrant more substantial ParseTree changes. If you prefer from a reviewer POV, I can do a more complete rewrite.
This commit is contained in:
@@ -5,11 +5,11 @@
|
||||
// AUTOUPDATE
|
||||
// RUN: %{carbon-run-parser}
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'FunctionDeclaration', text: 'fn', subtree_size: 5, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'DeclaredName', text: 'F'},
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'ParameterList', text: '(', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'ParameterListEnd', text: ')'}]},
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'DeclarationEnd', text: ';'}]},
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'FunctionDeclaration', text: ';', subtree_size: 5, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionIntroducer', text: 'fn'},
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'DeclaredName', text: 'F'},
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'ParameterList', text: '(', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'ParameterListEnd', text: ')'}]}]},
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
+3
-3
@@ -5,9 +5,9 @@
|
||||
// AUTOUPDATE
|
||||
// RUN: %{not} %{carbon-run-parser}
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 3, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'DeclaredName', text: 'foo'},
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'DeclarationEnd', text: ';'}]},
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'FunctionDeclaration', text: ';', has_error: yes, subtree_size: 3, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionIntroducer', text: 'fn'},
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'DeclaredName', text: 'foo'}]},
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
// AUTOUPDATE
|
||||
// RUN: %{not} %{carbon-run-parser}
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'DeclarationEnd', text: ';'}]},
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'FunctionDeclaration', text: ';', has_error: yes, subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionIntroducer', text: 'fn'}]},
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -5,9 +5,10 @@
|
||||
// AUTOUPDATE
|
||||
// RUN: %{not} %{carbon-run-parser}
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'DeclaredName', text: 'foo'}]},
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 3, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionIntroducer', text: 'fn'},
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'DeclaredName', text: 'foo'}]},
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
// CHECK:STDERR: {{.*}}/toolchain/parser/testdata/function/declaration/fail_no_sig_or_semi.carbon:[[@LINE+1]]:7: Expected `(` after function name.
|
||||
|
||||
+2
-2
@@ -5,8 +5,8 @@
|
||||
// AUTOUPDATE
|
||||
// RUN: %{not} %{carbon-run-parser}
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'DeclarationEnd', text: ';'}]},
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'FunctionDeclaration', text: ';', has_error: yes, subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionIntroducer', text: 'fn'}]},
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
+2
-2
@@ -5,8 +5,8 @@
|
||||
// AUTOUPDATE
|
||||
// RUN: %{not} %{carbon-run-parser}
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'DeclarationEnd', text: ';'}]},
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'FunctionDeclaration', text: ';', has_error: yes, subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionIntroducer', text: 'fn'}]},
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
Vendored
+8
-7
@@ -5,13 +5,14 @@
|
||||
// AUTOUPDATE
|
||||
// RUN: %{not} %{carbon-run-parser}
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionDeclaration', text: 'fn', has_error: yes},
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'FunctionDeclaration', text: 'fn', subtree_size: 5, children: [
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'DeclaredName', text: 'F'},
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'ParameterList', text: '(', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'ParameterListEnd', text: ')'}]},
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'DeclarationEnd', text: ';'}]},
|
||||
// CHECK:STDOUT: {node_index: 6, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionIntroducer', text: 'fn'}]},
|
||||
// CHECK:STDOUT: {node_index: 6, kind: 'FunctionDeclaration', text: ';', subtree_size: 5, children: [
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'FunctionIntroducer', text: 'fn'},
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'DeclaredName', text: 'F'},
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'ParameterList', text: '(', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'ParameterListEnd', text: ')'}]}]},
|
||||
// CHECK:STDOUT: {node_index: 7, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
// CHECK:STDERR: {{.*}}/toolchain/parser/testdata/function/declaration/fail_skip_indented_newline_until_outdent.carbon:[[@LINE+1]]:6: Expected function name after `fn` keyword.
|
||||
|
||||
+7
-7
@@ -5,13 +5,13 @@
|
||||
// AUTOUPDATE
|
||||
// RUN: %{not} %{carbon-run-parser}
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'DeclarationEnd', text: ';'}]},
|
||||
// CHECK:STDOUT: {node_index: 6, kind: 'FunctionDeclaration', text: 'fn', subtree_size: 5, children: [
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'DeclaredName', text: 'F'},
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'ParameterList', text: '(', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'ParameterListEnd', text: ')'}]},
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'DeclarationEnd', text: ';'}]},
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'FunctionDeclaration', text: ';', has_error: yes, subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionIntroducer', text: 'fn'}]},
|
||||
// CHECK:STDOUT: {node_index: 6, kind: 'FunctionDeclaration', text: ';', subtree_size: 5, children: [
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'FunctionIntroducer', text: 'fn'},
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'DeclaredName', text: 'F'},
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'ParameterList', text: '(', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'ParameterListEnd', text: ')'}]}]},
|
||||
// CHECK:STDOUT: {node_index: 7, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
Vendored
+8
-7
@@ -5,13 +5,14 @@
|
||||
// AUTOUPDATE
|
||||
// RUN: %{not} %{carbon-run-parser}
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionDeclaration', text: 'fn', has_error: yes},
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'FunctionDeclaration', text: 'fn', subtree_size: 5, children: [
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'DeclaredName', text: 'F'},
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'ParameterList', text: '(', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'ParameterListEnd', text: ')'}]},
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'DeclarationEnd', text: ';'}]},
|
||||
// CHECK:STDOUT: {node_index: 6, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionIntroducer', text: 'fn'}]},
|
||||
// CHECK:STDOUT: {node_index: 6, kind: 'FunctionDeclaration', text: ';', subtree_size: 5, children: [
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'FunctionIntroducer', text: 'fn'},
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'DeclaredName', text: 'F'},
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'ParameterList', text: '(', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'ParameterListEnd', text: ')'}]}]},
|
||||
// CHECK:STDOUT: {node_index: 7, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
// CHECK:STDERR: {{.*}}/toolchain/parser/testdata/function/declaration/fail_skip_indented_newline_without_semi.carbon:[[@LINE+1]]:4: Expected function name after `fn` keyword.
|
||||
|
||||
+8
-7
@@ -5,13 +5,14 @@
|
||||
// AUTOUPDATE
|
||||
// RUN: %{not} %{carbon-run-parser}
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionDeclaration', text: 'fn', has_error: yes},
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'FunctionDeclaration', text: 'fn', subtree_size: 5, children: [
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'DeclaredName', text: 'F'},
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'ParameterList', text: '(', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'ParameterListEnd', text: ')'}]},
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'DeclarationEnd', text: ';'}]},
|
||||
// CHECK:STDOUT: {node_index: 6, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionIntroducer', text: 'fn'}]},
|
||||
// CHECK:STDOUT: {node_index: 6, kind: 'FunctionDeclaration', text: ';', subtree_size: 5, children: [
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'FunctionIntroducer', text: 'fn'},
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'DeclaredName', text: 'F'},
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'ParameterList', text: '(', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'ParameterListEnd', text: ')'}]}]},
|
||||
// CHECK:STDOUT: {node_index: 7, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
// CHECK:STDERR: {{.*}}/toolchain/parser/testdata/function/declaration/fail_skip_to_newline_without_semi.carbon:[[@LINE+1]]:4: Expected function name after `fn` keyword.
|
||||
|
||||
+5
-5
@@ -5,11 +5,11 @@
|
||||
// AUTOUPDATE
|
||||
// RUN: %{not} %{carbon-run-parser}
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'FunctionDeclaration', text: 'fn', subtree_size: 5, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'DeclaredName', text: 'F'},
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'ParameterList', text: '(', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'ParameterListEnd', text: ')'}]},
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'DeclarationEnd', text: ';'}]},
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'FunctionDeclaration', text: ';', subtree_size: 5, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionIntroducer', text: 'fn'},
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'DeclaredName', text: 'F'},
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'ParameterList', text: '(', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'ParameterListEnd', text: ')'}]}]},
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
+5
-5
@@ -5,11 +5,11 @@
|
||||
// AUTOUPDATE
|
||||
// RUN: %{not} %{carbon-run-parser}
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'FunctionDeclaration', text: 'fn', subtree_size: 5, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'DeclaredName', text: 'foo'},
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'ParameterList', text: '(', has_error: yes, subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'ParameterListEnd', text: ')'}]},
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'DeclarationEnd', text: ';'}]},
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'FunctionDeclaration', text: ';', subtree_size: 5, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionIntroducer', text: 'fn'},
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'DeclaredName', text: 'foo'},
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'ParameterList', text: '(', has_error: yes, subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'ParameterListEnd', text: ')'}]}]},
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
Vendored
+2
-2
@@ -5,8 +5,8 @@
|
||||
// AUTOUPDATE
|
||||
// RUN: %{not} %{carbon-run-parser}
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'FunctionDeclaration', text: 'fn', has_error: yes, subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'DeclarationEnd', text: ';'}]},
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'FunctionDeclaration', text: ';', has_error: yes, subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionIntroducer', text: 'fn'}]},
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -5,18 +5,18 @@
|
||||
// AUTOUPDATE
|
||||
// RUN: %{carbon-run-parser}
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: {node_index: 11, kind: 'FunctionDeclaration', text: 'fn', subtree_size: 12, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'DeclaredName', text: 'foo'},
|
||||
// CHECK:STDOUT: {node_index: 9, kind: 'ParameterList', text: '(', subtree_size: 9, children: [
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'PatternBinding', text: ':', subtree_size: 3, children: [
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'DeclaredName', text: 'bar'},
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'Literal', text: 'i32'}]},
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'ParameterListComma', text: ','},
|
||||
// CHECK:STDOUT: {node_index: 7, kind: 'PatternBinding', text: ':', subtree_size: 3, children: [
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'DeclaredName', text: 'baz'},
|
||||
// CHECK:STDOUT: {node_index: 6, kind: 'Literal', text: 'i32'}]},
|
||||
// CHECK:STDOUT: {node_index: 8, kind: 'ParameterListEnd', text: ')'}]},
|
||||
// CHECK:STDOUT: {node_index: 10, kind: 'DeclarationEnd', text: ';'}]},
|
||||
// CHECK:STDOUT: {node_index: 11, kind: 'FunctionDeclaration', text: ';', subtree_size: 12, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionIntroducer', text: 'fn'},
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'DeclaredName', text: 'foo'},
|
||||
// CHECK:STDOUT: {node_index: 10, kind: 'ParameterList', text: '(', subtree_size: 9, children: [
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'PatternBinding', text: ':', subtree_size: 3, children: [
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'DeclaredName', text: 'bar'},
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'Literal', text: 'i32'}]},
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'ParameterListComma', text: ','},
|
||||
// CHECK:STDOUT: {node_index: 8, kind: 'PatternBinding', text: ':', subtree_size: 3, children: [
|
||||
// CHECK:STDOUT: {node_index: 6, kind: 'DeclaredName', text: 'baz'},
|
||||
// CHECK:STDOUT: {node_index: 7, kind: 'Literal', text: 'i32'}]},
|
||||
// CHECK:STDOUT: {node_index: 9, kind: 'ParameterListEnd', text: ')'}]}]},
|
||||
// CHECK:STDOUT: {node_index: 12, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -5,13 +5,13 @@
|
||||
// AUTOUPDATE
|
||||
// RUN: %{carbon-run-parser}
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: {node_index: 6, kind: 'FunctionDeclaration', text: 'fn', subtree_size: 7, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'DeclaredName', text: 'foo'},
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'ParameterList', text: '(', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'ParameterListEnd', text: ')'}]},
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'ReturnType', text: '->', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'Literal', text: 'u32'}]},
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'DeclarationEnd', text: ';'}]},
|
||||
// CHECK:STDOUT: {node_index: 6, kind: 'FunctionDeclaration', text: ';', subtree_size: 7, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionIntroducer', text: 'fn'},
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'DeclaredName', text: 'foo'},
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'ParameterList', text: '(', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'ParameterListEnd', text: ')'}]},
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'ReturnType', text: '->', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'Literal', text: 'u32'}]}]},
|
||||
// CHECK:STDOUT: {node_index: 7, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -5,12 +5,12 @@
|
||||
// AUTOUPDATE
|
||||
// RUN: %{carbon-run-parser}
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'FunctionDeclaration', text: 'fn', subtree_size: 6, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'DeclaredName', text: 'F'},
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'ParameterList', text: '(', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'ParameterListEnd', text: ')'}]},
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'CodeBlock', text: '{', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'CodeBlockEnd', text: '}'}]}]},
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'FunctionDefinition', text: '}', subtree_size: 6, children: [
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionIntroducer', text: 'fn'},
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'DeclaredName', text: 'F'},
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'ParameterList', text: '(', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'ParameterListEnd', text: ')'}]}]}]},
|
||||
// CHECK:STDOUT: {node_index: 6, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
+7
-7
@@ -5,13 +5,13 @@
|
||||
// AUTOUPDATE
|
||||
// RUN: %{not} %{carbon-run-parser}
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: {node_index: 6, kind: 'FunctionDeclaration', text: 'fn', subtree_size: 7, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'DeclaredName', text: 'F'},
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'ParameterList', text: '(', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'ParameterListEnd', text: ')'}]},
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'CodeBlock', text: '{', has_error: yes, subtree_size: 3, children: [
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'NameReference', text: 'bar'},
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'CodeBlockEnd', text: '}'}]}]},
|
||||
// CHECK:STDOUT: {node_index: 6, kind: 'FunctionDefinition', text: '}', has_error: yes, subtree_size: 7, children: [
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'FunctionDefinitionStart', text: '{', subtree_size: 5, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionIntroducer', text: 'fn'},
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'DeclaredName', text: 'F'},
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'ParameterList', text: '(', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'ParameterListEnd', text: ')'}]}]},
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'NameReference', text: 'bar'}]},
|
||||
// CHECK:STDOUT: {node_index: 7, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -5,28 +5,28 @@
|
||||
// AUTOUPDATE
|
||||
// RUN: %{carbon-run-parser}
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: {node_index: 21, kind: 'FunctionDeclaration', text: 'fn', subtree_size: 22, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'DeclaredName', text: 'foo'},
|
||||
// CHECK:STDOUT: {node_index: 9, kind: 'ParameterList', text: '(', subtree_size: 9, children: [
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'PatternBinding', text: ':', subtree_size: 3, children: [
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'DeclaredName', text: 'bar'},
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'Literal', text: 'i64'}]},
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'ParameterListComma', text: ','},
|
||||
// CHECK:STDOUT: {node_index: 7, kind: 'PatternBinding', text: ':', subtree_size: 3, children: [
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'DeclaredName', text: 'baz'},
|
||||
// CHECK:STDOUT: {node_index: 6, kind: 'Literal', text: 'i64'}]},
|
||||
// CHECK:STDOUT: {node_index: 8, kind: 'ParameterListEnd', text: ')'}]},
|
||||
// CHECK:STDOUT: {node_index: 20, kind: 'CodeBlock', text: '{', subtree_size: 11, children: [
|
||||
// CHECK:STDOUT: {node_index: 18, kind: 'ExpressionStatement', text: ';', subtree_size: 9, children: [
|
||||
// CHECK:STDOUT: {node_index: 17, kind: 'CallExpression', text: '(', subtree_size: 8, children: [
|
||||
// CHECK:STDOUT: {node_index: 10, kind: 'NameReference', text: 'foo'},
|
||||
// CHECK:STDOUT: {node_index: 11, kind: 'NameReference', text: 'baz'},
|
||||
// CHECK:STDOUT: {node_index: 12, kind: 'CallExpressionComma', text: ','},
|
||||
// CHECK:STDOUT: {node_index: 15, kind: 'InfixOperator', text: '+', subtree_size: 3, children: [
|
||||
// CHECK:STDOUT: {node_index: 13, kind: 'NameReference', text: 'bar'},
|
||||
// CHECK:STDOUT: {node_index: 14, kind: 'NameReference', text: 'baz'}]},
|
||||
// CHECK:STDOUT: {node_index: 16, kind: 'CallExpressionEnd', text: ')'}]}]},
|
||||
// CHECK:STDOUT: {node_index: 19, kind: 'CodeBlockEnd', text: '}'}]}]},
|
||||
// CHECK:STDOUT: {node_index: 21, kind: 'FunctionDefinition', text: '}', subtree_size: 22, children: [
|
||||
// CHECK:STDOUT: {node_index: 11, kind: 'FunctionDefinitionStart', text: '{', subtree_size: 12, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionIntroducer', text: 'fn'},
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'DeclaredName', text: 'foo'},
|
||||
// CHECK:STDOUT: {node_index: 10, kind: 'ParameterList', text: '(', subtree_size: 9, children: [
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'PatternBinding', text: ':', subtree_size: 3, children: [
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'DeclaredName', text: 'bar'},
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'Literal', text: 'i64'}]},
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'ParameterListComma', text: ','},
|
||||
// CHECK:STDOUT: {node_index: 8, kind: 'PatternBinding', text: ':', subtree_size: 3, children: [
|
||||
// CHECK:STDOUT: {node_index: 6, kind: 'DeclaredName', text: 'baz'},
|
||||
// CHECK:STDOUT: {node_index: 7, kind: 'Literal', text: 'i64'}]},
|
||||
// CHECK:STDOUT: {node_index: 9, kind: 'ParameterListEnd', text: ')'}]}]},
|
||||
// CHECK:STDOUT: {node_index: 20, kind: 'ExpressionStatement', text: ';', subtree_size: 9, children: [
|
||||
// CHECK:STDOUT: {node_index: 19, kind: 'CallExpression', text: '(', subtree_size: 8, children: [
|
||||
// CHECK:STDOUT: {node_index: 12, kind: 'NameReference', text: 'foo'},
|
||||
// CHECK:STDOUT: {node_index: 13, kind: 'NameReference', text: 'baz'},
|
||||
// CHECK:STDOUT: {node_index: 14, kind: 'CallExpressionComma', text: ','},
|
||||
// CHECK:STDOUT: {node_index: 17, kind: 'InfixOperator', text: '+', subtree_size: 3, children: [
|
||||
// CHECK:STDOUT: {node_index: 15, kind: 'NameReference', text: 'bar'},
|
||||
// CHECK:STDOUT: {node_index: 16, kind: 'NameReference', text: 'baz'}]},
|
||||
// CHECK:STDOUT: {node_index: 18, kind: 'CallExpressionEnd', text: ')'}]}]}]},
|
||||
// CHECK:STDOUT: {node_index: 22, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -5,17 +5,17 @@
|
||||
// AUTOUPDATE
|
||||
// RUN: %{carbon-run-parser}
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: {node_index: 10, kind: 'FunctionDeclaration', text: 'fn', subtree_size: 11, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'DeclaredName', text: 'foo'},
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'ParameterList', text: '(', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'ParameterListEnd', text: ')'}]},
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'ReturnType', text: '->', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'Literal', text: 'f64'}]},
|
||||
// CHECK:STDOUT: {node_index: 9, kind: 'CodeBlock', text: '{', subtree_size: 5, children: [
|
||||
// CHECK:STDOUT: {node_index: 7, kind: 'ReturnStatement', text: 'return', subtree_size: 3, children: [
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'Literal', text: '42'},
|
||||
// CHECK:STDOUT: {node_index: 6, kind: 'StatementEnd', text: ';'}]},
|
||||
// CHECK:STDOUT: {node_index: 8, kind: 'CodeBlockEnd', text: '}'}]}]},
|
||||
// CHECK:STDOUT: {node_index: 10, kind: 'FunctionDefinition', text: '}', subtree_size: 11, children: [
|
||||
// CHECK:STDOUT: {node_index: 6, kind: 'FunctionDefinitionStart', text: '{', subtree_size: 7, children: [
|
||||
// CHECK:STDOUT: {node_index: 0, kind: 'FunctionIntroducer', text: 'fn'},
|
||||
// CHECK:STDOUT: {node_index: 1, kind: 'DeclaredName', text: 'foo'},
|
||||
// CHECK:STDOUT: {node_index: 3, kind: 'ParameterList', text: '(', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 2, kind: 'ParameterListEnd', text: ')'}]},
|
||||
// CHECK:STDOUT: {node_index: 5, kind: 'ReturnType', text: '->', subtree_size: 2, children: [
|
||||
// CHECK:STDOUT: {node_index: 4, kind: 'Literal', text: 'f64'}]}]},
|
||||
// CHECK:STDOUT: {node_index: 9, kind: 'ReturnStatement', text: 'return', subtree_size: 3, children: [
|
||||
// CHECK:STDOUT: {node_index: 7, kind: 'Literal', text: '42'},
|
||||
// CHECK:STDOUT: {node_index: 8, kind: 'StatementEnd', text: ';'}]}]},
|
||||
// CHECK:STDOUT: {node_index: 11, kind: 'FileEnd', text: ''},
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user