Browse Source

Added type to consts

rsredsq 10 years ago
parent
commit
e3db0b7fd9

+ 1 - 1
Source/ToolCore/JSBind/JSBDoc.cpp

@@ -216,7 +216,7 @@ void JSBDoc::ExportModuleClasses(JSBModule* module)
 void JSBDoc::ExportModuleConstants(JSBModule* module)
 {
 
-    Vector<String>& constants = module->GetConstants();
+    Vector<String>& constants = module->GetConstants().Keys();
 
     if (!constants.Size())
         return;

+ 21 - 13
Source/ToolCore/JSBind/JSBHaxe.cpp

@@ -20,14 +20,8 @@ namespace ToolCore
         if (ftype->type_->asPrimitiveType())
         {
             JSBPrimitiveType* ptype = ftype->type_->asPrimitiveType();
-            if (ptype->kind_ == JSBPrimitiveType::Bool)
-                scriptType = "Bool";
-            if (ptype->kind_ == JSBPrimitiveType::Int && ptype->isUnsigned_)
-                scriptType = "UInt";
-            else if (ptype->kind_ == JSBPrimitiveType::Int)
-                scriptType = "Int";
-            if (ptype->kind_ == JSBPrimitiveType::Float)
-                scriptType = "Float";
+            scriptType = GetPrimitiveType(ptype);
+            return scriptType;
         }
 
         if (ftype->type_->asStringHashType() || ftype->type_->asStringType())
@@ -61,6 +55,19 @@ namespace ToolCore
 
     }
 
+    String JSBHaxe::GetPrimitiveType(JSBPrimitiveType* ptype)
+    {
+        if (ptype->kind_ == JSBPrimitiveType::Bool)
+            return "Bool";
+        if (ptype->kind_ == JSBPrimitiveType::Int && ptype->isUnsigned_)
+            return "UInt";
+        else if (ptype->kind_ == JSBPrimitiveType::Int)
+            return "Int";
+        if (ptype->kind_ == JSBPrimitiveType::Float)
+            return "Float";
+        return "Dynamic";
+    }
+
     void JSBHaxe::Begin()
     {
         source_ += "//Atomic Haxe Definitions\n\n";
@@ -352,22 +359,23 @@ namespace ToolCore
 
     void JSBHaxe::ExportModuleConstants(JSBModule* module)
     {
-        Vector<String>& constants = module->GetConstants();
+        HashMap<String, JSBPrimitiveType*>& constants = module->GetConstants();
+
+        Vector<String>& constantsName = constants.Keys();
 
         if (!constants.Size())
             return;
 
         source_ += "\n";
 
-        for (unsigned i = 0; i < constants.Size(); i++)
+        for (unsigned i = 0; i < constantsName.Size(); i++)
         {
-            const String& cname = constants.At(i);
+            const String& cname = constantsName.At(i);
 
-            source_ += "    public static var " + cname + ": Int;\n";
+            source_ += "    public static inline var " + cname + ": " + GetPrimitiveType(constants[cname]) + ";\n";
         }
 
         source_ += "\n";
-
     }
 
     void JSBHaxe::ExportEnums(JSBModule* module)

+ 1 - 0
Source/ToolCore/JSBind/JSBHaxe.h

@@ -32,6 +32,7 @@ namespace ToolCore
         void ExportFunction(JSBFunction* function);
 
         String GetScriptType(JSBFunctionType* ftype);
+        String GetPrimitiveType(JSBPrimitiveType* ptype);
 
         bool checkV(JSBClass* clazz, const String name, const String type);
         bool IsOverride(JSBFunction* function);

+ 9 - 1
Source/ToolCore/JSBind/JSBHeaderVisitor.h

@@ -23,6 +23,7 @@ namespace ToolCore
 {
 
 class JSBHeader;
+class JSBPrimitiveType;
 
 
 class JSBHeaderVisitor : public SymbolVisitor
@@ -402,7 +403,14 @@ public:
             return true;
         }
 
-        module_->RegisterConstant(getNameString(decl->name()).CString());
+        if (type->isIntegerType())
+        {
+            module_->RegisterConstant(getNameString(decl->name()).CString(), JSBPrimitiveType::Int);
+        }
+        else
+        {
+            module_->RegisterConstant(getNameString(decl->name()).CString(), JSBPrimitiveType::Float);
+        }
 
         return true;
 

+ 3 - 3
Source/ToolCore/JSBind/JSBModule.cpp

@@ -12,6 +12,7 @@
 #include "JSBClass.h"
 #include "JSBEnum.h"
 #include "JSBModuleWriter.h"
+#include "JSBType.h"
 
 namespace ToolCore
 {
@@ -354,7 +355,7 @@ bool JSBModule::ContainsConstant(const String& constantName)
     return constants_.Contains(constantName);
 }
 
-void JSBModule::RegisterConstant(const String& constantName)
+void JSBModule::RegisterConstant(const String& constantName, unsigned type)
 {
     // MAX_CASCADE_SPLITS is defined differently for desktop/mobile
     if (constantName == "MAX_CASCADE_SPLITS" && JSBPackage::ContainsConstantAllPackages(constantName))
@@ -367,8 +368,7 @@ void JSBModule::RegisterConstant(const String& constantName)
         ErrorExit(ToString("Constant collision: %s", constantName.CString()));
     }
 
-    constants_.Push(constantName);
-
+    constants_[constantName] = new JSBPrimitiveType(type);
 }
 
 bool JSBModule::Load(const String& jsonFilename)

+ 4 - 3
Source/ToolCore/JSBind/JSBModule.h

@@ -17,6 +17,7 @@ class JSBPackage;
 class JSBHeader;
 class JSBClass;
 class JSBEnum;
+class JSBPrimitiveType;
 
 class JSBModule : public Object
 {
@@ -35,7 +36,7 @@ public:
     JSBClass* GetClass(const String& name);
     Vector<SharedPtr<JSBClass>> GetClasses();
     Vector<SharedPtr<JSBEnum>> GetEnums();
-    Vector<String>& GetConstants() { return constants_; }
+    HashMap<String, JSBPrimitiveType*>& GetConstants() { return constants_; }
 
     void RegisterClass(String name);
 
@@ -43,7 +44,7 @@ public:
     void RegisterEnum(JSBEnum* jenum);       
 
     bool ContainsConstant(const String& constantName);
-    void RegisterConstant(const String& constantName);
+    void RegisterConstant(const String& constantName, unsigned type);
 
     bool Requires(const String& requirement) { return requirements_.Contains(requirement); }
 
@@ -81,7 +82,7 @@ private:
     // native name -> JSBClass
     HashMap<StringHash, SharedPtr<JSBClass> > classes_;
     HashMap<StringHash, SharedPtr<JSBEnum> > enums_;
-    Vector<String> constants_;
+    HashMap<String, JSBPrimitiveType*> constants_;
     Vector<String> requirements_;
 
     SharedPtr<JSONFile> moduleJSON_;

+ 5 - 3
Source/ToolCore/JSBind/JSBModuleWriter.cpp

@@ -195,10 +195,12 @@ void JSBModuleWriter::WriteModulePreInit(String& source)
     }
     source += "// constants\n";
 
-    for (unsigned i = 0; i < module_->constants_.Size(); i++)
+    Vector<String> constants = module_->constants_.Keys();
+
+    for (unsigned i = 0; i < constants.Size(); i++)
     {
-        source.AppendWithFormat("duk_push_number(ctx, (double) %s);\n",  module_->constants_.At(i).CString());
-        source.AppendWithFormat("duk_put_prop_string(ctx, -2, \"%s\");\n",  module_->constants_.At(i).CString());
+        source.AppendWithFormat("duk_push_number(ctx, (double) %s);\n", constants.At(i).CString());
+        source.AppendWithFormat("duk_put_prop_string(ctx, -2, \"%s\");\n", constants.At(i).CString());
     }
 
     source += "duk_pop(ctx);\n";

+ 1 - 1
Source/ToolCore/JSBind/JSBTypeScript.cpp

@@ -241,7 +241,7 @@ void JSBTypeScript::ExportModuleClasses(JSBModule* module)
 
 void JSBTypeScript::ExportModuleConstants(JSBModule* module)
 {
-    Vector<String>& constants = module->GetConstants();
+    Vector<String>& constants = module->GetConstants().Keys();
 
     if (!constants.Size())
         return;