comparison src/pt-exp-base.h @ 666:fb4f6556b443

[project @ 1994-09-06 21:22:46 by jwe]
author jwe
date Tue, 06 Sep 1994 21:25:14 +0000
parents e57b1bd85102
children 1c072f20b522
comparison
equal deleted inserted replaced
665:2aeae851a164 666:fb4f6556b443
113 etype = unknown; 113 etype = unknown;
114 } 114 }
115 115
116 ~tree_expression (void) { } 116 ~tree_expression (void) { }
117 117
118 virtual int is_multi_val_ret_expression (void) const
119 { return 0; }
120
118 virtual int is_identifier (void) const 121 virtual int is_identifier (void) const
119 { return 0; } 122 { return 0; }
120 123
121 virtual int is_index_expression (void) const 124 virtual int is_index_expression (void) const
122 { return 0; } 125 { return 0; }
129 132
130 virtual void mark_for_possible_ans_assign (void) 133 virtual void mark_for_possible_ans_assign (void)
131 { panic_impossible (); } 134 { panic_impossible (); }
132 135
133 virtual tree_constant eval (int print) = 0; 136 virtual tree_constant eval (int print) = 0;
134
135 virtual Octave_object eval (int print, int nargout,
136 const Octave_object& args);
137 137
138 protected: 138 protected:
139 type etype; 139 type etype;
140 }; 140 };
141 141
183 tree_matrix::dir direction; // Direction from the previous element. 183 tree_matrix::dir direction; // Direction from the previous element.
184 tree_expression *element; 184 tree_expression *element;
185 tree_matrix *next; 185 tree_matrix *next;
186 }; 186 };
187 187
188 // A base class for objects that can be return multiple values
189
190 class
191 tree_multi_val_ret : public tree_expression
192 {
193 public:
194 tree_multi_val_ret (int l = -1, int c = -1) : tree_expression (l, c) { }
195
196 int is_multi_val_ret_expression (void) const
197 { return 1; }
198
199 tree_constant eval (int print);
200
201 virtual Octave_object eval (int print, int nargout,
202 const Octave_object& args) = 0;
203 };
204
188 // A base class for objects that can be evaluated with argument lists. 205 // A base class for objects that can be evaluated with argument lists.
189 206
190 class 207 class
191 tree_fvc : public tree_expression 208 tree_fvc : public tree_multi_val_ret
192 { 209 {
193 public: 210 public:
194 tree_fvc (int l = -1, int c = -1) : tree_expression (l, c) { } 211 tree_fvc (int l = -1, int c = -1) : tree_multi_val_ret (l, c) { }
195 212
196 virtual int is_constant (void) const 213 virtual int is_constant (void) const
197 { return 0; } 214 { return 0; }
198
199 // virtual int is_builtin (void) const
200 // { return 0; }
201 215
202 virtual tree_constant assign (tree_constant& t, const Octave_object& args); 216 virtual tree_constant assign (tree_constant& t, const Octave_object& args);
203 217
204 virtual char *name (void) const 218 virtual char *name (void) const
205 { panic_impossible (); return 0; } 219 { panic_impossible (); return 0; }
290 }; 304 };
291 305
292 // Index expressions. 306 // Index expressions.
293 307
294 class 308 class
295 tree_index_expression : public tree_expression 309 tree_index_expression : public tree_multi_val_ret
296 { 310 {
297 public: 311 public:
298 tree_index_expression (int l = -1, int c = -1) : tree_expression (l, c) 312 tree_index_expression (int l = -1, int c = -1) : tree_multi_val_ret (l, c)
299 { 313 {
300 id = 0; 314 id = 0;
301 list = 0; 315 list = 0;
302 } 316 }
303 317
304 tree_index_expression (tree_identifier *i, int l = -1, int c = -1) 318 tree_index_expression (tree_identifier *i, int l = -1, int c = -1)
305 : tree_expression (l, c) 319 : tree_multi_val_ret (l, c)
306 { 320 {
307 id = i; 321 id = i;
308 list = 0; 322 list = 0;
309 } 323 }
310 324
311 tree_index_expression (tree_identifier *i, tree_argument_list *lst, 325 tree_index_expression (tree_identifier *i, tree_argument_list *lst,
312 int l = -1, int c = -1) 326 int l = -1, int c = -1)
313 : tree_expression (l, c) 327 : tree_multi_val_ret (l, c)
314 { 328 {
315 id = i; 329 id = i;
316 list = lst; 330 list = lst;
317 } 331 }
318 332
493 private: 507 private:
494 tree_expression *op1; 508 tree_expression *op1;
495 tree_expression *op2; 509 tree_expression *op2;
496 }; 510 };
497 511
498 // Assignment expressions.
499
500 class
501 tree_assignment_expression : public tree_expression
502 {
503 public:
504 tree_assignment_expression (int l = -1, int c = -1)
505 : tree_expression (l, c)
506 { etype = tree_expression::assignment; }
507
508 ~tree_assignment_expression (void) { }
509
510 tree_constant eval (int print);
511
512 int is_assignment_expression (void) const
513 { return 1; }
514 };
515
516 // Simple assignment expressions. 512 // Simple assignment expressions.
517 513
518 class 514 class
519 tree_simple_assignment_expression : public tree_assignment_expression 515 tree_simple_assignment_expression : public tree_expression
520 { 516 {
521 public: 517 public:
522 void init (int plhs, int ans_assign) 518 void init (int plhs, int ans_assign)
523 { 519 {
524 etype = tree_expression::assignment; 520 etype = tree_expression::assignment;
529 ans_ass = ans_assign; 525 ans_ass = ans_assign;
530 } 526 }
531 527
532 tree_simple_assignment_expression (int plhs = 0, int ans_assign = 0, 528 tree_simple_assignment_expression (int plhs = 0, int ans_assign = 0,
533 int l = -1, int c = -1) 529 int l = -1, int c = -1)
534 : tree_assignment_expression (l, c) 530 : tree_expression (l, c)
535 { init (plhs, ans_assign); } 531 { init (plhs, ans_assign); }
536 532
537 tree_simple_assignment_expression (tree_identifier *i, 533 tree_simple_assignment_expression (tree_identifier *i,
538 tree_expression *r, 534 tree_expression *r,
539 int plhs = 0, int ans_assign = 0, 535 int plhs = 0, int ans_assign = 0,
540 int l = -1, int c = -1) 536 int l = -1, int c = -1)
541 : tree_assignment_expression (l, c) 537 : tree_expression (l, c)
542 { 538 {
543 init (plhs, ans_assign); 539 init (plhs, ans_assign);
544 lhs = i; 540 lhs = i;
545 rhs = r; 541 rhs = r;
546 } 542 }
547 543
548 tree_simple_assignment_expression (tree_index_expression *idx_expr, 544 tree_simple_assignment_expression (tree_index_expression *idx_expr,
549 tree_expression *r, 545 tree_expression *r,
550 int plhs = 0, int ans_assign = 0, 546 int plhs = 0, int ans_assign = 0,
551 int l = -1, int c = -1) 547 int l = -1, int c = -1)
552 : tree_assignment_expression (l, c) 548 : tree_expression (l, c)
553 { 549 {
554 init (plhs, ans_assign); 550 init (plhs, ans_assign);
555 lhs = idx_expr->ident (); 551 lhs = idx_expr->ident ();
556 index = idx_expr->arg_list (); 552 index = idx_expr->arg_list ();
557 rhs = r; 553 rhs = r;
564 560
565 int is_ans_assign (void) 561 int is_ans_assign (void)
566 { return ans_ass; } 562 { return ans_ass; }
567 563
568 tree_constant eval (int print); 564 tree_constant eval (int print);
565
566 int is_assignment_expression (void) const
567 { return 1; }
569 568
570 void eval_error (void); 569 void eval_error (void);
571 570
572 void print_code (ostream& os); 571 void print_code (ostream& os);
573 572
580 }; 579 };
581 580
582 // Multi-valued assignment expressions. 581 // Multi-valued assignment expressions.
583 582
584 class 583 class
585 tree_multi_assignment_expression : public tree_assignment_expression 584 tree_multi_assignment_expression : public tree_multi_val_ret
586 { 585 {
587 public: 586 public:
588 tree_multi_assignment_expression (int l = -1, int c = -1) 587 tree_multi_assignment_expression (int l = -1, int c = -1)
589 : tree_assignment_expression (l, c) 588 : tree_multi_val_ret (l, c)
590 { 589 {
591 etype = tree_expression::multi_assignment; 590 etype = tree_expression::multi_assignment;
592 lhs = 0; 591 lhs = 0;
593 rhs = 0; 592 rhs = 0;
594 } 593 }
595 594
596 tree_multi_assignment_expression (tree_return_list *lst, 595 tree_multi_assignment_expression (tree_return_list *lst,
597 tree_expression *r, 596 tree_multi_val_ret *r,
598 int l = -1, int c = -1) 597 int l = -1, int c = -1)
599 : tree_assignment_expression (l, c) 598 : tree_multi_val_ret (l, c)
600 { 599 {
601 etype = tree_expression::multi_assignment; 600 etype = tree_expression::multi_assignment;
602 lhs = lst; 601 lhs = lst;
603 rhs = r; 602 rhs = r;
604 } 603 }
607 606
608 tree_constant eval (int print); 607 tree_constant eval (int print);
609 608
610 Octave_object eval (int print, int nargout, const Octave_object& args); 609 Octave_object eval (int print, int nargout, const Octave_object& args);
611 610
611 int is_assignment_expression (void) const
612 { return 1; }
613
612 void eval_error (void); 614 void eval_error (void);
613 615
614 void print_code (ostream& os); 616 void print_code (ostream& os);
615 617
616 private: 618 private:
617 tree_return_list *lhs; 619 tree_return_list *lhs;
618 tree_expression *rhs; 620 tree_multi_val_ret *rhs;
619 }; 621 };
620 622
621 // Colon expressions. 623 // Colon expressions.
622 624
623 class 625 class