File tree Expand file tree Collapse file tree 12 files changed +84
-0
lines changed Expand file tree Collapse file tree 12 files changed +84
-0
lines changed Original file line number Diff line number Diff line change 1
1
class QAST::IVal is QAST ::Node {
2
2
has int $ ! value ;
3
3
method value (* @ value ) { $ ! value := @ value [0 ] if @ value ; $ ! value }
4
+
5
+ method substitute_inline_placeholders (@ fillers ) {
6
+ self
7
+ }
4
8
}
Original file line number Diff line number Diff line change
1
+ # This indicates a place in a QAST tree that has been stashed for later
2
+ # inlining where one of the arguments to the inlined routine was used.
3
+ class QAST::InlinePlaceholder is QAST ::Node {
4
+ has int $ ! position ;
5
+
6
+ method position (* @ value ) {
7
+ @ value ?? ($ ! position := @ value [0 ]) !! $ ! position
8
+ }
9
+
10
+ method substitute_inline_placeholders (@ fillers ) {
11
+ $ ! position < + @ fillers
12
+ ?? @ fillers [$ ! position ]
13
+ !! nqp ::die(" Inline placeholder index out of range" )
14
+ }
15
+ }
Original file line number Diff line number Diff line change 1
1
class QAST::NVal is QAST ::Node {
2
2
has num $ ! value ;
3
3
method value (* @ value ) { $ ! value := @ value [0 ] if @ value ; $ ! value }
4
+
5
+ method substitute_inline_placeholders (@ fillers ) {
6
+ self
7
+ }
4
8
}
Original file line number Diff line number Diff line change @@ -100,4 +100,8 @@ class QAST::Node {
100
100
(% uniques {$ prefix } := 1 );
101
101
$ prefix ~ ' _' ~ $ id
102
102
}
103
+
104
+ method substitute_inline_placeholders (@ fillers ) {
105
+ nqp ::die(self . HOW . name (self ) ~ " does not support inlining" );
106
+ }
103
107
}
Original file line number Diff line number Diff line change @@ -6,4 +6,15 @@ class QAST::Op is QAST::Node {
6
6
method name (* @ value ) { $ ! name := @ value [0 ] if @ value ; $ ! name || " " }
7
7
method op (* @ value ) { $ ! op := @ value [0 ] if @ value ; $ ! op }
8
8
method childorder (* @ value ) { $ ! childorder := @ value [0 ] if @ value ; $ ! childorder || " " }
9
+
10
+ method substitute_inline_placeholders (@ fillers ) {
11
+ my $ result := pir::repr_clone__PP(self );
12
+ my $ i := 0 ;
13
+ my $ elems := + @ (self );
14
+ while $ i < $ elems {
15
+ $ result [$ i ] := self [$ i ]. substitute_inline_placeholders(@ fillers );
16
+ $ i := $ i + 1 ;
17
+ }
18
+ $ result
19
+ }
9
20
}
Original file line number Diff line number Diff line change 1
1
class QAST::SVal is QAST ::Node {
2
2
has str $ ! value ;
3
3
method value (* @ value ) { $ ! value := @ value [0 ] if @ value ; $ ! value }
4
+
5
+ method substitute_inline_placeholders (@ fillers ) {
6
+ self
7
+ }
4
8
}
Original file line number Diff line number Diff line change @@ -2,4 +2,15 @@ class QAST::Stmt is QAST::Node {
2
2
has $ ! resultchild ;
3
3
4
4
method resultchild (* @ value ) { $ ! resultchild := @ value [0 ] if @ value ; $ ! resultchild }
5
+
6
+ method substitute_inline_placeholders (@ fillers ) {
7
+ my $ result := pir::repr_clone__PP(self );
8
+ my $ i := 0 ;
9
+ my $ elems := + @ (self );
10
+ while $ i < $ elems {
11
+ $ result [$ i ] := self [$ i ]. substitute_inline_placeholders(@ fillers );
12
+ $ i := $ i + 1 ;
13
+ }
14
+ $ result
15
+ }
5
16
}
Original file line number Diff line number Diff line change @@ -2,4 +2,15 @@ class QAST::Stmts is QAST::Node {
2
2
has $ ! resultchild ;
3
3
4
4
method resultchild (* @ value ) { $ ! resultchild := @ value [0 ] if @ value ; $ ! resultchild }
5
+
6
+ method substitute_inline_placeholders (@ fillers ) {
7
+ my $ result := pir::repr_clone__PP(self );
8
+ my $ i := 0 ;
9
+ my $ elems := + @ (self );
10
+ while $ i < $ elems {
11
+ $ result [$ i ] := self [$ i ]. substitute_inline_placeholders(@ fillers );
12
+ $ i := $ i + 1 ;
13
+ }
14
+ $ result
15
+ }
5
16
}
Original file line number Diff line number Diff line change @@ -10,4 +10,8 @@ class QAST::Var is QAST::Node {
10
10
method decl (* @ value ) { $ ! decl := @ value [0 ] if @ value ; $ ! decl }
11
11
method slurpy (* @ value ) { $ ! slurpy := @ value [0 ] if @ value ; $ ! slurpy }
12
12
method default (* @ value ) { $ ! default := @ value [0 ] if @ value ; $ ! default }
13
+
14
+ method substitute_inline_placeholders (@ fillers ) {
15
+ self
16
+ }
13
17
}
Original file line number Diff line number Diff line change @@ -4,4 +4,8 @@ class QAST::WVal is QAST::Node does QAST::CompileTimeValue {
4
4
?? self . set_compile_time_value(@ value [0 ])
5
5
!! self . compile_time_value()
6
6
}
7
+
8
+ method substitute_inline_placeholders (@ fillers ) {
9
+ self
10
+ }
7
11
}
You can’t perform that action at this time.
0 commit comments