Introduce variacle 'plainlet' which allow simple copying
of vectors, even if the right hand side vector name contain forbidden characters (like math characters). set plainlet let newvec = v(/out) unset plainlet
This commit is contained in:
parent
a815d279d2
commit
95754d29c1
|
|
@ -30,6 +30,7 @@ static int get_index_values(char *s, int n_elem_this_dim,
|
||||||
int get_one_index_value(const char *s, int *p_index);
|
int get_one_index_value(const char *s, int *p_index);
|
||||||
|
|
||||||
/* let <vec_name> = <expr>
|
/* let <vec_name> = <expr>
|
||||||
|
* let <vec_name> = <vec_name_old> if variable 'plainlet' is set
|
||||||
* let <vec_name>[<bracket_expr>] = <expr>
|
* let <vec_name>[<bracket_expr>] = <expr>
|
||||||
* <bracket_expr> = <index_expr> <sep> <index_expr> <sep> ...
|
* <bracket_expr> = <index_expr> <sep> <index_expr> <sep> ...
|
||||||
* <index_expr>
|
* <index_expr>
|
||||||
|
|
@ -125,16 +126,29 @@ void com_let(wordlist *wl)
|
||||||
n_dst_index = vec_dst->v_numdims;
|
n_dst_index = vec_dst->v_numdims;
|
||||||
} /* end of case that an indexing bracket '[' was found */
|
} /* end of case that an indexing bracket '[' was found */
|
||||||
|
|
||||||
|
|
||||||
/* Evaluate rhs */
|
/* Evaluate rhs */
|
||||||
if ((names = ft_getpnames_from_string(
|
/* Just copy a vector. rhs has to be a valid existing vector name
|
||||||
rhs, TRUE)) == (struct pnode *) NULL) {
|
May be used to copy vectors with forbidden characters in their names
|
||||||
fprintf(cp_err, "Error: RHS \"%s\" invalid\n", rhs);
|
into a vector with a valid name.*/
|
||||||
goto quit;
|
if (cp_getvar("plainlet", CP_BOOL, NULL, 0)) {
|
||||||
|
vec_src = vec_get(rhs);
|
||||||
|
if (vec_src == (struct dvec *) NULL) {
|
||||||
|
fprintf(cp_err, "Error: Can't evaluate \"%s\"\n", rhs);
|
||||||
|
goto quit;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ((vec_src = ft_evaluate(names)) == (struct dvec *) NULL) {
|
/* evaluate the rhs expression as usual, math characters may not be used in vec names,
|
||||||
fprintf(cp_err, "Error: Can't evaluate \"%s\"\n", rhs);
|
the expression parser then will complain about a syntax error */
|
||||||
goto quit;
|
else {
|
||||||
|
if ((names = ft_getpnames_from_string(
|
||||||
|
rhs, TRUE)) == (struct pnode*)NULL) {
|
||||||
|
fprintf(cp_err, "Error: RHS \"%s\" invalid\n", rhs);
|
||||||
|
goto quit;
|
||||||
|
}
|
||||||
|
if ((vec_src = ft_evaluate(names)) == (struct dvec*)NULL) {
|
||||||
|
fprintf(cp_err, "Error: Can't evaluate \"%s\"\n", rhs);
|
||||||
|
goto quit;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vec_src->v_link2) {
|
if (vec_src->v_link2) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue