23 #if defined (HAVE_CONFIG_H)
47 arg_nm (), dyn_field () { }
53 arg_nm (), dyn_field ()
62 arg_nm (), dyn_field ()
71 arg_nm (), dyn_field ()
82 dyn_field.push_back (static_cast<tree_expression *> (0));
85 error (
"invalid use of empty argument (~) in index expression");
91 args.push_back (static_cast<tree_argument_list *> (0));
94 dyn_field.push_back (static_cast<tree_expression *> (0));
100 args.push_back (static_cast<tree_argument_list *> (0));
110 while (!
args.empty ())
112 std::list<tree_argument_list *>::iterator
p =
args.begin ();
119 std::list<tree_expression *>::iterator
p =
dyn_field.begin ();
128 for (std::list<tree_argument_list *>::const_iterator
p =
args.begin ();
160 int n = arg_values.
length ();
168 for (
int i = 0;
i < n;
i++)
183 if (rvalue &&
object && args->
has_magic_end () &&
object->is_undefined ())
199 (std::list<string_vector>::const_iterator p_arg_nm,
200 std::list<tree_expression *>::const_iterator p_dyn_field)
const
212 fn = t.
xstring_value (
"dynamic structure field names must be strings");
224 int n =
args.size ();
226 Cell type_field (n, 1);
227 Cell subs_field (n, 1);
229 std::list<tree_argument_list *>::const_iterator p_args =
args.begin ();
230 std::list<string_vector>::const_iterator p_arg_nm =
arg_nm.begin ();
231 std::list<tree_expression *>::const_iterator p_dyn_field =
dyn_field.begin ();
235 for (
int i = 0;
i < n;
i++)
260 m.
assign (
"type", type_field);
261 m.
assign (
"subs", subs_field);
289 const std::list<octave_lvalue> *lvalue_list)
297 bool have_args =
false;
307 size_t n = al ? al->
length () : 0;
313 first_args = al -> convert_to_const_vector ();
316 first_expr_val =
id->do_lookup (first_args);
327 std::list<octave_value_list> idx;
329 int n =
args.size ();
331 std::list<tree_argument_list *>::iterator p_args =
args.begin ();
332 std::list<string_vector>::iterator p_arg_nm =
arg_nm.begin ();
333 std::list<tree_expression *>::iterator p_dyn_field =
dyn_field.begin ();
335 for (
int i = 0;
i < n;
i++)
346 bool force_split =
type[
i-1] ==
'(' &&
type[
i] !=
'.';
401 idx.push_back (first_args);
446 retval = (lvalue_list
474 std::list<octave_value_list> idx;
477 int n =
args.size ();
479 std::list<tree_argument_list *>::iterator p_args =
args.begin ();
480 std::list<string_vector>::iterator p_arg_nm =
arg_nm.begin ();
481 std::list<tree_expression *>::iterator p_dyn_field =
dyn_field.begin ();
488 std::list<octave_value_list> tmpidx;
490 for (
int i = 0;
i < n;
i++)
492 if (retval.
numel () != 1)
499 tmp = tmp.
subsref (
type.substr (tmpi,
i-tmpi), tmpidx,
true);
516 idx.push_back (tidx);
520 if (
type[i+1] !=
'.')
521 error (
"() must be followed by . or close the index chain");
523 tmpidx.push_back (tidx);
549 idx.push_back (tidx);
550 tmpidx.push_back (tidx);
563 if (i > 0 &&
type[i-1] ==
'(')
582 tmpidx.push_back (tidx);
596 tmpidx.push_back (tidx);
600 idx.push_back (tidx);
608 if (idx.back ().empty ())
609 error (
"invalid empty index list");
667 std::list<tree_argument_list *> new_args;
669 for (std::list<tree_argument_list *>::const_iterator
p =
args.begin ();
675 new_args.push_back (elt ? elt->
dup (scope, context) : 0);
678 new_idx_expr->
args = new_args;
684 std::list<tree_expression *> new_dyn_field;
686 for (std::list<tree_expression *>::const_iterator
p =
dyn_field.begin ();
692 new_dyn_field.push_back (elt ? elt->
dup (scope, context) : 0);
std::list< tree_argument_list * > args
bool has_magic_tilde(void) const
octave_value_list rvalue(int nargout)
octave_value subsref(const std::string &type, const std::list< octave_value_list > &idx)
virtual bool is_postfix_index_handled(char type) const
void assign(const std::string &k, const Cell &val)
bool is_function(void) const
identity matrix If supplied two scalar respectively For allows like xample val
~tree_index_expression(void)
octave_idx_type length(void) const
octave_value_list convert_to_const_vector(const octave_value *object=0)
std::list< tree_expression * > dyn_field
virtual tree_expression * dup(symbol_table::scope_id, symbol_table::context_id context) const =0
void error(const char *fmt,...)
std::list< string_vector > arg_nm
OCTAVE_EXPORT octave_value_list return the number of command line arguments passed to Octave If called with the optional argument the function t
static bool is_variable(const std::string &name)
virtual void copy_base(const tree_expression &e)
std::string xstring_value(const char *fmt,...) const
virtual bool is_variable(void) const
std::string name(void) const
virtual std::string message(void) const
octave_lvalue lvalue(void)
void set_var(const std::string &var_arg="")
void err_indexed_cs_list(void)
octave_value_list do_multi_index_op(int nargout, const octave_value_list &idx)
static Cell make_subs_cell(tree_argument_list *args, const string_vector &arg_nm)
octave_map make_arg_struct(void) const
octave_value value(void) const
bool has_magic_end(void) const
string_vector get_arg_names(void) const
OCTAVE_EXPORT octave_value_list return the number of command line arguments passed to Octave If called with the optional argument the function xample nargout(@histc)
octave_value rvalue1(int nargout=1)
virtual const char * err_id(void) const =0
octave_idx_type numel(const octave_value_list &idx)
static llvm::LLVMContext & context
void error_with_id(const char *id, const char *fmt,...)
nd deftypefn *octave_map m
bool is_matrix_type(void) const
bool is_string(void) const
void set_index(const std::string &t, const std::list< octave_value_list > &i)
void numel(octave_idx_type n)
void resize(const dim_vector &dv, const T &rfv)
bool has_magic_colon(void) const
#define panic_impossible()
static octave_value_list make_value_list(tree_argument_list *args, const string_vector &arg_nm, const octave_value *object, bool rvalue=true)
the sparsity preserving column transformation such that that defines the pivoting threshold can be given in which case it defines the c
static void final_index_error(octave::index_exception &e, const tree_expression *expr)
tree_index_expression(tree_expression *e=0, tree_argument_list *lst=0, int l=-1, int c=-1, char t= '(')
octave_function * function_value(bool silent=false) const
virtual void visit_index_expression(tree_index_expression &)=0
virtual std::string name(void) const
virtual octave_value rvalue1(int nargout=1)
tree_argument_list * dup(symbol_table::scope_id scope, symbol_table::context_id context) const
bool has_magic_end(void) const
=val(i)}if ode{val(i)}occurs in table i
bool is_cs_list(void) const
void accept(tree_walker &tw)
size_t length(void) const
virtual octave_lvalue lvalue(void)
bool is_undefined(void) const
void err_invalid_inquiry_subscript(void)
void append(tree_argument_list *lst=0, char t= '(')
Vector representing the dimensions (size) of an Array.
virtual int column(void) const
If this string is the system will ring the terminal sometimes it is useful to be able to print the original representation of the string
bool is_zero_by_zero(void) const
virtual bool is_identifier(void) const
return octave_value(v1.char_array_value().concat(v2.char_array_value(), ra_idx),((a1.is_sq_string()||a2.is_sq_string())? '\'': '"'))
std::string get_struct_index(std::list< string_vector >::const_iterator p_arg_nm, std::list< tree_expression * >::const_iterator p_dyn_field) const
tree_index_expression * dup(symbol_table::scope_id scope, symbol_table::context_id context) const
void stash_name_tags(const string_vector &nm)