#8: Various issues with get_class interface
----------------------+-----------------------------------------------------
Reporter: pmichaud | Owner:
Type: bug | Status: new
Priority: unknown | Milestone:
Component: none | Version:
Severity: none | Keywords:
Lang: | Patch:
Platform: |
----------------------+-----------------------------------------------------
The get_class opcode doesn't deal well with finding classes
using an array, and there are other inconsistencies. Here are some:
(1) PDD15 is inconsistent about the mechanisms available to
identify a class PMC. In various places it says:
- class object, namespace object, key, or string name PMC (isa, line 349)
- classname, namespace, or key PMC (get_attr_keyed, line 655)
- class object or namespace key (setattribute, line 951)
- PMC key or namespace object (get_class, line 1034)
- string PMC, namespace key, class object (new, line 1067)
Notably, nowhere does it allow an array to be used to identify
a class, although the code does try to allow it (src/oo.c:188)
and we allow namespace lookups via arrays.
Ideally I think we ought to be able to identify a class by any of
(a) class object,
(b) NameSpace PMC,
(c) Key PMC,
(d) String PMC.
(2) Looking up a nonexistent class with a String PMC
produces a null PMC (correct), but looking up a nonexistent
class with an array produces a "get_string() not implemented in
class 'ResizableStringArray'" exception:
$ cat x.pir
.sub main
$P0 = box 'NoSuchClass'
$P1 = get_class $P0
$I1 = isnull $P1
say $I1
$P0 = split '::', 'NoSuchClass'
$P1 = get_class $P0
$I1 = isnull $P1
say $I1
.end
$ ./parrot x.pir
1
get_string() not implemented in class 'ResizableStringArray'
current instr.: 'main' pc 15 (x.pir:8)
$
(2) Even when using an array that does support get_string(),
we end up looking up the wrong class:
$ cat y.pir
.sub main
$P99 = newclass '3'
$P1 = new 'ResizablePMCArray'
push $P1, 'A'
push $P1, 'B'
push $P1, 'C'
$P0 = get_class $P1 # get class ['A';'B';'C']
$I0 = isnull $P0
say $I0
# what class did we get?
say $P0
.end
$ ./parrot y.pir
0
3
$
Pm
--
Ticket URL: <https://trac.parrot.org/parrot/ticket/8>
Parrot <http://trac.parrot.org/parrot/>
Parrot Development
_______________________________________________
parrot-tickets mailing list
[email protected]
http://lists.parrot.org/mailman/listinfo/parrot-tickets