|
|
|
/* @generated */
|
|
|
|
digraph cfg {
|
|
|
|
"div0_getter#method#14570248362286164751.5f9f1e67fd1ac95f6c38eb7d407ea9ec_1" [label="1: Start method::div0_getter\nFormals: \nLocals: g:method::Getter x2:method::X2 \n DECLARE_LOCALS(&return,&g,&x2); [line 39, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"div0_getter#method#14570248362286164751.5f9f1e67fd1ac95f6c38eb7d407ea9ec_1" -> "div0_getter#method#14570248362286164751.5f9f1e67fd1ac95f6c38eb7d407ea9ec_5" ;
|
|
|
|
"div0_getter#method#14570248362286164751.5f9f1e67fd1ac95f6c38eb7d407ea9ec_2" [label="2: Exit method::div0_getter \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"div0_getter#method#14570248362286164751.5f9f1e67fd1ac95f6c38eb7d407ea9ec_3" [label="3: Return Stmt \n _=*&g:method::Getter [line 42, column 14]\n n$1=_fun_method::Getter_get<method::X2>(&g:method::Getter&,&x2:method::X2&) [line 42, column 14]\n *&return:int=(1 / n$1) [line 42, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div0_getter#method#14570248362286164751.5f9f1e67fd1ac95f6c38eb7d407ea9ec_3" -> "div0_getter#method#14570248362286164751.5f9f1e67fd1ac95f6c38eb7d407ea9ec_2" ;
|
[clang] enforce that `instruction` always returns one SIL expression
Summary:
Previously, the type of `trans_result` contained a list of SIL expressions.
However, most of the time we expect to get exactly one, and getting a different
number is a soft(!) error, usually returning `-1`.
This splits `trans_result` into `control`, which contains the information
needed for temporary computation (hence when we don't necessarily know the
return value yet), and a new version of `trans_result` that includes `control`,
the previous `exps` list but replaced by a single `return` expression instead,
and a couple other values that made sense to move out of `control`. This allows
some flexibility in the frontend compared to enforcing exactly one return
expression always: if they are not known yet we stick to `control` instead (see
eg `compute_controls_to_parent`).
This creates more garbage temporary identifiers, however they do not show up in
the final cfg. Instead, we see that temporary IDs are now often not
consecutive...
The most painful complication is in the treatment of `DeclRefExpr`, which was
actually returning *two* expressions: the method name and the `this` object.
Now the method name is a separate (optional) field in `trans_result`.
Reviewed By: mbouaziz
Differential Revision: D7881088
fbshipit-source-id: 41ad3b5
7 years ago
|
|
|
"div0_getter#method#14570248362286164751.5f9f1e67fd1ac95f6c38eb7d407ea9ec_4" [label="4: DeclStmt \n n$3=_fun_method::Getter_Getter(&g:method::Getter*) [line 41, column 10]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div0_getter#method#14570248362286164751.5f9f1e67fd1ac95f6c38eb7d407ea9ec_4" -> "div0_getter#method#14570248362286164751.5f9f1e67fd1ac95f6c38eb7d407ea9ec_3" ;
|
[clang] enforce that `instruction` always returns one SIL expression
Summary:
Previously, the type of `trans_result` contained a list of SIL expressions.
However, most of the time we expect to get exactly one, and getting a different
number is a soft(!) error, usually returning `-1`.
This splits `trans_result` into `control`, which contains the information
needed for temporary computation (hence when we don't necessarily know the
return value yet), and a new version of `trans_result` that includes `control`,
the previous `exps` list but replaced by a single `return` expression instead,
and a couple other values that made sense to move out of `control`. This allows
some flexibility in the frontend compared to enforcing exactly one return
expression always: if they are not known yet we stick to `control` instead (see
eg `compute_controls_to_parent`).
This creates more garbage temporary identifiers, however they do not show up in
the final cfg. Instead, we see that temporary IDs are now often not
consecutive...
The most painful complication is in the treatment of `DeclRefExpr`, which was
actually returning *two* expressions: the method name and the `this` object.
Now the method name is a separate (optional) field in `trans_result`.
Reviewed By: mbouaziz
Differential Revision: D7881088
fbshipit-source-id: 41ad3b5
7 years ago
|
|
|
"div0_getter#method#14570248362286164751.5f9f1e67fd1ac95f6c38eb7d407ea9ec_5" [label="5: DeclStmt \n n$4=_fun_method::X2_X2(&x2:method::X2*) [line 40, column 6]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div0_getter#method#14570248362286164751.5f9f1e67fd1ac95f6c38eb7d407ea9ec_5" -> "div0_getter#method#14570248362286164751.5f9f1e67fd1ac95f6c38eb7d407ea9ec_4" ;
|
|
|
|
"div0_getter_templ#method#6375326311998023520.359f49fd177ddd10abb56481c8c0c0e0_1" [label="1: Start method::div0_getter_templ\nFormals: \nLocals: g:method::GetterTempl<method::X3> x3:method::X3 x2:method::X2 \n DECLARE_LOCALS(&return,&g,&x3,&x2); [line 51, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"div0_getter_templ#method#6375326311998023520.359f49fd177ddd10abb56481c8c0c0e0_1" -> "div0_getter_templ#method#6375326311998023520.359f49fd177ddd10abb56481c8c0c0e0_6" ;
|
|
|
|
"div0_getter_templ#method#6375326311998023520.359f49fd177ddd10abb56481c8c0c0e0_2" [label="2: Exit method::div0_getter_templ \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"div0_getter_templ#method#6375326311998023520.359f49fd177ddd10abb56481c8c0c0e0_3" [label="3: Return Stmt \n _=*&g:method::GetterTempl<method::X3> [line 55, column 14]\n n$1=_fun_method::GetterTempl<method::X3>_get<method::X2>(&g:method::GetterTempl<method::X3>&,&x3:method::X3&,&x2:method::X2&) [line 55, column 14]\n *&return:int=(1 / n$1) [line 55, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div0_getter_templ#method#6375326311998023520.359f49fd177ddd10abb56481c8c0c0e0_3" -> "div0_getter_templ#method#6375326311998023520.359f49fd177ddd10abb56481c8c0c0e0_2" ;
|
[clang] enforce that `instruction` always returns one SIL expression
Summary:
Previously, the type of `trans_result` contained a list of SIL expressions.
However, most of the time we expect to get exactly one, and getting a different
number is a soft(!) error, usually returning `-1`.
This splits `trans_result` into `control`, which contains the information
needed for temporary computation (hence when we don't necessarily know the
return value yet), and a new version of `trans_result` that includes `control`,
the previous `exps` list but replaced by a single `return` expression instead,
and a couple other values that made sense to move out of `control`. This allows
some flexibility in the frontend compared to enforcing exactly one return
expression always: if they are not known yet we stick to `control` instead (see
eg `compute_controls_to_parent`).
This creates more garbage temporary identifiers, however they do not show up in
the final cfg. Instead, we see that temporary IDs are now often not
consecutive...
The most painful complication is in the treatment of `DeclRefExpr`, which was
actually returning *two* expressions: the method name and the `this` object.
Now the method name is a separate (optional) field in `trans_result`.
Reviewed By: mbouaziz
Differential Revision: D7881088
fbshipit-source-id: 41ad3b5
7 years ago
|
|
|
"div0_getter_templ#method#6375326311998023520.359f49fd177ddd10abb56481c8c0c0e0_4" [label="4: DeclStmt \n n$3=_fun_method::GetterTempl<method::X3>_GetterTempl(&g:method::GetterTempl<method::X3>*) [line 54, column 19]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div0_getter_templ#method#6375326311998023520.359f49fd177ddd10abb56481c8c0c0e0_4" -> "div0_getter_templ#method#6375326311998023520.359f49fd177ddd10abb56481c8c0c0e0_3" ;
|
[clang] enforce that `instruction` always returns one SIL expression
Summary:
Previously, the type of `trans_result` contained a list of SIL expressions.
However, most of the time we expect to get exactly one, and getting a different
number is a soft(!) error, usually returning `-1`.
This splits `trans_result` into `control`, which contains the information
needed for temporary computation (hence when we don't necessarily know the
return value yet), and a new version of `trans_result` that includes `control`,
the previous `exps` list but replaced by a single `return` expression instead,
and a couple other values that made sense to move out of `control`. This allows
some flexibility in the frontend compared to enforcing exactly one return
expression always: if they are not known yet we stick to `control` instead (see
eg `compute_controls_to_parent`).
This creates more garbage temporary identifiers, however they do not show up in
the final cfg. Instead, we see that temporary IDs are now often not
consecutive...
The most painful complication is in the treatment of `DeclRefExpr`, which was
actually returning *two* expressions: the method name and the `this` object.
Now the method name is a separate (optional) field in `trans_result`.
Reviewed By: mbouaziz
Differential Revision: D7881088
fbshipit-source-id: 41ad3b5
7 years ago
|
|
|
"div0_getter_templ#method#6375326311998023520.359f49fd177ddd10abb56481c8c0c0e0_5" [label="5: DeclStmt \n n$4=_fun_method::X3_X3(&x3:method::X3*) [line 53, column 6]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div0_getter_templ#method#6375326311998023520.359f49fd177ddd10abb56481c8c0c0e0_5" -> "div0_getter_templ#method#6375326311998023520.359f49fd177ddd10abb56481c8c0c0e0_4" ;
|
[clang] enforce that `instruction` always returns one SIL expression
Summary:
Previously, the type of `trans_result` contained a list of SIL expressions.
However, most of the time we expect to get exactly one, and getting a different
number is a soft(!) error, usually returning `-1`.
This splits `trans_result` into `control`, which contains the information
needed for temporary computation (hence when we don't necessarily know the
return value yet), and a new version of `trans_result` that includes `control`,
the previous `exps` list but replaced by a single `return` expression instead,
and a couple other values that made sense to move out of `control`. This allows
some flexibility in the frontend compared to enforcing exactly one return
expression always: if they are not known yet we stick to `control` instead (see
eg `compute_controls_to_parent`).
This creates more garbage temporary identifiers, however they do not show up in
the final cfg. Instead, we see that temporary IDs are now often not
consecutive...
The most painful complication is in the treatment of `DeclRefExpr`, which was
actually returning *two* expressions: the method name and the `this` object.
Now the method name is a separate (optional) field in `trans_result`.
Reviewed By: mbouaziz
Differential Revision: D7881088
fbshipit-source-id: 41ad3b5
7 years ago
|
|
|
"div0_getter_templ#method#6375326311998023520.359f49fd177ddd10abb56481c8c0c0e0_6" [label="6: DeclStmt \n n$5=_fun_method::X2_X2(&x2:method::X2*) [line 52, column 6]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div0_getter_templ#method#6375326311998023520.359f49fd177ddd10abb56481c8c0c0e0_6" -> "div0_getter_templ#method#6375326311998023520.359f49fd177ddd10abb56481c8c0c0e0_5" ;
|
|
|
|
"div0_getter_templ2#method#6451937884879872417.49c23913cff8a0a59e8e2158ec845f0c_1" [label="1: Start method::div0_getter_templ2\nFormals: \nLocals: g:method::GetterTempl<method::X2> x2_2:method::X2 x2_1:method::X2 \n DECLARE_LOCALS(&return,&g,&x2_2,&x2_1); [line 58, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"div0_getter_templ2#method#6451937884879872417.49c23913cff8a0a59e8e2158ec845f0c_1" -> "div0_getter_templ2#method#6451937884879872417.49c23913cff8a0a59e8e2158ec845f0c_6" ;
|
|
|
|
"div0_getter_templ2#method#6451937884879872417.49c23913cff8a0a59e8e2158ec845f0c_2" [label="2: Exit method::div0_getter_templ2 \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"div0_getter_templ2#method#6451937884879872417.49c23913cff8a0a59e8e2158ec845f0c_3" [label="3: Return Stmt \n _=*&g:method::GetterTempl<method::X2> [line 62, column 14]\n n$1=_fun_method::GetterTempl<method::X2>_get<method::X2>(&g:method::GetterTempl<method::X2>&,&x2_1:method::X2&,&x2_2:method::X2&) [line 62, column 14]\n *&return:int=(1 / n$1) [line 62, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div0_getter_templ2#method#6451937884879872417.49c23913cff8a0a59e8e2158ec845f0c_3" -> "div0_getter_templ2#method#6451937884879872417.49c23913cff8a0a59e8e2158ec845f0c_2" ;
|
[clang] enforce that `instruction` always returns one SIL expression
Summary:
Previously, the type of `trans_result` contained a list of SIL expressions.
However, most of the time we expect to get exactly one, and getting a different
number is a soft(!) error, usually returning `-1`.
This splits `trans_result` into `control`, which contains the information
needed for temporary computation (hence when we don't necessarily know the
return value yet), and a new version of `trans_result` that includes `control`,
the previous `exps` list but replaced by a single `return` expression instead,
and a couple other values that made sense to move out of `control`. This allows
some flexibility in the frontend compared to enforcing exactly one return
expression always: if they are not known yet we stick to `control` instead (see
eg `compute_controls_to_parent`).
This creates more garbage temporary identifiers, however they do not show up in
the final cfg. Instead, we see that temporary IDs are now often not
consecutive...
The most painful complication is in the treatment of `DeclRefExpr`, which was
actually returning *two* expressions: the method name and the `this` object.
Now the method name is a separate (optional) field in `trans_result`.
Reviewed By: mbouaziz
Differential Revision: D7881088
fbshipit-source-id: 41ad3b5
7 years ago
|
|
|
"div0_getter_templ2#method#6451937884879872417.49c23913cff8a0a59e8e2158ec845f0c_4" [label="4: DeclStmt \n n$3=_fun_method::GetterTempl<method::X2>_GetterTempl(&g:method::GetterTempl<method::X2>*) [line 61, column 19]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div0_getter_templ2#method#6451937884879872417.49c23913cff8a0a59e8e2158ec845f0c_4" -> "div0_getter_templ2#method#6451937884879872417.49c23913cff8a0a59e8e2158ec845f0c_3" ;
|
[clang] enforce that `instruction` always returns one SIL expression
Summary:
Previously, the type of `trans_result` contained a list of SIL expressions.
However, most of the time we expect to get exactly one, and getting a different
number is a soft(!) error, usually returning `-1`.
This splits `trans_result` into `control`, which contains the information
needed for temporary computation (hence when we don't necessarily know the
return value yet), and a new version of `trans_result` that includes `control`,
the previous `exps` list but replaced by a single `return` expression instead,
and a couple other values that made sense to move out of `control`. This allows
some flexibility in the frontend compared to enforcing exactly one return
expression always: if they are not known yet we stick to `control` instead (see
eg `compute_controls_to_parent`).
This creates more garbage temporary identifiers, however they do not show up in
the final cfg. Instead, we see that temporary IDs are now often not
consecutive...
The most painful complication is in the treatment of `DeclRefExpr`, which was
actually returning *two* expressions: the method name and the `this` object.
Now the method name is a separate (optional) field in `trans_result`.
Reviewed By: mbouaziz
Differential Revision: D7881088
fbshipit-source-id: 41ad3b5
7 years ago
|
|
|
"div0_getter_templ2#method#6451937884879872417.49c23913cff8a0a59e8e2158ec845f0c_5" [label="5: DeclStmt \n n$4=_fun_method::X2_X2(&x2_2:method::X2*) [line 60, column 6]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div0_getter_templ2#method#6451937884879872417.49c23913cff8a0a59e8e2158ec845f0c_5" -> "div0_getter_templ2#method#6451937884879872417.49c23913cff8a0a59e8e2158ec845f0c_4" ;
|
[clang] enforce that `instruction` always returns one SIL expression
Summary:
Previously, the type of `trans_result` contained a list of SIL expressions.
However, most of the time we expect to get exactly one, and getting a different
number is a soft(!) error, usually returning `-1`.
This splits `trans_result` into `control`, which contains the information
needed for temporary computation (hence when we don't necessarily know the
return value yet), and a new version of `trans_result` that includes `control`,
the previous `exps` list but replaced by a single `return` expression instead,
and a couple other values that made sense to move out of `control`. This allows
some flexibility in the frontend compared to enforcing exactly one return
expression always: if they are not known yet we stick to `control` instead (see
eg `compute_controls_to_parent`).
This creates more garbage temporary identifiers, however they do not show up in
the final cfg. Instead, we see that temporary IDs are now often not
consecutive...
The most painful complication is in the treatment of `DeclRefExpr`, which was
actually returning *two* expressions: the method name and the `this` object.
Now the method name is a separate (optional) field in `trans_result`.
Reviewed By: mbouaziz
Differential Revision: D7881088
fbshipit-source-id: 41ad3b5
7 years ago
|
|
|
"div0_getter_templ2#method#6451937884879872417.49c23913cff8a0a59e8e2158ec845f0c_6" [label="6: DeclStmt \n n$5=_fun_method::X2_X2(&x2_1:method::X2*) [line 59, column 6]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div0_getter_templ2#method#6451937884879872417.49c23913cff8a0a59e8e2158ec845f0c_6" -> "div0_getter_templ2#method#6451937884879872417.49c23913cff8a0a59e8e2158ec845f0c_5" ;
|
|
|
|
"div1_getter#method#14010655706182645930.dfb00d82a62eb9bd9507d251472215d9_1" [label="1: Start method::div1_getter\nFormals: \nLocals: g:method::Getter x1:method::X1 \n DECLARE_LOCALS(&return,&g,&x1); [line 45, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"div1_getter#method#14010655706182645930.dfb00d82a62eb9bd9507d251472215d9_1" -> "div1_getter#method#14010655706182645930.dfb00d82a62eb9bd9507d251472215d9_5" ;
|
|
|
|
"div1_getter#method#14010655706182645930.dfb00d82a62eb9bd9507d251472215d9_2" [label="2: Exit method::div1_getter \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"div1_getter#method#14010655706182645930.dfb00d82a62eb9bd9507d251472215d9_3" [label="3: Return Stmt \n _=*&g:method::Getter [line 48, column 14]\n n$1=_fun_method::Getter_get<method::X1>(&g:method::Getter&,&x1:method::X1&) [line 48, column 14]\n *&return:int=(1 / n$1) [line 48, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div1_getter#method#14010655706182645930.dfb00d82a62eb9bd9507d251472215d9_3" -> "div1_getter#method#14010655706182645930.dfb00d82a62eb9bd9507d251472215d9_2" ;
|
[clang] enforce that `instruction` always returns one SIL expression
Summary:
Previously, the type of `trans_result` contained a list of SIL expressions.
However, most of the time we expect to get exactly one, and getting a different
number is a soft(!) error, usually returning `-1`.
This splits `trans_result` into `control`, which contains the information
needed for temporary computation (hence when we don't necessarily know the
return value yet), and a new version of `trans_result` that includes `control`,
the previous `exps` list but replaced by a single `return` expression instead,
and a couple other values that made sense to move out of `control`. This allows
some flexibility in the frontend compared to enforcing exactly one return
expression always: if they are not known yet we stick to `control` instead (see
eg `compute_controls_to_parent`).
This creates more garbage temporary identifiers, however they do not show up in
the final cfg. Instead, we see that temporary IDs are now often not
consecutive...
The most painful complication is in the treatment of `DeclRefExpr`, which was
actually returning *two* expressions: the method name and the `this` object.
Now the method name is a separate (optional) field in `trans_result`.
Reviewed By: mbouaziz
Differential Revision: D7881088
fbshipit-source-id: 41ad3b5
7 years ago
|
|
|
"div1_getter#method#14010655706182645930.dfb00d82a62eb9bd9507d251472215d9_4" [label="4: DeclStmt \n n$3=_fun_method::Getter_Getter(&g:method::Getter*) [line 47, column 10]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div1_getter#method#14010655706182645930.dfb00d82a62eb9bd9507d251472215d9_4" -> "div1_getter#method#14010655706182645930.dfb00d82a62eb9bd9507d251472215d9_3" ;
|
[clang] enforce that `instruction` always returns one SIL expression
Summary:
Previously, the type of `trans_result` contained a list of SIL expressions.
However, most of the time we expect to get exactly one, and getting a different
number is a soft(!) error, usually returning `-1`.
This splits `trans_result` into `control`, which contains the information
needed for temporary computation (hence when we don't necessarily know the
return value yet), and a new version of `trans_result` that includes `control`,
the previous `exps` list but replaced by a single `return` expression instead,
and a couple other values that made sense to move out of `control`. This allows
some flexibility in the frontend compared to enforcing exactly one return
expression always: if they are not known yet we stick to `control` instead (see
eg `compute_controls_to_parent`).
This creates more garbage temporary identifiers, however they do not show up in
the final cfg. Instead, we see that temporary IDs are now often not
consecutive...
The most painful complication is in the treatment of `DeclRefExpr`, which was
actually returning *two* expressions: the method name and the `this` object.
Now the method name is a separate (optional) field in `trans_result`.
Reviewed By: mbouaziz
Differential Revision: D7881088
fbshipit-source-id: 41ad3b5
7 years ago
|
|
|
"div1_getter#method#14010655706182645930.dfb00d82a62eb9bd9507d251472215d9_5" [label="5: DeclStmt \n n$4=_fun_method::X1_X1(&x1:method::X1*) [line 46, column 6]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div1_getter#method#14010655706182645930.dfb00d82a62eb9bd9507d251472215d9_5" -> "div1_getter#method#14010655706182645930.dfb00d82a62eb9bd9507d251472215d9_4" ;
|
|
|
|
"div1_getter_templ#method#11958064193628013457.8a8112afb18681951fdb43c93893e0c5_1" [label="1: Start method::div1_getter_templ\nFormals: \nLocals: g:method::GetterTempl<method::X2> x2:method::X2 x1:method::X1 \n DECLARE_LOCALS(&return,&g,&x2,&x1); [line 65, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"div1_getter_templ#method#11958064193628013457.8a8112afb18681951fdb43c93893e0c5_1" -> "div1_getter_templ#method#11958064193628013457.8a8112afb18681951fdb43c93893e0c5_6" ;
|
|
|
|
"div1_getter_templ#method#11958064193628013457.8a8112afb18681951fdb43c93893e0c5_2" [label="2: Exit method::div1_getter_templ \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"div1_getter_templ#method#11958064193628013457.8a8112afb18681951fdb43c93893e0c5_3" [label="3: Return Stmt \n _=*&g:method::GetterTempl<method::X2> [line 69, column 14]\n n$1=_fun_method::GetterTempl<method::X2>_get<method::X1>(&g:method::GetterTempl<method::X2>&,&x2:method::X2&,&x1:method::X1&) [line 69, column 14]\n *&return:int=(1 / n$1) [line 69, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div1_getter_templ#method#11958064193628013457.8a8112afb18681951fdb43c93893e0c5_3" -> "div1_getter_templ#method#11958064193628013457.8a8112afb18681951fdb43c93893e0c5_2" ;
|
[clang] enforce that `instruction` always returns one SIL expression
Summary:
Previously, the type of `trans_result` contained a list of SIL expressions.
However, most of the time we expect to get exactly one, and getting a different
number is a soft(!) error, usually returning `-1`.
This splits `trans_result` into `control`, which contains the information
needed for temporary computation (hence when we don't necessarily know the
return value yet), and a new version of `trans_result` that includes `control`,
the previous `exps` list but replaced by a single `return` expression instead,
and a couple other values that made sense to move out of `control`. This allows
some flexibility in the frontend compared to enforcing exactly one return
expression always: if they are not known yet we stick to `control` instead (see
eg `compute_controls_to_parent`).
This creates more garbage temporary identifiers, however they do not show up in
the final cfg. Instead, we see that temporary IDs are now often not
consecutive...
The most painful complication is in the treatment of `DeclRefExpr`, which was
actually returning *two* expressions: the method name and the `this` object.
Now the method name is a separate (optional) field in `trans_result`.
Reviewed By: mbouaziz
Differential Revision: D7881088
fbshipit-source-id: 41ad3b5
7 years ago
|
|
|
"div1_getter_templ#method#11958064193628013457.8a8112afb18681951fdb43c93893e0c5_4" [label="4: DeclStmt \n n$3=_fun_method::GetterTempl<method::X2>_GetterTempl(&g:method::GetterTempl<method::X2>*) [line 68, column 19]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div1_getter_templ#method#11958064193628013457.8a8112afb18681951fdb43c93893e0c5_4" -> "div1_getter_templ#method#11958064193628013457.8a8112afb18681951fdb43c93893e0c5_3" ;
|
[clang] enforce that `instruction` always returns one SIL expression
Summary:
Previously, the type of `trans_result` contained a list of SIL expressions.
However, most of the time we expect to get exactly one, and getting a different
number is a soft(!) error, usually returning `-1`.
This splits `trans_result` into `control`, which contains the information
needed for temporary computation (hence when we don't necessarily know the
return value yet), and a new version of `trans_result` that includes `control`,
the previous `exps` list but replaced by a single `return` expression instead,
and a couple other values that made sense to move out of `control`. This allows
some flexibility in the frontend compared to enforcing exactly one return
expression always: if they are not known yet we stick to `control` instead (see
eg `compute_controls_to_parent`).
This creates more garbage temporary identifiers, however they do not show up in
the final cfg. Instead, we see that temporary IDs are now often not
consecutive...
The most painful complication is in the treatment of `DeclRefExpr`, which was
actually returning *two* expressions: the method name and the `this` object.
Now the method name is a separate (optional) field in `trans_result`.
Reviewed By: mbouaziz
Differential Revision: D7881088
fbshipit-source-id: 41ad3b5
7 years ago
|
|
|
"div1_getter_templ#method#11958064193628013457.8a8112afb18681951fdb43c93893e0c5_5" [label="5: DeclStmt \n n$4=_fun_method::X2_X2(&x2:method::X2*) [line 67, column 6]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div1_getter_templ#method#11958064193628013457.8a8112afb18681951fdb43c93893e0c5_5" -> "div1_getter_templ#method#11958064193628013457.8a8112afb18681951fdb43c93893e0c5_4" ;
|
[clang] enforce that `instruction` always returns one SIL expression
Summary:
Previously, the type of `trans_result` contained a list of SIL expressions.
However, most of the time we expect to get exactly one, and getting a different
number is a soft(!) error, usually returning `-1`.
This splits `trans_result` into `control`, which contains the information
needed for temporary computation (hence when we don't necessarily know the
return value yet), and a new version of `trans_result` that includes `control`,
the previous `exps` list but replaced by a single `return` expression instead,
and a couple other values that made sense to move out of `control`. This allows
some flexibility in the frontend compared to enforcing exactly one return
expression always: if they are not known yet we stick to `control` instead (see
eg `compute_controls_to_parent`).
This creates more garbage temporary identifiers, however they do not show up in
the final cfg. Instead, we see that temporary IDs are now often not
consecutive...
The most painful complication is in the treatment of `DeclRefExpr`, which was
actually returning *two* expressions: the method name and the `this` object.
Now the method name is a separate (optional) field in `trans_result`.
Reviewed By: mbouaziz
Differential Revision: D7881088
fbshipit-source-id: 41ad3b5
7 years ago
|
|
|
"div1_getter_templ#method#11958064193628013457.8a8112afb18681951fdb43c93893e0c5_6" [label="6: DeclStmt \n n$5=_fun_method::X1_X1(&x1:method::X1*) [line 66, column 6]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div1_getter_templ#method#11958064193628013457.8a8112afb18681951fdb43c93893e0c5_6" -> "div1_getter_templ#method#11958064193628013457.8a8112afb18681951fdb43c93893e0c5_5" ;
|
|
|
|
"div1_getter_templ2#method#7327429174804405806.fe61550d5271fa95726c7580c68f9015_1" [label="1: Start method::div1_getter_templ2\nFormals: \nLocals: g:method::GetterTempl<method::X1> x1_2:method::X1 x1_1:method::X1 \n DECLARE_LOCALS(&return,&g,&x1_2,&x1_1); [line 72, column 1]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"div1_getter_templ2#method#7327429174804405806.fe61550d5271fa95726c7580c68f9015_1" -> "div1_getter_templ2#method#7327429174804405806.fe61550d5271fa95726c7580c68f9015_6" ;
|
|
|
|
"div1_getter_templ2#method#7327429174804405806.fe61550d5271fa95726c7580c68f9015_2" [label="2: Exit method::div1_getter_templ2 \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"div1_getter_templ2#method#7327429174804405806.fe61550d5271fa95726c7580c68f9015_3" [label="3: Return Stmt \n _=*&g:method::GetterTempl<method::X1> [line 76, column 14]\n n$1=_fun_method::GetterTempl<method::X1>_get<method::X1>(&g:method::GetterTempl<method::X1>&,&x1_1:method::X1&,&x1_2:method::X1&) [line 76, column 14]\n *&return:int=(1 / n$1) [line 76, column 3]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div1_getter_templ2#method#7327429174804405806.fe61550d5271fa95726c7580c68f9015_3" -> "div1_getter_templ2#method#7327429174804405806.fe61550d5271fa95726c7580c68f9015_2" ;
|
[clang] enforce that `instruction` always returns one SIL expression
Summary:
Previously, the type of `trans_result` contained a list of SIL expressions.
However, most of the time we expect to get exactly one, and getting a different
number is a soft(!) error, usually returning `-1`.
This splits `trans_result` into `control`, which contains the information
needed for temporary computation (hence when we don't necessarily know the
return value yet), and a new version of `trans_result` that includes `control`,
the previous `exps` list but replaced by a single `return` expression instead,
and a couple other values that made sense to move out of `control`. This allows
some flexibility in the frontend compared to enforcing exactly one return
expression always: if they are not known yet we stick to `control` instead (see
eg `compute_controls_to_parent`).
This creates more garbage temporary identifiers, however they do not show up in
the final cfg. Instead, we see that temporary IDs are now often not
consecutive...
The most painful complication is in the treatment of `DeclRefExpr`, which was
actually returning *two* expressions: the method name and the `this` object.
Now the method name is a separate (optional) field in `trans_result`.
Reviewed By: mbouaziz
Differential Revision: D7881088
fbshipit-source-id: 41ad3b5
7 years ago
|
|
|
"div1_getter_templ2#method#7327429174804405806.fe61550d5271fa95726c7580c68f9015_4" [label="4: DeclStmt \n n$3=_fun_method::GetterTempl<method::X1>_GetterTempl(&g:method::GetterTempl<method::X1>*) [line 75, column 19]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div1_getter_templ2#method#7327429174804405806.fe61550d5271fa95726c7580c68f9015_4" -> "div1_getter_templ2#method#7327429174804405806.fe61550d5271fa95726c7580c68f9015_3" ;
|
[clang] enforce that `instruction` always returns one SIL expression
Summary:
Previously, the type of `trans_result` contained a list of SIL expressions.
However, most of the time we expect to get exactly one, and getting a different
number is a soft(!) error, usually returning `-1`.
This splits `trans_result` into `control`, which contains the information
needed for temporary computation (hence when we don't necessarily know the
return value yet), and a new version of `trans_result` that includes `control`,
the previous `exps` list but replaced by a single `return` expression instead,
and a couple other values that made sense to move out of `control`. This allows
some flexibility in the frontend compared to enforcing exactly one return
expression always: if they are not known yet we stick to `control` instead (see
eg `compute_controls_to_parent`).
This creates more garbage temporary identifiers, however they do not show up in
the final cfg. Instead, we see that temporary IDs are now often not
consecutive...
The most painful complication is in the treatment of `DeclRefExpr`, which was
actually returning *two* expressions: the method name and the `this` object.
Now the method name is a separate (optional) field in `trans_result`.
Reviewed By: mbouaziz
Differential Revision: D7881088
fbshipit-source-id: 41ad3b5
7 years ago
|
|
|
"div1_getter_templ2#method#7327429174804405806.fe61550d5271fa95726c7580c68f9015_5" [label="5: DeclStmt \n n$4=_fun_method::X1_X1(&x1_2:method::X1*) [line 74, column 6]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div1_getter_templ2#method#7327429174804405806.fe61550d5271fa95726c7580c68f9015_5" -> "div1_getter_templ2#method#7327429174804405806.fe61550d5271fa95726c7580c68f9015_4" ;
|
[clang] enforce that `instruction` always returns one SIL expression
Summary:
Previously, the type of `trans_result` contained a list of SIL expressions.
However, most of the time we expect to get exactly one, and getting a different
number is a soft(!) error, usually returning `-1`.
This splits `trans_result` into `control`, which contains the information
needed for temporary computation (hence when we don't necessarily know the
return value yet), and a new version of `trans_result` that includes `control`,
the previous `exps` list but replaced by a single `return` expression instead,
and a couple other values that made sense to move out of `control`. This allows
some flexibility in the frontend compared to enforcing exactly one return
expression always: if they are not known yet we stick to `control` instead (see
eg `compute_controls_to_parent`).
This creates more garbage temporary identifiers, however they do not show up in
the final cfg. Instead, we see that temporary IDs are now often not
consecutive...
The most painful complication is in the treatment of `DeclRefExpr`, which was
actually returning *two* expressions: the method name and the `this` object.
Now the method name is a separate (optional) field in `trans_result`.
Reviewed By: mbouaziz
Differential Revision: D7881088
fbshipit-source-id: 41ad3b5
7 years ago
|
|
|
"div1_getter_templ2#method#7327429174804405806.fe61550d5271fa95726c7580c68f9015_6" [label="6: DeclStmt \n n$5=_fun_method::X1_X1(&x1_1:method::X1*) [line 73, column 6]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"div1_getter_templ2#method#7327429174804405806.fe61550d5271fa95726c7580c68f9015_6" -> "div1_getter_templ2#method#7327429174804405806.fe61550d5271fa95726c7580c68f9015_5" ;
|
|
|
|
"Getter#Getter#method#{6538771732485235037|constexpr}.4e1a7679a514fd95621c9e075c8974f6_1" [label="1: Start method::Getter_Getter\nFormals: this:method::Getter*\nLocals: \n DECLARE_LOCALS(&return); [line 24, column 8]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"Getter#Getter#method#{6538771732485235037|constexpr}.4e1a7679a514fd95621c9e075c8974f6_1" -> "Getter#Getter#method#{6538771732485235037|constexpr}.4e1a7679a514fd95621c9e075c8974f6_2" ;
|
|
|
|
"Getter#Getter#method#{6538771732485235037|constexpr}.4e1a7679a514fd95621c9e075c8974f6_2" [label="2: Exit method::Getter_Getter \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"GetterTempl#GetterTempl<method::X1>#method#{11902154262179469385|constexpr}.419d9b7f14a1b25d173f0430e77d8bfb_1" [label="1: Start method::GetterTempl<method::X1>_GetterTempl\nFormals: this:method::GetterTempl<method::X1>*\nLocals: \n DECLARE_LOCALS(&return); [line 32, column 8]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"GetterTempl#GetterTempl<method::X1>#method#{11902154262179469385|constexpr}.419d9b7f14a1b25d173f0430e77d8bfb_1" -> "GetterTempl#GetterTempl<method::X1>#method#{11902154262179469385|constexpr}.419d9b7f14a1b25d173f0430e77d8bfb_2" ;
|
|
|
|
"GetterTempl#GetterTempl<method::X1>#method#{11902154262179469385|constexpr}.419d9b7f14a1b25d173f0430e77d8bfb_2" [label="2: Exit method::GetterTempl<method::X1>_GetterTempl \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"GetterTempl#GetterTempl<method::X3>#method#{18312978847092644663|constexpr}.45498dd9c6ecdd204d778582a0198bd9_1" [label="1: Start method::GetterTempl<method::X3>_GetterTempl\nFormals: this:method::GetterTempl<method::X3>*\nLocals: \n DECLARE_LOCALS(&return); [line 32, column 8]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"GetterTempl#GetterTempl<method::X3>#method#{18312978847092644663|constexpr}.45498dd9c6ecdd204d778582a0198bd9_1" -> "GetterTempl#GetterTempl<method::X3>#method#{18312978847092644663|constexpr}.45498dd9c6ecdd204d778582a0198bd9_2" ;
|
|
|
|
"GetterTempl#GetterTempl<method::X3>#method#{18312978847092644663|constexpr}.45498dd9c6ecdd204d778582a0198bd9_2" [label="2: Exit method::GetterTempl<method::X3>_GetterTempl \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"GetterTempl#GetterTempl<method::X2>#method#{13405882915250525948|constexpr}.eb82a5c0e827f04da7e438cdbeef1353_1" [label="1: Start method::GetterTempl<method::X2>_GetterTempl\nFormals: this:method::GetterTempl<method::X2>*\nLocals: \n DECLARE_LOCALS(&return); [line 32, column 8]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"GetterTempl#GetterTempl<method::X2>#method#{13405882915250525948|constexpr}.eb82a5c0e827f04da7e438cdbeef1353_1" -> "GetterTempl#GetterTempl<method::X2>#method#{13405882915250525948|constexpr}.eb82a5c0e827f04da7e438cdbeef1353_2" ;
|
|
|
|
"GetterTempl#GetterTempl<method::X2>#method#{13405882915250525948|constexpr}.eb82a5c0e827f04da7e438cdbeef1353_2" [label="2: Exit method::GetterTempl<method::X2>_GetterTempl \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"X1#X1#method#{8420971029337099969|constexpr}.8e02b6260f5b71b6111249d54e85e5c8_1" [label="1: Start method::X1_X1\nFormals: this:method::X1*\nLocals: \n DECLARE_LOCALS(&return); [line 12, column 8]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"X1#X1#method#{8420971029337099969|constexpr}.8e02b6260f5b71b6111249d54e85e5c8_1" -> "X1#X1#method#{8420971029337099969|constexpr}.8e02b6260f5b71b6111249d54e85e5c8_2" ;
|
|
|
|
"X1#X1#method#{8420971029337099969|constexpr}.8e02b6260f5b71b6111249d54e85e5c8_2" [label="2: Exit method::X1_X1 \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"X2#X2#method#{4336714802122402348|constexpr}.917ee3865c4e917429f86bc2ade48e3a_1" [label="1: Start method::X2_X2\nFormals: this:method::X2*\nLocals: \n DECLARE_LOCALS(&return); [line 16, column 8]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"X2#X2#method#{4336714802122402348|constexpr}.917ee3865c4e917429f86bc2ade48e3a_1" -> "X2#X2#method#{4336714802122402348|constexpr}.917ee3865c4e917429f86bc2ade48e3a_2" ;
|
|
|
|
"X2#X2#method#{4336714802122402348|constexpr}.917ee3865c4e917429f86bc2ade48e3a_2" [label="2: Exit method::X2_X2 \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"X3#X3#method#{15810469599489961747|constexpr}.84155345220e181916e4d12f0c8086cb_1" [label="1: Start method::X3_X3\nFormals: this:method::X3*\nLocals: \n DECLARE_LOCALS(&return); [line 20, column 8]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"X3#X3#method#{15810469599489961747|constexpr}.84155345220e181916e4d12f0c8086cb_1" -> "X3#X3#method#{15810469599489961747|constexpr}.84155345220e181916e4d12f0c8086cb_2" ;
|
|
|
|
"X3#X3#method#{15810469599489961747|constexpr}.84155345220e181916e4d12f0c8086cb_2" [label="2: Exit method::X3_X3 \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"get#X1#method#(3540560026209954150).2509f5dd5568220867b48d85b777a860_1" [label="1: Start method::X1_get\nFormals: this:method::X1*\nLocals: \n DECLARE_LOCALS(&return); [line 13, column 3]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"get#X1#method#(3540560026209954150).2509f5dd5568220867b48d85b777a860_1" -> "get#X1#method#(3540560026209954150).2509f5dd5568220867b48d85b777a860_3" ;
|
|
|
|
"get#X1#method#(3540560026209954150).2509f5dd5568220867b48d85b777a860_2" [label="2: Exit method::X1_get \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"get#X1#method#(3540560026209954150).2509f5dd5568220867b48d85b777a860_3" [label="3: Return Stmt \n *&return:int=1 [line 13, column 15]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"get#X1#method#(3540560026209954150).2509f5dd5568220867b48d85b777a860_3" -> "get#X1#method#(3540560026209954150).2509f5dd5568220867b48d85b777a860_2" ;
|
|
|
|
"get#X2#method#(12355996928057833031).c7a6c1beedda2f062a60f83f9b206b30_1" [label="1: Start method::X2_get\nFormals: this:method::X2*\nLocals: \n DECLARE_LOCALS(&return); [line 17, column 3]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"get#X2#method#(12355996928057833031).c7a6c1beedda2f062a60f83f9b206b30_1" -> "get#X2#method#(12355996928057833031).c7a6c1beedda2f062a60f83f9b206b30_3" ;
|
|
|
|
"get#X2#method#(12355996928057833031).c7a6c1beedda2f062a60f83f9b206b30_2" [label="2: Exit method::X2_get \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"get#X2#method#(12355996928057833031).c7a6c1beedda2f062a60f83f9b206b30_3" [label="3: Return Stmt \n *&return:int=0 [line 17, column 15]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"get#X2#method#(12355996928057833031).c7a6c1beedda2f062a60f83f9b206b30_3" -> "get#X2#method#(12355996928057833031).c7a6c1beedda2f062a60f83f9b206b30_2" ;
|
|
|
|
"get#X3#method#(17779304111871376612).93de680a5d7c38b89b487ae7f0d986d6_1" [label="1: Start method::X3_get\nFormals: this:method::X3*\nLocals: \n DECLARE_LOCALS(&return); [line 21, column 3]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"get#X3#method#(17779304111871376612).93de680a5d7c38b89b487ae7f0d986d6_1" -> "get#X3#method#(17779304111871376612).93de680a5d7c38b89b487ae7f0d986d6_3" ;
|
|
|
|
"get#X3#method#(17779304111871376612).93de680a5d7c38b89b487ae7f0d986d6_2" [label="2: Exit method::X3_get \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"get#X3#method#(17779304111871376612).93de680a5d7c38b89b487ae7f0d986d6_3" [label="3: Return Stmt \n *&return:int=0 [line 21, column 15]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"get#X3#method#(17779304111871376612).93de680a5d7c38b89b487ae7f0d986d6_3" -> "get#X3#method#(17779304111871376612).93de680a5d7c38b89b487ae7f0d986d6_2" ;
|
|
|
|
"get<method::X1>#Getter#method#(3247992624161763984).d85954e5db9a3e87e1f85274548baec1_1" [label="1: Start method::Getter_get<method::X1>\nFormals: this:method::Getter* s:method::X1&\nLocals: \n DECLARE_LOCALS(&return); [line 26, column 3]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"get<method::X1>#Getter#method#(3247992624161763984).d85954e5db9a3e87e1f85274548baec1_1" -> "get<method::X1>#Getter#method#(3247992624161763984).d85954e5db9a3e87e1f85274548baec1_3" ;
|
|
|
|
"get<method::X1>#Getter#method#(3247992624161763984).d85954e5db9a3e87e1f85274548baec1_2" [label="2: Exit method::Getter_get<method::X1> \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"get<method::X1>#Getter#method#(3247992624161763984).d85954e5db9a3e87e1f85274548baec1_3" [label="3: Return Stmt \n n$0=*&s:method::X1& [line 27, column 12]\n _=*n$0:method::X1 [line 27, column 12]\n n$2=_fun_method::X1_get(n$0:method::X1&) [line 27, column 12]\n *&return:int=n$2 [line 27, column 5]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"get<method::X1>#Getter#method#(3247992624161763984).d85954e5db9a3e87e1f85274548baec1_3" -> "get<method::X1>#Getter#method#(3247992624161763984).d85954e5db9a3e87e1f85274548baec1_2" ;
|
|
|
|
"get<method::X1>#GetterTempl<method::X1>#method#(1597660249660822780).26089da113d1a8570a849aa988e4ebd3_1" [label="1: Start method::GetterTempl<method::X1>_get<method::X1>\nFormals: this:method::GetterTempl<method::X1>* t:method::X1& s:method::X1&\nLocals: \n DECLARE_LOCALS(&return); [line 34, column 3]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"get<method::X1>#GetterTempl<method::X1>#method#(1597660249660822780).26089da113d1a8570a849aa988e4ebd3_1" -> "get<method::X1>#GetterTempl<method::X1>#method#(1597660249660822780).26089da113d1a8570a849aa988e4ebd3_3" ;
|
|
|
|
"get<method::X1>#GetterTempl<method::X1>#method#(1597660249660822780).26089da113d1a8570a849aa988e4ebd3_2" [label="2: Exit method::GetterTempl<method::X1>_get<method::X1> \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"get<method::X1>#GetterTempl<method::X1>#method#(1597660249660822780).26089da113d1a8570a849aa988e4ebd3_3" [label="3: Return Stmt \n n$0=*&t:method::X1& [line 35, column 12]\n _=*n$0:method::X1 [line 35, column 12]\n n$2=_fun_method::X1_get(n$0:method::X1&) [line 35, column 12]\n n$3=*&s:method::X1& [line 35, column 22]\n _=*n$3:method::X1 [line 35, column 22]\n n$5=_fun_method::X1_get(n$3:method::X1&) [line 35, column 22]\n *&return:int=(n$2 + n$5) [line 35, column 5]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"get<method::X1>#GetterTempl<method::X1>#method#(1597660249660822780).26089da113d1a8570a849aa988e4ebd3_3" -> "get<method::X1>#GetterTempl<method::X1>#method#(1597660249660822780).26089da113d1a8570a849aa988e4ebd3_2" ;
|
|
|
|
"get<method::X1>#GetterTempl<method::X2>#method#(5585877041217346556).4f87183f5216c7461b5259807b1f72ac_1" [label="1: Start method::GetterTempl<method::X2>_get<method::X1>\nFormals: this:method::GetterTempl<method::X2>* t:method::X2& s:method::X1&\nLocals: \n DECLARE_LOCALS(&return); [line 34, column 3]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"get<method::X1>#GetterTempl<method::X2>#method#(5585877041217346556).4f87183f5216c7461b5259807b1f72ac_1" -> "get<method::X1>#GetterTempl<method::X2>#method#(5585877041217346556).4f87183f5216c7461b5259807b1f72ac_3" ;
|
|
|
|
"get<method::X1>#GetterTempl<method::X2>#method#(5585877041217346556).4f87183f5216c7461b5259807b1f72ac_2" [label="2: Exit method::GetterTempl<method::X2>_get<method::X1> \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"get<method::X1>#GetterTempl<method::X2>#method#(5585877041217346556).4f87183f5216c7461b5259807b1f72ac_3" [label="3: Return Stmt \n n$0=*&t:method::X2& [line 35, column 12]\n _=*n$0:method::X2 [line 35, column 12]\n n$2=_fun_method::X2_get(n$0:method::X2&) [line 35, column 12]\n n$3=*&s:method::X1& [line 35, column 22]\n _=*n$3:method::X1 [line 35, column 22]\n n$5=_fun_method::X1_get(n$3:method::X1&) [line 35, column 22]\n *&return:int=(n$2 + n$5) [line 35, column 5]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"get<method::X1>#GetterTempl<method::X2>#method#(5585877041217346556).4f87183f5216c7461b5259807b1f72ac_3" -> "get<method::X1>#GetterTempl<method::X2>#method#(5585877041217346556).4f87183f5216c7461b5259807b1f72ac_2" ;
|
|
|
|
"get<method::X2>#Getter#method#(114488311005334347).9c4c4261c299bcfcd879652b3f97fdce_1" [label="1: Start method::Getter_get<method::X2>\nFormals: this:method::Getter* s:method::X2&\nLocals: \n DECLARE_LOCALS(&return); [line 26, column 3]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"get<method::X2>#Getter#method#(114488311005334347).9c4c4261c299bcfcd879652b3f97fdce_1" -> "get<method::X2>#Getter#method#(114488311005334347).9c4c4261c299bcfcd879652b3f97fdce_3" ;
|
|
|
|
"get<method::X2>#Getter#method#(114488311005334347).9c4c4261c299bcfcd879652b3f97fdce_2" [label="2: Exit method::Getter_get<method::X2> \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"get<method::X2>#Getter#method#(114488311005334347).9c4c4261c299bcfcd879652b3f97fdce_3" [label="3: Return Stmt \n n$0=*&s:method::X2& [line 27, column 12]\n _=*n$0:method::X2 [line 27, column 12]\n n$2=_fun_method::X2_get(n$0:method::X2&) [line 27, column 12]\n *&return:int=n$2 [line 27, column 5]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"get<method::X2>#Getter#method#(114488311005334347).9c4c4261c299bcfcd879652b3f97fdce_3" -> "get<method::X2>#Getter#method#(114488311005334347).9c4c4261c299bcfcd879652b3f97fdce_2" ;
|
|
|
|
"get<method::X2>#GetterTempl<method::X3>#method#(10966570090595029900).9a24a249e802c1b058a8d736330be11a_1" [label="1: Start method::GetterTempl<method::X3>_get<method::X2>\nFormals: this:method::GetterTempl<method::X3>* t:method::X3& s:method::X2&\nLocals: \n DECLARE_LOCALS(&return); [line 34, column 3]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"get<method::X2>#GetterTempl<method::X3>#method#(10966570090595029900).9a24a249e802c1b058a8d736330be11a_1" -> "get<method::X2>#GetterTempl<method::X3>#method#(10966570090595029900).9a24a249e802c1b058a8d736330be11a_3" ;
|
|
|
|
"get<method::X2>#GetterTempl<method::X3>#method#(10966570090595029900).9a24a249e802c1b058a8d736330be11a_2" [label="2: Exit method::GetterTempl<method::X3>_get<method::X2> \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"get<method::X2>#GetterTempl<method::X3>#method#(10966570090595029900).9a24a249e802c1b058a8d736330be11a_3" [label="3: Return Stmt \n n$0=*&t:method::X3& [line 35, column 12]\n _=*n$0:method::X3 [line 35, column 12]\n n$2=_fun_method::X3_get(n$0:method::X3&) [line 35, column 12]\n n$3=*&s:method::X2& [line 35, column 22]\n _=*n$3:method::X2 [line 35, column 22]\n n$5=_fun_method::X2_get(n$3:method::X2&) [line 35, column 22]\n *&return:int=(n$2 + n$5) [line 35, column 5]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"get<method::X2>#GetterTempl<method::X3>#method#(10966570090595029900).9a24a249e802c1b058a8d736330be11a_3" -> "get<method::X2>#GetterTempl<method::X3>#method#(10966570090595029900).9a24a249e802c1b058a8d736330be11a_2" ;
|
|
|
|
"get<method::X2>#GetterTempl<method::X2>#method#(242818219889731161).ce1c035f50382c57a6002fb874c7d273_1" [label="1: Start method::GetterTempl<method::X2>_get<method::X2>\nFormals: this:method::GetterTempl<method::X2>* t:method::X2& s:method::X2&\nLocals: \n DECLARE_LOCALS(&return); [line 34, column 3]\n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"get<method::X2>#GetterTempl<method::X2>#method#(242818219889731161).ce1c035f50382c57a6002fb874c7d273_1" -> "get<method::X2>#GetterTempl<method::X2>#method#(242818219889731161).ce1c035f50382c57a6002fb874c7d273_3" ;
|
|
|
|
"get<method::X2>#GetterTempl<method::X2>#method#(242818219889731161).ce1c035f50382c57a6002fb874c7d273_2" [label="2: Exit method::GetterTempl<method::X2>_get<method::X2> \n " color=yellow style=filled]
|
|
|
|
|
|
|
|
|
|
|
|
"get<method::X2>#GetterTempl<method::X2>#method#(242818219889731161).ce1c035f50382c57a6002fb874c7d273_3" [label="3: Return Stmt \n n$0=*&t:method::X2& [line 35, column 12]\n _=*n$0:method::X2 [line 35, column 12]\n n$2=_fun_method::X2_get(n$0:method::X2&) [line 35, column 12]\n n$3=*&s:method::X2& [line 35, column 22]\n _=*n$3:method::X2 [line 35, column 22]\n n$5=_fun_method::X2_get(n$3:method::X2&) [line 35, column 22]\n *&return:int=(n$2 + n$5) [line 35, column 5]\n " shape="box"]
|
|
|
|
|
|
|
|
|
|
|
|
"get<method::X2>#GetterTempl<method::X2>#method#(242818219889731161).ce1c035f50382c57a6002fb874c7d273_3" -> "get<method::X2>#GetterTempl<method::X2>#method#(242818219889731161).ce1c035f50382c57a6002fb874c7d273_2" ;
|
|
|
|
}
|