Skip to content

Commit 53785a3

Browse files
committed
Made it compilable on non-multiplicity perl again
1 parent 1017c96 commit 53785a3

File tree

9 files changed

+44
-10
lines changed

9 files changed

+44
-10
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ _build/
77
perl++/headers/config.h
88
perl++/headers/extend.h
99
perl++/source/evaluate.C
10+
perl++/headers/multiplicity.h
1011
test.out
1112
Build
1213
MYMETA.yml

MANIFEST

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ perl++/source/hash.C
5050
perl++/source/helpers.C
5151
perl++/source/internal.h
5252
perl++/source/interpreter.C
53+
perl++/source/multiplicity.h.PL
5354
perl++/source/primitives.C
5455
perl++/source/reference.C
5556
perl++/source/regex.C

MANIFEST.SKIP

+1
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ libperl\+\+-.*\.tar\.gz
1111
^MYMETA\.yml$
1212
^perl\+\+/headers/config\.h$
1313
^perl\+\+/headers/extend\.h$
14+
^perl\+\+/headers/multiplicity.h$
1415
^perl\+\+/source/evaluate\.C$
1516
^ppport\.h$

inc/Perlpp/Build.pm

+8-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ my %cpp_files = (
2424
portable('perl++/source/extend.pre') => portable('perl++/headers/extend.h'),
2525
);
2626

27+
my %perl_files = (
28+
portable('perl++/source/evaluate.C.PL') => portable('perl++/source/evaluate.C'),
29+
portable('perl++/source/multiplicity.h.PL') => portable('perl++/headers/multiplicity.h'),
30+
);
31+
2732
my %examples = (
2833
executables => [ qw/combined game/ ],
2934
libraries => [ qw/Extend Extend2/ ]
@@ -46,7 +51,9 @@ my %action_map = (
4651
$builder->process_cpp($input, $output);
4752
}
4853

49-
$builder->process_perl(portable('perl++/source/evaluate.C.PL'), portable('perl++/source/evaluate.C'));
54+
while (my ($input, $output) = each %perl_files) {
55+
$builder->process_perl($input, $output);
56+
}
5057
},
5158
'perl++' => sub {
5259
my $builder = shift;

perl++/headers/interpreter.h

+5-5
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ namespace perl {
4545

4646
bool has_magic_string(interpreter*, SV*);
4747

48-
typedef int (*magic_fun)(interpreter*, SV*, MAGIC*);
48+
typedef int (*magic_fun)(pTHX_ SV*, MAGIC*);
4949
void attach_getset_magic(interpreter* interp, SV* var, magic_fun get_val, magic_fun set_val, const void* buffer, size_t buffer_length);
5050

5151
void* get_magic_ptr(const MAGIC*);
@@ -69,15 +69,15 @@ namespace perl {
6969
(object.*writer)(arg);
7070
}
7171
public:
72-
static int read(interpreter* interp, SV* var, MAGIC* magic_ptr) {
72+
static int read(pTHX_ SV* var, MAGIC* magic_ptr) {
7373
const Wrapper& tmp = *implementation::get_magic_ptr<Wrapper>(magic_ptr);
74-
Scalar::Temp val(interp, var, false);
74+
Scalar::Temp val(aTHX_ var, false);
7575
tmp.read(val);
7676
return 0;
7777
}
78-
static int write(interpreter* interp, SV* var, MAGIC* magic_ptr) {
78+
static int write(pTHX_ SV* var, MAGIC* magic_ptr) {
7979
const Wrapper& tmp = *implementation::get_magic_ptr<Wrapper>(magic_ptr);
80-
Scalar::Temp val(interp, var, false);
80+
Scalar::Temp val(aTHX_ var, false);
8181
tmp.write(val);
8282
return 0;
8383
}

perl++/headers/perl++.h

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#endif
3838

3939
// I split the header, to ease working with it.
40+
#include <perl++/multiplicity.h>
4041
#include <perl++/config.h>
4142
#include <perl++/helpers.h>
4243
#include <perl++/scalar.h>

perl++/source/exporter.C

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ namespace perl {
6767
Perl_mark::Perl_mark(int _ax, SV** _mark, unsigned _items) : ax(_ax), mark(_mark), items(_items) {
6868
}
6969

70-
const Code::Value export_as(interpreter* interp, const char* name, void (*func)(interpreter* , CV*), const void* buffer, int length) {
70+
const Code::Value export_as(interpreter* interp, const char* name, void (*func)(pTHX_ CV*), const void* buffer, int length) {
7171
static char nothing[] = "";
7272
CV* const tmp = newXS(const_cast<char *>(name), func, nothing);
7373
implementation::set_magic_string(interp, reinterpret_cast<SV*>(tmp), static_cast<const char*>(buffer), length);

perl++/source/interpreter.C

+5-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
extern "C" {
99
void boot_DynaLoader(pTHX_ CV* cv);
1010

11-
static void xs_init(interpreter* interp) {
11+
static void xs_init(pTHX) {
1212
dXSUB_SYS;
1313
newXS(const_cast<char*>("DynaLoader::boot_DynaLoader"), boot_DynaLoader, const_cast<char*>(__FILE__));
1414
}
@@ -69,9 +69,11 @@ namespace perl {
6969
Interpreter::Interpreter(interpreter* other, const override&) : raw_interp(other, noop) {
7070
eval(implementation::to_eval);
7171
}
72+
#ifdef MULTIPLICITY
7273
Interpreter Interpreter::clone() const {
7374
return Interpreter(perl_clone(interp, CLONEf_KEEP_PTR_TABLE), override()); // FIXME reference counting
7475
}
76+
#endif
7577
bool operator==(const Interpreter& first, const Interpreter& second) {
7678
return first.raw_interp == second.raw_interp;
7779
}
@@ -199,7 +201,7 @@ namespace perl {
199201
family.insert(&type);
200202
}
201203

202-
MGVTBL* get_object_vtbl(const std::type_info& pre_key, int (*destruct_ptr)(interpreter*, SV*, MAGIC*)) {
204+
MGVTBL* get_object_vtbl(const std::type_info& pre_key, int (*destruct_ptr)(pTHX_ SV*, MAGIC*)) {
203205
static boost::ptr_map<const std::type_info*, MGVTBL> table;
204206
const std::type_info* key = &pre_key;
205207
if (table.find(key) == table.end()) {
@@ -253,7 +255,7 @@ namespace perl {
253255
package_name = SvPV_nolen(ST(0));
254256
}
255257
Package Exporter_helper::get_package() {
256-
return Package(aTHX_ package_name);
258+
return Package(interp, package_name);
257259
}
258260
Exporter_helper::~Exporter_helper() {
259261
int ax = axp;

perl++/source/multiplicity.h.PL

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#! /usr/bin/perl -T
2+
3+
use strict;
4+
use warnings FATAL => 'all';
5+
use Config;
6+
7+
local $\ = "\n";
8+
print q/#ifndef pTHX_/;
9+
if ($Config{usethreads}) {
10+
print q/#define aTHX interp,/;
11+
print q/#define aTHX_ aTHX,/;
12+
print q/#define pTHX register interpreter* interp/;
13+
print q/#define pTHX_ pTHX,/;
14+
}
15+
else {
16+
print q/#define aTHX/;
17+
print q/#define aTHX_/;
18+
print q/#define pTHX/;
19+
print q/#define pTHX_/;
20+
}
21+
print q/#endif/;

0 commit comments

Comments
 (0)