예제 #1
0
 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;
 }
예제 #2
0
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
}
예제 #3
0
 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().");
     }
 }
예제 #4
0
 EquelleType type() const
 {
     EquelleType bt = btype_->type();
     bt.setMutable(true);
     return bt;
 }