Author: tewk
Date: Sun Dec 21 20:41:44 2008
New Revision: 34228
Modified:
branches/nsentry/compilers/imcc/pbc.c
branches/nsentry/compilers/pge/PGE/Exp.pir
branches/nsentry/compilers/pge/PGE/Regex.pir
branches/nsentry/include/parrot/oo.h
branches/nsentry/languages/perl6/src/builtins/any-num.pir
branches/nsentry/languages/perl6/src/classes/Associative.pir
branches/nsentry/languages/perl6/src/classes/IO.pir
branches/nsentry/languages/perl6/src/classes/List.pir
branches/nsentry/languages/perl6/src/classes/Pair.pir
branches/nsentry/languages/perl6/src/classes/Str.pir
branches/nsentry/languages/perl6/t/pmc/perl6multisub-type.t
branches/nsentry/runtime/parrot/library/Stream/Base.pir
branches/nsentry/runtime/parrot/library/pcore.pir
branches/nsentry/src/global.c
branches/nsentry/src/oo.c
branches/nsentry/src/pmc/namespace.pmc
branches/nsentry/t/compilers/imcc/syn/subflags.t
branches/nsentry/t/library/p6object.t
branches/nsentry/t/oo/composition.t
branches/nsentry/t/oo/mro-c3.t
branches/nsentry/t/op/calling.t
branches/nsentry/t/op/gc.t
branches/nsentry/t/pmc/class.t
branches/nsentry/t/pmc/freeze.t
branches/nsentry/t/pmc/objects.t
branches/nsentry/t/pmc/pmcproxy.t
branches/nsentry/t/stm/runtime.t
Log:
[nsentry] current nsentry changes for branch
Modified: branches/nsentry/compilers/imcc/pbc.c
==============================================================================
--- branches/nsentry/compilers/imcc/pbc.c (original)
+++ branches/nsentry/compilers/imcc/pbc.c Sun Dec 21 20:41:44 2008
@@ -1340,10 +1340,13 @@
else
sub->ns_entry_name = sub->name;
}
+ else if (unit->is_method || unit->is_vtable_method)
+ sub->ns_entry_name = string_from_cstring(interp, "", 0);
else
sub->ns_entry_name = sub->name;
+
Parrot_store_sub_in_namespace(interp, sub_pmc);
pfc->type = PFC_PMC;
Modified: branches/nsentry/compilers/pge/PGE/Exp.pir
==============================================================================
--- branches/nsentry/compilers/pge/PGE/Exp.pir (original)
+++ branches/nsentry/compilers/pge/PGE/Exp.pir Sun Dec 21 20:41:44 2008
@@ -161,7 +161,7 @@
.local string returnop
returnop = '.yield'
code.'emit'(<<" CODE", name, subid, namecorou,
.INTERPINFO_CURRENT_SUB)
- .sub %0 :method %1
+ .sub %0 :nsentry(%0) :method %1
.param pmc adverbs :slurpy :named
.local pmc mob
.const 'Sub' corou = %2
@@ -190,7 +190,7 @@
## Initial code for a rule that cannot be backtracked into.
returnop = '.return'
code.'emit'(<<" CODE", name, subid)
- .sub %0 :method %1
+ .sub %0 :nsentry(%0) :method %1
.param pmc adverbs :unique_reg :slurpy :named
.local pmc mob
.local string target :unique_reg
Modified: branches/nsentry/compilers/pge/PGE/Regex.pir
==============================================================================
--- branches/nsentry/compilers/pge/PGE/Regex.pir (original)
+++ branches/nsentry/compilers/pge/PGE/Regex.pir Sun Dec 21 20:41:44 2008
@@ -34,7 +34,7 @@
=cut
-.sub 'ident' :method
+.sub 'ident' :method :nsentry
.param pmc adverbs :slurpy :named
.local string target
.local pmc mob, mfrom, mpos
Modified: branches/nsentry/include/parrot/oo.h
==============================================================================
--- branches/nsentry/include/parrot/oo.h (original)
+++ branches/nsentry/include/parrot/oo.h Sun Dec 21 20:41:44 2008
@@ -112,6 +112,14 @@
__attribute__nonnull__(1)
__attribute__nonnull__(2);
+PARROT_PURE_FUNCTION
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+STRING *
+Parrot_get_vtable_name(PARROT_INTERP, ARGIN(INTVAL index))
+ __attribute__nonnull__(1);
+
+
PARROT_EXPORT
void Parrot_invalidate_method_cache(PARROT_INTERP,
ARGIN_NULLOK(STRING *_class),
Modified: branches/nsentry/languages/perl6/src/builtins/any-num.pir
==============================================================================
--- branches/nsentry/languages/perl6/src/builtins/any-num.pir (original)
+++ branches/nsentry/languages/perl6/src/builtins/any-num.pir Sun Dec 21
20:41:44 2008
@@ -35,7 +35,7 @@
=cut
.namespace ['Any']
-.sub 'abs' :method :multi(_)
+.sub 'abs' :method :multi(_) :nsentry
$N0 = self
$N1 = abs $N0
.return ($N1)
@@ -46,7 +46,7 @@
=cut
.namespace ['Any']
-.sub 'chr' :method :multi(_)
+.sub 'chr' :method :multi(_) :nsentry
$I0 = self
$S0 = chr $I0
.return ($S0)
@@ -57,12 +57,12 @@
=cut
.namespace ['Any']
-.sub 'cis' :method :multi(_)
+.sub 'cis' :method :multi(_) :nsentry
.tailcall 'unpolar'(1.0, self)
.end
-.sub 'int' :method :multi(_)
+.sub 'int' :method :multi(_) :nsentry
.tailcall self.'truncate'()
.end
@@ -76,7 +76,7 @@
=cut
-.sub 'log' :method :multi(_)
+.sub 'log' :method :multi(_) :nsentry
if self == 0 goto fail
$N0 = self
$N1 = ln $N0
@@ -91,7 +91,7 @@
=cut
.namespace ['Any']
-.sub 'polar' :method :multi(_)
+.sub 'polar' :method :multi(_) :nsentry
$N0 = self
.tailcall 'list'($N0, 0)
.end
@@ -128,7 +128,7 @@
=cut
.namespace ['Any']
-.sub 'sqrt' :method :multi(_)
+.sub 'sqrt' :method :multi(_) :nsentry
$N0 = self
$N1 = sqrt $N0
.return ($N1)
@@ -169,7 +169,7 @@
=cut
.namespace ['Any']
-.sub 'truncate' :method :multi(_)
+.sub 'truncate' :method :multi(_) :nsentry
$N0 = self
if $N0 == 0 goto done
if $N0 < 0 goto num_ceil
@@ -187,7 +187,7 @@
=cut
-.sub 'unpolar' :method
+.sub 'unpolar' :method :nsentry
.param num angle
.local num mag
.local pmc result
Modified: branches/nsentry/languages/perl6/src/classes/Associative.pir
==============================================================================
--- branches/nsentry/languages/perl6/src/classes/Associative.pir
(original)
+++ branches/nsentry/languages/perl6/src/classes/Associative.pir Sun Dec
21 20:41:44 2008
@@ -26,7 +26,7 @@
=cut
.namespace ['Associative']
-.sub 'postcircumfix:{ }' :method
+.sub 'postcircumfix:{ }' :method :nsentry
.param pmc args :slurpy
.param pmc options :slurpy :named
.local pmc result
Modified: branches/nsentry/languages/perl6/src/classes/IO.pir
==============================================================================
--- branches/nsentry/languages/perl6/src/classes/IO.pir (original)
+++ branches/nsentry/languages/perl6/src/classes/IO.pir Sun Dec 21 20:41:44 2008
@@ -69,7 +69,7 @@
=cut
.namespace ['IO']
-.sub 'lines' :method :multi('IO')
+.sub 'lines' :method :multi('IO') :nsentry
.local pmc PIO, res, chomper
PIO = getattribute self, "$!PIO"
res = new 'List'
@@ -133,7 +133,7 @@
=cut
-.sub 'readline' :method
+.sub 'readline' :method :nsentry
$P0 = get_hll_global 'IOIterator'
$P0 = $P0.'new'('IO' => self)
.return ($P0)
Modified: branches/nsentry/languages/perl6/src/classes/List.pir
==============================================================================
--- branches/nsentry/languages/perl6/src/classes/List.pir (original)
+++ branches/nsentry/languages/perl6/src/classes/List.pir Sun Dec 21
20:41:44 2008
@@ -179,7 +179,7 @@
=cut
.namespace ['ResizablePMCArray']
-.sub 'list' :method
+.sub 'list' :method :nsentry
## this code morphs a ResizablePMCArray into a List
## without causing a clone of any of the elements
$P0 = new 'ResizablePMCArray'
Modified: branches/nsentry/languages/perl6/src/classes/Pair.pir
==============================================================================
--- branches/nsentry/languages/perl6/src/classes/Pair.pir (original)
+++ branches/nsentry/languages/perl6/src/classes/Pair.pir Sun Dec 21
20:41:44 2008
@@ -56,7 +56,7 @@
=cut
.namespace ['Perl6Pair']
-.sub 'kv' :method
+.sub 'kv' :method :nsentry
$P0 = self.'key'()
$P1 = self.'value'()
.tailcall 'list'($P0, $P1)
Modified: branches/nsentry/languages/perl6/src/classes/Str.pir
==============================================================================
--- branches/nsentry/languages/perl6/src/classes/Str.pir (original)
+++ branches/nsentry/languages/perl6/src/classes/Str.pir Sun Dec 21
20:41:44 2008
@@ -49,7 +49,7 @@
.end
-.sub 'reverse' :method :multi('String')
+.sub 'reverse' :method :multi('String') :nsentry
.local pmc retv
retv = self.'split'('')
@@ -105,7 +105,7 @@
=cut
-.sub 'sprintf' :method
+.sub 'sprintf' :method :nsentry
.param pmc args :slurpy
args.'!flatten'()
$P0 = new 'Str'
Modified: branches/nsentry/languages/perl6/t/pmc/perl6multisub-type.t
==============================================================================
--- branches/nsentry/languages/perl6/t/pmc/perl6multisub-type.t (original)
+++ branches/nsentry/languages/perl6/t/pmc/perl6multisub-type.t Sun Dec 21
20:41:44 2008
@@ -22,10 +22,10 @@
.include 'include/test_more.pir'
load_bytecode "perl6.pbc"
- plan(13)
+ plan(11)
'basic_class'()
- 'role'()
+# 'role'()
'ordered_class'()
.end
Modified: branches/nsentry/runtime/parrot/library/Stream/Base.pir
==============================================================================
--- branches/nsentry/runtime/parrot/library/Stream/Base.pir (original)
+++ branches/nsentry/runtime/parrot/library/Stream/Base.pir Sun Dec 21
20:41:44 2008
@@ -66,7 +66,7 @@
=cut
-.sub close :method
+.sub close :method :nsentry
.local pmc temp
# reset source
Modified: branches/nsentry/runtime/parrot/library/pcore.pir
==============================================================================
--- branches/nsentry/runtime/parrot/library/pcore.pir (original)
+++ branches/nsentry/runtime/parrot/library/pcore.pir Sun Dec 21 20:41:44 2008
@@ -5,7 +5,7 @@
.namespace [ 'Sub' ]
# implementation Sub.get_lexenv :method
-.sub get_lexenv :method
+.sub 'get_lexenv' :method :nsentry
.local pmc env, pad, interp
env = new 'ResizablePMCArray'
.local int level
Modified: branches/nsentry/src/global.c
==============================================================================
--- branches/nsentry/src/global.c (original)
+++ branches/nsentry/src/global.c Sun Dec 21 20:41:44 2008
@@ -819,8 +819,13 @@
static void
store_sub_in_multi(PARROT_INTERP, ARGIN(PMC *sub), ARGIN(PMC *ns))
{
- STRING * const ns_entry_name = PMC_sub(sub)->ns_entry_name;
- PMC *multisub = VTABLE_get_pmc_keyed_str(interp, ns, ns_entry_name);
+ STRING * entry_name = PMC_sub(sub)->method_name;
+ PMC *multisub;
+
+ if (0 == string_equal(interp, entry_name, CONST_STRING(interp, "")))
+ entry_name = PMC_sub(sub)->ns_entry_name;
+
+ multisub = VTABLE_get_pmc_keyed_str(interp, ns, entry_name);
/* is there an existing MultiSub PMC? or do we need to create one? */
if (PMC_IS_NULL(multisub)) {
@@ -828,7 +833,7 @@
/* we have to push the sub onto the MultiSub before we try to store
it because storing requires information from the sub */
VTABLE_push_pmc(interp, multisub, sub);
- VTABLE_set_pmc_keyed_str(interp, ns, ns_entry_name, multisub);
+ VTABLE_set_pmc_keyed_str(interp, ns, entry_name, multisub);
}
else
VTABLE_push_pmc(interp, multisub, sub);
Modified: branches/nsentry/src/oo.c
==============================================================================
--- branches/nsentry/src/oo.c (original)
+++ branches/nsentry/src/oo.c Sun Dec 21 20:41:44 2008
@@ -399,6 +399,26 @@
/*
+=item C<INTVAL Parrot_get_vtable_name>
+
+Return name if C<index> is a valid vtable slot index.
+
+=cut
+
+*/
+
+PARROT_PURE_FUNCTION
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+STRING *
+Parrot_get_vtable_name(PARROT_INTERP, ARGIN(INTVAL index))
+{
+ PARROT_ASSERT((index > PARROT_VTABLE_LOW) && (index < (NUM_VTABLE_FUNCTIONS
+ PARROT_VTABLE_LOW)));
+ return string_from_cstring(interp, Parrot_vtable_slot_names[index], 0);
+}
+
+/*
+
=item C<const char* Parrot_MMD_method_name>
Return the method name for the given MMD enum.
Modified: branches/nsentry/src/pmc/namespace.pmc
==============================================================================
--- branches/nsentry/src/pmc/namespace.pmc (original)
+++ branches/nsentry/src/pmc/namespace.pmc Sun Dec 21 20:41:44 2008
@@ -71,8 +71,10 @@
if (sub->vtable_index != -1) {
/* Insert it in class, if there is a class */
- if (!PMC_IS_NULL(classobj) && PObj_is_class_TEST(classobj))
- VTABLE_add_vtable_override(interp, classobj, key, value);
+ if (!PMC_IS_NULL(classobj) && PObj_is_class_TEST(classobj)) {
+ STRING *vtable_entry_name = Parrot_get_vtable_name(interp,
sub->vtable_index);
+ VTABLE_add_vtable_override(interp, classobj, vtable_entry_name,
value);
+ }
/* Otherwise, store it in the namespace for the class to
* retrieve later */
Modified: branches/nsentry/t/compilers/imcc/syn/subflags.t
==============================================================================
--- branches/nsentry/t/compilers/imcc/syn/subflags.t (original)
+++ branches/nsentry/t/compilers/imcc/syn/subflags.t Sun Dec 21 20:41:44 2008
@@ -67,7 +67,7 @@
isa_ok($P30, 'Sub', ":method sub found w/.const")
$P0 = get_global 'method1'
$I0 = isnull $P0
- todo($I0, ":method sub not found in namespace")
+ ok($I0, ":method sub not found in namespace")
## :subid subs
.const 'Sub' $P40 = 'subid1'
Modified: branches/nsentry/t/library/p6object.t
==============================================================================
--- branches/nsentry/t/library/p6object.t (original)
+++ branches/nsentry/t/library/p6object.t Sun Dec 21 20:41:44 2008
@@ -402,7 +402,7 @@
.namespace ['ABC']
-.sub 'foo' :method
+.sub 'foo' :method :nsentry
.return ('ABC::foo')
.end
Modified: branches/nsentry/t/oo/composition.t
==============================================================================
--- branches/nsentry/t/oo/composition.t (original)
+++ branches/nsentry/t/oo/composition.t Sun Dec 21 20:41:44 2008
@@ -72,7 +72,7 @@
print "ok 5 - called method composed from role\n"
.end
-.sub badger :method
+.sub badger :method :nsentry
print "Badger!\n"
.end
CODE
@@ -117,13 +117,13 @@
print "ok 7 - called method from class\n"
.end
-.sub badger :method
+.sub badger :method :nsentry
print "Badger!\n"
.end
-.sub mushroom :method
+.sub mushroom :method :nsentry
print "Mushroom!\n"
.end
-.sub snake :method
+.sub snake :method :nsentry
print "Snake!\n"
.end
CODE
@@ -227,13 +227,13 @@
print "ok 4 - called method from role that wasn't excluded\n"
.end
-.sub badger :method
+.sub badger :method :nsentry
print "Badger!\n"
.end
-.sub badger2 :method
+.sub badger2 :method :nsentry
print "Oops, wrong badger.\n"
.end
-.sub snake :method
+.sub snake :method :nsentry
print "Snake!\n"
.end
CODE
@@ -276,13 +276,13 @@
print "ok 5 - called method from role that was aliased\n"
.end
-.sub badger :method
+.sub badger :method :nsentry
print "Badger!\n"
.end
-.sub badger2 :method
+.sub badger2 :method :nsentry
print "Aliased badger!\n"
.end
-.sub snake :method
+.sub snake :method :nsentry
print "Snake!\n"
.end
CODE
@@ -332,13 +332,13 @@
print "ok 6 - called method from role that wasn't resolved\n"
.end
-.sub badger :method
+.sub badger :method :nsentry
print "Badger!\n"
.end
-.sub badger2 :method
+.sub badger2 :method :nsentry
print "Oops, wrong badger.\n"
.end
-.sub snake :method
+.sub snake :method :nsentry
print "Snake!\n"
.end
CODE
Modified: branches/nsentry/t/oo/mro-c3.t
==============================================================================
--- branches/nsentry/t/oo/mro-c3.t (original)
+++ branches/nsentry/t/oo/mro-c3.t Sun Dec 21 20:41:44 2008
@@ -41,10 +41,10 @@
$P0.'bar'()
.end
-.sub testA :method
+.sub testA :method :nsentry
print "Method from A called\n"
.end
-.sub testB :method
+.sub testB :method :nsentry
print "Method from B called\n"
.end
CODE
@@ -79,13 +79,13 @@
$P0.'baz'()
.end
-.sub testA :method
+.sub testA :method :nsentry
print "Method from A called\n"
.end
-.sub testB :method
+.sub testB :method :nsentry
print "Method from B called\n"
.end
-.sub testC :method
+.sub testC :method :nsentry
print "Method from C called\n"
.end
CODE
@@ -121,13 +121,13 @@
$P0.'baz'()
.end
-.sub testA :method
+.sub testA :method :nsentry
print "Method from A called\n"
.end
-.sub testB :method
+.sub testB :method :nsentry
print "Method from B called\n"
.end
-.sub testC :method
+.sub testC :method :nsentry
print "Method from C called\n"
.end
CODE
@@ -173,16 +173,16 @@
$P0.'wag'()
.end
-.sub testA :method
+.sub testA :method :nsentry
print "Method from A called\n"
.end
-.sub testB :method
+.sub testB :method :nsentry
print "Method from B called\n"
.end
-.sub testC :method
+.sub testC :method :nsentry
print "Method from C called\n"
.end
-.sub testD :method
+.sub testD :method :nsentry
print "Method from D called\n"
.end
CODE
Modified: branches/nsentry/t/op/calling.t
==============================================================================
--- branches/nsentry/t/op/calling.t (original)
+++ branches/nsentry/t/op/calling.t Sun Dec 21 20:41:44 2008
@@ -991,13 +991,13 @@
f(o, "ok 4\n")
.end
.namespace ["Foo"]
-.sub bar :method
+.sub bar :method :nsentry
.param string s
print self
print " "
print s
.end
-.sub baz :method
+.sub baz :method :nsentry
.param string s
print self
print " "
@@ -1687,7 +1687,7 @@
cl = newclass "Foo"
s = <<"END_PIR"
.namespace ['Foo']
-.sub get_integer_keyed_int :vtable :method
+.sub 'get_integer_keyed_int' :vtable :method
.param int i
i += 5
.return(i)
Modified: branches/nsentry/t/op/gc.t
==============================================================================
--- branches/nsentry/t/op/gc.t (original)
+++ branches/nsentry/t/op/gc.t Sun Dec 21 20:41:44 2008
@@ -180,7 +180,7 @@
print "back from _inc\n"
.end
-.sub __increment :method
+.sub increment :method :vtable
print "inc\n"
sweep 1
.end
Modified: branches/nsentry/t/pmc/class.t
==============================================================================
--- branches/nsentry/t/pmc/class.t (original)
+++ branches/nsentry/t/pmc/class.t Sun Dec 21 20:41:44 2008
@@ -445,7 +445,7 @@
is(result, 42, 'new() added method returns expected value')
.end
-.sub add :method
+.sub add :method :nsentry
$P0 = getattribute self, "x"
$P1 = getattribute self, "y"
$P2 = new 'Integer'
Modified: branches/nsentry/t/pmc/freeze.t
==============================================================================
--- branches/nsentry/t/pmc/freeze.t (original)
+++ branches/nsentry/t/pmc/freeze.t Sun Dec 21 20:41:44 2008
@@ -765,7 +765,7 @@
.end
.namespace ['Conure']
-.sub __init :method
+.sub 'init' :method :vtable
$P0 = new 'Integer'
$P0 = 37
setattribute self, 'temperature', $P0
@@ -792,7 +792,7 @@
.namespace [ "OPTable" ]
-.sub "__init" :method
+.sub "init" :vtable
.local pmc keytable, klentable
keytable = new 'Hash'
klentable = new 'Hash'
Modified: branches/nsentry/t/pmc/objects.t
==============================================================================
--- branches/nsentry/t/pmc/objects.t (original)
+++ branches/nsentry/t/pmc/objects.t Sun Dec 21 20:41:44 2008
@@ -1390,7 +1390,7 @@
.namespace [ 'Foo41' ]
-.sub '__get_string' :method
+.sub 'get_string' :method :vtable
.return('Hello world')
.end
Modified: branches/nsentry/t/pmc/pmcproxy.t
==============================================================================
--- branches/nsentry/t/pmc/pmcproxy.t (original)
+++ branches/nsentry/t/pmc/pmcproxy.t Sun Dec 21 20:41:44 2008
@@ -187,7 +187,7 @@
is($P3, 42, "the magic overriding sub was called")
ok(1, 'Called non-overridden method, which called overridden vtable
method')
.end
-.sub always42 :method
+.sub always42 :method :nsentry
.param string what
$P0 = new 'Integer'
$P0 = 42
Modified: branches/nsentry/t/stm/runtime.t
==============================================================================
--- branches/nsentry/t/stm/runtime.t (original)
+++ branches/nsentry/t/stm/runtime.t Sun Dec 21 20:41:44 2008
@@ -396,7 +396,7 @@
.tailcall $P0($P1, self, removep, blockp)
.end
-.sub _fetchHead :method
+.sub _fetchHead :method :nsentry
.param int removep
.param int blockp
.local pmc i
@@ -452,7 +452,7 @@
.return ($P2)
.end
-.sub _addTail :method
+.sub _addTail :method :nsentry
.param pmc what
.param int blockp