From 2301d8cab1367ca17528d2bcc4edc5312f43ce93 Mon Sep 17 00:00:00 2001 From: Jonathan Worthington Date: Sat, 25 Jun 2011 18:10:31 +0200 Subject: [PATCH] Make it so Stash ~~ Hash, so we can introspect and install stuff into it from Perl 6 land. --- src/Perl6/Metamodel/BOOTSTRAP.pm | 25 ++++++++++++------------- src/Perl6/Metamodel/Stashing.pm | 6 ++++-- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/Perl6/Metamodel/BOOTSTRAP.pm b/src/Perl6/Metamodel/BOOTSTRAP.pm index 6277cf5b318..bf93c272705 100644 --- a/src/Perl6/Metamodel/BOOTSTRAP.pm +++ b/src/Perl6/Metamodel/BOOTSTRAP.pm @@ -497,22 +497,21 @@ Bool.HOW.publish_parrot_vtable_mapping(Bool); # Set up Stash type, using a Parrot hash under the hood for storage. my stub Stash metaclass Perl6::Metamodel::ClassHOW { ... }; -Stash.HOW.add_parent(Stash, Cool); -Stash.HOW.add_attribute(Stash, BOOTSTRAPATTR.new(:name<$!symbols>, :type(Mu))); -Stash.HOW.add_parrot_vtable_handler_mapping(Stash, 'get_pmc_keyed', '$!symbols'); -Stash.HOW.add_parrot_vtable_handler_mapping(Stash, 'get_pmc_keyed_str', '$!symbols'); -Stash.HOW.add_parrot_vtable_handler_mapping(Stash, 'set_pmc_keyed', '$!symbols'); -Stash.HOW.add_parrot_vtable_handler_mapping(Stash, 'set_pmc_keyed_str', '$!symbols'); -Stash.HOW.add_parrot_vtable_handler_mapping(Stash, 'exists_keyed', '$!symbols'); -Stash.HOW.add_parrot_vtable_handler_mapping(Stash, 'exists_keyed_str', '$!symbols'); -Stash.HOW.add_parrot_vtable_handler_mapping(Stash, 'get_iter', '$!symbols'); +Stash.HOW.add_parent(Stash, Hash); +Stash.HOW.add_parrot_vtable_handler_mapping(EnumMap, 'get_pmc_keyed', '$!storage'); +Stash.HOW.add_parrot_vtable_handler_mapping(EnumMap, 'get_pmc_keyed_str', '$!storage'); +Stash.HOW.add_parrot_vtable_handler_mapping(EnumMap, 'set_pmc_keyed', '$!storage'); +Stash.HOW.add_parrot_vtable_handler_mapping(EnumMap, 'set_pmc_keyed_str', '$!storage'); +Stash.HOW.add_parrot_vtable_handler_mapping(EnumMap, 'exists_keyed', '$!storage'); +Stash.HOW.add_parrot_vtable_handler_mapping(EnumMap, 'exists_keyed_str', '$!storage'); +Stash.HOW.add_parrot_vtable_handler_mapping(EnumMap, 'get_iter', '$!storage'); Stash.HOW.publish_parrot_vtable_handler_mapping(Stash); # Set this Stash type for the various types of package. -Perl6::Metamodel::PackageHOW.set_stash_type(Stash); -Perl6::Metamodel::ModuleHOW.set_stash_type(Stash); -Perl6::Metamodel::NativeHOW.set_stash_type(Stash); -Perl6::Metamodel::ClassHOW.set_stash_type(Stash); +Perl6::Metamodel::PackageHOW.set_stash_type(Stash, EnumMap); +Perl6::Metamodel::ModuleHOW.set_stash_type(Stash, EnumMap); +Perl6::Metamodel::NativeHOW.set_stash_type(Stash, EnumMap); +Perl6::Metamodel::ClassHOW.set_stash_type(Stash, EnumMap); # Give everything we've set up so far a Stash. Perl6::Metamodel::ClassHOW.add_stash(Mu); diff --git a/src/Perl6/Metamodel/Stashing.pm b/src/Perl6/Metamodel/Stashing.pm index f7444bbdaaf..fbfb90ab13a 100644 --- a/src/Perl6/Metamodel/Stashing.pm +++ b/src/Perl6/Metamodel/Stashing.pm @@ -2,15 +2,17 @@ # code that does its runtime during compile time yet. Really should just # have a my $stash_type and set/get from that. role Perl6::Metamodel::Stashing { - method set_stash_type($type) { + method set_stash_type($type, $attr_type) { pir::set_hll_global__vSP('StashType', $type); + pir::set_hll_global__vSP('StashAttrType', $attr_type); } method add_stash($type_obj) { unless pir::isnull__IP(pir::get_hll_global__Ps('StashType')) { my $stash_type := pir::get_hll_global__Ps('StashType'); + my $attr_type := pir::get_hll_global__Ps('StashAttrType'); my $stash := pir::repr_instance_of__PP($stash_type); - pir::setattribute__vPPsP($stash, $stash_type, '$!symbols', my %symbols); + pir::setattribute__vPPsP($stash, $attr_type, '$!storage', my %symbols); pir::set_who__vPP($type_obj, $stash); } $type_obj