Changes between Version 7 and Version 8 of CallingConventionsTasklist

Show
Ignore:
Timestamp:
10/05/09 12:57:17 (12 years ago)
Author:
whiteknight
Comment:

regroup items in this tasklist into individual refactors starting with the current PCC refactors and moving down to other items

Legend:

Unmodified
Added
Removed
Modified
  • CallingConventionsTasklist

    v7 v8  
    1 '''Global changes:''' 
     1== PCC Rewiring Refactors (Current) == 
    22 
    33* Convert all calls to 'Parrot_runops_fromc_args*' into calls to 'Parrot_pcc_invoke_sub_from_c_args'. 
    44 
    5 * Add a :lookahead option for Sub parameters. A lookahead parameter takes a named argument preferrably, takes a positional otherwise. 
     5* There's a huge hodge-podge of functions that do basically the same thing. Trim these down to a logical set that handle the basic cases. (calling from PIR, calling from C, calling from a CallSignature PMC). 
     6 
     7* Converge on one calling convention for all invocation. Different entry points for calling from PIR, C, or CallSignature PMC. Different exit points, depending on whether the call is a Sub (Closure, Contintuation, etc) or a CFunction. But same code pattern, and same core routines for all. 
     8 
     9* Refactor to remove code duplication between the various dispatch systems. 
     10 
     11* Standardize on PCC-style signature description strings throughout the system, instead of different signature description strings for different calling APIs. Excludes NCI signatures. 
     12 
     13* Enable dispatching by CallSignature PMC everywhere. 
     14 
     15* Add adverb modifier "i" to signature string for an invocant. 
     16 
     17* Add lots of documentation about signature strings, CallSignature, dispatch, etc 
     18 
     19* Change the default vtable function generator for Object PMC to generate 'Parrot_pcc_invoke_sub_from_c_args' calls instead of 'Parrot_runops_fromc_args*' calls. 
     20 
     21== Invoke Refactor == 
     22 
     23* VTABLE_invoke is inconsistent between different sub-like PMCs. For most subs it simply sets up the environment for invocation, and selects the first opcode instruction of the sub as the next 'opcode_t *' for 'runops'. For NCI subs it actually invokes the function pointer. The disjoint means that NCI subs can't be invoked from C argument lists the same way as all the other subs (because the regular C argument list passing can only happen *after* VTABLE_invoke has been called to set up the environment, but NCI requires the arguments to be passed *before* the call to VTABLE_invoke). 
     24 
     25* VTABLE_invoke can't really be overridden from PIR, because it requires direct access to low-level interpreter data structures. See #103 
     26 
     27== Lookahead Refactor == 
     28 
     29* Add a :lookahead option for Sub parameters. A lookahead parameter takes a named argument preferably, takes a positional otherwise. 
     30 
     31== Params/Returns Unification Refactor == 
     32 
     33* Refactor PASM calling code so that set_returns is called before get_results 
     34 
     35* Unify argument passing and returns passing to use a single codepath. 
     36 
     37* Optimize PCC dispatch (refactor to slim down the code). 
     38 
     39== Misc or Old items == 
    640 
    741* Remove the TODO mark from t/pmc/multidispatch.t test 32 (see RT #59628). 
     
    943* ~~Merge inter_call.c and inter_run.c, or completely rename and resort the existing functions. Possibly src/calling.c and src/opcode_runloop.c or src/calling/pcc.c and src/calling/opcodes.c?~~ (Done in r36595) 
    1044 
    11 * There's a huge hodge-podge of functions that do basically the same thing. Trim these down to a logical set that handle the basic cases. (calling from PIR, calling from C, calling from a CallSignature PMC). 
    12  
    13 * Converge on one calling convention for all invocation. Different entry points for calling from PIR, C, or CallSignature PMC. Different exit points, depending on whether the call is a Sub (Closure, Contintuation, etc) or a CFunction. But same code pattern, and same core routines for all. 
    14  
    15 * VTABLE_invoke is inconsistent between different sub-like PMCs. For most subs it simply sets up the environment for invocation, and selects the first opcode instruction of the sub as the next 'opcode_t *' for 'runops'. For NCI subs it actually invokes the function pointer. The disjoint means that NCI subs can't be invoked from C argument lists the same way as all the other subs (because the regular C argument list passing can only happen *after* VTABLE_invoke has been called to set up the environment, but NCI requires the arguments to be passed *before* the call to VTABLE_invoke). 
    16  
    17 * VTABLE_invoke can't really be overridden from PIR, because it requires direct access to low-level interpreter data structures. See #103 
    18  
    19 * Standardize on PCC-style signature description strings throughout the system (instead of different signature description strings for NCI, PCC, and regular subs). 
    20  
    21 * Refactor to remove code duplication between the various dispatch systems. 
    22  
    23 * Optimize PCC dispatch (refactor to slim down the code). 
    24  
    25 * Enable dispatching by CallSignature PMC everywhere. 
    26  
    2745* Stop marshalling and demarshalling between C calling conventions and Parrot Calling Conventions (especially in hot paths, such as MMD and vtables) 
    28  
    29 * Refactor PASM calling code so that set_returns is called before get_results 
    30  
    31 * Unify argument passing and returns passing to use a single codepath. 
    32  
    33 '''src/inter_call.c:''' 
    3446 
    3547* Change 'signature' in ‘Parrot_pcc_invoke_from_sig_object’ to a Parrot STRING, and change all relevant functions to accept a Parrot STRING instead of a C string. 
    3648 
    37 '''src/multidispatch.c:''' 
    38  
    3949* Modify Parrot_build_sig_object_from_varargs to check if an invocant is present and if "Pi" doesn't already exist at the beginning of the string. 
    4050 
    41 '''CallSignature PMC:''' 
    42  
    43 * Add adverb modifier "i" to signature string for an invocant. 
    44  
    45 * Add lots of documentation about signature strings 
    46  
    47 '''Object PMC:''' 
    48  
    49 * Change the default vtable function generator for Object PMC to generate 'Parrot_pcc_invoke_sub_from_c_args' calls instead of 'Parrot_runops_fromc_args*' calls. 
    50  
    51 '''Integer PMC:''' 
    52  
    5351* ~~Refactor Integer PMC's overflow mechanism to do a VTABLE call rather than directly performing an MMD call (to allow for vtable overrides).~~ See #60