summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MANIFEST1
-rw-r--r--README.macos60
-rw-r--r--embed.h4
-rwxr-xr-xembed.pl1
-rw-r--r--global.sym1
-rw-r--r--objXSUB.h4
-rw-r--r--perlapi.c7
-rw-r--r--pod/buildtoc.PL2
-rw-r--r--pod/perl.pod1
-rw-r--r--pod/perlfaq9.pod2
-rw-r--r--pod/perlguts.pod16
-rw-r--r--pp_ctl.c2
-rw-r--r--proto.h1
-rw-r--r--scope.c12
-rw-r--r--scope.h2
-rw-r--r--sv.c1
-rw-r--r--win32/Makefile16
-rw-r--r--win32/makefile.mk13
18 files changed, 134 insertions, 12 deletions
diff --git a/MANIFEST b/MANIFEST
index 11c4c57d33..23f39bf764 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -47,6 +47,7 @@ README.epoc Notes about EPOC port
README.hpux Notes about HP-UX port
README.hurd Notes about GNU/Hurd port
README.machten Notes about Power MachTen port
+README.macos Notes about Mac OS (Classic)
README.micro Notes about microperl
README.mint Notes about Atari MiNT port
README.mpeix Notes about MPE/iX port
diff --git a/README.macos b/README.macos
new file mode 100644
index 0000000000..cc8121be1c
--- /dev/null
+++ b/README.macos
@@ -0,0 +1,60 @@
+If you read this file _as_is_, just ignore the funny characters you see.
+It is written in the POD format (see pod/perlpod.pod) which is specially
+designed to be readable as is.
+
+=head1 NAME
+
+README.macos - Perl under Mac OS (Classic)
+
+
+=head1 SYNOPSIS
+
+This document briefly describes perl under Mac OS (Classic).
+If you are running perl under Mac OS X, you don't want to be
+here (unless you are in the Classic environment under Mac OS X).
+
+When we say "Mac OS" below, we mean pre-Mac OS X, which includes
+Mac OS 7, 8, and 9.
+
+
+=head1 DESCRIPTION
+
+The perl 5.6.1 source itself builds on Mac OS, with some additional
+pieces. Support for Mac OS is now in the perl core, and MacPerl will be
+able to, in the future, keep in closer sync with regular perl releases.
+
+At this time, though, it is very buggy, and is under development. An
+alpha release is coming very soon.
+
+To build perl for Mac OS (as an MPW tool), you will need the addition
+of the "macos" subdirectory, distributed separately. It includes extra
+source files, config files, and make files. It also includes a lot of
+extra Mac-specific modules.
+
+To build the MacPerl application, you will also need the "macperl"
+directory, which includes the source files for creating the
+application itself.
+
+All of this is also available from the SourceForge site, via
+HTTP, FTP, and anonymous CVS.
+
+ http://macperl.sourceforge.net/
+
+You will also need compilers and libraries, all of them freely
+available. These are linked to from the SourceForge site. Go that site
+for all things having to do with MacPerl development.
+
+MacPerl 5.2.0r4 is available on the CPAN and on SourceForge. It
+is based on perl 5.004.
+
+
+=head1 AUTHOR
+
+perl was ported to Mac OS by Matthias Neeracher
+E<lt>neeracher@mac.comE<gt>. It is currently maintained by Chris
+Nandor E<lt>pudge@pobox.comE<gt>.
+
+
+=head1 DATE
+
+Last modified 2001.04.05.
diff --git a/embed.h b/embed.h
index 8ec511b2c0..685f9e89e7 100644
--- a/embed.h
+++ b/embed.h
@@ -599,6 +599,7 @@
#define save_iv Perl_save_iv
#define save_list Perl_save_list
#define save_long Perl_save_long
+#define save_mortalizesv Perl_save_mortalizesv
#define save_nogv Perl_save_nogv
#define save_op Perl_save_op
#define save_scalar Perl_save_scalar
@@ -2090,6 +2091,7 @@
#define save_iv(a) Perl_save_iv(aTHX_ a)
#define save_list(a,b) Perl_save_list(aTHX_ a,b)
#define save_long(a) Perl_save_long(aTHX_ a)
+#define save_mortalizesv(a) Perl_save_mortalizesv(aTHX_ a)
#define save_nogv(a) Perl_save_nogv(aTHX_ a)
#define save_op() Perl_save_op(aTHX)
#define save_scalar(a) Perl_save_scalar(aTHX_ a)
@@ -4099,6 +4101,8 @@
#define save_list Perl_save_list
#define Perl_save_long CPerlObj::Perl_save_long
#define save_long Perl_save_long
+#define Perl_save_mortalizesv CPerlObj::Perl_save_mortalizesv
+#define save_mortalizesv Perl_save_mortalizesv
#define Perl_save_nogv CPerlObj::Perl_save_nogv
#define save_nogv Perl_save_nogv
#define Perl_save_op CPerlObj::Perl_save_op
diff --git a/embed.pl b/embed.pl
index e1ddd674e4..8cc04b0d75 100755
--- a/embed.pl
+++ b/embed.pl
@@ -1956,6 +1956,7 @@ Ap |void |save_item |SV* item
Ap |void |save_iv |IV* iv
Ap |void |save_list |SV** sarg|I32 maxsarg
Ap |void |save_long |long* longp
+Ap |void |save_mortalizesv|SV* sv
Ap |void |save_nogv |GV* gv
p |void |save_op
Ap |SV* |save_scalar |GV* gv
diff --git a/global.sym b/global.sym
index 1895fbfb58..08f3d5e48c 100644
--- a/global.sym
+++ b/global.sym
@@ -358,6 +358,7 @@ Perl_save_item
Perl_save_iv
Perl_save_list
Perl_save_long
+Perl_save_mortalizesv
Perl_save_nogv
Perl_save_scalar
Perl_save_pptr
diff --git a/objXSUB.h b/objXSUB.h
index 5643637cea..99d9a3ea26 100644
--- a/objXSUB.h
+++ b/objXSUB.h
@@ -1433,6 +1433,10 @@
#define Perl_save_long pPerl->Perl_save_long
#undef save_long
#define save_long Perl_save_long
+#undef Perl_save_mortalizesv
+#define Perl_save_mortalizesv pPerl->Perl_save_mortalizesv
+#undef save_mortalizesv
+#define save_mortalizesv Perl_save_mortalizesv
#undef Perl_save_nogv
#define Perl_save_nogv pPerl->Perl_save_nogv
#undef save_nogv
diff --git a/perlapi.c b/perlapi.c
index bf08bffd33..63f94a901d 100644
--- a/perlapi.c
+++ b/perlapi.c
@@ -2610,6 +2610,13 @@ Perl_save_long(pTHXo_ long* longp)
((CPerlObj*)pPerl)->Perl_save_long(longp);
}
+#undef Perl_save_mortalizesv
+void
+Perl_save_mortalizesv(pTHXo_ SV* sv)
+{
+ ((CPerlObj*)pPerl)->Perl_save_mortalizesv(sv);
+}
+
#undef Perl_save_nogv
void
Perl_save_nogv(pTHXo_ GV* gv)
diff --git a/pod/buildtoc.PL b/pod/buildtoc.PL
index 140341bb40..dbe88afec0 100644
--- a/pod/buildtoc.PL
+++ b/pod/buildtoc.PL
@@ -160,6 +160,7 @@ if (-d "pod") {
perlepoc
perlhpux
perlmachten
+ perlmacos
perlmpeix
perlos2
perlos390
@@ -179,6 +180,7 @@ if (-d "pod") {
perlepoc
perlhpux
perlmachten
+ perlmacos
perlmpeix
perlos2
perlos390
diff --git a/pod/perl.pod b/pod/perl.pod
index fd55b8d85f..3d0cbbe1b3 100644
--- a/pod/perl.pod
+++ b/pod/perl.pod
@@ -114,6 +114,7 @@ For ease of access, the Perl manual has been split up into several sections:
perlepoc Perl notes for EPOC
perlhpux Perl notes for HP-UX
perlmachten Perl notes for Power MachTen
+ perlmacos Perl notes for Mac OS (Classic)
perlmpeix Perl notes for MPE/iX
perlos2 Perl notes for OS/2
perlos390 Perl notes for OS/390
diff --git a/pod/perlfaq9.pod b/pod/perlfaq9.pod
index 2609c4482e..96763802c5 100644
--- a/pod/perlfaq9.pod
+++ b/pod/perlfaq9.pod
@@ -394,7 +394,7 @@ the MIME/QP encoding. Decoding BASE64 becomes as simple as:
use MIME::Base64;
$decoded = decode_base64($encoded);
-The MIME-Tools package (available from CPAN) support exctraction with
+The MIME-Tools package (available from CPAN) supports extraction with
decoding of BASE64 encoded attachments and content directly from email
messages.
diff --git a/pod/perlguts.pod b/pod/perlguts.pod
index dad868a712..3b10af9eee 100644
--- a/pod/perlguts.pod
+++ b/pod/perlguts.pod
@@ -1127,8 +1127,20 @@ and back.
=item C<SAVEFREESV(SV *sv)>
The refcount of C<sv> would be decremented at the end of
-I<pseudo-block>. This is similar to C<sv_2mortal>, which should (?) be
-used instead.
+I<pseudo-block>. This is similar to C<sv_2mortal> in that it is also a
+mechanism for doing a delayed C<SvREFCNT_dec>. However, while C<sv_2mortal>
+extends the lifetime of C<sv> until the beginning of the next statement,
+C<SAVEFREESV> extends it until the end of the enclosing scope. These
+lifetimes can be wildly different.
+
+Also compare C<SAVEMORTALIZESV>.
+
+=item C<SAVEMORTALIZESV(SV *sv)>
+
+Just like C<SAVEFREESV>, but mortalizes C<sv> at the end of the current
+scope instead of decrementing its reference count. This usually has the
+effect of keeping C<sv> alive until the statement that called the currently
+live scope has finished executing.
=item C<SAVEFREEOP(OP *op)>
diff --git a/pp_ctl.c b/pp_ctl.c
index 272f506943..3cda644113 100644
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -2866,7 +2866,7 @@ S_doeval(pTHX_ int gimme, OP** startop)
CvOUTSIDE(PL_compcv) = (CV*)SvREFCNT_inc(caller);
}
- SAVEFREESV(PL_compcv);
+ SAVEMORTALIZESV(PL_compcv); /* must remain until end of current statement */
/* make sure we compile in the right package */
diff --git a/proto.h b/proto.h
index c8a59a454c..92bb520230 100644
--- a/proto.h
+++ b/proto.h
@@ -676,6 +676,7 @@ PERL_CALLCONV void Perl_save_item(pTHX_ SV* item);
PERL_CALLCONV void Perl_save_iv(pTHX_ IV* iv);
PERL_CALLCONV void Perl_save_list(pTHX_ SV** sarg, I32 maxsarg);
PERL_CALLCONV void Perl_save_long(pTHX_ long* longp);
+PERL_CALLCONV void Perl_save_mortalizesv(pTHX_ SV* sv);
PERL_CALLCONV void Perl_save_nogv(pTHX_ GV* gv);
PERL_CALLCONV void Perl_save_op(pTHX);
PERL_CALLCONV SV* Perl_save_scalar(pTHX_ GV* gv);
diff --git a/scope.c b/scope.c
index 3293c4862d..31c6f01d56 100644
--- a/scope.c
+++ b/scope.c
@@ -504,6 +504,14 @@ Perl_save_freesv(pTHX_ SV *sv)
}
void
+Perl_save_mortalizesv(pTHX_ SV *sv)
+{
+ SSCHECK(2);
+ SSPUSHPTR(sv);
+ SSPUSHINT(SAVEt_MORTALIZESV);
+}
+
+void
Perl_save_freeop(pTHX_ OP *o)
{
SSCHECK(2);
@@ -803,6 +811,10 @@ Perl_leave_scope(pTHX_ I32 base)
ptr = SSPOPPTR;
SvREFCNT_dec((SV*)ptr);
break;
+ case SAVEt_MORTALIZESV:
+ ptr = SSPOPPTR;
+ sv_2mortal((SV*)ptr);
+ break;
case SAVEt_FREEOP:
ptr = SSPOPPTR;
if (PL_comppad)
diff --git a/scope.h b/scope.h
index 0ceb6ba912..edf7ffef48 100644
--- a/scope.h
+++ b/scope.h
@@ -34,6 +34,7 @@
#define SAVEt_COMPPAD 33
#define SAVEt_GENERIC_PVREF 34
#define SAVEt_PADSV 35
+#define SAVEt_MORTALIZESV 36
#ifndef SCOPE_SAVES_SIGNAL_MASK
#define SCOPE_SAVES_SIGNAL_MASK 0
@@ -108,6 +109,7 @@ Closing bracket on a callback. See C<ENTER> and L<perlcall>.
#define SAVEVPTR(s) save_vptr((void*)&(s))
#define SAVEPADSV(s) save_padsv(s)
#define SAVEFREESV(s) save_freesv((SV*)(s))
+#define SAVEMORTALIZESV(s) save_mortalizesv((SV*)(s))
#define SAVEFREEOP(o) save_freeop(SOFT_CAST(OP*)(o))
#define SAVEFREEPV(p) save_freepv(SOFT_CAST(char*)(p))
#define SAVECLEARSV(sv) save_clearsv(SOFT_CAST(SV**)&(sv))
diff --git a/sv.c b/sv.c
index e91f1d9b6f..a589e08d99 100644
--- a/sv.c
+++ b/sv.c
@@ -8531,6 +8531,7 @@ Perl_ss_dup(pTHX_ PerlInterpreter *proto_perl)
TOPIV(nss,ix) = iv;
break;
case SAVEt_FREESV:
+ case SAVEt_MORTALIZESV:
sv = (SV*)POPPTR(ss,ix);
TOPPTR(nss,ix) = sv_dup_inc(sv);
break;
diff --git a/win32/Makefile b/win32/Makefile
index 429569e788..f7eda74ed6 100644
--- a/win32/Makefile
+++ b/win32/Makefile
@@ -1038,16 +1038,18 @@ utils: $(PERLEXE) $(X2P)
cd ..\pod
copy ..\README.aix .\perlaix.pod
copy ..\README.amiga .\perlamiga.pod
+ copy ..\README.bs2000 .\perlbs2000.pod
copy ..\README.cygwin .\perlcygwin.pod
copy ..\README.dos .\perldos.pod
copy ..\README.epoc .\perlepoc.pod
copy ..\README.hpux .\perlhpux.pod
copy ..\README.machten .\perlmachten.pod
+ copy ..\README.macos .\perlmacos.pod
+ copy ..\README.mpeix .\perlmpeix.pod
copy ..\README.os2 .\perlos2.pod
copy ..\README.os390 .\perlos390.pod
- copy ..\README.vmesa .\perlvmesa.pod
- copy ..\README.bs2000 .\perlbs2000.pod
copy ..\README.solaris .\perlsolaris.pod
+ copy ..\README.vmesa .\perlvmesa.pod
copy ..\vms\perlvms.pod .\perlvms.pod
copy ..\README.vos .\perlvos.pod
copy ..\README.win32 .\perlwin32.pod
@@ -1097,8 +1099,14 @@ distclean: clean
-rmdir /s $(LIBDIR)\MIME\Base64
-if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME
-rmdir /s $(LIBDIR)\MIME
- -del /f $(PODDIR)\*.html
- -del /f $(PODDIR)\*.bat
+ cd $(PODDIR)
+ -del /f *.html
+ -del /f *.bat
+ -del /f checkpods perlamiga.pod perlcygwin.pod \
+ perldos.pod perlhpux.pod perlmachten.pod perlmacos.pod \
+ perlmpeix.pod perlos2.pod perlvms.pod \
+ perlwin32.pod pod2html pod2latex pod2man pod2text pod2usage \
+ podchecker podselect
cd ..\utils
-del /f h2ph splain perlbug pl2pm c2ph h2xs perldoc dprofpp
-del /f *.bat
diff --git a/win32/makefile.mk b/win32/makefile.mk
index 499453bcaf..5333ce650c 100644
--- a/win32/makefile.mk
+++ b/win32/makefile.mk
@@ -1085,16 +1085,18 @@ utils: $(PERLEXE) $(X2P)
cd ..\utils && $(MAKE) PERL=$(MINIPERL)
copy ..\README.aix ..\pod\perlaix.pod
copy ..\README.amiga ..\pod\perlamiga.pod
+ copy ..\README.bs2000 ..\pod\perlbs2000.pod
copy ..\README.cygwin ..\pod\perlcygwin.pod
copy ..\README.dos ..\pod\perldos.pod
copy ..\README.epoc ..\pod\perlepoc.pod
copy ..\README.hpux ..\pod\perlhpux.pod
copy ..\README.machten ..\pod\perlmachten.pod
+ copy ..\README.macos ..\pod\perlmacos.pod
+ copy ..\README.mpeix ..\pod\perlmpeix.pod
copy ..\README.os2 ..\pod\perlos2.pod
copy ..\README.os390 ..\pod\perlos390.pod
+ copy ..\README.solaris .\perlsolaris.pod
copy ..\README.vmesa ..\pod\perlvmesa.pod
- copy ..\README.bs2000 ..\pod\perlbs2000.pod
- copy ..\README.solaris ..\pod\perlsolaris.pod
copy ..\vms\perlvms.pod ..\pod\perlvms.pod
copy ..\README.vos ..\pod\perlvos.pod
copy ..\README.win32 ..\pod\perlwin32.pod
@@ -1132,8 +1134,11 @@ distclean: clean
-if exist $(LIBDIR)\Digest rmdir /s /q $(LIBDIR)\Digest || rmdir /s $(LIBDIR)\Digest
-if exist $(LIBDIR)\MIME\Base64 rmdir /s /q $(LIBDIR)\MIME\Base64 || rmdir /s $(LIBDIR)\MIME\Base64
-if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME || rmdir /s $(LIBDIR)\MIME
- -del /f $(PODDIR)\*.html
- -del /f $(PODDIR)\*.bat
+ -cd $(PODDIR) && del /f *.html *.bat checkpods perlamiga.pod \
+ perlcygwin.pod perldos.pod perlhpux.pod perlmachten.pod \
+ perlmacos.pod perlmpeix.pod \
+ perlos2.pod perlvms.pod perlwin32.pod pod2html pod2latex \
+ pod2man pod2text pod2usage podchecker podselect
-cd ..\utils && del /f h2ph splain perlbug pl2pm c2ph h2xs perldoc \
dprofpp *.bat
-cd ..\x2p && del /f find2perl s2p *.bat