Mercurial > hg > octave-nkf
comparison src/pt-const.cc @ 1593:2790524e1932
[project @ 1995-10-31 23:16:06 by jwe]
author | jwe |
---|---|
date | Tue, 31 Oct 1995 23:16:06 +0000 |
parents | c02f877ca525 |
children | da72f1fae389 |
comparison
equal
deleted
inserted
replaced
1592:992d524aefb4 | 1593:2790524e1932 |
---|---|
2922 extern void assign (Array2<char>&, const Array2<char>&); | 2922 extern void assign (Array2<char>&, const Array2<char>&); |
2923 | 2923 |
2924 void | 2924 void |
2925 TC_REP::assign (tree_constant& rhs, const Octave_object& args) | 2925 TC_REP::assign (tree_constant& rhs, const Octave_object& args) |
2926 { | 2926 { |
2927 // XXX FIXME XXX -- we should probably have special cases for rhs | |
2928 // being a range type, since converting to a matrix can waste a lot | |
2929 // of memory. | |
2930 | |
2931 tree_constant rhs_tmp = rhs; | |
2932 | |
2927 if (! (is_string () && rhs.is_string ())) | 2933 if (! (is_string () && rhs.is_string ())) |
2928 tree_constant rhs_tmp = rhs.make_numeric (); | 2934 rhs_tmp.force_numeric (); |
2929 | 2935 |
2930 if (error_state) | 2936 if (error_state) |
2931 return; | 2937 return; |
2932 | 2938 |
2933 // An assignment to a range will normally require a conversion to a | 2939 // An assignment to a range will normally require a conversion to a |
2941 force_numeric (); | 2947 force_numeric (); |
2942 | 2948 |
2943 if (error_state) | 2949 if (error_state) |
2944 return; | 2950 return; |
2945 | 2951 |
2946 maybe_widen (rhs.const_type ()); | 2952 maybe_widen (rhs_tmp.const_type ()); |
2947 | 2953 |
2948 set_index (args, rhs.is_complex_type ()); | 2954 set_index (args, rhs_tmp.is_complex_type ()); |
2949 | 2955 |
2950 if (! error_state) | 2956 if (! error_state) |
2951 { | 2957 { |
2952 switch (type_tag) | 2958 switch (type_tag) |
2953 { | 2959 { |
2954 case complex_matrix_constant: | 2960 case complex_matrix_constant: |
2955 { | 2961 { |
2956 switch (rhs.const_type ()) | 2962 switch (rhs_tmp.const_type ()) |
2957 { | 2963 { |
2958 case complex_scalar_constant: | 2964 case complex_scalar_constant: |
2959 case complex_matrix_constant: | 2965 case complex_matrix_constant: |
2960 ::assign (*complex_matrix, rhs.complex_matrix_value ()); | 2966 ::assign (*complex_matrix, rhs_tmp.complex_matrix_value ()); |
2961 break; | 2967 break; |
2962 | 2968 |
2963 case scalar_constant: | 2969 case scalar_constant: |
2964 case matrix_constant: | 2970 case matrix_constant: |
2965 ::assign (*complex_matrix, rhs.matrix_value ()); | 2971 ::assign (*complex_matrix, rhs_tmp.matrix_value ()); |
2966 break; | 2972 break; |
2967 | 2973 |
2968 default: | 2974 default: |
2969 panic_impossible ();; | 2975 panic_impossible ();; |
2970 break; | 2976 break; |
2973 break; | 2979 break; |
2974 | 2980 |
2975 case scalar_constant: | 2981 case scalar_constant: |
2976 case matrix_constant: | 2982 case matrix_constant: |
2977 { | 2983 { |
2978 switch (rhs.const_type ()) | 2984 switch (rhs_tmp.const_type ()) |
2979 { | 2985 { |
2980 case scalar_constant: | 2986 case scalar_constant: |
2981 case matrix_constant: | 2987 case matrix_constant: |
2982 ::assign (*matrix, rhs.matrix_value ()); | 2988 ::assign (*matrix, rhs_tmp.matrix_value ()); |
2983 break; | 2989 break; |
2984 | 2990 |
2985 case char_matrix_constant: | 2991 case char_matrix_constant: |
2986 ::assign (*matrix, rhs.char_matrix_value ()); | 2992 ::assign (*matrix, rhs_tmp.char_matrix_value ()); |
2987 break; | 2993 break; |
2988 | 2994 |
2989 default: | 2995 default: |
2990 panic_impossible (); | 2996 panic_impossible (); |
2991 break; | 2997 break; |
2993 } | 2999 } |
2994 break; | 3000 break; |
2995 | 3001 |
2996 case char_matrix_constant: | 3002 case char_matrix_constant: |
2997 case char_matrix_constant_str: | 3003 case char_matrix_constant_str: |
2998 ::assign (*char_matrix, rhs.char_matrix_value ()); | 3004 ::assign (*char_matrix, rhs_tmp.char_matrix_value ()); |
2999 break; | 3005 break; |
3000 | 3006 |
3001 default: | 3007 default: |
3002 panic_impossible (); | 3008 panic_impossible (); |
3003 break; | 3009 break; |