summaryrefslogtreecommitdiff
path: root/compiler/cpp/src/generate/t_as3_generator.cc
diff options
context:
space:
mode:
authorRoger Meier <roger@apache.org>2012-04-11 22:28:26 +0000
committerRoger Meier <roger@apache.org>2012-04-11 22:28:26 +0000
commit49ef6587b4cb830cbe35a8e14ac4ad5a2c457923 (patch)
tree5608dbe5b4353e6739fb79cad4aa21566684de67 /compiler/cpp/src/generate/t_as3_generator.cc
parentfa392e91adae6c03adcfd1f7c03c0729dbd15b25 (diff)
downloadthrift-49ef6587b4cb830cbe35a8e14ac4ad5a2c457923.tar.gz
THRIFT-1079 Support i64 in AS3
Patch: Ethan Urie git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1325048 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'compiler/cpp/src/generate/t_as3_generator.cc')
-rw-r--r--compiler/cpp/src/generate/t_as3_generator.cc28
1 files changed, 19 insertions, 9 deletions
diff --git a/compiler/cpp/src/generate/t_as3_generator.cc b/compiler/cpp/src/generate/t_as3_generator.cc
index 05514f152..29ac98acd 100644
--- a/compiler/cpp/src/generate/t_as3_generator.cc
+++ b/compiler/cpp/src/generate/t_as3_generator.cc
@@ -193,7 +193,8 @@ class t_as3_generator : public t_oop_generator {
ttype->is_container() ||
ttype->is_struct() ||
ttype->is_xception() ||
- ttype->is_string();
+ ttype->is_string() ||
+ (ttype->is_base_type() && ((t_base_type*)ttype)->get_base() == t_base_type::TYPE_I64);//for using the new BigInteger library
}
std::string constant_name(std::string name);
@@ -261,7 +262,8 @@ string t_as3_generator::as3_type_imports() {
string() +
"import org.apache.thrift.Set;\n" +
"import flash.utils.ByteArray;\n" +
- "import flash.utils.Dictionary;\n\n";
+ "import flash.utils.Dictionary;\n" +
+ "import com.hurlant.math.BigInteger;\n\n";
}
/**
@@ -484,7 +486,13 @@ void t_as3_generator::print_const_value(std::ofstream& out, string name, t_type*
vector<t_field*>::const_iterator f_iter;
const map<t_const_value*, t_const_value*>& val = value->get_map();
map<t_const_value*, t_const_value*>::const_iterator v_iter;
- out << name << ":" << type_name(type) << " = new " << type_name(type, false, true) << "();" << endl;
+
+ out << name;
+ if(!defval){
+ out << ":" << type_name(type);
+ }
+ out << " = new " << type_name(type, false, true) << "();" << endl;
+
if (!in_static) {
indent(out) << "{" << endl;
indent_up();
@@ -591,20 +599,20 @@ string t_as3_generator::render_const_value(ofstream& out, string name, t_type* t
render << ((value->get_integer() > 0) ? "true" : "false");
break;
case t_base_type::TYPE_BYTE:
- render << "(byte)" << value->get_integer();
+ render << "int(" << value->get_integer() << ")";
break;
case t_base_type::TYPE_I16:
- render << "(short)" << value->get_integer();
+ render << "int(" << value->get_integer() << ")";
break;
case t_base_type::TYPE_I32:
render << value->get_integer();
break;
case t_base_type::TYPE_I64:
- render << value->get_integer() << "L";
+ render << "new BigInteger(\"" << hex << value->get_integer() << dec << "\")";
break;
case t_base_type::TYPE_DOUBLE:
if (value->get_type() == t_const_value::CV_INTEGER) {
- render << "(double)" << value->get_integer();
+ render << "Number(" << value->get_integer() << ")";
} else {
render << value->get_double();
}
@@ -2465,7 +2473,7 @@ string t_as3_generator::base_type_name(t_base_type* type,
case t_base_type::TYPE_I32:
return "int";
case t_base_type::TYPE_I64:
- throw "i64 is not yet supported in as3";
+ return "BigInteger";
case t_base_type::TYPE_DOUBLE:
return "Number";
default:
@@ -2500,8 +2508,10 @@ string t_as3_generator::declare_field(t_field* tfield, bool init) {
case t_base_type::TYPE_BYTE:
case t_base_type::TYPE_I16:
case t_base_type::TYPE_I32:
+ result += " = 0"; //leaving this here even though it doesn't work with BigInteger because it's never called by the generator.
+ break;
case t_base_type::TYPE_I64:
- result += " = 0";
+ result += " = new BigInteger(\"0x0\")";
break;
case t_base_type::TYPE_DOUBLE:
result += " = (double)0";