1 // expressions.h -- Go frontend expression handling. -*- C++ -*-
3 // Copyright 2009 The Go Authors. All rights reserved.
4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file.
7 #ifndef GO_EXPRESSIONS_H
8 #define GO_EXPRESSIONS_H
15 class Translate_context;
17 class Statement_inserter;
27 class Expression_list;
29 class Temporary_reference_expression;
30 class Set_and_use_temporary_expression;
31 class String_expression;
32 class Binary_expression;
33 class Call_expression;
34 class Func_expression;
35 class Unknown_expression;
36 class Index_expression;
37 class Map_index_expression;
38 class Bound_method_expression;
39 class Field_reference_expression;
40 class Interface_field_reference_expression;
41 class Type_guard_expression;
42 class Receive_expression;
43 class Numeric_constant;
47 class Temporary_statement;
49 class Ast_dump_context;
52 // The base class for all expressions.
57 // The types of expressions.
58 enum Expression_classification
64 EXPRESSION_CONST_REFERENCE,
65 EXPRESSION_VAR_REFERENCE,
66 EXPRESSION_TEMPORARY_REFERENCE,
67 EXPRESSION_SET_AND_USE_TEMPORARY,
69 EXPRESSION_FUNC_REFERENCE,
70 EXPRESSION_UNKNOWN_REFERENCE,
79 EXPRESSION_CALL_RESULT,
80 EXPRESSION_BOUND_METHOD,
82 EXPRESSION_ARRAY_INDEX,
83 EXPRESSION_STRING_INDEX,
86 EXPRESSION_FIELD_REFERENCE,
87 EXPRESSION_INTERFACE_FIELD_REFERENCE,
88 EXPRESSION_ALLOCATION,
89 EXPRESSION_TYPE_GUARD,
90 EXPRESSION_CONVERSION,
91 EXPRESSION_UNSAFE_CONVERSION,
92 EXPRESSION_STRUCT_CONSTRUCTION,
93 EXPRESSION_FIXED_ARRAY_CONSTRUCTION,
94 EXPRESSION_OPEN_ARRAY_CONSTRUCTION,
95 EXPRESSION_MAP_CONSTRUCTION,
96 EXPRESSION_COMPOSITE_LITERAL,
97 EXPRESSION_HEAP_COMPOSITE,
99 EXPRESSION_TYPE_DESCRIPTOR,
100 EXPRESSION_TYPE_INFO,
101 EXPRESSION_STRUCT_FIELD_OFFSET,
102 EXPRESSION_MAP_DESCRIPTOR,
103 EXPRESSION_LABEL_ADDR
106 Expression(Expression_classification, Location);
108 virtual ~Expression();
110 // Make an error expression. This is used when a parse error occurs
111 // to prevent cascading errors.
113 make_error(Location);
115 // Make an expression which is really a type. This is used during
118 make_type(Type*, Location);
120 // Make a unary expression.
122 make_unary(Operator, Expression*, Location);
124 // Make a binary expression.
126 make_binary(Operator, Expression*, Expression*, Location);
128 // Make a reference to a constant in an expression.
130 make_const_reference(Named_object*, Location);
132 // Make a reference to a variable in an expression.
134 make_var_reference(Named_object*, Location);
136 // Make a reference to a temporary variable. Temporary variables
137 // are always created by a single statement, which is what we use to
139 static Temporary_reference_expression*
140 make_temporary_reference(Temporary_statement*, Location);
142 // Make an expressions which sets a temporary variable and then
143 // evaluates to a reference to that temporary variable. This is
144 // used to set a temporary variable while retaining the order of
146 static Set_and_use_temporary_expression*
147 make_set_and_use_temporary(Temporary_statement*, Expression*, Location);
149 // Make a sink expression--a reference to the blank identifier _.
153 // Make a reference to a function in an expression.
155 make_func_reference(Named_object*, Expression* closure, Location);
157 // Make a reference to an unknown name. In a correct program this
158 // will always be lowered to a real const/var/func reference.
159 static Unknown_expression*
160 make_unknown_reference(Named_object*, Location);
162 // Make a constant bool expression.
164 make_boolean(bool val, Location);
166 // Make a constant string expression.
168 make_string(const std::string&, Location);
170 // Make a character constant expression. TYPE should be NULL for an
173 make_character(const mpz_t*, Type*, Location);
175 // Make a constant integer expression. TYPE should be NULL for an
178 make_integer(const mpz_t*, Type*, Location);
180 // Make a constant float expression. TYPE should be NULL for an
183 make_float(const mpfr_t*, Type*, Location);
185 // Make a constant complex expression. TYPE should be NULL for an
188 make_complex(const mpfr_t* real, const mpfr_t* imag, Type*, Location);
190 // Make a nil expression.
194 // Make an iota expression. This is used for the predeclared
199 // Make a call expression.
200 static Call_expression*
201 make_call(Expression* func, Expression_list* args, bool is_varargs,
204 // Make a reference to a specific result of a call expression which
207 make_call_result(Call_expression*, unsigned int index);
209 // Make an expression which is a method bound to its first
211 static Bound_method_expression*
212 make_bound_method(Expression* object, Named_object* method, Location);
214 // Make an index or slice expression. This is a parser expression
215 // which represents LEFT[START:END]. END may be NULL, meaning an
216 // index rather than a slice. At parse time we may not know the
217 // type of LEFT. After parsing this is lowered to an array index, a
218 // string index, or a map index.
220 make_index(Expression* left, Expression* start, Expression* end,
223 // Make an array index expression. END may be NULL, in which case
224 // this is an lvalue.
226 make_array_index(Expression* array, Expression* start, Expression* end,
229 // Make a string index expression. END may be NULL. This is never
232 make_string_index(Expression* string, Expression* start, Expression* end,
235 // Make a map index expression. This is an lvalue.
236 static Map_index_expression*
237 make_map_index(Expression* map, Expression* val, Location);
239 // Make a selector. This is a parser expression which represents
240 // LEFT.NAME. At parse time we may not know the type of the left
243 make_selector(Expression* left, const std::string& name, Location);
245 // Make a reference to a field in a struct.
246 static Field_reference_expression*
247 make_field_reference(Expression*, unsigned int field_index, Location);
249 // Make a reference to a field of an interface, with an associated
252 make_interface_field_reference(Expression*, const std::string&,
255 // Make an allocation expression.
257 make_allocation(Type*, Location);
259 // Make a type guard expression.
261 make_type_guard(Expression*, Type*, Location);
263 // Make a type cast expression.
265 make_cast(Type*, Expression*, Location);
267 // Make an unsafe type cast expression. This is only used when
268 // passing parameter to builtin functions that are part of the Go
271 make_unsafe_cast(Type*, Expression*, Location);
273 // Make a composite literal. The DEPTH parameter is how far down we
274 // are in a list of composite literals with omitted types.
276 make_composite_literal(Type*, int depth, bool has_keys, Expression_list*,
279 // Make a struct composite literal.
281 make_struct_composite_literal(Type*, Expression_list*, Location);
283 // Make a slice composite literal.
285 make_slice_composite_literal(Type*, Expression_list*, Location);
287 // Take a composite literal and allocate it on the heap.
289 make_heap_composite(Expression*, Location);
291 // Make a receive expression. VAL is NULL for a unary receive.
292 static Receive_expression*
293 make_receive(Expression* channel, Location);
295 // Make an expression which evaluates to the address of the type
296 // descriptor for TYPE.
298 make_type_descriptor(Type* type, Location);
300 // Make an expression which evaluates to some characteristic of a
301 // type. These are only used for type descriptors, so there is no
302 // location parameter.
305 // The size of a value of the type.
307 // The required alignment of a value of the type.
309 // The required alignment of a value of the type when used as a
310 // field in a struct.
311 TYPE_INFO_FIELD_ALIGNMENT
315 make_type_info(Type* type, Type_info);
317 // Make an expression which evaluates to the offset of a field in a
318 // struct. This is only used for type descriptors, so there is no
319 // location parameter.
321 make_struct_field_offset(Struct_type*, const Struct_field*);
323 // Make an expression which evaluates to the address of the map
324 // descriptor for TYPE.
326 make_map_descriptor(Map_type* type, Location);
328 // Make an expression which evaluates to the address of an unnamed
331 make_label_addr(Label*, Location);
333 // Return the expression classification.
334 Expression_classification
335 classification() const
336 { return this->classification_; }
338 // Return the location of the expression.
341 { return this->location_; }
343 // Return whether this is a constant expression.
346 { return this->do_is_constant(); }
348 // If this is not a numeric constant, return false. If it is one,
349 // return true, and set VAL to hold the value.
351 numeric_constant_value(Numeric_constant* val) const
352 { return this->do_numeric_constant_value(val); }
354 // If this is not a constant expression with string type, return
355 // false. If it is one, return true, and set VAL to the value.
357 string_constant_value(std::string* val) const
358 { return this->do_string_constant_value(val); }
360 // This is called if the value of this expression is being
361 // discarded. This issues warnings about computed values being
362 // unused. This returns true if all is well, false if it issued an
366 { return this->do_discarding_value(); }
368 // Return whether this is an error expression.
370 is_error_expression() const
371 { return this->classification_ == EXPRESSION_ERROR; }
373 // Return whether this expression really represents a type.
375 is_type_expression() const
376 { return this->classification_ == EXPRESSION_TYPE; }
378 // If this is a variable reference, return the Var_expression
379 // structure. Otherwise, return NULL. This is a controlled dynamic
383 { return this->convert<Var_expression, EXPRESSION_VAR_REFERENCE>(); }
385 const Var_expression*
386 var_expression() const
387 { return this->convert<const Var_expression, EXPRESSION_VAR_REFERENCE>(); }
389 // If this is a reference to a temporary variable, return the
390 // Temporary_reference_expression. Otherwise, return NULL.
391 Temporary_reference_expression*
392 temporary_reference_expression()
394 return this->convert<Temporary_reference_expression,
395 EXPRESSION_TEMPORARY_REFERENCE>();
398 // If this is a set-and-use-temporary, return the
399 // Set_and_use_temporary_expression. Otherwise, return NULL.
400 Set_and_use_temporary_expression*
401 set_and_use_temporary_expression()
403 return this->convert<Set_and_use_temporary_expression,
404 EXPRESSION_SET_AND_USE_TEMPORARY>();
407 // Return whether this is a sink expression.
409 is_sink_expression() const
410 { return this->classification_ == EXPRESSION_SINK; }
412 // If this is a string expression, return the String_expression
413 // structure. Otherwise, return NULL.
416 { return this->convert<String_expression, EXPRESSION_STRING>(); }
418 // Return whether this is the expression nil.
420 is_nil_expression() const
421 { return this->classification_ == EXPRESSION_NIL; }
423 // If this is an indirection through a pointer, return the
424 // expression being pointed through. Otherwise return this.
428 // If this is a binary expression, return the Binary_expression
429 // structure. Otherwise return NULL.
432 { return this->convert<Binary_expression, EXPRESSION_BINARY>(); }
434 // If this is a call expression, return the Call_expression
435 // structure. Otherwise, return NULL. This is a controlled dynamic
439 { return this->convert<Call_expression, EXPRESSION_CALL>(); }
441 // If this is an expression which refers to a function, return the
442 // Func_expression structure. Otherwise, return NULL.
445 { return this->convert<Func_expression, EXPRESSION_FUNC_REFERENCE>(); }
447 const Func_expression*
448 func_expression() const
449 { return this->convert<const Func_expression, EXPRESSION_FUNC_REFERENCE>(); }
451 // If this is an expression which refers to an unknown name, return
452 // the Unknown_expression structure. Otherwise, return NULL.
455 { return this->convert<Unknown_expression, EXPRESSION_UNKNOWN_REFERENCE>(); }
457 const Unknown_expression*
458 unknown_expression() const
460 return this->convert<const Unknown_expression,
461 EXPRESSION_UNKNOWN_REFERENCE>();
464 // If this is an index expression, return the Index_expression
465 // structure. Otherwise, return NULL.
468 { return this->convert<Index_expression, EXPRESSION_INDEX>(); }
470 // If this is an expression which refers to indexing in a map,
471 // return the Map_index_expression structure. Otherwise, return
473 Map_index_expression*
474 map_index_expression()
475 { return this->convert<Map_index_expression, EXPRESSION_MAP_INDEX>(); }
477 // If this is a bound method expression, return the
478 // Bound_method_expression structure. Otherwise, return NULL.
479 Bound_method_expression*
480 bound_method_expression()
481 { return this->convert<Bound_method_expression, EXPRESSION_BOUND_METHOD>(); }
483 // If this is a reference to a field in a struct, return the
484 // Field_reference_expression structure. Otherwise, return NULL.
485 Field_reference_expression*
486 field_reference_expression()
488 return this->convert<Field_reference_expression,
489 EXPRESSION_FIELD_REFERENCE>();
492 // If this is a reference to a field in an interface, return the
493 // Interface_field_reference_expression structure. Otherwise,
495 Interface_field_reference_expression*
496 interface_field_reference_expression()
498 return this->convert<Interface_field_reference_expression,
499 EXPRESSION_INTERFACE_FIELD_REFERENCE>();
502 // If this is a type guard expression, return the
503 // Type_guard_expression structure. Otherwise, return NULL.
504 Type_guard_expression*
505 type_guard_expression()
506 { return this->convert<Type_guard_expression, EXPRESSION_TYPE_GUARD>(); }
508 // If this is a receive expression, return the Receive_expression
509 // structure. Otherwise, return NULL.
512 { return this->convert<Receive_expression, EXPRESSION_RECEIVE>(); }
514 // Return true if this is a composite literal.
516 is_composite_literal() const;
518 // Return true if this is a composite literal which is not constant.
520 is_nonconstant_composite_literal() const;
522 // Return true if this is a reference to a local variable.
524 is_local_variable() const;
526 // Traverse an expression.
528 traverse(Expression**, Traverse*);
530 // Traverse subexpressions of this expression.
532 traverse_subexpressions(Traverse*);
534 // Lower an expression. This is called immediately after parsing.
535 // FUNCTION is the function we are in; it will be NULL for an
536 // expression initializing a global variable. INSERTER may be used
537 // to insert statements before the statement or initializer
538 // containing this expression; it is normally used to create
539 // temporary variables. IOTA_VALUE is the value that we should give
540 // to any iota expressions. This function must resolve expressions
541 // which could not be fully parsed into their final form. It
542 // returns the same Expression or a new one.
544 lower(Gogo* gogo, Named_object* function, Statement_inserter* inserter,
546 { return this->do_lower(gogo, function, inserter, iota_value); }
548 // Determine the real type of an expression with abstract integer,
549 // floating point, or complex type. TYPE_CONTEXT describes the
552 determine_type(const Type_context*);
554 // Check types in an expression.
556 check_types(Gogo* gogo)
557 { this->do_check_types(gogo); }
559 // Determine the type when there is no context.
561 determine_type_no_context();
563 // Return the current type of the expression. This may be changed
564 // by determine_type.
567 { return this->do_type(); }
569 // Return a copy of an expression.
572 { return this->do_copy(); }
574 // Return whether the expression is addressable--something which may
575 // be used as the operand of the unary & operator.
577 is_addressable() const
578 { return this->do_is_addressable(); }
580 // Note that we are taking the address of this expression. ESCAPES
581 // is true if this address escapes the current function.
583 address_taken(bool escapes)
584 { this->do_address_taken(escapes); }
586 // Return whether this expression must be evaluated in order
587 // according to the order of evaluation rules. This is basically
588 // true of all expressions with side-effects.
590 must_eval_in_order() const
591 { return this->do_must_eval_in_order(); }
593 // Return whether subexpressions of this expression must be
594 // evaluated in order. This is true of index expressions and
595 // pointer indirections. This sets *SKIP to the number of
596 // subexpressions to skip during traversing, as index expressions
597 // only requiring moving the index, not the array.
599 must_eval_subexpressions_in_order(int* skip) const
602 return this->do_must_eval_subexpressions_in_order(skip);
605 // Return the tree for this expression.
607 get_tree(Translate_context*);
609 // Return a tree handling any conversions which must be done during
612 convert_for_assignment(Translate_context*, Type* lhs_type, Type* rhs_type,
613 tree rhs_tree, Location location);
615 // Return a tree converting a value of one interface type to another
616 // interface type. If FOR_TYPE_GUARD is true this is for a type
619 convert_interface_to_interface(Translate_context*, Type* lhs_type,
620 Type* rhs_type, tree rhs_tree,
621 bool for_type_guard, Location);
623 // Return a tree implementing the comparison LHS_TREE OP RHS_TREE.
624 // TYPE is the type of both sides.
626 comparison_tree(Translate_context*, Type* result_type, Operator op,
627 Type* left_type, tree left_tree, Type* right_type,
628 tree right_tree, Location);
630 // Return a tree for the multi-precision integer VAL in TYPE.
632 integer_constant_tree(mpz_t val, tree type);
634 // Return a tree for the floating point value VAL in TYPE.
636 float_constant_tree(mpfr_t val, tree type);
638 // Return a tree for the complex value REAL/IMAG in TYPE.
640 complex_constant_tree(mpfr_t real, mpfr_t imag, tree type);
642 // Export the expression. This is only used for constants. It will
643 // be used for things like values of named constants and sizes of
646 export_expression(Export* exp) const
647 { this->do_export(exp); }
649 // Import an expression.
651 import_expression(Import*);
653 // Return a tree which checks that VAL, of arbitrary integer type,
654 // is non-negative and is not more than the maximum value of
655 // BOUND_TYPE. If SOFAR is not NULL, it is or'red into the result.
656 // The return value may be NULL if SOFAR is NULL.
658 check_bounds(tree val, tree bound_type, tree sofar, Location);
660 // Dump an expression to a dump constext.
662 dump_expression(Ast_dump_context*) const;
665 // May be implemented by child class: traverse the expressions.
667 do_traverse(Traverse*);
669 // Return a lowered expression.
671 do_lower(Gogo*, Named_object*, Statement_inserter*, int)
674 // Return whether this is a constant expression.
676 do_is_constant() const
679 // Return whether this is a constant expression of numeric type, and
680 // set the Numeric_constant to the value.
682 do_numeric_constant_value(Numeric_constant*) const
685 // Return whether this is a constant expression of string type, and
686 // set VAL to the value.
688 do_string_constant_value(std::string*) const
691 // Called by the parser if the value is being discarded.
693 do_discarding_value();
695 // Child class holds type.
699 // Child class implements determining type information.
701 do_determine_type(const Type_context*) = 0;
703 // Child class implements type checking if needed.
705 do_check_types(Gogo*)
708 // Child class implements copying.
712 // Child class implements whether the expression is addressable.
714 do_is_addressable() const
717 // Child class implements taking the address of an expression.
719 do_address_taken(bool)
722 // Child class implements whether this expression must be evaluated
725 do_must_eval_in_order() const
728 // Child class implements whether this expressions requires that
729 // subexpressions be evaluated in order. The child implementation
730 // may set *SKIP if it should be non-zero.
732 do_must_eval_subexpressions_in_order(int* /* skip */) const
735 // Child class implements conversion to tree.
737 do_get_tree(Translate_context*) = 0;
739 // Child class implements export.
741 do_export(Export*) const;
743 // For children to call to give an error for an unused value.
745 unused_value_error();
747 // For children to call when they detect that they are in error.
751 // For children to call to report an error conveniently.
753 report_error(const char*);
755 // Child class implements dumping to a dump context.
757 do_dump_expression(Ast_dump_context*) const = 0;
760 // Convert to the desired statement classification, or return NULL.
761 // This is a controlled dynamic cast.
762 template<typename Expression_class,
763 Expression_classification expr_classification>
767 return (this->classification_ == expr_classification
768 ? static_cast<Expression_class*>(this)
772 template<typename Expression_class,
773 Expression_classification expr_classification>
774 const Expression_class*
777 return (this->classification_ == expr_classification
778 ? static_cast<const Expression_class*>(this)
783 convert_type_to_interface(Translate_context*, Type*, Type*, tree,
787 get_interface_type_descriptor(Translate_context*, Type*, tree,
791 convert_interface_to_type(Translate_context*, Type*, Type*, tree,
794 // The expression classification.
795 Expression_classification classification_;
796 // The location in the input file.
800 // A list of Expressions.
802 class Expression_list
809 // Return whether the list is empty.
812 { return this->entries_.empty(); }
814 // Return the number of entries in the list.
817 { return this->entries_.size(); }
819 // Add an entry to the end of the list.
821 push_back(Expression* expr)
822 { this->entries_.push_back(expr); }
825 append(Expression_list* add)
826 { this->entries_.insert(this->entries_.end(), add->begin(), add->end()); }
828 // Reserve space in the list.
831 { this->entries_.reserve(size); }
833 // Traverse the expressions in the list.
841 // Return true if the list contains an error expression.
843 contains_error() const;
845 // Retrieve an element by index.
848 { return this->entries_.at(i); }
850 // Return the first and last elements.
853 { return this->entries_.front(); }
857 { return this->entries_.front(); }
861 { return this->entries_.back(); }
865 { return this->entries_.back(); }
869 typedef std::vector<Expression*>::iterator iterator;
870 typedef std::vector<Expression*>::const_iterator const_iterator;
874 { return this->entries_.begin(); }
878 { return this->entries_.begin(); }
882 { return this->entries_.end(); }
886 { return this->entries_.end(); }
891 { this->entries_.erase(p); }
894 std::vector<Expression*> entries_;
897 // An abstract base class for an expression which is only used by the
898 // parser, and is lowered in the lowering pass.
900 class Parser_expression : public Expression
903 Parser_expression(Expression_classification classification,
905 : Expression(classification, location)
910 do_lower(Gogo*, Named_object*, Statement_inserter*, int) = 0;
916 do_determine_type(const Type_context*)
917 { go_unreachable(); }
920 do_check_types(Gogo*)
921 { go_unreachable(); }
924 do_get_tree(Translate_context*)
925 { go_unreachable(); }
928 // An expression which is simply a variable.
930 class Var_expression : public Expression
933 Var_expression(Named_object* variable, Location location)
934 : Expression(EXPRESSION_VAR_REFERENCE, location),
938 // Return the variable.
941 { return this->variable_; }
945 do_lower(Gogo*, Named_object*, Statement_inserter*, int);
951 do_determine_type(const Type_context*);
958 do_is_addressable() const
962 do_address_taken(bool);
965 do_get_tree(Translate_context*);
968 do_dump_expression(Ast_dump_context*) const;
971 // The variable we are referencing.
972 Named_object* variable_;
975 // A reference to a temporary variable.
977 class Temporary_reference_expression : public Expression
980 Temporary_reference_expression(Temporary_statement* statement,
982 : Expression(EXPRESSION_TEMPORARY_REFERENCE, location),
983 statement_(statement), is_lvalue_(false)
986 // The temporary that this expression refers to.
989 { return this->statement_; }
991 // Indicate that this reference appears on the left hand side of an
992 // assignment statement.
995 { this->is_lvalue_ = true; }
1002 do_determine_type(const Type_context*)
1007 { return make_temporary_reference(this->statement_, this->location()); }
1010 do_is_addressable() const
1014 do_address_taken(bool);
1017 do_get_tree(Translate_context*);
1020 do_dump_expression(Ast_dump_context*) const;
1023 // The statement where the temporary variable is defined.
1024 Temporary_statement* statement_;
1025 // Whether this reference appears on the left hand side of an
1026 // assignment statement.
1030 // Set and use a temporary variable.
1032 class Set_and_use_temporary_expression : public Expression
1035 Set_and_use_temporary_expression(Temporary_statement* statement,
1036 Expression* expr, Location location)
1037 : Expression(EXPRESSION_SET_AND_USE_TEMPORARY, location),
1038 statement_(statement), expr_(expr)
1041 // Return the temporary.
1042 Temporary_statement*
1044 { return this->statement_; }
1046 // Return the expression.
1049 { return this->expr_; }
1053 do_traverse(Traverse* traverse)
1054 { return Expression::traverse(&this->expr_, traverse); }
1060 do_determine_type(const Type_context*)
1066 return make_set_and_use_temporary(this->statement_, this->expr_,
1071 do_is_addressable() const
1075 do_address_taken(bool);
1078 do_get_tree(Translate_context*);
1081 do_dump_expression(Ast_dump_context*) const;
1084 // The statement where the temporary variable is defined.
1085 Temporary_statement* statement_;
1086 // The expression to assign to the temporary.
1090 // A string expression.
1092 class String_expression : public Expression
1095 String_expression(const std::string& val, Location location)
1096 : Expression(EXPRESSION_STRING, location),
1097 val_(val), type_(NULL)
1102 { return this->val_; }
1109 do_is_constant() const
1113 do_string_constant_value(std::string* val) const
1123 do_determine_type(const Type_context*);
1130 do_get_tree(Translate_context*);
1132 // Write string literal to a string dump.
1134 export_string(String_dump* exp, const String_expression* str);
1137 do_export(Export*) const;
1140 do_dump_expression(Ast_dump_context*) const;
1143 // The string value. This is immutable.
1144 const std::string val_;
1145 // The type as determined by context.
1149 // A binary expression.
1151 class Binary_expression : public Expression
1154 Binary_expression(Operator op, Expression* left, Expression* right,
1156 : Expression(EXPRESSION_BINARY, location),
1157 op_(op), left_(left), right_(right), type_(NULL)
1160 // Return the operator.
1163 { return this->op_; }
1165 // Return the left hand expression.
1168 { return this->left_; }
1170 // Return the right hand expression.
1173 { return this->right_; }
1175 // Apply binary opcode OP to LEFT_NC and RIGHT_NC, setting NC.
1176 // Return true if this could be done, false if not. Issue errors at
1177 // LOCATION as appropriate.
1179 eval_constant(Operator op, Numeric_constant* left_nc,
1180 Numeric_constant* right_nc, Location location,
1181 Numeric_constant* nc);
1183 // Compare constants LEFT_NC and RIGHT_NC according to OP, setting
1184 // *RESULT. Return true if this could be done, false if not. Issue
1185 // errors at LOCATION as appropriate.
1187 compare_constant(Operator op, Numeric_constant* left_nc,
1188 Numeric_constant* right_nc, Location location,
1194 // Report an error if OP can not be applied to TYPE. Return whether
1195 // it can. OTYPE is the type of the other operand.
1197 check_operator_type(Operator op, Type* type, Type* otype, Location);
1201 do_traverse(Traverse* traverse);
1204 do_lower(Gogo*, Named_object*, Statement_inserter*, int);
1207 do_is_constant() const
1208 { return this->left_->is_constant() && this->right_->is_constant(); }
1211 do_numeric_constant_value(Numeric_constant*) const;
1214 do_discarding_value();
1220 do_determine_type(const Type_context*);
1223 do_check_types(Gogo*);
1228 return Expression::make_binary(this->op_, this->left_->copy(),
1229 this->right_->copy(), this->location());
1233 do_get_tree(Translate_context*);
1236 do_export(Export*) const;
1239 do_dump_expression(Ast_dump_context*) const;
1243 operation_type(Operator op, Type* left_type, Type* right_type,
1244 Type** result_type);
1247 cmp_to_bool(Operator op, int cmp);
1250 eval_integer(Operator op, const Numeric_constant*, const Numeric_constant*,
1251 Location, Numeric_constant*);
1254 eval_float(Operator op, const Numeric_constant*, const Numeric_constant*,
1255 Location, Numeric_constant*);
1258 eval_complex(Operator op, const Numeric_constant*, const Numeric_constant*,
1259 Location, Numeric_constant*);
1262 compare_integer(const Numeric_constant*, const Numeric_constant*, int*);
1265 compare_float(const Numeric_constant*, const Numeric_constant *, int*);
1268 compare_complex(const Numeric_constant*, const Numeric_constant*, int*);
1271 lower_struct_comparison(Gogo*, Statement_inserter*);
1274 lower_array_comparison(Gogo*, Statement_inserter*);
1277 lower_compare_to_memcmp(Gogo*, Statement_inserter*);
1280 operand_address(Statement_inserter*, Expression*);
1282 // The binary operator to apply.
1284 // The left hand side operand.
1286 // The right hand side operand.
1288 // The type of a comparison operation.
1292 // A call expression. The go statement needs to dig inside this.
1294 class Call_expression : public Expression
1297 Call_expression(Expression* fn, Expression_list* args, bool is_varargs,
1299 : Expression(EXPRESSION_CALL, location),
1300 fn_(fn), args_(args), type_(NULL), results_(NULL), tree_(NULL),
1301 is_varargs_(is_varargs), are_hidden_fields_ok_(false),
1302 varargs_are_lowered_(false), types_are_determined_(false),
1303 is_deferred_(false), issued_error_(false)
1306 // The function to call.
1309 { return this->fn_; }
1314 { return this->args_; }
1316 const Expression_list*
1318 { return this->args_; }
1320 // Get the function type.
1322 get_function_type() const;
1324 // Return the number of values this call will return.
1326 result_count() const;
1328 // Return the temporary variable which holds result I. This is only
1329 // valid after the expression has been lowered, and is only valid
1330 // for calls which return multiple results.
1331 Temporary_statement*
1332 result(size_t i) const;
1334 // Return whether this is a call to the predeclared function
1337 is_recover_call() const;
1339 // Set the argument for a call to recover.
1341 set_recover_arg(Expression*);
1343 // Whether the last argument is a varargs argument (f(a...)).
1346 { return this->is_varargs_; }
1348 // Note that varargs have already been lowered.
1350 set_varargs_are_lowered()
1351 { this->varargs_are_lowered_ = true; }
1353 // Note that it is OK for this call to set hidden fields when
1354 // passing arguments.
1356 set_hidden_fields_are_ok()
1357 { this->are_hidden_fields_ok_ = true; }
1359 // Whether this call is being deferred.
1362 { return this->is_deferred_; }
1364 // Note that the call is being deferred.
1367 { this->is_deferred_ = true; }
1369 // We have found an error with this call expression; return true if
1370 // we should report it.
1376 do_traverse(Traverse*);
1379 do_lower(Gogo*, Named_object*, Statement_inserter*, int);
1382 do_discarding_value()
1389 do_determine_type(const Type_context*);
1392 do_check_types(Gogo*);
1397 return Expression::make_call(this->fn_->copy(),
1398 (this->args_ == NULL
1400 : this->args_->copy()),
1401 this->is_varargs_, this->location());
1405 do_must_eval_in_order() const;
1408 do_get_tree(Translate_context*);
1411 do_is_recover_call() const;
1414 do_set_recover_arg(Expression*);
1416 // Let a builtin expression change the argument list.
1418 set_args(Expression_list* args)
1419 { this->args_ = args; }
1421 // Let a builtin expression lower varargs.
1423 lower_varargs(Gogo*, Named_object* function, Statement_inserter* inserter,
1424 Type* varargs_type, size_t param_count);
1426 // Let a builtin expression check whether types have been
1429 determining_types();
1432 do_dump_expression(Ast_dump_context*) const;
1436 check_argument_type(int, const Type*, const Type*, Location, bool);
1439 interface_method_function(Translate_context*,
1440 Interface_field_reference_expression*,
1444 set_results(Translate_context*, tree);
1446 // The function to call.
1448 // The arguments to pass. This may be NULL if there are no
1450 Expression_list* args_;
1451 // The type of the expression, to avoid recomputing it.
1453 // The list of temporaries which will hold the results if the
1454 // function returns a tuple.
1455 std::vector<Temporary_statement*>* results_;
1456 // The tree for the call, used for a call which returns a tuple.
1458 // True if the last argument is a varargs argument (f(a...)).
1460 // True if this statement may pass hidden fields in the arguments.
1461 // This is used for generated method stubs.
1462 bool are_hidden_fields_ok_;
1463 // True if varargs have already been lowered.
1464 bool varargs_are_lowered_;
1465 // True if types have been determined.
1466 bool types_are_determined_;
1467 // True if the call is an argument to a defer statement.
1469 // True if we reported an error about a mismatch between call
1470 // results and uses. This is to avoid producing multiple errors
1471 // when there are multiple Call_result_expressions.
1475 // An expression which represents a pointer to a function.
1477 class Func_expression : public Expression
1480 Func_expression(Named_object* function, Expression* closure,
1482 : Expression(EXPRESSION_FUNC_REFERENCE, location),
1483 function_(function), closure_(closure)
1486 // Return the object associated with the function.
1488 named_object() const
1489 { return this->function_; }
1491 // Return the closure for this function. This will return NULL if
1492 // the function has no closure, which is the normal case.
1495 { return this->closure_; }
1497 // Return a tree for this function without evaluating the closure.
1499 get_tree_without_closure(Gogo*);
1503 do_traverse(Traverse*);
1509 do_determine_type(const Type_context*)
1511 if (this->closure_ != NULL)
1512 this->closure_->determine_type_no_context();
1518 return Expression::make_func_reference(this->function_,
1519 (this->closure_ == NULL
1521 : this->closure_->copy()),
1526 do_get_tree(Translate_context*);
1529 do_dump_expression(Ast_dump_context*) const;
1532 // The function itself.
1533 Named_object* function_;
1534 // A closure. This is normally NULL. For a nested function, it may
1535 // be a heap-allocated struct holding pointers to all the variables
1536 // referenced by this function and defined in enclosing functions.
1537 Expression* closure_;
1540 // A reference to an unknown name.
1542 class Unknown_expression : public Parser_expression
1545 Unknown_expression(Named_object* named_object, Location location)
1546 : Parser_expression(EXPRESSION_UNKNOWN_REFERENCE, location),
1547 named_object_(named_object), no_error_message_(false),
1548 is_composite_literal_key_(false)
1551 // The associated named object.
1553 named_object() const
1554 { return this->named_object_; }
1556 // The name of the identifier which was unknown.
1560 // Call this to indicate that we should not give an error if this
1561 // name is never defined. This is used to avoid knock-on errors
1562 // during an erroneous parse.
1564 set_no_error_message()
1565 { this->no_error_message_ = true; }
1567 // Note that this expression is being used as the key in a composite
1568 // literal, so it may be OK if it is not resolved.
1570 set_is_composite_literal_key()
1571 { this->is_composite_literal_key_ = true; }
1573 // Note that this expression should no longer be treated as a
1574 // composite literal key.
1576 clear_is_composite_literal_key()
1577 { this->is_composite_literal_key_ = false; }
1581 do_lower(Gogo*, Named_object*, Statement_inserter*, int);
1585 { return new Unknown_expression(this->named_object_, this->location()); }
1588 do_dump_expression(Ast_dump_context*) const;
1591 // The unknown name.
1592 Named_object* named_object_;
1593 // True if we should not give errors if this is undefined. This is
1594 // used if there was a parse failure.
1595 bool no_error_message_;
1596 // True if this is the key in a composite literal.
1597 bool is_composite_literal_key_;
1600 // An index expression. This is lowered to an array index, a string
1601 // index, or a map index.
1603 class Index_expression : public Parser_expression
1606 Index_expression(Expression* left, Expression* start, Expression* end,
1608 : Parser_expression(EXPRESSION_INDEX, location),
1609 left_(left), start_(start), end_(end), is_lvalue_(false)
1612 // Record that this expression is an lvalue.
1615 { this->is_lvalue_ = true; }
1617 // Dump an index expression, i.e. an expression of the form
1618 // expr[expr] or expr[expr:expr], to a dump context.
1620 dump_index_expression(Ast_dump_context*, const Expression* expr,
1621 const Expression* start, const Expression* end);
1625 do_traverse(Traverse*);
1628 do_lower(Gogo*, Named_object*, Statement_inserter*, int);
1633 return new Index_expression(this->left_->copy(), this->start_->copy(),
1636 : this->end_->copy()),
1641 do_must_eval_subexpressions_in_order(int* skip) const
1648 do_dump_expression(Ast_dump_context*) const;
1651 // The expression being indexed.
1655 // The second index. This is NULL for an index, non-NULL for a
1658 // Whether this is being used as an l-value. We set this during the
1659 // parse because map index expressions need to know.
1663 // An index into a map.
1665 class Map_index_expression : public Expression
1668 Map_index_expression(Expression* map, Expression* index,
1670 : Expression(EXPRESSION_MAP_INDEX, location),
1671 map_(map), index_(index), is_lvalue_(false),
1672 is_in_tuple_assignment_(false)
1678 { return this->map_; }
1682 { return this->map_; }
1684 // Return the index.
1687 { return this->index_; }
1691 { return this->index_; }
1693 // Get the type of the map being indexed.
1695 get_map_type() const;
1697 // Record that this map expression is an lvalue. The difference is
1698 // that an lvalue always inserts the key.
1701 { this->is_lvalue_ = true; }
1703 // Return whether this map expression occurs in an assignment to a
1706 is_in_tuple_assignment() const
1707 { return this->is_in_tuple_assignment_; }
1709 // Record that this map expression occurs in an assignment to a pair
1712 set_is_in_tuple_assignment()
1713 { this->is_in_tuple_assignment_ = true; }
1715 // Return a tree for the map index. This returns a tree which
1716 // evaluates to a pointer to a value in the map. If INSERT is true,
1717 // the key will be inserted if not present, and the value pointer
1718 // will be zero initialized. If INSERT is false, and the key is not
1719 // present in the map, the pointer will be NULL.
1721 get_value_pointer(Translate_context*, bool insert);
1725 do_traverse(Traverse*);
1731 do_determine_type(const Type_context*);
1734 do_check_types(Gogo*);
1739 return Expression::make_map_index(this->map_->copy(),
1740 this->index_->copy(),
1745 do_must_eval_subexpressions_in_order(int* skip) const
1751 // A map index expression is an lvalue but it is not addressable.
1754 do_get_tree(Translate_context*);
1757 do_dump_expression(Ast_dump_context*) const;
1760 // The map we are looking into.
1764 // Whether this is an lvalue.
1766 // Whether this is in a tuple assignment to a pair of values.
1767 bool is_in_tuple_assignment_;
1770 // An expression which represents a method bound to its first
1773 class Bound_method_expression : public Expression
1776 Bound_method_expression(Expression* expr, Named_object* method,
1778 : Expression(EXPRESSION_BOUND_METHOD, location),
1779 expr_(expr), expr_type_(NULL), method_(method)
1782 // Return the object which is the first argument.
1785 { return this->expr_; }
1787 // Return the implicit type of the first argument. This will be
1788 // non-NULL when using a method from an anonymous field without
1789 // using an explicit stub.
1791 first_argument_type() const
1792 { return this->expr_type_; }
1794 // Return the method function.
1797 { return this->method_; }
1799 // Set the implicit type of the expression.
1801 set_first_argument_type(Type* type)
1802 { this->expr_type_ = type; }
1806 do_traverse(Traverse*);
1812 do_determine_type(const Type_context*);
1815 do_check_types(Gogo*);
1820 return new Bound_method_expression(this->expr_->copy(), this->method_,
1825 do_get_tree(Translate_context*);
1828 do_dump_expression(Ast_dump_context*) const;
1831 // The object used to find the method. This is passed to the method
1832 // as the first argument.
1834 // The implicit type of the object to pass to the method. This is
1835 // NULL in the normal case, non-NULL when using a method from an
1836 // anonymous field which does not require a stub.
1838 // The method itself.
1839 Named_object* method_;
1842 // A reference to a field in a struct.
1844 class Field_reference_expression : public Expression
1847 Field_reference_expression(Expression* expr, unsigned int field_index,
1849 : Expression(EXPRESSION_FIELD_REFERENCE, location),
1850 expr_(expr), field_index_(field_index), called_fieldtrack_(false)
1853 // Return the struct expression.
1856 { return this->expr_; }
1858 // Return the field index.
1861 { return this->field_index_; }
1863 // Set the struct expression. This is used when parsing.
1865 set_struct_expression(Expression* expr)
1867 go_assert(this->expr_ == NULL);
1873 do_traverse(Traverse* traverse)
1874 { return Expression::traverse(&this->expr_, traverse); }
1877 do_lower(Gogo*, Named_object*, Statement_inserter*, int);
1883 do_determine_type(const Type_context*)
1884 { this->expr_->determine_type_no_context(); }
1887 do_check_types(Gogo*);
1892 return Expression::make_field_reference(this->expr_->copy(),
1898 do_is_addressable() const
1899 { return this->expr_->is_addressable(); }
1902 do_address_taken(bool escapes)
1903 { this->expr_->address_taken(escapes); }
1906 do_get_tree(Translate_context*);
1909 do_dump_expression(Ast_dump_context*) const;
1912 // The expression we are looking into. This should have a type of
1915 // The zero-based index of the field we are retrieving.
1916 unsigned int field_index_;
1917 // Whether we have already emitted a fieldtrack call.
1918 bool called_fieldtrack_;
1921 // A reference to a field of an interface.
1923 class Interface_field_reference_expression : public Expression
1926 Interface_field_reference_expression(Expression* expr,
1927 const std::string& name,
1929 : Expression(EXPRESSION_INTERFACE_FIELD_REFERENCE, location),
1930 expr_(expr), name_(name)
1933 // Return the expression for the interface object.
1936 { return this->expr_; }
1938 // Return the name of the method to call.
1941 { return this->name_; }
1943 // Return a tree for the pointer to the function to call, given a
1944 // tree for the expression.
1946 get_function_tree(Translate_context*, tree);
1948 // Return a tree for the first argument to pass to the interface
1949 // function, given a tree for the expression. This is the real
1950 // object associated with the interface object.
1952 get_underlying_object_tree(Translate_context*, tree);
1956 do_traverse(Traverse* traverse);
1962 do_determine_type(const Type_context*);
1965 do_check_types(Gogo*);
1970 return Expression::make_interface_field_reference(this->expr_->copy(),
1976 do_get_tree(Translate_context*);
1979 do_dump_expression(Ast_dump_context*) const;
1982 // The expression for the interface object. This should have a type
1983 // of interface or pointer to interface.
1985 // The field we are retrieving--the name of the method.
1989 // A type guard expression.
1991 class Type_guard_expression : public Expression
1994 Type_guard_expression(Expression* expr, Type* type, Location location)
1995 : Expression(EXPRESSION_TYPE_GUARD, location),
1996 expr_(expr), type_(type)
1999 // Return the expression to convert.
2002 { return this->expr_; }
2004 // Return the type to which to convert.
2007 { return this->type_; }
2011 do_traverse(Traverse* traverse);
2015 { return this->type_; }
2018 do_determine_type(const Type_context*)
2019 { this->expr_->determine_type_no_context(); }
2022 do_check_types(Gogo*);
2027 return new Type_guard_expression(this->expr_->copy(), this->type_,
2032 do_get_tree(Translate_context*);
2035 do_dump_expression(Ast_dump_context*) const;
2038 // The expression to convert.
2040 // The type to which to convert.
2044 // A receive expression.
2046 class Receive_expression : public Expression
2049 Receive_expression(Expression* channel, Location location)
2050 : Expression(EXPRESSION_RECEIVE, location),
2054 // Return the channel.
2057 { return this->channel_; }
2061 do_traverse(Traverse* traverse)
2062 { return Expression::traverse(&this->channel_, traverse); }
2065 do_discarding_value()
2072 do_determine_type(const Type_context*)
2073 { this->channel_->determine_type_no_context(); }
2076 do_check_types(Gogo*);
2081 return Expression::make_receive(this->channel_->copy(), this->location());
2085 do_must_eval_in_order() const
2089 do_get_tree(Translate_context*);
2092 do_dump_expression(Ast_dump_context*) const;
2095 // The channel from which we are receiving.
2096 Expression* channel_;
2099 // A numeric constant. This is used both for untyped constants and
2100 // for constants that have a type.
2102 class Numeric_constant
2106 : classification_(NC_INVALID), type_(NULL)
2109 ~Numeric_constant();
2111 Numeric_constant(const Numeric_constant&);
2113 Numeric_constant& operator=(const Numeric_constant&);
2115 // Set to an unsigned long value.
2117 set_unsigned_long(Type*, unsigned long);
2119 // Set to an integer value.
2121 set_int(Type*, const mpz_t);
2123 // Set to a rune value.
2125 set_rune(Type*, const mpz_t);
2127 // Set to a floating point value.
2129 set_float(Type*, const mpfr_t);
2131 // Set to a complex value.
2133 set_complex(Type*, const mpfr_t, const mpfr_t);
2138 { return this->classification_ == Numeric_constant::NC_INT; }
2142 { return this->classification_ == Numeric_constant::NC_RUNE; }
2146 { return this->classification_ == Numeric_constant::NC_FLOAT; }
2150 { return this->classification_ == Numeric_constant::NC_COMPLEX; }
2152 // Value retrievers. These will initialize the values as well as
2153 // set them. GET_INT is only valid if IS_INT returns true, and
2154 // likewise respectively.
2156 get_int(mpz_t*) const;
2159 get_rune(mpz_t*) const;
2162 get_float(mpfr_t*) const;
2165 get_complex(mpfr_t*, mpfr_t*) const;
2167 // Codes returned by to_unsigned_long.
2168 enum To_unsigned_long
2170 // Value is integer and fits in unsigned long.
2172 // Value is not integer.
2174 // Value is integer but is negative.
2176 // Value is non-negative integer but does not fit in unsigned
2181 // If the value can be expressed as an integer that fits in an
2182 // unsigned long, set *VAL and return NC_UL_VALID. Otherwise return
2183 // one of the other To_unsigned_long codes.
2185 to_unsigned_long(unsigned long* val) const;
2187 // If the value can be expressed as an int, return true and
2188 // initialize and set VAL. This will return false for a value with
2189 // an explicit float or complex type, even if the value is integral.
2191 to_int(mpz_t* val) const;
2193 // If the value can be expressed as a float, return true and
2194 // initialize and set VAL.
2196 to_float(mpfr_t* val) const;
2198 // If the value can be expressed as a complex, return true and
2199 // initialize and set VR and VI.
2201 to_complex(mpfr_t* vr, mpfr_t* vi) const;
2207 // If the constant can be expressed in TYPE, then set the type of
2208 // the constant to TYPE and return true. Otherwise return false,
2209 // and, if ISSUE_ERROR is true, issue an error message. LOCATION is
2210 // the location to use for the error.
2212 set_type(Type* type, bool issue_error, Location location);
2214 // Return an Expression for this value.
2216 expression(Location) const;
2223 mpz_to_unsigned_long(const mpz_t ival, unsigned long *val) const;
2226 mpfr_to_unsigned_long(const mpfr_t fval, unsigned long *val) const;
2229 check_int_type(Integer_type*, bool, Location) const;
2232 check_float_type(Float_type*, bool, Location);
2235 check_complex_type(Complex_type*, bool, Location);
2237 // The kinds of constants.
2247 // The kind of constant.
2248 Classification classification_;
2252 // If NC_INT or NC_RUNE.
2263 // The type if there is one. This will be NULL for an untyped
2268 #endif // !defined(GO_EXPRESSIONS_H)