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;