improved quoted sub inlining
[gitmo/Moo.git] / lib / Sub / Quote.pm
index cd6bff6..2f6c463 100644 (file)
@@ -26,6 +26,20 @@ sub capture_unroll {
   );
 }
 
+sub inlinify {
+  my ($code, $args, $extra, $local) = @_;
+  my $do = 'do { '.($extra||'');
+  if (my ($code_args, $body) = $code =~ / +my \(([^)]+)\) = \@_;(.*)$/s) {
+    if ($code_args eq $args) {
+      $do.$body.' }'
+    } else {
+      $do.'my '.$code_args.' = ('.$args.'); '.$body.' }';
+    }
+  } else {
+    $do.($local ? 'local ' : '').'@_ = ('.$args.'); '.$code.' }';
+  }
+}
+
 sub _unquote_all_outstanding {
   return unless %QUOTE_OUTSTANDING;
   my ($assembled_code, @assembled_captures, @localize_these) = '';