EquelleType type() const { // We do not want mutability of a variable to be passed on to // expressions involving that variable. EquelleType et = SymbolTable::variableType(varname_); if (et.isMutable()) { et.setMutable(false); } return et; }
TypeNode* handleMutableType(TypeNode* type_expr) { MutableTypeNode* tn = new MutableTypeNode(type_expr); tn->setLocation(FileLocation(yylineno)); return tn; #if 0 EquelleType et = type_expr->type(); et.setMutable(true); TypeNode* tn = new TypeNode(et); tn->setLocation(type_expr->location()); delete type_expr; return tn; #endif }
EquelleType type() const { // We do not want mutability of a variable to be passed on to // expressions involving that variable. if (SymbolTable::isVariableDeclared(varname_)) { EquelleType et = SymbolTable::variableType(varname_); if (et.isMutable()) { et.setMutable(false); } return et; } else if (SymbolTable::isFunctionDeclared(varname_)) { // Function reference. return EquelleType(); } else { throw std::logic_error("Internal compiler error in VarNode::type()."); } }
EquelleType type() const { EquelleType bt = btype_->type(); bt.setMutable(true); return bt; }