mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 11:21:05 +01:00
Add initial lowering of a trivial function (#2640)
This is starting to build out actual lowering logic, for a really simple `fn Main() -> i32 { return 0; }`
Notes for achieving this:
- In semantics, currently function names are bound separate from the signature. When emitting IR, this turns out to be inconvenient because we want to know the name when we process the declaration and the definition. This change addresses that by merging the name into the FunctionDeclaration node, which is also accessible from the definition. It removes the separate BindName. This should be the cause of all the test changes in semantics, because the IR generated changes.
- Add a "Lowering" class which I'm using to hold the llvm builder state. This class now has minimal support for the SemanticsIR generated by the above example.
- In the "Lowering", values from expressions are stored in a DenseMap. I'll keep thinking about whether there's a cleaner way to achieve this, and I'd call it a temporary solution for now. However, this is how the `0` in `return 0` gets properly associated across SemanticsIR instructions, and it'll frequently be an issue in less trivial cases.
This commit is contained in:
@@ -39,30 +39,26 @@
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node10, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node12},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node12, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node15, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node13, type: node2},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str3, arg1: node17, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str4, arg1: node19},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node19, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable3},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str5, arg1: node22},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str3, arg1: node15, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str4, arg1: callable2},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node17, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str5, arg1: callable3},
|
||||
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2},
|
||||
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2},
|
||||
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int2, type: node2},
|
||||
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int3, type: node2},
|
||||
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int4, type: node2},
|
||||
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int5, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node22, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node19, arg1: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
@@ -70,61 +66,57 @@
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node7,
|
||||
// CHECK:STDOUT: node8,
|
||||
// CHECK:STDOUT: node9,
|
||||
// CHECK:STDOUT: node11,
|
||||
// CHECK:STDOUT: node12,
|
||||
// CHECK:STDOUT: node13,
|
||||
// CHECK:STDOUT: node14,
|
||||
// CHECK:STDOUT: node17,
|
||||
// CHECK:STDOUT: node18,
|
||||
// CHECK:STDOUT: node19,
|
||||
// CHECK:STDOUT: node20,
|
||||
// CHECK:STDOUT: node21,
|
||||
// CHECK:STDOUT: node22,
|
||||
// CHECK:STDOUT: node23,
|
||||
// CHECK:STDOUT: node30,
|
||||
// CHECK:STDOUT: node26,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node9,
|
||||
// CHECK:STDOUT: node10,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node10,
|
||||
// CHECK:STDOUT: node11,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node11,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node13,
|
||||
// CHECK:STDOUT: node14,
|
||||
// CHECK:STDOUT: node15,
|
||||
// CHECK:STDOUT: node16,
|
||||
// CHECK:STDOUT: node17,
|
||||
// CHECK:STDOUT: node18,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node14,
|
||||
// CHECK:STDOUT: node16,
|
||||
// CHECK:STDOUT: node18,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node20,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node20,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node21,
|
||||
// CHECK:STDOUT: node22,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node21,
|
||||
// CHECK:STDOUT: node22,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node23,
|
||||
// CHECK:STDOUT: node24,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node23,
|
||||
// CHECK:STDOUT: node24,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node25,
|
||||
// CHECK:STDOUT: node26,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node25,
|
||||
// CHECK:STDOUT: node26,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node27,
|
||||
// CHECK:STDOUT: node28,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node27,
|
||||
// CHECK:STDOUT: node28,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node29,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node29,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -31,13 +31,11 @@
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node12},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
|
||||
// CHECK:STDOUT: {kind: RealLiteral, arg0: real0, type: node3},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node12, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
@@ -53,15 +51,13 @@
|
||||
// CHECK:STDOUT: node9,
|
||||
// CHECK:STDOUT: node10,
|
||||
// CHECK:STDOUT: node11,
|
||||
// CHECK:STDOUT: node12,
|
||||
// CHECK:STDOUT: node13,
|
||||
// CHECK:STDOUT: node15,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node14,
|
||||
// CHECK:STDOUT: node12,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node14,
|
||||
// CHECK:STDOUT: node12,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
+13
-17
@@ -43,22 +43,20 @@
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node11, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str3, arg1: node13},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str3, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node13, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str4, arg1: node16},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str4, arg1: callable1},
|
||||
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2},
|
||||
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2},
|
||||
// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node18, arg1: node19, type: node2},
|
||||
// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node16, arg1: node17, type: node2},
|
||||
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int2, type: node2},
|
||||
// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node20, arg1: node21, type: node2},
|
||||
// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node18, arg1: node19, type: node2},
|
||||
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int3, type: node2},
|
||||
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int4, type: node2},
|
||||
// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node23, arg1: node24, type: node2},
|
||||
// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node21, arg1: node22, type: node2},
|
||||
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int5, type: node2},
|
||||
// CHECK:STDOUT: {kind: Call, arg0: call0, arg1: callable0, type: node6},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node16, arg1: block6},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node15, arg1: block6},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
@@ -80,11 +78,11 @@
|
||||
// CHECK:STDOUT: node13,
|
||||
// CHECK:STDOUT: node14,
|
||||
// CHECK:STDOUT: node15,
|
||||
// CHECK:STDOUT: node16,
|
||||
// CHECK:STDOUT: node17,
|
||||
// CHECK:STDOUT: node28,
|
||||
// CHECK:STDOUT: node26,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node16,
|
||||
// CHECK:STDOUT: node17,
|
||||
// CHECK:STDOUT: node18,
|
||||
// CHECK:STDOUT: node19,
|
||||
// CHECK:STDOUT: node20,
|
||||
@@ -92,16 +90,14 @@
|
||||
// CHECK:STDOUT: node22,
|
||||
// CHECK:STDOUT: node23,
|
||||
// CHECK:STDOUT: node24,
|
||||
// CHECK:STDOUT: node25,
|
||||
// CHECK:STDOUT: node26,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node22,
|
||||
// CHECK:STDOUT: node25,
|
||||
// CHECK:STDOUT: node26,
|
||||
// CHECK:STDOUT: node20,
|
||||
// CHECK:STDOUT: node23,
|
||||
// CHECK:STDOUT: node24,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node27,
|
||||
// CHECK:STDOUT: node25,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
+11
-15
@@ -32,14 +32,12 @@
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node12},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
|
||||
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2},
|
||||
// CHECK:STDOUT: {kind: Call, arg0: call0, arg1: callable0, type: node6},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node12, arg1: block6},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block6},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
@@ -55,18 +53,16 @@
|
||||
// CHECK:STDOUT: node9,
|
||||
// CHECK:STDOUT: node10,
|
||||
// CHECK:STDOUT: node11,
|
||||
// CHECK:STDOUT: node14,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node12,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node12,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node13,
|
||||
// CHECK:STDOUT: node16,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node14,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node14,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node15,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -34,16 +34,14 @@
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node12},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
|
||||
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2},
|
||||
// CHECK:STDOUT: {kind: Call, arg0: call0, arg1: callable0, type: node6},
|
||||
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2},
|
||||
// CHECK:STDOUT: {kind: Call, arg0: call1, arg1: callable0, type: node6},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node12, arg1: block6},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block6},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
@@ -59,25 +57,23 @@
|
||||
// CHECK:STDOUT: node9,
|
||||
// CHECK:STDOUT: node10,
|
||||
// CHECK:STDOUT: node11,
|
||||
// CHECK:STDOUT: node16,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node12,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node12,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node13,
|
||||
// CHECK:STDOUT: node18,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node14,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node14,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node15,
|
||||
// CHECK:STDOUT: node17,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node16,
|
||||
// CHECK:STDOUT: node14,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node16,
|
||||
// CHECK:STDOUT: node14,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
+10
-14
@@ -36,15 +36,13 @@
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node11},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str3, arg1: node14},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str3, arg1: callable1},
|
||||
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2},
|
||||
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2},
|
||||
// CHECK:STDOUT: {kind: Call, arg0: call0, arg1: callable0, type: node6},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node14, arg1: block6},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node13, arg1: block6},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
@@ -63,20 +61,18 @@
|
||||
// CHECK:STDOUT: node11,
|
||||
// CHECK:STDOUT: node12,
|
||||
// CHECK:STDOUT: node13,
|
||||
// CHECK:STDOUT: node17,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node14,
|
||||
// CHECK:STDOUT: node15,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node14,
|
||||
// CHECK:STDOUT: node15,
|
||||
// CHECK:STDOUT: node19,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node16,
|
||||
// CHECK:STDOUT: node17,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node16,
|
||||
// CHECK:STDOUT: node17,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node18,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -39,18 +39,16 @@
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node11},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str3, arg1: node14},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str3, arg1: callable1},
|
||||
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2},
|
||||
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2},
|
||||
// CHECK:STDOUT: {kind: Call, arg0: call0, arg1: callable0, type: node6},
|
||||
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int2, type: node2},
|
||||
// CHECK:STDOUT: {kind: IntegerLiteral, arg0: int3, type: node2},
|
||||
// CHECK:STDOUT: {kind: Call, arg0: call1, arg1: callable0, type: node6},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node14, arg1: block6},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node13, arg1: block6},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
@@ -69,29 +67,27 @@
|
||||
// CHECK:STDOUT: node11,
|
||||
// CHECK:STDOUT: node12,
|
||||
// CHECK:STDOUT: node13,
|
||||
// CHECK:STDOUT: node20,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node14,
|
||||
// CHECK:STDOUT: node15,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node14,
|
||||
// CHECK:STDOUT: node15,
|
||||
// CHECK:STDOUT: node22,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node16,
|
||||
// CHECK:STDOUT: node17,
|
||||
// CHECK:STDOUT: node19,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node16,
|
||||
// CHECK:STDOUT: node17,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node18,
|
||||
// CHECK:STDOUT: node21,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node19,
|
||||
// CHECK:STDOUT: node20,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node19,
|
||||
// CHECK:STDOUT: node20,
|
||||
// CHECK:STDOUT: node17,
|
||||
// CHECK:STDOUT: node18,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -28,13 +28,11 @@
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node10},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable1},
|
||||
// CHECK:STDOUT: {kind: Call, arg0: call0, arg1: callable0, type: node6},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node10, arg1: block2},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block2},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
@@ -43,12 +41,10 @@
|
||||
// CHECK:STDOUT: node7,
|
||||
// CHECK:STDOUT: node8,
|
||||
// CHECK:STDOUT: node9,
|
||||
// CHECK:STDOUT: node10,
|
||||
// CHECK:STDOUT: node11,
|
||||
// CHECK:STDOUT: node13,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node12,
|
||||
// CHECK:STDOUT: node10,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
+1
-3
@@ -30,8 +30,7 @@
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node9, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node11},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
@@ -50,7 +49,6 @@
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node11,
|
||||
// CHECK:STDOUT: node12,
|
||||
// CHECK:STDOUT: node13,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -29,15 +29,12 @@
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node10},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node10, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node13},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node13, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable1},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable2},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
@@ -49,9 +46,6 @@
|
||||
// CHECK:STDOUT: node10,
|
||||
// CHECK:STDOUT: node11,
|
||||
// CHECK:STDOUT: node12,
|
||||
// CHECK:STDOUT: node13,
|
||||
// CHECK:STDOUT: node14,
|
||||
// CHECK:STDOUT: node15,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -28,8 +28,7 @@
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
@@ -45,7 +44,6 @@
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node9,
|
||||
// CHECK:STDOUT: node10,
|
||||
// CHECK:STDOUT: node11,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -28,8 +28,7 @@
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
@@ -45,7 +44,6 @@
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node9,
|
||||
// CHECK:STDOUT: node10,
|
||||
// CHECK:STDOUT: node11,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node11},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
@@ -51,7 +50,6 @@
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node11,
|
||||
// CHECK:STDOUT: node12,
|
||||
// CHECK:STDOUT: node13,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -31,8 +31,7 @@
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node11},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
@@ -51,7 +50,6 @@
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node11,
|
||||
// CHECK:STDOUT: node12,
|
||||
// CHECK:STDOUT: node13,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -25,8 +25,7 @@
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0},
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
@@ -35,7 +34,6 @@
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node7,
|
||||
// CHECK:STDOUT: node8,
|
||||
// CHECK:STDOUT: node9,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
@@ -30,14 +30,12 @@
|
||||
// CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: VarStorage, type: node2},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node12, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node14},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node14, arg1: block0},
|
||||
// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node11, type: node2},
|
||||
// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
|
||||
// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node13, arg1: block0},
|
||||
// CHECK:STDOUT: ]
|
||||
// CHECK:STDOUT: node_blocks: [
|
||||
// CHECK:STDOUT: [
|
||||
@@ -52,17 +50,15 @@
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node9,
|
||||
// CHECK:STDOUT: node10,
|
||||
// CHECK:STDOUT: node11,
|
||||
// CHECK:STDOUT: node13,
|
||||
// CHECK:STDOUT: node14,
|
||||
// CHECK:STDOUT: node15,
|
||||
// CHECK:STDOUT: node16,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node11,
|
||||
// CHECK:STDOUT: node12,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node12,
|
||||
// CHECK:STDOUT: node13,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: [
|
||||
// CHECK:STDOUT: node13,
|
||||
// CHECK:STDOUT: ],
|
||||
// CHECK:STDOUT: ]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user