Merge Irssi 0.8.16-rc1
[silc.git] / apps / irssi / src / perl / irssi-core.pl.h
index 9c4dd606f8d0160a286d26e2efca4398f3499d5e..707508313f32606eab4914060cb304bcc92e92b2 100644 (file)
@@ -9,6 +9,12 @@ const char *irssi_core_code =
 "\n"
 "use Symbol;\n"
 "\n"
+"$SIG{__WARN__} = sub {\n"
+"  my @msg = @_;\n"
+"  s/%%/%%%%/g for @msg;\n"
+"  print @msg;\n"
+"};\n"
+"\n"
 "sub is_static {\n"
 "  return %d;\n"
 "}\n"
@@ -19,33 +25,27 @@ const char *irssi_core_code =
 "}\n"
 "\n"
 "sub eval_data {\n"
-"  my ($data, $id) = @_;\n"
-"  destroy(\"Irssi::Script::$id\");\n"
-"\n"
-"  my $package = \"Irssi::Script::$id\";\n"
-"  my $eval = qq{package $package; %s sub handler { $data; }};\n"
-"  {\n"
-"      # hide our variables within this block\n"
-"      my ($filename, $package, $data);\n"
-"      eval $eval;\n"
-"  }\n"
-"  die $@ if $@;\n"
-"\n"
-"  my $ret;\n"
-"  eval { $ret = $package->handler; };\n"
-"  die $@ if $@;\n"
-"  return $ret;\n"
+"  my $ret = eval do {\n"
+"    my ($data, $id) = @_;\n"
+"    destroy(\"Irssi::Script::$id\");\n"
+"    my $code = qq{package Irssi::Script::$id; %s $data};\n"
+"    $code\n"
+"  };\n"
+"  $@ and die $@;\n"
+"  $ret\n"
 "}\n"
 "\n"
 "sub eval_file {\n"
 "  my ($filename, $id) = @_;\n"
 "\n"
-"  local *FH;\n"
-"  open FH, $filename or die \"File not found: $filename\";\n"
-"  local($/) = undef;\n"
-"  my $data = <FH>;\n"
-"  close FH;\n"
-"  local($/) = \"\\n\";\n"
+"  open my $fh, '<', $filename or die \"Can't open $filename: $!\";\n"
+"  my $data = do {local $/; <$fh>};\n"
+"  close $fh;\n"
+"\n"
+"  $filename =~ s/([\"\\\\])/\\\\$1/g;\n"
+"  $filename =~ s/\\n/\\\\n/g;\n"
+"\n"
+"  $data = qq{\\n#line 1 \"$filename\"\\n$data};\n"
 "\n"
 "  eval_data($data, $id);\n"
 "}\n"