diff options
author | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2000-10-02 20:06:33 +0000 |
---|---|---|
committer | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2000-10-02 20:06:33 +0000 |
commit | 02ffc4a4eb4232632b35e4d0ab883de3998b4ecf (patch) | |
tree | 78664e1c266d9f9c533696b13e9b32348f7ccefc /TAO/TAO_IDL/include/ast_expression.h | |
parent | a6bcb2b557cd1ea49e0ccd457f67b5c1a7d82645 (diff) | |
download | ATCD-02ffc4a4eb4232632b35e4d0ab883de3998b4ecf.tar.gz |
ChangeLogTag: Mon Oct 2 14:59:44 2000 Jeff Parsons <parsons@cs.wustl.edu>
Diffstat (limited to 'TAO/TAO_IDL/include/ast_expression.h')
-rw-r--r-- | TAO/TAO_IDL/include/ast_expression.h | 356 |
1 files changed, 201 insertions, 155 deletions
diff --git a/TAO/TAO_IDL/include/ast_expression.h b/TAO/TAO_IDL/include/ast_expression.h index 7c69f84380f..f1ed7c3edf8 100644 --- a/TAO/TAO_IDL/include/ast_expression.h +++ b/TAO/TAO_IDL/include/ast_expression.h @@ -62,190 +62,236 @@ NOTE: SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are trademarks or registered trademarks of Sun Microsystems, Inc. - */ +*/ #ifndef _AST_EXPRESSION_AST_EXPRESSION_HH #define _AST_EXPRESSION_AST_EXPRESSION_HH #include "ace/CDR_Stream.h" -// Representation of expression values - -/* -** DEPENDENCIES: NONE -** -** USE: Included from ast.hh -*/ +// Representation of expression values. -// An expression (and maybe its value, if computed) +// An expression (and maybe its value, if computed). class TAO_IDL_FE_Export AST_Expression { public: - // Enum to define all the different operators to combine expressions - enum ExprComb { - EC_add // '+' - , EC_minus // '-' - , EC_mul // '*' - , EC_div // '/' - , EC_mod // '%' - , EC_or // '|' - , EC_xor // '^' - , EC_and // '&' - , EC_left // '<<' - , EC_right // '>>' - , EC_u_plus // unary '+' - , EC_u_minus // unary '-' - , EC_bit_neg // '~' - , EC_none // No operator (missing) - , EC_symbol // a symbol (function or constant name) - }; + // Enum to define all the different operators to combine expressions. + enum ExprComb + { + EC_add // '+' + , EC_minus // '-' + , EC_mul // '*' + , EC_div // '/' + , EC_mod // '%' + , EC_or // '|' + , EC_xor // '^' + , EC_and // '&' + , EC_left // '<<' + , EC_right // '>>' + , EC_u_plus // unary '+' + , EC_u_minus // unary '-' + , EC_bit_neg // '~' + , EC_none // No operator (missing). + , EC_symbol // A symbol (function or constant name). + }; // Enum to define the different kinds of evaluation possible - // Extend this for more kinds of evaluation as required - enum EvalKind { - EK_const // Must evaluate to constant - , EK_positive_int // Must evaluate to positive integer + // Extend this for more kinds of evaluation as required. + enum EvalKind + { + EK_const // Must evaluate to constant. + , EK_positive_int // Must evaluate to positive integer. // @@ (JP) I added these to get the ~ operator to work with all the // relevant aritmetic types, but eventually, we should get rid of // this whole enum. - , EK_short - , EK_ushort - , EK_long - , EK_ulong - , EK_longlong - , EK_ulonglong - , EK_octet - }; - - // Enum to define expression type - enum ExprType { - EV_short // Expression value is short - , EV_ushort // Expression value is unsigned short - , EV_long // Expression value is long - , EV_ulong // Expression value is unsigned long - , EV_longlong // Expression value is long long - , EV_ulonglong // Expression value is unsigned long long - , EV_float // Expression value is 32-bit float - , EV_double // Expression value is 64-bit float - , EV_longdouble // Expression value is 128-bit float - , EV_char // Expression value is char - , EV_wchar // Expression value is wide char - , EV_octet // Expression value is unsigned char - , EV_bool // Expression value is boolean - , EV_string // Expression value is char * - , EV_wstring // Expression value is wide string - , EV_any // Expression value is any of above - , EV_void // Expression value is void (absent) - , EV_none // Expression value is missing - }; - - // Structure to describe value of constant expression and its type - struct AST_ExprValue { - union { - short sval; // Contains short expression value - unsigned short usval; // Contains unsigned short expr value - long lval; // Contains long expression value - unsigned long ulval; // Contains unsigned long expr value - unsigned long bval; // Contains boolean expression value + , EK_short + , EK_ushort + , EK_long + , EK_ulong + , EK_longlong + , EK_ulonglong + , EK_octet + }; + + // Enum to define expression type. + enum ExprType + { + EV_short // Expression value is short. + , EV_ushort // Expression value is unsigned short. + , EV_long // Expression value is long. + , EV_ulong // Expression value is unsigned long. + , EV_longlong // Expression value is long long. + , EV_ulonglong // Expression value is unsigned long long. + , EV_float // Expression value is 32-bit float. + , EV_double // Expression value is 64-bit float. + , EV_longdouble // Expression value is 128-bit float. + , EV_char // Expression value is char. + , EV_wchar // Expression value is wide char. + , EV_octet // Expression value is unsigned char. + , EV_bool // Expression value is boolean. + , EV_string // Expression value is char *. + , EV_wstring // Expression value is wide string. + , EV_any // Expression value is any of above. + , EV_void // Expression value is void (absent). + , EV_none // Expression value is missing. + }; + + // Structure to describe value of constant expression and its type. + struct AST_ExprValue + { + union + { + short sval; // Contains short expression value. + unsigned short usval; // Contains unsigned short expr value. + long lval; // Contains long expression value. + unsigned long ulval; // Contains unsigned long expr value. + unsigned long bval; // Contains boolean expression value. #if ! defined (ACE_LACKS_LONGLONG_T) - ACE_CDR::LongLong llval; // Contains long long expr value - ACE_CDR::ULongLong ullval; // Contains unsigned long long expr value + ACE_CDR::LongLong llval; // Contains long long expr value. + ACE_CDR::ULongLong ullval; // Contains unsigned long long expr value. #endif /* ! defined (ACE_LACKS_LONGLONG_T) */ - float fval; // Contains 32-bit float expr value - double dval; // Contains 64-bit float expr value - char cval; // Contains char expression value - ACE_CDR::WChar wcval; // Contains wchar expression value - unsigned char oval; // Contains unsigned char expr value - UTL_String *strval; // Contains String * expr value - char *wstrval; // Contains wide string expr value - unsigned long eval; // Contains enumeration value - } u; - ExprType et; - }; - - // Operations - - // Constructor(s) - AST_Expression(AST_Expression *v, ExprType t); - - AST_Expression(ExprComb c, AST_Expression *v1, AST_Expression *v2); - - AST_Expression(short s); - AST_Expression(unsigned short us); - AST_Expression(long l); - AST_Expression(long l, ExprType t); - AST_Expression(unsigned long ul); - AST_Expression(float f); - AST_Expression(double d); - AST_Expression(char c); - AST_Expression(ACE_OutputCDR::from_wchar wc); - AST_Expression(unsigned char uc); - AST_Expression(UTL_String *s); - AST_Expression(char *s); - AST_Expression(UTL_ScopedName *n); + float fval; // Contains 32-bit float expr value. + double dval; // Contains 64-bit float expr value. + char cval; // Contains char expression value. + ACE_CDR::WChar wcval; // Contains wchar expression value. + unsigned char oval; // Contains unsigned char expr value. + UTL_String *strval; // Contains String * expr value. + char *wstrval; // Contains wide string expr value. + unsigned long eval; // Contains enumeration value. + } u; + + ExprType et; + }; + + // Operations. + + // Constructor(s). + AST_Expression (AST_Expression *v, + ExprType t); + + AST_Expression (ExprComb c, + AST_Expression *v1, + AST_Expression *v2); + + AST_Expression (short s); + + AST_Expression (unsigned short us); + + AST_Expression (long l); + + AST_Expression (long l, + ExprType t); + AST_Expression (unsigned long ul); + + AST_Expression (float f); + + AST_Expression (double d); + + AST_Expression (char c); + + AST_Expression (ACE_OutputCDR::from_wchar wc); + + AST_Expression (unsigned char uc); + + AST_Expression (UTL_String *s); + + AST_Expression (char *s); + + AST_Expression (UTL_ScopedName *n); + + // Destructor. virtual ~AST_Expression (void); - // Data Accessors - UTL_Scope *defined_in(); - void set_defined_in(UTL_Scope *d); - long line(); - void set_line(long l); - UTL_String *file_name(); - void set_file_name(UTL_String *f); - ExprComb ec(); - void set_ec(ExprComb new_ec); - AST_ExprValue *ev(); - void set_ev(AST_ExprValue *new_ev); - AST_Expression *v1(); - void set_v1(AST_Expression *e); - AST_Expression *v2(); - void set_v2(AST_Expression *e); - UTL_ScopedName *n(); - void set_n(UTL_ScopedName *new_n); - - // AST Dumping - virtual void dump(ostream &o); - - // Other operations - - // Evaluation and value coercion - virtual AST_ExprValue *eval(EvalKind ek); - virtual AST_ExprValue *coerce(ExprType t); - - // Evaluate then store value inside this AST_Expression - virtual void evaluate(EvalKind ek); - - // Compare to AST_Expressions - virtual long operator==(AST_Expression *vc); - virtual long compare(AST_Expression *vc); + // Data Accessors. + UTL_Scope *defined_in (void); + void set_defined_in (UTL_Scope *d); + + long line (void); + void set_line (long l); + + UTL_String *file_name (void); + void set_file_name (UTL_String *f); + + ExprComb ec (void); + void set_ec (ExprComb new_ec); + + AST_ExprValue *ev (void); + void set_ev (AST_ExprValue *new_ev); + + AST_Expression *v1 (void); + void set_v1 (AST_Expression *e); + + AST_Expression *v2 (void); + void set_v2 (AST_Expression *e); + + UTL_ScopedName *n (void); + void set_n (UTL_ScopedName *new_n); + + // AST Dumping. + virtual void dump (ostream &o); + + // Other operations. + + // Evaluation and value coercion. + + virtual AST_ExprValue *eval (EvalKind ek); + + virtual AST_ExprValue *coerce (ExprType t); + + // Evaluate then store value inside this AST_Expression. + virtual void evaluate (EvalKind ek); + + // Compare to AST_Expressions. + + virtual long operator== (AST_Expression *vc); + + virtual long compare (AST_Expression *vc); protected: - // Evaluate different sets of operators - virtual AST_ExprValue *eval_bin_op(EvalKind ek); - virtual AST_ExprValue *eval_bit_op(EvalKind ek); - virtual AST_ExprValue *eval_un_op(EvalKind ek); - virtual AST_ExprValue *eval_symbol(EvalKind ek); + // Evaluate different sets of operators. + virtual AST_ExprValue *eval_bin_op (EvalKind ek); + + virtual AST_ExprValue *eval_bit_op (EvalKind ek); + + virtual AST_ExprValue *eval_un_op (EvalKind ek); + + virtual AST_ExprValue *eval_symbol (EvalKind ek); private: - // Data - UTL_Scope *pd_defined_in; // Scope - long pd_line; // Line defined in - UTL_String *pd_file_name; // What file defined in + // Data. + + UTL_Scope *pd_defined_in; + // Scope. + + long pd_line; + // Line defined in. + + UTL_String *pd_file_name; + // What file defined in. + + ExprComb pd_ec; + // What combinator. + + AST_ExprValue *pd_ev; + // Computed value. + + AST_Expression *pd_v1; + // 1st sub-expression. + + AST_Expression *pd_v2; + // 2nd sub-expression. - ExprComb pd_ec; // What combinator - AST_ExprValue *pd_ev; // computed value - AST_Expression *pd_v1; // 1st sub-expression - AST_Expression *pd_v2; // 2nd sub-expression - UTL_ScopedName *pd_n; // symbolic name (if any) + UTL_ScopedName *pd_n; + // Symbolic name (if any). // Operations - // Fill out the lineno, filename and definition scope details - void fill_definition_details(); + // Fill out the lineno, filename and definition scope details. + void fill_definition_details (void); - // Internal evaluation - virtual AST_ExprValue *eval_internal(EvalKind ek); + // Internal evaluation. + virtual AST_ExprValue *eval_internal (EvalKind ek); }; #endif // _AST_EXPR_VAL_AST_EXPR_VAL_HH |