96 | | == Known issues == |
97 | | |
98 | | - ~~The Parrot_call_sub_* and Parrot_call_method_* variants in src/extend.c don't all have the necessary changes to allow them to work with the new calling conventions (these are temporary implementations for backward compatibility before they're removed at the next deprecation point). Parrot_call_sub does have the right changes, and the others can be largely copied from it.~~ |
99 | | |
100 | | - ~~NCI hasn't been fully updated on caller and receiver side to use the new argument passing style.~~ |
101 | | |
102 | | - Return argument processing (Parrot_pcc_fill_returns_from_op and Parrot_pcc_fill_returns_from_c_args) doesn't currently support :named, :slurpy, :flatten, :optional, :opt_flag etc. (t/compilers/imcc/syn/tail.t, t/pmc/coroutine.t) |
103 | | |
104 | | - Parrot_pcc_fill_params_from_op and Parrot_pcc_fill_params_from_c_args are monolithic functions (basically finite state machines iterating over the arguments), that contain a great deal of nearly repeated code (one or two things different each time). Parrot_pcc_fill_returns_from_op and Parrot_pcc_fill_returns_from_c_args will be just as bad once they support all the options. Not a requirement before the merge, but these should be refactored into smaller subroutines. Needs to be thought through carefully though, it was a similar plan that lead to the current mess. |
105 | | |
106 | | - Flattening an argument doesn't alter the signature string stored, so multiple dispatch can't handle the resulting string. Need to modify the signature string while building the CallSignature object. (t/pmc/multisub.t and t/pmc/multidispatch.t) |
107 | | |
108 | | - ~~Edge cases on auto boxing/unboxing argument types, e.g. "Unable to set PMC value, the pointer is not a PMC" (t/oo/methods.t, t/oo/subclass.t, t/pmc/hashiteratorkey.t, t/pmc/object-meths.t, t/pmc/resizablestringarray.t, t/pmc/string.t)~~ |
109 | | |
110 | | - GC attempting to mark a bad variable (t/op/box.t) (Actually IMCC creates bad PackFile_Constants segment for box.t) |
111 | | |
112 | | - Insufficient checking on positional arguments passed inside named arguments (t/op/calling.t) |
113 | | |
114 | | - Insufficient checking on missing named arguments (t/op/cc_state.t) |
115 | | |
116 | | - Insufficient checking on too many arguments passed (t/pmc/exporter.t) |
117 | | |
118 | | - Some tests need to be updated to match the current error messages (t/op/calling.t, t/op/cc_params.t) |
119 | | |
120 | | - ~~Segfault in set_returns, possibly a null call object? (t/op/gc.t, t/pmc/exceptionhandler.t)~~ |
121 | | |
122 | | - Probably a problem with argument handling (t/op/lexicals.t, t/pmc/class.t, t/pmc/codestring.t, t/pmc/object-meths.t, t/pmc/sub.t) |
123 | | |
124 | | - ~~Two NCI edge cases (t/pmc/nci.t)~~ |
125 | | |
126 | | - Likely cases of code still calling into the old functions for invoking from C, instead of the new functions (t/pmc/sub.t, t/pmc/threads.t) |
127 | | |
128 | | - Likely bug in Parrot_call_sub reimplementation (t/src/embed.t) |
129 | | |
130 | | - miniparrot fails to compile if an installed parrot is not already present, because it has -lparrot in the compile options |
131 | | |
132 | | - Make sure the API and documentation consistently uses "args" and "returns" to mean "the things passed into the call or return" and "params" and "results" to mean "the things extracted from the call or return". |
133 | | |
134 | | - ~~Currently, test_more.pir cannot be used on pcc_reapply. Attempting to use test_more.pir results in~~ |
135 | | {{{ |
136 | | FixedIntegerArray: index out of bounds! |
137 | | current instr.: 'parrot;Test;Builder;Test;_initialize' pc 44 (runtime/parrot/library/Test/Builder/Test.pir:46) |
138 | | called from Sub 'parrot;Test;Builder;_initialize' pc 0 (runtime/parrot/library/Test/Builder.pir:51) |
139 | | ... call repeated 1 times |
140 | | }}} |
| 96 | |