Skip to content

Commit f191cd2

Browse files
committed
Get v-table override inheritance/overriding to work.
1 parent 105de53 commit f191cd2

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

src/metamodel/how/NQPClassHOW.pm

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ knowhow NQPClassHOW {
152152

153153
# Install Parrot v-table mapping.
154154
if +%!parrot_vtable_mapping {
155-
pir::stable_publish_vtable_mapping__vPP($obj, %!parrot_vtable_mapping);
155+
self.publish_parrot_vtable_mapping($obj);
156156
}
157157

158158
$obj
@@ -322,6 +322,19 @@ knowhow NQPClassHOW {
322322
pir::publish_method_cache($obj, %cache)
323323
}
324324

325+
method publish_parrot_vtable_mapping($obj) {
326+
my %mapping;
327+
for @!mro {
328+
my %map := $_.HOW.parrot_vtable_mappings($_, :local(1));
329+
for %map {
330+
unless %mapping{$_.key} {
331+
%mapping{$_.key} := $_.value;
332+
}
333+
}
334+
}
335+
pir::stable_publish_vtable_mapping__vPP($obj, %mapping);
336+
}
337+
325338
##
326339
## Introspecty
327340
##
@@ -358,6 +371,10 @@ knowhow NQPClassHOW {
358371
@attrs
359372
}
360373

374+
method parrot_vtable_mappings($obj, :$local!) {
375+
%!parrot_vtable_mapping
376+
}
377+
361378
##
362379
## Checky
363380
##

0 commit comments

Comments
 (0)