Changes between Version 22 and Version 23 of CallingConventionsOverview

Show
Ignore:
Timestamp:
10/08/09 21:00:21 (12 years ago)
Author:
allison
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CallingConventionsOverview

    v22 v23  
    264264}}} 
    265265 
     266Pseudocode for return/result handling, parallel to arg/param handling: 
     267 
     268{{{ 
     269Infinite loop 
     270    Get next result slot 
     271    Get next return value 
     272 
     273    If there are no more returns 
     274        if there are no more results 
     275            we're done, no error 
     276        else 
     277            error, too many positional returns 
     278 
     279    If result slot is slurpy 
     280        if result slot is named 
     281            end positional loop (handle named slurpy in named loop) 
     282        create a new array PMC 
     283        Loop over all remaining positional returns 
     284            Insert positional into slurpy array 
     285        put the slurpy array in result slot 
     286        break loop (all positionals used up) 
     287 
     288    if have more results to fill 
     289        if result is named 
     290            fill result slot with positional return 
     291            mark name as used 
     292        else if we have already seen a named result 
     293            error, positionals must be before named 
     294        add return to next result slot 
     295        if result slot is optional 
     296            set the corresponding opt_flag to 1 
     297 
     298    else if result is optional 
     299        if result is named 
     300            break loop (handle named in named loop) 
     301        set the corresponding opt_flag to 0 
     302 
     303    else 
     304        if result is named 
     305            break loop (handle named in named loop) 
     306        error (too few positional returns) 
     307 
     308Loop over remaining returns 
     309    if return is not named 
     310        error (all remaining returns should be named) 
     311    store named return in temporary named returns hash 
     312 
     313Infinite loop 
     314    get next result slot 
     315 
     316    if result slot is not named 
     317        error (positionals must come before named) 
     318 
     319    if result slot is slurpy 
     320        if temporary named returns hash is not null 
     321            put temporary named returns hash in result slot 
     322        else 
     323            put new empty hash in result slot 
     324 
     325    get result slot name 
     326    if the name has an element in temp named returns hash 
     327        get next result slot 
     328        put return value in result slot 
     329        delete the entry from the temp named returns hash 
     330        if result is optional 
     331            set the corresponding opt_flat to 1 
     332    else if the result is optional 
     333        set the corresponding opt_flat to 0 
     334    else if error checking is on 
     335        else (too few named returns) 
     336 
     337if there are any items left in the temporary named returns hash 
     338    loop over temporary named returns hash 
     339        collect key names for error message 
     340    error (too many named returns) 
     341 
     342}}}