Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SynTree/Expression.h

    rea6332d re612146c  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Fri Aug  8 11:54:00 2017
    13 // Update Count     : 44
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Sun Sep  3 19:23:46 2017
     13// Update Count     : 48
    1414//
     15
    1516#pragma once
    1617
     
    2425#include "Constant.h"             // for Constant
    2526#include "Initializer.h"          // for Designation (ptr only), Initializer
     27#include "Label.h"                // for Label
    2628#include "Mutator.h"              // for Mutator
    2729#include "SynTree.h"              // for UniqueId
     
    173175};
    174176
    175 // xxx - this doesn't appear to actually be hooked in anywhere. We should use this instead of the "&&"" UntypedExpr hack
     177// GCC &&label
     178// https://gcc.gnu.org/onlinedocs/gcc-3.4.2/gcc/Labels-as-Values.html
    176179class LabelAddressExpr : public Expression {
    177180  public:
    178         Expression * arg;
    179 
    180         LabelAddressExpr( Expression * arg );
     181        Label arg;
     182
     183        LabelAddressExpr( const Label &arg );
    181184        LabelAddressExpr( const LabelAddressExpr & other );
    182185        virtual ~LabelAddressExpr();
    183 
    184         Expression * get_arg() const { return arg; }
    185         void set_arg(Expression * newValue ) { arg = newValue; }
    186186
    187187        virtual LabelAddressExpr * clone() const { return new LabelAddressExpr( * this ); }
     
    283283        DeclarationWithType * get_var() const { return var; }
    284284        void set_var( DeclarationWithType * newValue ) { var = newValue; }
     285
     286        static VariableExpr * functionPointer( FunctionDecl * decl );
    285287
    286288        virtual VariableExpr * clone() const { return new VariableExpr( * this ); }
     
    538540  public:
    539541        Expression * inout;
    540         ConstantExpr * constraint;
     542        Expression * constraint;
    541543        Expression * operand;
    542544
    543         AsmExpr( Expression * inout, ConstantExpr * constraint, Expression * operand ) : inout( inout ), constraint( constraint ), operand( operand ) {}
     545        AsmExpr( Expression * inout, Expression * constraint, Expression * operand ) : inout( inout ), constraint( constraint ), operand( operand ) {}
    544546        AsmExpr( const AsmExpr & other );
    545547        virtual ~AsmExpr() { delete inout; delete constraint; delete operand; };
     
    548550        void set_inout( Expression * newValue ) { inout = newValue; }
    549551
    550         ConstantExpr * get_constraint() const { return constraint; }
    551         void set_constraint( ConstantExpr * newValue ) { constraint = newValue; }
     552        Expression * get_constraint() const { return constraint; }
     553        void set_constraint( Expression * newValue ) { constraint = newValue; }
    552554
    553555        Expression * get_operand() const { return operand; }
Note: See TracChangeset for help on using the changeset viewer.