Fixed handling of signed 64bit integers to support 32bit and 64bit architectures

Fixed a few bugs with php code generation

Initial stab at setting absolute thrift php require_once paths at configure time in order to guarantee APC caching.  Needswork.  It's hard to get automake to allow post-processing of installed files.

Lightly reviewed by mark slee



	


git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@664768 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/compiler/src/cpp_generator.py b/compiler/src/cpp_generator.py
index 97a5f36..bdd251d 100644
--- a/compiler/src/cpp_generator.py
+++ b/compiler/src/cpp_generator.py
@@ -624,7 +624,7 @@
 
     return toServiceInterfaceDeclaration(service, debugp) + toServerDeclaration(service, debugp) + toClientDeclaration(service, debugp)
 
-def toGenDir(filename, suffix="cpp-gen", debugp=None):
+def toGenDir(filename, suffix="gen-cpp", debugp=None):
     """creates a generated-code subdirectory for C++ code based on filename of thrift source file and optional suffix"""
 
     result = os.path.join(os.path.split(filename)[0], suffix)
diff --git a/compiler/src/php_generator.py b/compiler/src/php_generator.py
index 71b1fd3..4ad990c 100644
--- a/compiler/src/php_generator.py
+++ b/compiler/src/php_generator.py
@@ -24,7 +24,7 @@
  """
 
 PHP_TYPES_HEADER = Template(HEADER_COMMENT+"""
-require_once THRIFT_ROOT.\'/Thrift.php\';
+require_once ${prefix}.'thrift/Thrift.php\';
 """)
 
 PHP_TYPES_FOOTER = Template("""
@@ -33,9 +33,10 @@
 
 PHP_SERVICES_HEADER = Template(HEADER_COMMENT+"""
 
-require_once THRIFT_ROOT.'/Thrift.php';
 require_once dirname(__FILE__).\'/${source}_types.php\';
-
+require_once ${prefix}.'thrift/protocol/TType.php';
+require_once ${prefix}.'thrift/protocol/TProtocol.php';
+require_once ${prefix}.'thrift/transport/TTransport.php';
 """)
 
 PHP_SERVICES_FOOTER = Template("""
@@ -44,8 +45,8 @@
 
 PHP_IMPL_HEADER = Template(HEADER_COMMENT+"""
 
-require_once THRIFT_ROOT.'/Thrift.php';
-require_once dirname(__FILE__).\'/${source}_types.php\';
+require_once ${prefix}.'thrift/Thrift.php';
+require_once ${prefix}.dirname(__FILE__).\'/${source}_types.php\';
 
 """)
 
@@ -199,8 +200,8 @@
         self.iprot = iprot
         self.itrans = itrans
 
-    def toReadMessageBegin(self, messageNameVar, seqidVar):
-        return self.indent()+self.iprot+"->readMessageBegin("+self.itrans+", "+messageNameVar.name+", "+seqidVar.name+");\n"
+    def toReadMessageBegin(self, messageNameVar, messageTypeVar, seqidVar):
+        return self.indent()+self.iprot+"->readMessageBegin("+self.itrans+", "+messageNameVar.name+", "+messageTypeVar.name+", "+seqidVar.name+");\n"
 
     def toReadMessageEnd(self):
         return self.indent()+self.iprot+"->readMessageEnd("+self.itrans+");\n"
@@ -236,10 +237,10 @@
         return self.indent()+self.iprot+"->readFieldEnd("+self.itrans+");\n"
 
     def toSkipField(self, fieldTypeVar):
-        return self.indent()+self.iprot+"->skipField("+self.itrans+", "+fieldTypeVar.name+");\n"
+        return self.indent()+self.iprot+"->skip("+self.itrans+", "+fieldTypeVar.name+");\n"
 
     def toReadPrimitive(self, value, suffix):
-        return self.indent()+value+" = "+self.iprot+"->read"+suffix+"("+self.itrans+");\n"
+        return self.indent()+self.iprot+"->read"+suffix+"("+self.itrans+", "+value+");\n"
 
     def toRead(self, value, ttype):
 
@@ -397,8 +398,8 @@
         self.oprot = oprot
         self.otrans = otrans
 
-    def toWriteMessageBegin(self, messageName, seqid):
-        return self.indent()+self.oprot+"->writeMessageBegin("+self.otrans+", "+messageName+", "+seqid+");\n"
+    def toWriteMessageBegin(self, messageName, type, seqid):
+        return self.indent()+self.oprot+"->writeMessageBegin("+self.otrans+", "+messageName+", "+type+", "+seqid+");\n"
 
     def toWriteMessageEnd(self):
         return self.indent()+self.oprot+"->writeMessageEnd("+self.otrans+");\n"
@@ -521,11 +522,11 @@
 
 	if isMap:
 
-	    result+= self.indent()+"forech("+value+" as "+keyVar.name+" => "+elemVar.name+") {\n"
+	    result+= self.indent()+"foreach("+value+" as "+keyVar.name+" => "+elemVar.name+") {\n"
 
 	else:
 
-	    result+= self.indent()+"forech("+value+" as "+elemVar.name+") {\n"
+	    result+= self.indent()+"foreach("+value+" as "+elemVar.name+") {\n"
 	    
         self.indent+= 1
 
@@ -569,7 +570,7 @@
 
 	self.indent+= 1
 
-	result+= self.writer.toWriteMessageBegin("\""+function.name+"\"", "$this->seqid")
+	result+= self.writer.toWriteMessageBegin("\""+function.name+"\"", PHP_PROTOCOL_CALL, "$this->seqid")
 	result+= self.indent()+"$this->_seqid++;\n"
 
 	# Send the args struct 
@@ -606,14 +607,16 @@
 	result+= self.writer.toWriteFlush();
 
 	resultVar = self.declare(function.resultStruct, "result")
-	nameVar = self.declare(function.resultStruct, "name")
-	seqidVar = self.declare(function.resultStruct, "seqid")
+	nameVar = self.declare(STRING_TYPE, "name")
+	typeVar = self.declare(U32_TYPE, "type")
+	seqidVar = self.declare(U32_TYPE, "seqid")
 
 	result+= self.toDeclaration(resultVar, True)
 	result+= self.toDeclaration(nameVar)
+	result+= self.toDeclaration(typeVar)
 	result+= self.toDeclaration(seqidVar)
 
-	result+= self.reader.toReadMessageBegin(nameVar, seqidVar)
+	result+= self.reader.toReadMessageBegin(nameVar, typeVar, seqidVar)
 
 	result+= self.indent()+"{\n"
 
@@ -846,8 +849,8 @@
 
 PHP_PROTOCOL_TSTOP = "TType::STOP"
 PHP_PROTOCOL_TTYPE = "TType::"
-PHP_PROTOCOL_CALL = "TMessageType::T_CALL"
-PHP_PROTOCOL_REPLY = "TMessageType::T_REPLY"
+PHP_PROTOCOL_CALL = "TMessageType::CALL"
+PHP_PROTOCOL_REPLY = "TMessageType::REPLY"
 
 PHP_TTYPE_MAP = {
     STOP_TYPE : PHP_PROTOCOL_TTYPE+"STOP",
@@ -870,7 +873,7 @@
     DOUBLE_TYPE : PHP_PROTOCOL_TTYPE+"DOUBLE",
     StructType : PHP_PROTOCOL_TTYPE+"STRUCT",
     ExceptionType : PHP_PROTOCOL_TTYPE+"STRUCT",
-    ListType : PHP_PROTOCOL_TTYPE+"LIST",
+    ListType : PHP_PROTOCOL_TTYPE+"LST",
     MapType : PHP_PROTOCOL_TTYPE+"MAP",
     SetType : PHP_PROTOCOL_TTYPE+"SET"
 }
@@ -895,7 +898,7 @@
     else:
 	raise Exception, "No wire type for thrift type: "+str(ttype)
 
-def toGenDir(filename, suffix="php-gen", debugp=None):
+def toGenDir(filename, suffix="gen-php", debugp=None):
     """creates a generated-code subdirectory for C++ code based on filename of thrift source file and optional suffix"""
 
     result = os.path.join(os.path.split(filename)[0], suffix)
@@ -948,7 +951,7 @@
 
     basename = toBasename(filename)
 
-    phpFile.write(PHP_TYPES_HEADER.substitute(source=basename, date=time.ctime(), namespacePrefix=toPHPNamespacePrefix(program.namespace)))
+    phpFile.write(PHP_TYPES_HEADER.substitute(prefix=PREFIX, source=basename, date=time.ctime(), namespacePrefix=toPHPNamespacePrefix(program.namespace)))
 
     phpFile.write(toDefinitions(program.definitions))
 
@@ -984,7 +987,7 @@
 
     basename = toBasename(filename)
 
-    phpFile.write(PHP_SERVICES_HEADER.substitute(source=basename, date=time.ctime(), namespacePrefix=toPHPNamespacePrefix(program.namespace)))
+    phpFile.write(PHP_SERVICES_HEADER.substitute(prefix=PREFIX, source=basename, date=time.ctime(), namespacePrefix=toPHPNamespacePrefix(program.namespace)))
 
     # Generate classes for function result "structs"