summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/include/ast_expression.h
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2000-10-02 20:06:33 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2000-10-02 20:06:33 +0000
commit02ffc4a4eb4232632b35e4d0ab883de3998b4ecf (patch)
tree78664e1c266d9f9c533696b13e9b32348f7ccefc /TAO/TAO_IDL/include/ast_expression.h
parenta6bcb2b557cd1ea49e0ccd457f67b5c1a7d82645 (diff)
downloadATCD-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.h356
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