Changeset 97 for trunk/orca/ovalue.c
- Timestamp:
- 03/19/06 18:33:15 (3 years ago)
- Files:
-
- 1 modified
-
trunk/orca/ovalue.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/orca/ovalue.c
r94 r97 2943 2943 2944 2944 2945 static void composeBlock( OBlock* blk, OIndex si, int deep ) 2946 { 2945 static void composeBlock( OBlock* blk, OIndex si, int deep, int only ) 2946 { 2947 OValue* res; 2947 2948 OValue* it = blk->values + si; 2948 2949 OValue* end = blk->values + blk->used; … … 2950 2951 while( it != end ) 2951 2952 { 2952 if( it->type == OT_PAREN)2953 if( orIs(it, OT_PAREN) ) 2953 2954 { 2954 2955 orEvalBlock( orBLOCK(it), it->series.it ); 2955 2956 if( orErrorThrown ) 2956 2957 break; 2957 orCopyV( it, *orRESULT ); 2958 } 2959 else if( (it->type == OT_BLOCK) && deep ) 2960 { 2961 composeBlock( orBLOCK(it), it->series.it, 1 ); 2958 2959 res = orRESULT; 2960 if( orIs(res, OT_BLOCK) && ! only ) 2961 { 2962 orError( "compose result of block! not implemented." ); 2963 return; 2964 } 2965 else 2966 { 2967 orCopyV( it, *res ); 2968 } 2969 } 2970 else if( orIs(it, OT_BLOCK) && deep ) 2971 { 2972 composeBlock( orBLOCK(it), it->series.it, 1, only ); 2962 2973 } 2963 2974 ++it; … … 2969 2980 { 2970 2981 #define REF_COMP_DEEP a1+1 2971 2972 if( a1->type == OT_BLOCK ) 2982 #define REF_COMP_ONLY a1+2 2983 2984 if( orIs(a1, OT_BLOCK) ) 2973 2985 { 2974 2986 OBlock* blk; … … 2978 2990 deep = orRefineSet(REF_COMP_DEEP) ? 1 : 0; 2979 2991 2980 blk = orCopyBlock( a1-> index, a1->series.it, deep );2992 blk = orCopyBlock( a1->series.n, a1->series.it, deep ); 2981 2993 blkN = orBlockN(blk); 2982 2994 2983 composeBlock( blk, 0, deep ); 2995 composeBlock( blk, 0, deep, 2996 orRefineSet(REF_COMP_ONLY) ? 1 : 0 ); 2984 2997 if( ! orErrorThrown ) 2985 2998 {
