private RValue [ ] executeMultiReturnExpression ( Expr expr , CallStack frame ) { switch ( expr . getOpcode ( ) ) { case WyilFile . EXPR_indirectinvoke : return executeIndirectInvoke ( ( Expr . IndirectInvoke ) expr , frame ) ; case WyilFile . EXPR_invoke : return executeInvoke ( ( Expr . Invoke ) expr , frame ) ; case WyilFile . EXPR_constant : case WyilFile . EXPR_cast : case WyilFile . EXPR_recordaccess : case WyilFile . EXPR_recordborrow : case WyilFile . DECL_lambda : case WyilFile . EXPR_logicalexistential : case WyilFile . EXPR_logicaluniversal : default : RValue val = executeExpression ( ANY_T , expr , frame ) ; return new RValue [ ] { val } ; } }
Execute an expression which has the potential to return more than one result . Thus the return type must accommodate this by allowing zero or more returned values .