@@ -6470,7 +6470,7 @@ namespace exprtk
64706470
64716471 inline T value() const
64726472 {
6473- return *(vector_base_ + static_cast<std::size_t>(details::numeric::to_int64(index_->value())));
6473+ return *(vector_base_ + static_cast<std::size_t>(details::numeric::to_int64(index_->value())));
64746474 }
64756475
64766476 inline T& ref()
@@ -10505,17 +10505,6 @@ namespace exprtk
1050510505 ts.data = &var->ref();
1050610506 ts.type = type_store_t::e_scalar;
1050710507 }
10508- else if (is_vector_elem_node(arg_list_[i]))
10509- {
10510- vector_elem_node_ptr_t var = vector_elem_node_ptr_t(0);
10511-
10512- if (0 == (var = dynamic_cast<vector_elem_node_ptr_t>(arg_list_[i])))
10513- return false;
10514-
10515- ts.size = 1;
10516- ts.data = reinterpret_cast<void*>(&var->ref());
10517- ts.type = type_store_t::e_scalar;
10518- }
1051910508 else
1052010509 {
1052110510 ts.size = 1;
@@ -22276,6 +22265,7 @@ namespace exprtk
2227622265 scoped_vec_delete<expression_node_t> svd(*this,vec_initilizer_list);
2227722266
2227822267 bool single_value_initialiser = false;
22268+ bool vec_to_vec_initialiser = false;
2227922269
2228022270 if (!token_is(token_t::e_rsqrbracket))
2228122271 {
@@ -22327,12 +22317,44 @@ namespace exprtk
2232722317 }
2232822318 else if (!token_is(token_t::e_lcrlbracket))
2232922319 {
22330- set_error(
22331- make_error(parser_error::e_syntax,
22332- current_token(),
22333- "ERR140 - Expected '{' as part of vector initialiser list"));
22320+ expression_node_ptr initialiser = error_node();
2233422321
22335- return error_node();
22322+ // Is this a vector to vector assignment and initialisation?
22323+ if (token_t::e_symbol == current_token().type)
22324+ {
22325+ // Is it a locally defined vector?
22326+ scope_element& se = sem_.get_active_element(current_token().value);
22327+
22328+ if (scope_element::e_vector == se.type)
22329+ {
22330+ if ((initialiser = parse_expression()))
22331+ vec_initilizer_list.push_back(initialiser);
22332+ else
22333+ return error_node();
22334+ }
22335+ // Are we dealing with a user defined vector?
22336+ else if (symtab_store_.is_vector(current_token().value))
22337+ {
22338+ lodge_symbol(current_token().value,e_st_vector);
22339+
22340+ if ((initialiser = parse_expression()))
22341+ vec_initilizer_list.push_back(initialiser);
22342+ else
22343+ return error_node();
22344+ }
22345+ }
22346+
22347+ if (0 == initialiser)
22348+ {
22349+ set_error(
22350+ make_error(parser_error::e_syntax,
22351+ current_token(),
22352+ "ERR140 - Expected '{' as part of vector initialiser list"));
22353+
22354+ return error_node();
22355+ }
22356+ else
22357+ vec_to_vec_initialiser = true;
2233622358 }
2233722359 else if (!token_is(token_t::e_rcrlbracket))
2233822360 {
@@ -22464,13 +22486,20 @@ namespace exprtk
2246422486
2246522487 lodge_symbol(vec_name,e_st_local_vector);
2246622488
22467- expression_node_ptr result =
22468- node_allocator_
22469- .allocate<details::vector_assignment_node<T> >(
22470- (*vec_holder)[0],
22471- vec_size,
22472- vec_initilizer_list,
22473- single_value_initialiser);
22489+ expression_node_ptr result = error_node();
22490+
22491+ if (vec_to_vec_initialiser)
22492+ result = expression_generator_(
22493+ details::e_assign,
22494+ node_allocator_.allocate<vector_node_t>(vec_holder),
22495+ vec_initilizer_list[0]);
22496+ else
22497+ result = node_allocator_
22498+ .allocate<details::vector_assignment_node<T> >(
22499+ (*vec_holder)[0],
22500+ vec_size,
22501+ vec_initilizer_list,
22502+ single_value_initialiser);
2247422503
2247522504 svd.delete_ptr = (0 == result);
2247622505
@@ -23386,7 +23415,7 @@ namespace exprtk
2338623415 }
2338723416 }
2338823417
23389- // Are we dealing with a vector element ?
23418+ // Are we dealing with a vector?
2339023419 if (symtab_store_.is_vector(symbol))
2339123420 {
2339223421 lodge_symbol(symbol,e_st_vector);
0 commit comments