diff options
author | Fred Hornsey <hornseyf@objectcomputing.com> | 2021-06-07 23:43:19 -0500 |
---|---|---|
committer | Fred Hornsey <hornseyf@objectcomputing.com> | 2021-06-07 23:43:19 -0500 |
commit | a4c5b22c20a1f1298a23d3ab57571237284b1963 (patch) | |
tree | 8ad2522b013ea2c8fd6f0dffa8e60e60342ae614 /TAO/TAO_IDL | |
parent | 85a1e615810419950f8f1280f80df9da9f5dee4d (diff) | |
download | ATCD-a4c5b22c20a1f1298a23d3ab57571237284b1963.tar.gz |
Added WIP explicit_ints Test
And a bunch of fixes to get it to (sorta) work.
Diffstat (limited to 'TAO/TAO_IDL')
-rw-r--r-- | TAO/TAO_IDL/ast/ast_expression.cpp | 62 | ||||
-rw-r--r-- | TAO/TAO_IDL/ast/ast_predefined_type.cpp | 16 | ||||
-rw-r--r-- | TAO/TAO_IDL/ast/ast_union.cpp | 4 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_helper.cpp | 20 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_predefined_type.cpp | 25 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_constant/constant.cpp | 4 | ||||
-rw-r--r-- | TAO/TAO_IDL/fe/fe_init.cpp | 8 |
7 files changed, 91 insertions, 48 deletions
diff --git a/TAO/TAO_IDL/ast/ast_expression.cpp b/TAO/TAO_IDL/ast/ast_expression.cpp index 3f39c850cb8..c1b2c15b903 100644 --- a/TAO/TAO_IDL/ast/ast_expression.cpp +++ b/TAO/TAO_IDL/ast/ast_expression.cpp @@ -1300,7 +1300,7 @@ coerce_value (AST_Expression::AST_ExprValue *ev, } ev->u.cval = (char) ev->u.sval; - ev->et = AST_Expression::EV_char; + ev->et = t; return ev; case AST_Expression::EV_ushort: if (ev->u.usval > (unsigned short) ACE_CHAR_MAX) @@ -1309,7 +1309,7 @@ coerce_value (AST_Expression::AST_ExprValue *ev, } ev->u.cval = (char) ev->u.usval; - ev->et = AST_Expression::EV_char; + ev->et = t; return ev; case AST_Expression::EV_long: if (ev->u.lval > (long) ACE_CHAR_MAX @@ -1319,7 +1319,7 @@ coerce_value (AST_Expression::AST_ExprValue *ev, } ev->u.cval = (char) ev->u.lval; - ev->et = AST_Expression::EV_char; + ev->et = t; return ev; case AST_Expression::EV_ulong: if (ev->u.ulval > (unsigned long) ACE_CHAR_MAX) @@ -1328,7 +1328,7 @@ coerce_value (AST_Expression::AST_ExprValue *ev, } ev->u.cval = (char) ev->u.ulval; - ev->et = AST_Expression::EV_char; + ev->et = t; return ev; case AST_Expression::EV_longlong: if (ev->u.llval > (ACE_CDR::LongLong) ACE_CHAR_MAX @@ -1338,7 +1338,7 @@ coerce_value (AST_Expression::AST_ExprValue *ev, } ev->u.cval = (char) ev->u.llval; - ev->et = AST_Expression::EV_char; + ev->et = t; return ev; case AST_Expression::EV_ulonglong: if (( ev->u.ullval & ACE_CHAR_MAX) != ev->u.ullval) @@ -1347,11 +1347,11 @@ coerce_value (AST_Expression::AST_ExprValue *ev, } ev->u.cval = (char) ev->u.ullval; - ev->et = AST_Expression::EV_char; + ev->et = t; return ev; case AST_Expression::EV_bool: ev->u.cval = (char) ev->u.bval; - ev->et = AST_Expression::EV_char; + ev->et = t; return ev; case AST_Expression::EV_float: if (ev->u.fval > (float) ACE_CHAR_MAX @@ -1361,7 +1361,7 @@ coerce_value (AST_Expression::AST_ExprValue *ev, } ev->u.cval = (char) ev->u.fval; - ev->et = AST_Expression::EV_char; + ev->et = t; return ev; case AST_Expression::EV_double: if (ev->u.dval > (double) ACE_CHAR_MAX @@ -1371,7 +1371,7 @@ coerce_value (AST_Expression::AST_ExprValue *ev, } ev->u.cval = (char) ev->u.dval; - ev->et = AST_Expression::EV_char; + ev->et = t; return ev; case AST_Expression::EV_wchar: if (ev->u.wcval > (ACE_CDR::WChar) ACE_CHAR_MAX) @@ -1380,7 +1380,7 @@ coerce_value (AST_Expression::AST_ExprValue *ev, } ev->u.cval = (char) ev->u.wcval; - ev->et = AST_Expression::EV_char; + ev->et = t; return ev; case AST_Expression::EV_uint8: case AST_Expression::EV_octet: @@ -1390,7 +1390,7 @@ coerce_value (AST_Expression::AST_ExprValue *ev, } ev->u.cval = (char) ev->u.oval; - ev->et = AST_Expression::EV_char; + ev->et = t; return ev; case AST_Expression::EV_int8: case AST_Expression::EV_char: @@ -1514,7 +1514,7 @@ coerce_value (AST_Expression::AST_ExprValue *ev, } ev->u.oval = (unsigned char) ev->u.sval; - ev->et = AST_Expression::EV_octet; + ev->et = t; return ev; case AST_Expression::EV_ushort: if (ev->u.usval > (unsigned short) ACE_OCTET_MAX) @@ -1523,7 +1523,7 @@ coerce_value (AST_Expression::AST_ExprValue *ev, } ev->u.oval = (unsigned char) ev->u.usval; - ev->et = AST_Expression::EV_octet; + ev->et = t; return ev; case AST_Expression::EV_long: if (ev->u.lval < 0 @@ -1533,7 +1533,7 @@ coerce_value (AST_Expression::AST_ExprValue *ev, } ev->u.oval = (unsigned char) ev->u.lval; - ev->et = AST_Expression::EV_octet; + ev->et = t; return ev; case AST_Expression::EV_ulong: if (ev->u.ulval > (unsigned long) ACE_OCTET_MAX) @@ -1542,7 +1542,7 @@ coerce_value (AST_Expression::AST_ExprValue *ev, } ev->u.oval = (unsigned char) ev->u.ulval; - ev->et = AST_Expression::EV_octet; + ev->et = t; return ev; case AST_Expression::EV_longlong: if (ev->u.llval < 0 @@ -1552,7 +1552,7 @@ coerce_value (AST_Expression::AST_ExprValue *ev, } ev->u.oval = (unsigned char) ev->u.llval; - ev->et = AST_Expression::EV_octet; + ev->et = t; return ev; case AST_Expression::EV_ulonglong: if ((ev->u.ullval & ACE_OCTET_MAX) != ev->u.ullval) @@ -1561,11 +1561,11 @@ coerce_value (AST_Expression::AST_ExprValue *ev, } ev->u.oval = (unsigned char) ev->u.ullval; - ev->et = AST_Expression::EV_octet; + ev->et = t; return ev; case AST_Expression::EV_bool: ev->u.oval = (unsigned char) ((ev->u.bval == false) ? 1 : 0); - ev->et = AST_Expression::EV_octet; + ev->et = t; return ev; case AST_Expression::EV_float: if (ev->u.fval < 0.0 @@ -1575,7 +1575,7 @@ coerce_value (AST_Expression::AST_ExprValue *ev, } ev->u.oval = (unsigned char) ev->u.fval; - ev->et = AST_Expression::EV_octet; + ev->et = t; return ev; case AST_Expression::EV_double: if (ev->u.dval < 0.0 @@ -1585,7 +1585,7 @@ coerce_value (AST_Expression::AST_ExprValue *ev, } ev->u.oval = (unsigned char) ev->u.dval; - ev->et = AST_Expression::EV_octet; + ev->et = t; return ev; case AST_Expression::EV_int8: case AST_Expression::EV_char: @@ -1595,7 +1595,7 @@ coerce_value (AST_Expression::AST_ExprValue *ev, } ev->u.oval = (unsigned char) ev->u.cval; - ev->et = AST_Expression::EV_octet; + ev->et = t; return ev; case AST_Expression::EV_wchar: if (ev->u.wcval > (ACE_CDR::WChar) ACE_OCTET_MAX) @@ -1604,7 +1604,7 @@ coerce_value (AST_Expression::AST_ExprValue *ev, } ev->u.oval = (unsigned char) ev->u.wcval; - ev->et = AST_Expression::EV_octet; + ev->et = t; return ev; case AST_Expression::EV_uint8: case AST_Expression::EV_octet: @@ -2469,38 +2469,38 @@ AST_Expression::eval_un_op (AST_Expression::EvalKind ek) switch (this->pd_v1->ev ()->et) { case EV_short: - retval->et = EV_short; retval->u.sval = ~this->pd_v1->ev ()->u.sval; break; case EV_ushort: - retval->et = EV_ushort; retval->u.usval = ~this->pd_v1->ev ()->u.usval; break; case EV_long: - retval->et = EV_long; retval->u.lval = ~this->pd_v1->ev ()->u.lval; break; case EV_ulong: - retval->et = EV_ulong; retval->u.ulval = ~this->pd_v1->ev ()->u.ulval; break; case EV_longlong: - retval->et = EV_longlong; retval->u.llval = ~this->pd_v1->ev ()->u.llval; break; case EV_ulonglong: - retval->et = EV_ulonglong; retval->u.ullval = ~this->pd_v1->ev ()->u.ullval; break; case EV_octet: - retval->et = EV_octet; retval->u.oval = ~this->pd_v1->ev ()->u.oval; break; + case AST_Expression::EV_int8: + retval->u.int8val = ~pd_v1->ev ()->u.int8val; + break; + case AST_Expression::EV_uint8: + retval->u.uint8val = ~pd_v1->ev ()->u.uint8val; + break; default: delete retval; retval = nullptr; return nullptr; } + retval->et = pd_v1->ev ()->et; break; default: @@ -2517,14 +2517,14 @@ AST_Expression::eval_un_op (AST_Expression::EvalKind ek) AST_Expression::AST_ExprValue * AST_Expression::eval_symbol (AST_Expression::EvalKind ek) { - UTL_Scope *s = nullptr; + UTL_Scope *s = nullptr; AST_Decl *d = nullptr; AST_Constant *c = nullptr; // Is there a symbol stored? if (this->pd_n == nullptr) { - idl_global->err ()->eval_error (this); + idl_global->err ()->eval_error (this); return nullptr; } diff --git a/TAO/TAO_IDL/ast/ast_predefined_type.cpp b/TAO/TAO_IDL/ast/ast_predefined_type.cpp index e52ee5f0ab7..ca4be3164cc 100644 --- a/TAO/TAO_IDL/ast/ast_predefined_type.cpp +++ b/TAO/TAO_IDL/ast/ast_predefined_type.cpp @@ -71,8 +71,11 @@ trademarks or registered trademarks of Sun Microsystems, Inc. #include "ast_predefined_type.h" #include "ast_visitor.h" -#include "utl_identifier.h" #include "global_extern.h" + +#include "utl_identifier.h" +#include "utl_err.h" + #include "ace/Log_Msg.h" #include "ace/OS_NS_stdio.h" @@ -190,9 +193,16 @@ AST_PredefinedType::AST_PredefinedType (PredefinedType t, ACE_NEW (id, Identifier (n->last_component ()->get_string ())); break; + case AST_PredefinedType::PT_uint8: + ACE_NEW (id, Identifier ("Uint8")); + break; + case AST_PredefinedType::PT_int8: + ACE_NEW (id, Identifier ("Int8")); + break; default: - ACE_ERROR ((LM_ERROR, - "AST_PredefinedType - bad enum value\n")); + idl_global->err ()->misc_error ("AST_PredefinedType: bad enum value", this); + // Nothing else to do. We will segfault if we continue, return, or throw Bailout + ACE_OS::abort (); } ACE_NEW (conc_name, diff --git a/TAO/TAO_IDL/ast/ast_union.cpp b/TAO/TAO_IDL/ast/ast_union.cpp index 503fd01310e..763300473b4 100644 --- a/TAO/TAO_IDL/ast/ast_union.cpp +++ b/TAO/TAO_IDL/ast/ast_union.cpp @@ -155,7 +155,7 @@ AST_Union::AST_Union (AST_ConcreteType *dt, this->pd_udisc_type = AST_Expression::EV_ushort; break; case AST_PredefinedType::PT_int8: - this->pd_udisc_type = AST_Expression::EV_char; + this->pd_udisc_type = AST_Expression::EV_int8; break; case AST_PredefinedType::PT_char: this->pd_udisc_type = AST_Expression::EV_char; @@ -164,7 +164,7 @@ AST_Union::AST_Union (AST_ConcreteType *dt, this->pd_udisc_type = AST_Expression::EV_wchar; break; case AST_PredefinedType::PT_uint8: - this->pd_udisc_type = AST_Expression::EV_char; + this->pd_udisc_type = AST_Expression::EV_uint8; break; case AST_PredefinedType::PT_octet: this->pd_udisc_type = AST_Expression::EV_octet; diff --git a/TAO/TAO_IDL/be/be_helper.cpp b/TAO/TAO_IDL/be/be_helper.cpp index bc982a5988e..218bc0ac534 100644 --- a/TAO/TAO_IDL/be/be_helper.cpp +++ b/TAO/TAO_IDL/be/be_helper.cpp @@ -530,8 +530,24 @@ TAO_OutStream::print (AST_Expression *expr) break; case AST_Expression::EV_longlong: this->TAO_OutStream::print ("ACE_INT64_LITERAL ("); - this->TAO_OutStream::print (ACE_INT64_FORMAT_SPECIFIER_ASCII, - ev->u.llval); + { + ACE_CDR::LongLong value = ev->u.llval; + /* + * It seem in C/C++ compilers the minus sign and the bare number are + * parsed separately for negative integer literals. This can cause + * compilers to complain when using the minimum value of a signed integer + * because the number without the minus sign is 1 past the max signed + * value. + * + * https://stackoverflow.com/questions/65007935/integer-constant-is-so-large-that-it-is-unsigned-compiler-warning-rational + * + * Apparently the workaround is to write it as `VALUE_PLUS_ONE - 1`. + */ + const bool min_value = value == ACE_INT64_MIN; + if (min_value) value += 1; + TAO_OutStream::print (ACE_INT64_FORMAT_SPECIFIER_ASCII, value); + if (min_value) TAO_OutStream::print (" - 1"); + } this->TAO_OutStream::print (")"); break; case AST_Expression::EV_ulonglong: diff --git a/TAO/TAO_IDL/be/be_predefined_type.cpp b/TAO/TAO_IDL/be/be_predefined_type.cpp index 7aa8a813c9b..d311d098c33 100644 --- a/TAO/TAO_IDL/be/be_predefined_type.cpp +++ b/TAO/TAO_IDL/be/be_predefined_type.cpp @@ -14,9 +14,12 @@ #include "be_predefined_type.h" #include "be_visitor.h" #include "be_helper.h" -#include "utl_identifier.h" + #include "global_extern.h" +#include "utl_identifier.h" +#include "utl_err.h" + #include "ace/Log_Msg.h" #include "ace/ACE.h" #include "ace/OS_NS_stdio.h" @@ -198,19 +201,19 @@ be_predefined_type::compute_tc_name () case AST_PredefinedType::PT_any: ACE_NEW (id, Identifier ("_tc_any")); - break; + break; case AST_PredefinedType::PT_object: ACE_NEW (id, Identifier ("_tc_Object")); - break; + break; case AST_PredefinedType::PT_value: ACE_NEW (id, Identifier ("_tc_ValueBase")); - break; + break; case AST_PredefinedType::PT_abstract: ACE_NEW (id, Identifier ("_tc_AbstractBase")); - break; + break; case AST_PredefinedType::PT_pseudo: { char tcname [100]; @@ -222,9 +225,17 @@ be_predefined_type::compute_tc_name () Identifier (tcname)); break; } - default: - ACE_ERROR ((LM_WARNING, "Unknown or invalid predefined type")); + case AST_PredefinedType::PT_uint8: + ACE_NEW (id, Identifier ("_tc_Uint8")); break; + case AST_PredefinedType::PT_int8: + ACE_NEW (id, Identifier ("_tc_Int8")); + break; + default: + idl_global->err ()->misc_error ( + "be_predefined_type::compute_tc_name: Unknown or invalid predefined type", this); + // Nothing else to do. We will segfault if we continue, return, or throw Bailout + ACE_OS::abort (); } ACE_NEW (conc_name, diff --git a/TAO/TAO_IDL/be/be_visitor_constant/constant.cpp b/TAO/TAO_IDL/be/be_visitor_constant/constant.cpp index 1c11373df70..a841b6f20d6 100644 --- a/TAO/TAO_IDL/be/be_visitor_constant/constant.cpp +++ b/TAO/TAO_IDL/be/be_visitor_constant/constant.cpp @@ -39,9 +39,9 @@ const char *exprtype_to_cpp_corba_type (AST_Expression::ExprType et) case AST_Expression::EV_fixed: return "Fixed"; case AST_Expression::EV_int8: - return "CORBA::Octet"; + return "CORBA::Int8"; case AST_Expression::EV_uint8: - return "CORBA::Octet"; + return "CORBA::Uint8"; default: return 0; } diff --git a/TAO/TAO_IDL/fe/fe_init.cpp b/TAO/TAO_IDL/fe/fe_init.cpp index 24c8284bf4d..e8989d15298 100644 --- a/TAO/TAO_IDL/fe/fe_init.cpp +++ b/TAO/TAO_IDL/fe/fe_init.cpp @@ -81,7 +81,7 @@ const size_t LOCAL_ESCAPES_BUFFER_SIZE = 1024; void fe_populate_global_scope () { - // No need to created a scoped name for the basic types, the + // No need to create a scoped name for the basic types, the // AST_PredefinedType constructor will do that. AST_PredefinedType *pdt = nullptr; @@ -210,6 +210,12 @@ fe_populate_global_scope () m->fe_add_predefined_type (pdt); + m->fe_add_predefined_type (idl_global->gen ()->create_predefined_type ( + AST_PredefinedType::PT_uint8, nullptr)); + + m->fe_add_predefined_type (idl_global->gen ()->create_predefined_type ( + AST_PredefinedType::PT_int8, nullptr)); + Identifier Object_id ("Object"); UTL_ScopedName Object_name (&Object_id, nullptr); |