summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2010-05-31 20:50:00 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2010-05-31 20:50:00 +0000
commit349c15058d1cb90d265edd34e015c77875ef8c81 (patch)
tree2e7c04e3d9d62476676c2d203112af0a2d9967b0
parentda85fd8f1a2be4c5ff4dec0c1b9fe30bac8d649f (diff)
downloadATCD-349c15058d1cb90d265edd34e015c77875ef8c81.tar.gz
ChangeLogTag: Mon May 31 20:48:24 UTC 2010 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r--TAO/ChangeLog33
-rw-r--r--TAO/TAO_IDL/ast/ast_expression.cpp48
-rw-r--r--TAO/TAO_IDL/ast/ast_generator.cpp36
-rw-r--r--TAO/TAO_IDL/be/be_expression.cpp18
-rw-r--r--TAO/TAO_IDL/be/be_generator.cpp36
-rw-r--r--TAO/TAO_IDL/be/be_visitor_constant.cpp1
-rw-r--r--TAO/TAO_IDL/be/be_visitor_constant/constant_ch.cpp1
-rw-r--r--TAO/TAO_IDL/be_include/be_expression.h7
-rw-r--r--TAO/TAO_IDL/be_include/be_generator.h8
-rw-r--r--TAO/TAO_IDL/fe/idl.ll54
-rw-r--r--TAO/TAO_IDL/fe/idl.yy3
-rw-r--r--TAO/TAO_IDL/fe/lex.yy.cpp52
-rw-r--r--TAO/TAO_IDL/fe/y.tab.cpp7
-rw-r--r--TAO/TAO_IDL/fe/y.tab.h4
-rw-r--r--TAO/TAO_IDL/include/ast_expression.h6
-rw-r--r--TAO/TAO_IDL/include/ast_generator.h6
-rw-r--r--TAO/tests/IDL_Test/constants.idl10
-rw-r--r--TAO/tests/IDL_Test/including.idl2
-rw-r--r--TAO/tests/IDL_Test/main.cpp42
19 files changed, 292 insertions, 82 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog
index 26df173d153..d0e31fda8ff 100644
--- a/TAO/ChangeLog
+++ b/TAO/ChangeLog
@@ -1,3 +1,36 @@
+Mon May 31 20:48:24 UTC 2010 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/include/ast_generator.h:
+ * TAO_IDL/include/ast_expression.h:
+ * TAO_IDL/be/be_expression.cpp:
+ * TAO_IDL/be/be_visitor_constant.cpp:
+ * TAO_IDL/be/be_visitor_constant/constant_ch.cpp:
+ * TAO_IDL/be/be_generator.cpp:
+ * TAO_IDL/ast/ast_expression.cpp:
+ * TAO_IDL/ast/ast_generator.cpp:
+ * TAO_IDL/be_include/be_generator.h:
+ * TAO_IDL/be_include/be_expression.h:
+ * TAO_IDL/fe/y.tab.cpp:
+ * TAO_IDL/fe/y.tab.h:
+ * TAO_IDL/fe/idl.yy:
+ * TAO_IDL/fe/lex.yy.cpp:
+ * TAO_IDL/fe/idl.ll:
+
+ Changes to handling of signed/unsigned
+ long long integer literals. Values larger
+ than the 32-bit max were not generated
+ correctly.
+
+ * tests/IDL_Test/main.cpp:
+ * tests/IDL_Test/including.idl:
+ * tests/IDL_Test/constants.idl:
+
+ Added test case to IDL_Test, executable
+ checks correctness of generated values.
+ Thanks to Bogdan Jeram <bjeram at eso dot org>
+ for reporting the problem and sending in a
+ test example.
+
Mon May 31 20:34:36 UTC 2010 Jeff Parsons <j.parsons@vanderbilt.edu>
* TAO_IDL/be/be_visitor_union_branch/public_cs.cpp:
diff --git a/TAO/TAO_IDL/ast/ast_expression.cpp b/TAO/TAO_IDL/ast/ast_expression.cpp
index dbac1f291b6..9a366e7c4e1 100644
--- a/TAO/TAO_IDL/ast/ast_expression.cpp
+++ b/TAO/TAO_IDL/ast/ast_expression.cpp
@@ -255,6 +255,25 @@ AST_Expression::AST_Expression (ACE_CDR::Long lv)
this->pd_ev->u.lval = lv;
}
+// An AST_Expression denoting a long integer.
+AST_Expression::AST_Expression (ACE_CDR::LongLong llv)
+ : pd_ec (EC_none),
+ pd_ev (0),
+ pd_v1 (0),
+ pd_v2 (0),
+ pd_n (0),
+ tdef (0),
+ param_holder_ (0)
+{
+ this->fill_definition_details ();
+
+ ACE_NEW (this->pd_ev,
+ AST_ExprValue);
+
+ this->pd_ev->et = EV_longlong;
+ this->pd_ev->u.llval = llv;
+}
+
// An AST_Expression denoting a boolean.
AST_Expression::AST_Expression (ACE_CDR::Boolean b)
: pd_ec (EC_none),
@@ -293,6 +312,29 @@ AST_Expression::AST_Expression (ACE_CDR::ULong ulv)
this->pd_ev->u.ulval = ulv;
}
+// An AST_Expression denoting an unsigned long long integer.
+AST_Expression::AST_Expression (ACE_CDR::ULongLong ulv)
+ : pd_ec (EC_none),
+ pd_ev (0),
+ pd_v1 (0),
+ pd_v2 (0),
+ pd_n (0),
+ tdef (0),
+ param_holder_ (0)
+{
+ this->fill_definition_details ();
+
+ ACE_NEW (this->pd_ev,
+ AST_ExprValue);
+
+ this->pd_ev->et = EV_ulonglong;
+#if defined (ACE_LACKS_LONGLONG_T)
+ this->pd_ev->u.ulval = ulv;
+#else
+ this->pd_ev->u.ullval = ulv;
+#endif
+}
+
// An AST_Expression denoting an unsigned long integer.
AST_Expression::AST_Expression (ACE_CDR::ULong ulv,
ExprType t)
@@ -927,7 +969,8 @@ coerce_value (AST_Expression::AST_ExprValue *ev,
return 0;
}
- ev->u.llval = (ACE_CDR::LongLong) ev->u.ullval;
+ ev->u.llval =
+ static_cast<ACE_CDR::LongLong> (ev->u.ullval);
ev->et = AST_Expression::EV_longlong;
return ev;
case AST_Expression::EV_bool:
@@ -1015,7 +1058,8 @@ coerce_value (AST_Expression::AST_ExprValue *ev,
return 0;
}
- ev->u.ullval = (ACE_CDR::LongLong) ev->u.llval;
+ ev->u.ullval =
+ static_cast<ACE_CDR::LongLong> (ev->u.llval);
ev->et = AST_Expression::EV_ulonglong;
return ev;
case AST_Expression::EV_ulonglong:
diff --git a/TAO/TAO_IDL/ast/ast_generator.cpp b/TAO/TAO_IDL/ast/ast_generator.cpp
index fbc8b0d0e7d..4d9d631e449 100644
--- a/TAO/TAO_IDL/ast/ast_generator.cpp
+++ b/TAO/TAO_IDL/ast/ast_generator.cpp
@@ -716,6 +716,17 @@ AST_Generator::create_expr (ACE_CDR::Long v)
}
AST_Expression *
+AST_Generator::create_expr (ACE_CDR::LongLong l)
+{
+ AST_Expression *retval = 0;
+ ACE_NEW_RETURN (retval,
+ AST_Expression (l),
+ 0);
+
+ return retval;
+}
+
+AST_Expression *
AST_Generator::create_expr (ACE_CDR::Boolean b)
{
AST_Expression *retval = 0;
@@ -727,13 +738,34 @@ AST_Generator::create_expr (ACE_CDR::Boolean b)
}
AST_Expression *
+AST_Generator::create_expr (ACE_CDR::ULong v)
+{
+ AST_Expression *retval = 0;
+ ACE_NEW_RETURN (retval,
+ AST_Expression (v),
+ 0);
+
+ return retval;
+}
+
+AST_Expression *
+AST_Generator::create_expr (ACE_CDR::ULongLong l)
+{
+ AST_Expression *retval = 0;
+ ACE_NEW_RETURN (retval,
+ AST_Expression (l),
+ 0);
+
+ return retval;
+}
+
+AST_Expression *
AST_Generator::create_expr (ACE_CDR::ULong v,
AST_Expression::ExprType t)
{
AST_Expression *retval = 0;
ACE_NEW_RETURN (retval,
- AST_Expression (v,
- t),
+ AST_Expression (v, t),
0);
return retval;
diff --git a/TAO/TAO_IDL/be/be_expression.cpp b/TAO/TAO_IDL/be/be_expression.cpp
index 2802dc46423..70ec5f5fba2 100644
--- a/TAO/TAO_IDL/be/be_expression.cpp
+++ b/TAO/TAO_IDL/be/be_expression.cpp
@@ -42,15 +42,29 @@ be_expression::be_expression (ACE_CDR::Long l)
{
}
+be_expression::be_expression (ACE_CDR::LongLong l)
+ : AST_Expression (l)
+{
+}
+
be_expression::be_expression (ACE_CDR::Boolean b)
: AST_Expression (b)
{
}
+be_expression::be_expression (ACE_CDR::ULong l)
+ : AST_Expression (l)
+{
+}
+
+be_expression::be_expression (ACE_CDR::ULongLong l)
+ : AST_Expression (l)
+{
+}
+
be_expression::be_expression (ACE_CDR::ULong l,
AST_Expression::ExprType t)
- : AST_Expression (l,
- t)
+ : AST_Expression (l, t)
{
}
diff --git a/TAO/TAO_IDL/be/be_generator.cpp b/TAO/TAO_IDL/be/be_generator.cpp
index a305a7e7ac3..c77240dc860 100644
--- a/TAO/TAO_IDL/be/be_generator.cpp
+++ b/TAO/TAO_IDL/be/be_generator.cpp
@@ -720,6 +720,17 @@ be_generator::create_expr (ACE_CDR::Long l)
}
AST_Expression *
+be_generator::create_expr (ACE_CDR::LongLong l)
+{
+ be_expression *retval = 0;
+ ACE_NEW_RETURN (retval,
+ be_expression (l),
+ 0);
+
+ return retval;
+}
+
+AST_Expression *
be_generator::create_expr (ACE_CDR::Boolean b)
{
be_expression *retval = 0;
@@ -731,13 +742,34 @@ be_generator::create_expr (ACE_CDR::Boolean b)
}
AST_Expression *
+be_generator::create_expr (ACE_CDR::ULong l)
+{
+ be_expression *retval = 0;
+ ACE_NEW_RETURN (retval,
+ be_expression (l),
+ 0);
+
+ return retval;
+}
+
+AST_Expression *
+be_generator::create_expr (ACE_CDR::ULongLong l)
+{
+ be_expression *retval = 0;
+ ACE_NEW_RETURN (retval,
+ be_expression (l),
+ 0);
+
+ return retval;
+}
+
+AST_Expression *
be_generator::create_expr (ACE_CDR::ULong l,
AST_Expression::ExprType t)
{
be_expression *retval = 0;
ACE_NEW_RETURN (retval,
- be_expression (l,
- t),
+ be_expression (l, t),
0);
return retval;
diff --git a/TAO/TAO_IDL/be/be_visitor_constant.cpp b/TAO/TAO_IDL/be/be_visitor_constant.cpp
index 1a9bf45abe7..b65bdc620ef 100644
--- a/TAO/TAO_IDL/be/be_visitor_constant.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_constant.cpp
@@ -12,7 +12,6 @@
*/
//=============================================================================
-
#include "be_constant.h"
#include "be_module.h"
#include "be_helper.h"
diff --git a/TAO/TAO_IDL/be/be_visitor_constant/constant_ch.cpp b/TAO/TAO_IDL/be/be_visitor_constant/constant_ch.cpp
index 4c78540881c..9dfca5fbe24 100644
--- a/TAO/TAO_IDL/be/be_visitor_constant/constant_ch.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_constant/constant_ch.cpp
@@ -12,7 +12,6 @@
*/
//=============================================================================
-
// ********************************************************************
// Visitor implementation for the Constant type
// This one for the client header file
diff --git a/TAO/TAO_IDL/be_include/be_expression.h b/TAO/TAO_IDL/be_include/be_expression.h
index 2888fbaaa7d..23053aee870 100644
--- a/TAO/TAO_IDL/be_include/be_expression.h
+++ b/TAO/TAO_IDL/be_include/be_expression.h
@@ -14,7 +14,6 @@
*/
//=============================================================================
-
#ifndef BE_EXPRESSION_H
#define BE_EXPRESSION_H
@@ -37,8 +36,14 @@ public:
be_expression (ACE_CDR::Long l);
+ be_expression (ACE_CDR::LongLong ll);
+
be_expression (ACE_CDR::Boolean b);
+ be_expression (ACE_CDR::ULong ul);
+
+ be_expression (ACE_CDR::ULongLong ull);
+
be_expression (ACE_CDR::ULong l,
AST_Expression::ExprType t);
diff --git a/TAO/TAO_IDL/be_include/be_generator.h b/TAO/TAO_IDL/be_include/be_generator.h
index 6146a363bd1..358ac3eb084 100644
--- a/TAO/TAO_IDL/be_include/be_generator.h
+++ b/TAO/TAO_IDL/be_include/be_generator.h
@@ -220,12 +220,18 @@ public:
virtual AST_Expression *create_expr (ACE_CDR::Long v);
+ virtual AST_Expression *create_expr (ACE_CDR::LongLong v);
+
virtual AST_Expression *create_expr (ACE_CDR::Boolean b);
+ virtual AST_Expression *create_expr (ACE_CDR::ULong v);
+
+ virtual AST_Expression *create_expr (ACE_CDR::ULongLong v);
+
virtual AST_Expression *create_expr (ACE_CDR::ULong v,
AST_Expression::ExprType t);
- virtual AST_Expression *create_expr( UTL_String *s);
+ virtual AST_Expression *create_expr (UTL_String *s);
virtual AST_Expression *create_expr (char *s);
diff --git a/TAO/TAO_IDL/fe/idl.ll b/TAO/TAO_IDL/fe/idl.ll
index 40b16b774d5..b36c3ecf26f 100644
--- a/TAO/TAO_IDL/fe/idl.ll
+++ b/TAO/TAO_IDL/fe/idl.ll
@@ -89,17 +89,17 @@ trademarks or registered trademarks of Sun Microsystems, Inc.
#include "fe_extern.h"
#include "y.tab.h"
-static char * idl_wstring_escape_reader (char *);
-static ACE_CDR::WChar idl_wchar_escape_reader (char *);
-static ACE_CDR::Char idl_escape_reader (char *);
-static ACE_CDR::Double idl_atof (char *);
-static ACE_CDR::Long idl_atoi (char *, long);
-static ACE_CDR::ULong idl_atoui (char *, long);
-static void idl_parse_line_and_file (char *);
-static void idl_store_pragma (char *);
-static char * idl_get_pragma_string (char *);
-static bool idl_valid_version (char *);
-static AST_Decl * idl_find_node (char *);
+static char * idl_wstring_escape_reader (char *);
+static ACE_CDR::WChar idl_wchar_escape_reader (char *);
+static ACE_CDR::Char idl_escape_reader (char *);
+static ACE_CDR::Double idl_atof (char *);
+static ACE_CDR::LongLong idl_atoi (char *, long);
+static ACE_CDR::ULongLong idl_atoui (char *, long);
+static void idl_parse_line_and_file (char *);
+static void idl_store_pragma (char *);
+static char * idl_get_pragma_string (char *);
+static bool idl_valid_version (char *);
+static AST_Decl * idl_find_node (char *);
#define ace_yytext yytext
@@ -234,36 +234,36 @@ oneway return IDL_ONEWAY;
}
"-"?(([0-9]+"."[0-9]*)|("."[0-9]+))([eE][+-]?[0-9]+)?[lLfF]? {
- yylval.dval = idl_atof(ace_yytext);
+ yylval.dval = idl_atof (ace_yytext);
return IDL_FLOATING_PT_LITERAL;
}
"-"?[0-9]+[eE][+-]?[0-9]+[lLfF]? {
- yylval.dval = idl_atof(ace_yytext);
+ yylval.dval = idl_atof (ace_yytext);
return IDL_FLOATING_PT_LITERAL;
}
"-"[1-9][0-9]* {
- yylval.ival = idl_atoi(ace_yytext, 10);
+ yylval.ival = idl_atoi (ace_yytext, 10);
return IDL_INTEGER_LITERAL;
}
[1-9][0-9]* {
- yylval.uival = idl_atoui(ace_yytext, 10);
+ yylval.uival = idl_atoui (ace_yytext, 10);
return IDL_UINTEGER_LITERAL;
}
"-"0[xX][a-fA-F0-9]+ {
- yylval.ival = idl_atoi(ace_yytext, 16);
+ yylval.ival = idl_atoi (ace_yytext, 16);
return IDL_INTEGER_LITERAL;
}
0[xX][a-fA-F0-9]+ {
- yylval.uival = idl_atoui(ace_yytext, 16);
+ yylval.uival = idl_atoui (ace_yytext, 16);
return IDL_UINTEGER_LITERAL;
}
"-"0[0-7]* {
- yylval.ival = idl_atoi(ace_yytext, 8);
+ yylval.ival = idl_atoi (ace_yytext, 8);
return IDL_INTEGER_LITERAL;
}
0[0-7]* {
- yylval.uival = idl_atoui(ace_yytext, 8);
+ yylval.uival = idl_atoui (ace_yytext, 8);
return IDL_UINTEGER_LITERAL;
}
@@ -305,16 +305,16 @@ oneway return IDL_ONEWAY;
}
"'"\\([0-7]{1,3})"'" {
// octal character constant
- yylval.cval = idl_escape_reader(ace_yytext + 1);
+ yylval.cval = idl_escape_reader (ace_yytext + 1);
return IDL_CHARACTER_LITERAL;
}
"'"\\[xX]([0-9a-fA-F]{1,2})"'" {
// hexadecimal character constant
- yylval.cval = idl_escape_reader(ace_yytext + 1);
+ yylval.cval = idl_escape_reader (ace_yytext + 1);
return IDL_CHARACTER_LITERAL;
}
"'"\\."'" {
- yylval.cval = idl_escape_reader(ace_yytext + 1);
+ yylval.cval = idl_escape_reader (ace_yytext + 1);
return IDL_CHARACTER_LITERAL;
}
L"'"."'" {
@@ -849,10 +849,10 @@ idl_store_pragma (char *buf)
/*
* idl_atoi - Convert a string of digits into a negative integer according to base b
*/
-static ACE_CDR::Long
-idl_atoi(char *s, long b)
+static ACE_CDR::LongLong
+idl_atoi (char *s, long b)
{
- long r = 0;
+ ACE_CDR::LongLong r = ACE_CDR_LONGLONG_INITIALIZER;
// Skip over the dash and possibly spaces after the dash
while (*s == '-' || *s == ' ' || *s == '\t')
@@ -895,10 +895,10 @@ idl_atoi(char *s, long b)
/*
* idl_atoui - Convert a string of digits into an unsigned integer according to base b
*/
-static ACE_CDR::ULong
+static ACE_CDR::ULongLong
idl_atoui(char *s, long b)
{
- ACE_CDR::ULong r = 0;
+ ACE_CDR::ULongLong r = 0;
if (b == 8 && *s == '0')
{
diff --git a/TAO/TAO_IDL/fe/idl.yy b/TAO/TAO_IDL/fe/idl.yy
index 7af14081bfe..36449a1f295 100644
--- a/TAO/TAO_IDL/fe/idl.yy
+++ b/TAO/TAO_IDL/fe/idl.yy
@@ -2173,8 +2173,7 @@ literal
{
// | IDL_UINTEGER_LITERAL
$$ =
- idl_global->gen ()->create_expr ($1,
- AST_Expression::EV_ulonglong);
+ idl_global->gen ()->create_expr ($1);
}
| IDL_STRING_LITERAL
{
diff --git a/TAO/TAO_IDL/fe/lex.yy.cpp b/TAO/TAO_IDL/fe/lex.yy.cpp
index 858fc9ef19d..810b098521e 100644
--- a/TAO/TAO_IDL/fe/lex.yy.cpp
+++ b/TAO/TAO_IDL/fe/lex.yy.cpp
@@ -1009,17 +1009,17 @@ trademarks or registered trademarks of Sun Microsystems, Inc.
#include "fe_extern.h"
#include "y.tab.h"
-static char * idl_wstring_escape_reader (char *);
-static ACE_CDR::WChar idl_wchar_escape_reader (char *);
-static ACE_CDR::Char idl_escape_reader (char *);
-static ACE_CDR::Double idl_atof (char *);
-static ACE_CDR::Long idl_atoi (char *, long);
-static ACE_CDR::ULong idl_atoui (char *, long);
-static void idl_parse_line_and_file (char *);
-static void idl_store_pragma (char *);
-static char * idl_get_pragma_string (char *);
-static bool idl_valid_version (char *);
-static AST_Decl * idl_find_node (char *);
+static char * idl_wstring_escape_reader (char *);
+static ACE_CDR::WChar idl_wchar_escape_reader (char *);
+static ACE_CDR::Char idl_escape_reader (char *);
+static ACE_CDR::Double idl_atof (char *);
+static ACE_CDR::LongLong idl_atoi (char *, long);
+static ACE_CDR::ULongLong idl_atoui (char *, long);
+static void idl_parse_line_and_file (char *);
+static void idl_store_pragma (char *);
+static char * idl_get_pragma_string (char *);
+static bool idl_valid_version (char *);
+static AST_Decl * idl_find_node (char *);
#define ace_tao_yytext tao_yytext
@@ -1623,56 +1623,56 @@ TAO_YY_RULE_SETUP
case 75:
TAO_YY_RULE_SETUP
{
- tao_yylval.dval = idl_atof(ace_tao_yytext);
+ tao_yylval.dval = idl_atof (ace_tao_yytext);
return IDL_FLOATING_PT_LITERAL;
}
TAO_YY_BREAK
case 76:
TAO_YY_RULE_SETUP
{
- tao_yylval.dval = idl_atof(ace_tao_yytext);
+ tao_yylval.dval = idl_atof (ace_tao_yytext);
return IDL_FLOATING_PT_LITERAL;
}
TAO_YY_BREAK
case 77:
TAO_YY_RULE_SETUP
{
- tao_yylval.ival = idl_atoi(ace_tao_yytext, 10);
+ tao_yylval.ival = idl_atoi (ace_tao_yytext, 10);
return IDL_INTEGER_LITERAL;
}
TAO_YY_BREAK
case 78:
TAO_YY_RULE_SETUP
{
- tao_yylval.uival = idl_atoui(ace_tao_yytext, 10);
+ tao_yylval.uival = idl_atoui (ace_tao_yytext, 10);
return IDL_UINTEGER_LITERAL;
}
TAO_YY_BREAK
case 79:
TAO_YY_RULE_SETUP
{
- tao_yylval.ival = idl_atoi(ace_tao_yytext, 16);
+ tao_yylval.ival = idl_atoi (ace_tao_yytext, 16);
return IDL_INTEGER_LITERAL;
}
TAO_YY_BREAK
case 80:
TAO_YY_RULE_SETUP
{
- tao_yylval.uival = idl_atoui(ace_tao_yytext, 16);
+ tao_yylval.uival = idl_atoui (ace_tao_yytext, 16);
return IDL_UINTEGER_LITERAL;
}
TAO_YY_BREAK
case 81:
TAO_YY_RULE_SETUP
{
- tao_yylval.ival = idl_atoi(ace_tao_yytext, 8);
+ tao_yylval.ival = idl_atoi (ace_tao_yytext, 8);
return IDL_INTEGER_LITERAL;
}
TAO_YY_BREAK
case 82:
TAO_YY_RULE_SETUP
{
- tao_yylval.uival = idl_atoui(ace_tao_yytext, 8);
+ tao_yylval.uival = idl_atoui (ace_tao_yytext, 8);
return IDL_UINTEGER_LITERAL;
}
TAO_YY_BREAK
@@ -3335,10 +3335,10 @@ idl_store_pragma (char *buf)
/*
* idl_atoi - Convert a string of digits into a negative integer according to base b
*/
-static ACE_CDR::Long
-idl_atoi(char *s, long b)
+static ACE_CDR::LongLong
+idl_atoi (char *s, long b)
{
- long r = 0;
+ ACE_CDR::LongLong r = ACE_CDR_LONGLONG_INITIALIZER;
// Skip over the dash and possibly spaces after the dash
while (*s == '-' || *s == ' ' || *s == '\t')
@@ -3381,11 +3381,11 @@ idl_atoi(char *s, long b)
/*
* idl_atoui - Convert a string of digits into an unsigned integer according to base b
*/
-static ACE_CDR::ULong
-idl_atoui(char *s, long b)
+static ACE_CDR::ULongLong
+idl_atoui (char *s, long b)
{
- ACE_CDR::ULong r = 0;
-
+ ACE_CDR::ULongLong r = 0;
+
if (b == 8 && *s == '0')
{
++s;
diff --git a/TAO/TAO_IDL/fe/y.tab.cpp b/TAO/TAO_IDL/fe/y.tab.cpp
index 4034958b887..9230691d5ce 100644
--- a/TAO/TAO_IDL/fe/y.tab.cpp
+++ b/TAO/TAO_IDL/fe/y.tab.cpp
@@ -357,8 +357,8 @@ typedef union TAO_YYSTYPE
AST_Operation::Flags ofval; /* Operation flags */
FE_Declarator *deval; /* Declarator value */
ACE_CDR::Boolean bval; /* Boolean value */
- ACE_CDR::Long ival; /* Long value */
- ACE_CDR::ULong uival; /* Unsigned long value */
+ ACE_CDR::LongLong ival; /* Long value */
+ ACE_CDR::ULongLong uival; /* Unsigned long value */
ACE_CDR::Double dval; /* Double value */
ACE_CDR::Float fval; /* Float value */
ACE_CDR::Char cval; /* Char value */
@@ -4631,8 +4631,7 @@ tao_yyreduce:
{
// | IDL_UINTEGER_LITERAL
(tao_yyval.exval) =
- idl_global->gen ()->create_expr ((tao_yyvsp[(1) - (1)].uival),
- AST_Expression::EV_ulonglong);
+ idl_global->gen ()->create_expr ((tao_yyvsp[(1) - (1)].uival));
}
break;
diff --git a/TAO/TAO_IDL/fe/y.tab.h b/TAO/TAO_IDL/fe/y.tab.h
index 2e7576bdf7c..be9a457180d 100644
--- a/TAO/TAO_IDL/fe/y.tab.h
+++ b/TAO/TAO_IDL/fe/y.tab.h
@@ -234,8 +234,8 @@ typedef union TAO_YYSTYPE
AST_Operation::Flags ofval; /* Operation flags */
FE_Declarator *deval; /* Declarator value */
ACE_CDR::Boolean bval; /* Boolean value */
- ACE_CDR::Long ival; /* Long value */
- ACE_CDR::ULong uival; /* Unsigned long value */
+ ACE_CDR::LongLong ival; /* Long value */
+ ACE_CDR::ULongLong uival; /* Unsigned long value */
ACE_CDR::Double dval; /* Double value */
ACE_CDR::Float fval; /* Float value */
ACE_CDR::Char cval; /* Char value */
diff --git a/TAO/TAO_IDL/include/ast_expression.h b/TAO/TAO_IDL/include/ast_expression.h
index b3cc116b91e..70f49839ca0 100644
--- a/TAO/TAO_IDL/include/ast_expression.h
+++ b/TAO/TAO_IDL/include/ast_expression.h
@@ -168,9 +168,7 @@ public:
ACE_CDR::Long lval; // Contains long expression value.
ACE_CDR::ULong ulval; // Contains unsigned long expr value.
ACE_CDR::Boolean bval; // Contains boolean expression value.
-#if ! defined (ACE_LACKS_LONGLONG_T)
ACE_CDR::LongLong llval; // Contains long long expr value.
-#endif /* ! defined (ACE_LACKS_LONGLONG_T) */
#if defined (ACE_LACKS_UNSIGNEDLONGLONG_T) && ! defined (ACE_LACKS_LONGLONG_T)
ACE_CDR::LongLong ullval; // Contains unsigned long long expr value
#elif ! defined (ACE_LACKS_LONGLONG_T)
@@ -204,11 +202,15 @@ public:
AST_Expression (ACE_CDR::UShort us);
AST_Expression (ACE_CDR::Long l);
+
+ AST_Expression (ACE_CDR::LongLong ll);
AST_Expression (ACE_CDR::Boolean b);
AST_Expression (ACE_CDR::ULong ul);
+ AST_Expression (ACE_CDR::ULongLong ull);
+
AST_Expression (ACE_CDR::ULong,
ExprType t);
diff --git a/TAO/TAO_IDL/include/ast_generator.h b/TAO/TAO_IDL/include/ast_generator.h
index 291dd6efabc..bc8e6dda13d 100644
--- a/TAO/TAO_IDL/include/ast_generator.h
+++ b/TAO/TAO_IDL/include/ast_generator.h
@@ -299,8 +299,14 @@ public:
virtual AST_Expression *create_expr (ACE_CDR::Long v);
+ virtual AST_Expression *create_expr (ACE_CDR::LongLong v);
+
virtual AST_Expression *create_expr (ACE_CDR::Boolean b);
+ virtual AST_Expression *create_expr (ACE_CDR::ULong v);
+
+ virtual AST_Expression *create_expr (ACE_CDR::ULongLong v);
+
virtual AST_Expression *create_expr (ACE_CDR::ULong v,
AST_Expression::ExprType t);
diff --git a/TAO/tests/IDL_Test/constants.idl b/TAO/tests/IDL_Test/constants.idl
index 8716634da3d..a5ba3bc4f4d 100644
--- a/TAO/tests/IDL_Test/constants.idl
+++ b/TAO/tests/IDL_Test/constants.idl
@@ -19,7 +19,6 @@
//
// ============================================================================
-
const string all_escape = "\n\t\v\b\r\f\a\\\?\'\"";
const char tick = '\'';
@@ -51,11 +50,18 @@ const char max_char_hex = '\xff';
// const wstring wstr = L"wstr";
// unsigned longs greater than LONG_MAX
-
const unsigned long in_range = 3222111000;
const unsigned long max_ulong_oct = 037777777777;
const unsigned long max_ulong_hex = 0XFFFFFFFF;
+// Testing 64-bit integers. The executable will
+// verify that the generated values are correct.
+const unsigned long long AAA = 122192928000000000;
+const unsigned long AA = 3538947897;
+const long long NAAA = -122192928000000000;
+const long long PAAA = 122192928000000000;
+const long NAA = -1538947897;
+
// various uncommon but legal formats for floats and doubles
const float root_beer = .2;
diff --git a/TAO/tests/IDL_Test/including.idl b/TAO/tests/IDL_Test/including.idl
index 5b0d601d69f..ef47816effb 100644
--- a/TAO/tests/IDL_Test/including.idl
+++ b/TAO/tests/IDL_Test/including.idl
@@ -88,7 +88,7 @@ struct TestStr
A::MyStructA field;
};
-union TestUnion switch (long)
+union TestUn switch (long)
{
case 0: A::MyStructA value1;
case 1: string value2;
diff --git a/TAO/tests/IDL_Test/main.cpp b/TAO/tests/IDL_Test/main.cpp
index e020f04c1d5..91bebd23bd6 100644
--- a/TAO/tests/IDL_Test/main.cpp
+++ b/TAO/tests/IDL_Test/main.cpp
@@ -9,9 +9,8 @@
// main.cpp
//
// = DESCRIPTION
-// The only things that needs to be tested in execution
-// are the pragma prefixes generated in pragma.idl, so
-// we check them here. The rest needs only to build cleanly
+// We test the pragma prefixes generated in pragma.idl, and
+// the values of some generated constants in constants.idl.
//
// = AUTHORS
// Jeff Parsons <parsons@cs.wustl.edu>
@@ -80,7 +79,8 @@ class schmegegging_i : public virtual gleep::schmegegging
{
};
-struct something_handler : public POA_bug_1985_c::d::AMI_somethingHandler
+struct something_handler
+ : public POA_bug_1985_c::d::AMI_somethingHandler
{
};
@@ -88,7 +88,41 @@ int
ACE_TMAIN(int argc, ACE_TCHAR *argv[])
{
int error_count = 0;
+
+ const ACE_CDR::ULongLong test_ull =
+ ACE_UINT64_LITERAL (122192928000000000);
+
+ if (test_ull != AAA)
+ {
+ ++error_count;
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("Generated value of unsigned")
+ ACE_TEXT (" long long AAA in constants.idl")
+ ACE_TEXT (" is incorrect\n")));
+ }
+
+ const CORBA::LongLong test_nll = ACE_INT64_LITERAL (-122192928000000000);
+ if (test_nll != NAAA)
+ {
+ ++error_count;
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("Generated value of signed")
+ ACE_TEXT (" long long NAAA in constants.idl")
+ ACE_TEXT (" is incorrect\n")));
+ }
+
+ const CORBA::LongLong test_pll = ACE_INT64_LITERAL (122192928000000000);
+
+ if (test_pll != PAAA)
+ {
+ ++error_count;
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("Generated value of signed")
+ ACE_TEXT (" long long PAAA in constants.idl")
+ ACE_TEXT (" is incorrect\n")));
+ }
+
try
{
CORBA::ORB_var orb = CORBA::ORB_init (argc,