| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "../../../core/include/fxcrt/fx_basic.h" | 7 #include "../../../core/include/fxcrt/fx_basic.h" |
| 8 #include "../../../core/include/fxcrt/fx_ext.h" | 8 #include "../../../core/include/fxcrt/fx_ext.h" |
| 9 #include "../../include/jsapi/fxjs_v8.h" | 9 #include "../../include/jsapi/fxjs_v8.h" |
| 10 #include "../../include/fsdk_define.h" | 10 #include "../../include/fsdk_define.h" |
| 11 #include "time.h" | 11 #include "time.h" |
| 12 #include <cmath> | 12 #include <cmath> |
| 13 #include <limits> | 13 #include <limits> |
| 14 | 14 |
| 15 #define VALUE_NAME_STRING L"string" | 15 const wchar_t kFXJSValueNameString[] = L"string"; |
| 16 #define VALUE_NAME_NUMBER L"number" | 16 const wchar_t kFXJSValueNameNumber[] = L"number"; |
| 17 #define VALUE_NAME_BOOLEAN L"boolean" | 17 const wchar_t kFXJSValueNameBoolean[] = L"boolean"; |
| 18 #define VALUE_NAME_DATE L"date" | 18 const wchar_t kFXJSValueNameDate[] = L"date"; |
| 19 #define VALUE_NAME_OBJECT L"object" | 19 const wchar_t kFXJSValueNameObject[] = L"object"; |
| 20 #define VALUE_NAME_FXOBJ L"fxobj" | 20 const wchar_t kFXJSValueNameFxobj[] = L"fxobj"; |
| 21 #define VALUE_NAME_NULL L"null" | 21 const wchar_t kFXJSValueNameNull[] = L"null"; |
| 22 #define VALUE_NAME_UNDEFINED L"undefined" | 22 const wchar_t kFXJSValueNameUndefined[] = L"undefined"; |
| 23 | 23 |
| 24 const static FX_DWORD g_nan[2] = {0, 0x7FF80000}; | 24 const static FX_DWORD g_nan[2] = {0, 0x7FF80000}; |
| 25 static double GetNan() { | 25 static double GetNan() { |
| 26 return *(double*)g_nan; | 26 return *(double*)g_nan; |
| 27 } | 27 } |
| 28 static unsigned int g_embedderDataSlot = 0u; | 28 static unsigned int g_embedderDataSlot = 0u; |
| 29 | 29 |
| 30 class CJS_PrivateData { | 30 class CJS_PrivateData { |
| 31 public: | 31 public: |
| 32 CJS_PrivateData() : ObjDefID(-1), pPrivate(NULL) {} | 32 CJS_PrivateData() : ObjDefID(-1), pPrivate(NULL) {} |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 if (!pArray) { | 86 if (!pArray) { |
| 87 pArray = new CFX_PtrArray(); | 87 pArray = new CFX_PtrArray(); |
| 88 pIsolate->SetData(g_embedderDataSlot, pArray); | 88 pIsolate->SetData(g_embedderDataSlot, pArray); |
| 89 } | 89 } |
| 90 CJS_ObjDefintion* pObjDef = new CJS_ObjDefintion(pIsolate, sObjName, eObjType, | 90 CJS_ObjDefintion* pObjDef = new CJS_ObjDefintion(pIsolate, sObjName, eObjType, |
| 91 pConstructor, pDestructor); | 91 pConstructor, pDestructor); |
| 92 pArray->Add(pObjDef); | 92 pArray->Add(pObjDef); |
| 93 return pArray->GetSize() - 1; | 93 return pArray->GetSize() - 1; |
| 94 } | 94 } |
| 95 | 95 |
| 96 int JS_DefineObjMethod(v8::Isolate* pIsolate, | 96 void JS_DefineObjMethod(v8::Isolate* pIsolate, |
| 97 int nObjDefnID, | 97 int nObjDefnID, |
| 98 const wchar_t* sMethodName, | 98 const wchar_t* sMethodName, |
| 99 v8::FunctionCallback pMethodCall) { | 99 v8::FunctionCallback pMethodCall) { |
| 100 v8::Isolate::Scope isolate_scope(pIsolate); | 100 v8::Isolate::Scope isolate_scope(pIsolate); |
| 101 v8::HandleScope handle_scope(pIsolate); | 101 v8::HandleScope handle_scope(pIsolate); |
| 102 | 102 |
| 103 CFX_WideString ws = CFX_WideString(sMethodName); | 103 CFX_WideString ws = CFX_WideString(sMethodName); |
| 104 CFX_ByteString bsMethodName = ws.UTF8Encode(); | 104 CFX_ByteString bsMethodName = ws.UTF8Encode(); |
| 105 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); |
| 105 | 106 |
| 106 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); | 107 // Note: GetAt() halts if out-of-range even in release builds. |
| 107 if (!pArray) | |
| 108 return 0; | |
| 109 | |
| 110 if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) | |
| 111 return 0; | |
| 112 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); | 108 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); |
| 113 v8::Local<v8::ObjectTemplate> objTemp = | 109 v8::Local<v8::ObjectTemplate> objTemp = |
| 114 v8::Local<v8::ObjectTemplate>::New(pIsolate, pObjDef->m_objTemplate); | 110 v8::Local<v8::ObjectTemplate>::New(pIsolate, pObjDef->m_objTemplate); |
| 115 objTemp->Set( | 111 objTemp->Set( |
| 116 v8::String::NewFromUtf8(pIsolate, bsMethodName.c_str(), | 112 v8::String::NewFromUtf8(pIsolate, bsMethodName.c_str(), |
| 117 v8::NewStringType::kNormal).ToLocalChecked(), | 113 v8::NewStringType::kNormal).ToLocalChecked(), |
| 118 v8::FunctionTemplate::New(pIsolate, pMethodCall), v8::ReadOnly); | 114 v8::FunctionTemplate::New(pIsolate, pMethodCall), v8::ReadOnly); |
| 119 pObjDef->m_objTemplate.Reset(pIsolate, objTemp); | 115 pObjDef->m_objTemplate.Reset(pIsolate, objTemp); |
| 120 return 0; | |
| 121 } | 116 } |
| 122 | 117 |
| 123 int JS_DefineObjProperty(v8::Isolate* pIsolate, | 118 void JS_DefineObjProperty(v8::Isolate* pIsolate, |
| 124 int nObjDefnID, | 119 int nObjDefnID, |
| 125 const wchar_t* sPropName, | 120 const wchar_t* sPropName, |
| 126 v8::AccessorGetterCallback pPropGet, | 121 v8::AccessorGetterCallback pPropGet, |
| 127 v8::AccessorSetterCallback pPropPut) { | 122 v8::AccessorSetterCallback pPropPut) { |
| 128 v8::Isolate::Scope isolate_scope(pIsolate); | 123 v8::Isolate::Scope isolate_scope(pIsolate); |
| 129 v8::HandleScope handle_scope(pIsolate); | 124 v8::HandleScope handle_scope(pIsolate); |
| 130 | 125 |
| 131 CFX_WideString ws = CFX_WideString(sPropName); | 126 CFX_WideString ws = CFX_WideString(sPropName); |
| 132 CFX_ByteString bsPropertyName = ws.UTF8Encode(); | 127 CFX_ByteString bsPropertyName = ws.UTF8Encode(); |
| 128 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); |
| 133 | 129 |
| 134 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); | 130 // Note: GetAt() halts if out-of-range even in release builds. |
| 135 if (!pArray) | |
| 136 return 0; | |
| 137 | |
| 138 if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) | |
| 139 return 0; | |
| 140 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); | 131 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); |
| 141 v8::Local<v8::ObjectTemplate> objTemp = | 132 v8::Local<v8::ObjectTemplate> objTemp = |
| 142 v8::Local<v8::ObjectTemplate>::New(pIsolate, pObjDef->m_objTemplate); | 133 v8::Local<v8::ObjectTemplate>::New(pIsolate, pObjDef->m_objTemplate); |
| 143 objTemp->SetAccessor( | 134 objTemp->SetAccessor( |
| 144 v8::String::NewFromUtf8(pIsolate, bsPropertyName.c_str(), | 135 v8::String::NewFromUtf8(pIsolate, bsPropertyName.c_str(), |
| 145 v8::NewStringType::kNormal).ToLocalChecked(), | 136 v8::NewStringType::kNormal).ToLocalChecked(), |
| 146 pPropGet, pPropPut); | 137 pPropGet, pPropPut); |
| 147 pObjDef->m_objTemplate.Reset(pIsolate, objTemp); | 138 pObjDef->m_objTemplate.Reset(pIsolate, objTemp); |
| 148 return 0; | |
| 149 } | 139 } |
| 150 | 140 |
| 151 int JS_DefineObjAllProperties(v8::Isolate* pIsolate, | 141 void JS_DefineObjAllProperties(v8::Isolate* pIsolate, |
| 152 int nObjDefnID, | 142 int nObjDefnID, |
| 153 v8::NamedPropertyQueryCallback pPropQurey, | 143 v8::NamedPropertyQueryCallback pPropQurey, |
| 154 v8::NamedPropertyGetterCallback pPropGet, | 144 v8::NamedPropertyGetterCallback pPropGet, |
| 155 v8::NamedPropertySetterCallback pPropPut, | 145 v8::NamedPropertySetterCallback pPropPut, |
| 156 v8::NamedPropertyDeleterCallback pPropDel) { | 146 v8::NamedPropertyDeleterCallback pPropDel) { |
| 157 v8::Isolate::Scope isolate_scope(pIsolate); | 147 v8::Isolate::Scope isolate_scope(pIsolate); |
| 158 v8::HandleScope handle_scope(pIsolate); | 148 v8::HandleScope handle_scope(pIsolate); |
| 149 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); |
| 159 | 150 |
| 160 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); | 151 // Note: GetAt() halts if out-of-range even in release builds. |
| 161 if (!pArray) | |
| 162 return 0; | |
| 163 | |
| 164 if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) | |
| 165 return 0; | |
| 166 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); | 152 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); |
| 167 v8::Local<v8::ObjectTemplate> objTemp = | 153 v8::Local<v8::ObjectTemplate> objTemp = |
| 168 v8::Local<v8::ObjectTemplate>::New(pIsolate, pObjDef->m_objTemplate); | 154 v8::Local<v8::ObjectTemplate>::New(pIsolate, pObjDef->m_objTemplate); |
| 169 objTemp->SetNamedPropertyHandler(pPropGet, pPropPut, pPropQurey, pPropDel); | 155 objTemp->SetNamedPropertyHandler(pPropGet, pPropPut, pPropQurey, pPropDel); |
| 170 pObjDef->m_objTemplate.Reset(pIsolate, objTemp); | 156 pObjDef->m_objTemplate.Reset(pIsolate, objTemp); |
| 171 return 0; | |
| 172 } | 157 } |
| 173 | 158 |
| 174 int JS_DefineObjConst(v8::Isolate* pIsolate, | 159 void JS_DefineObjConst(v8::Isolate* pIsolate, |
| 175 int nObjDefnID, | 160 int nObjDefnID, |
| 176 const wchar_t* sConstName, | 161 const wchar_t* sConstName, |
| 177 v8::Local<v8::Value> pDefault) { | 162 v8::Local<v8::Value> pDefault) { |
| 178 v8::Isolate::Scope isolate_scope(pIsolate); | 163 v8::Isolate::Scope isolate_scope(pIsolate); |
| 179 v8::HandleScope handle_scope(pIsolate); | 164 v8::HandleScope handle_scope(pIsolate); |
| 180 | 165 |
| 181 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); | |
| 182 if (!pArray) | |
| 183 return 0; | |
| 184 | |
| 185 CFX_WideString ws = CFX_WideString(sConstName); | 166 CFX_WideString ws = CFX_WideString(sConstName); |
| 186 CFX_ByteString bsConstName = ws.UTF8Encode(); | 167 CFX_ByteString bsConstName = ws.UTF8Encode(); |
| 168 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); |
| 187 | 169 |
| 188 if (nObjDefnID < 0 || nObjDefnID >= pArray->GetSize()) | 170 // Note: GetAt() halts if out-of-range even in release builds. |
| 189 return 0; | |
| 190 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); | 171 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(nObjDefnID); |
| 191 v8::Local<v8::ObjectTemplate> objTemp = | 172 v8::Local<v8::ObjectTemplate> objTemp = |
| 192 v8::Local<v8::ObjectTemplate>::New(pIsolate, pObjDef->m_objTemplate); | 173 v8::Local<v8::ObjectTemplate>::New(pIsolate, pObjDef->m_objTemplate); |
| 193 objTemp->Set(pIsolate, bsConstName.c_str(), pDefault); | 174 objTemp->Set(pIsolate, bsConstName.c_str(), pDefault); |
| 194 pObjDef->m_objTemplate.Reset(pIsolate, objTemp); | 175 pObjDef->m_objTemplate.Reset(pIsolate, objTemp); |
| 195 return 0; | |
| 196 } | 176 } |
| 197 | 177 |
| 198 static v8::Global<v8::ObjectTemplate>& _getGlobalObjectTemplate( | 178 static v8::Global<v8::ObjectTemplate>& _getGlobalObjectTemplate( |
| 199 v8::Isolate* pIsolate) { | 179 v8::Isolate* pIsolate) { |
| 200 v8::Isolate::Scope isolate_scope(pIsolate); | 180 v8::Isolate::Scope isolate_scope(pIsolate); |
| 201 v8::HandleScope handle_scope(pIsolate); | 181 v8::HandleScope handle_scope(pIsolate); |
| 202 | 182 |
| 203 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); | 183 CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); |
| 204 ASSERT(pArray != NULL); | 184 ASSERT(pArray != NULL); |
| 205 for (int i = 0; i < pArray->GetSize(); i++) { | 185 for (int i = 0; i < pArray->GetSize(); i++) { |
| 206 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); | 186 CJS_ObjDefintion* pObjDef = (CJS_ObjDefintion*)pArray->GetAt(i); |
| 207 if (pObjDef->m_bSetAsGlobalObject) | 187 if (pObjDef->m_bSetAsGlobalObject) |
| 208 return pObjDef->m_objTemplate; | 188 return pObjDef->m_objTemplate; |
| 209 } | 189 } |
| 210 static v8::Global<v8::ObjectTemplate> gloabalObjectTemplate; | 190 static v8::Global<v8::ObjectTemplate> gloabalObjectTemplate; |
| 211 return gloabalObjectTemplate; | 191 return gloabalObjectTemplate; |
| 212 } | 192 } |
| 213 | 193 |
| 214 int JS_DefineGlobalMethod(v8::Isolate* pIsolate, | 194 void JS_DefineGlobalMethod(v8::Isolate* pIsolate, |
| 215 const wchar_t* sMethodName, | 195 const wchar_t* sMethodName, |
| 216 v8::FunctionCallback pMethodCall) { | 196 v8::FunctionCallback pMethodCall) { |
| 217 v8::Isolate::Scope isolate_scope(pIsolate); | 197 v8::Isolate::Scope isolate_scope(pIsolate); |
| 218 v8::HandleScope handle_scope(pIsolate); | 198 v8::HandleScope handle_scope(pIsolate); |
| 219 | 199 |
| 220 CFX_WideString ws = CFX_WideString(sMethodName); | 200 CFX_WideString ws = CFX_WideString(sMethodName); |
| 221 CFX_ByteString bsMethodName = ws.UTF8Encode(); | 201 CFX_ByteString bsMethodName = ws.UTF8Encode(); |
| 222 | 202 |
| 223 v8::Local<v8::FunctionTemplate> funTempl = | 203 v8::Local<v8::FunctionTemplate> funTempl = |
| 224 v8::FunctionTemplate::New(pIsolate, pMethodCall); | 204 v8::FunctionTemplate::New(pIsolate, pMethodCall); |
| 225 v8::Local<v8::ObjectTemplate> objTemp; | 205 v8::Local<v8::ObjectTemplate> objTemp; |
| 226 | 206 |
| 227 v8::Global<v8::ObjectTemplate>& globalObjTemp = | 207 v8::Global<v8::ObjectTemplate>& globalObjTemp = |
| 228 _getGlobalObjectTemplate(pIsolate); | 208 _getGlobalObjectTemplate(pIsolate); |
| 229 if (globalObjTemp.IsEmpty()) | 209 if (globalObjTemp.IsEmpty()) |
| 230 objTemp = v8::ObjectTemplate::New(pIsolate); | 210 objTemp = v8::ObjectTemplate::New(pIsolate); |
| 231 else | 211 else |
| 232 objTemp = v8::Local<v8::ObjectTemplate>::New(pIsolate, globalObjTemp); | 212 objTemp = v8::Local<v8::ObjectTemplate>::New(pIsolate, globalObjTemp); |
| 233 objTemp->Set( | 213 objTemp->Set( |
| 234 v8::String::NewFromUtf8(pIsolate, bsMethodName.c_str(), | 214 v8::String::NewFromUtf8(pIsolate, bsMethodName.c_str(), |
| 235 v8::NewStringType::kNormal).ToLocalChecked(), | 215 v8::NewStringType::kNormal).ToLocalChecked(), |
| 236 funTempl, v8::ReadOnly); | 216 funTempl, v8::ReadOnly); |
| 237 | 217 |
| 238 globalObjTemp.Reset(pIsolate, objTemp); | 218 globalObjTemp.Reset(pIsolate, objTemp); |
| 239 | |
| 240 return 0; | |
| 241 } | 219 } |
| 242 | 220 |
| 243 int JS_DefineGlobalConst(v8::Isolate* pIsolate, | 221 void JS_DefineGlobalConst(v8::Isolate* pIsolate, |
| 244 const wchar_t* sConstName, | 222 const wchar_t* sConstName, |
| 245 v8::Local<v8::Value> pDefault) { | 223 v8::Local<v8::Value> pDefault) { |
| 246 v8::Isolate::Scope isolate_scope(pIsolate); | 224 v8::Isolate::Scope isolate_scope(pIsolate); |
| 247 v8::HandleScope handle_scope(pIsolate); | 225 v8::HandleScope handle_scope(pIsolate); |
| 248 | 226 |
| 249 CFX_WideString ws = CFX_WideString(sConstName); | 227 CFX_WideString ws = CFX_WideString(sConstName); |
| 250 CFX_ByteString bsConst = ws.UTF8Encode(); | 228 CFX_ByteString bsConst = ws.UTF8Encode(); |
| 251 | 229 |
| 252 v8::Local<v8::ObjectTemplate> objTemp; | 230 v8::Local<v8::ObjectTemplate> objTemp; |
| 253 | 231 |
| 254 v8::Global<v8::ObjectTemplate>& globalObjTemp = | 232 v8::Global<v8::ObjectTemplate>& globalObjTemp = |
| 255 _getGlobalObjectTemplate(pIsolate); | 233 _getGlobalObjectTemplate(pIsolate); |
| 256 if (globalObjTemp.IsEmpty()) | 234 if (globalObjTemp.IsEmpty()) |
| 257 objTemp = v8::ObjectTemplate::New(pIsolate); | 235 objTemp = v8::ObjectTemplate::New(pIsolate); |
| 258 else | 236 else |
| 259 objTemp = v8::Local<v8::ObjectTemplate>::New(pIsolate, globalObjTemp); | 237 objTemp = v8::Local<v8::ObjectTemplate>::New(pIsolate, globalObjTemp); |
| 260 objTemp->Set( | 238 objTemp->Set( |
| 261 v8::String::NewFromUtf8(pIsolate, bsConst.c_str(), | 239 v8::String::NewFromUtf8(pIsolate, bsConst.c_str(), |
| 262 v8::NewStringType::kNormal).ToLocalChecked(), | 240 v8::NewStringType::kNormal).ToLocalChecked(), |
| 263 pDefault, v8::ReadOnly); | 241 pDefault, v8::ReadOnly); |
| 264 | 242 |
| 265 globalObjTemp.Reset(pIsolate, objTemp); | 243 globalObjTemp.Reset(pIsolate, objTemp); |
| 266 | |
| 267 return 0; | |
| 268 } | 244 } |
| 269 | 245 |
| 270 void JS_InitialRuntime(v8::Isolate* pIsolate, | 246 void JS_InitialRuntime(v8::Isolate* pIsolate, |
| 271 IFXJS_Runtime* pFXRuntime, | 247 IFXJS_Runtime* pFXRuntime, |
| 272 IFXJS_Context* context, | 248 IFXJS_Context* context, |
| 273 v8::Global<v8::Context>& v8PersistentContext) { | 249 v8::Global<v8::Context>& v8PersistentContext) { |
| 274 v8::Isolate::Scope isolate_scope(pIsolate); | 250 v8::Isolate::Scope isolate_scope(pIsolate); |
| 275 v8::Locker locker(pIsolate); | 251 v8::Locker locker(pIsolate); |
| 276 v8::HandleScope handle_scope(pIsolate); | 252 v8::HandleScope handle_scope(pIsolate); |
| 277 | 253 |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 512 } | 488 } |
| 513 | 489 |
| 514 unsigned JS_CalcHash(const wchar_t* main) { | 490 unsigned JS_CalcHash(const wchar_t* main) { |
| 515 return (unsigned)FX_HashCode_String_GetW((const FX_WCHAR*)main, | 491 return (unsigned)FX_HashCode_String_GetW((const FX_WCHAR*)main, |
| 516 FXSYS_wcslen(main)); | 492 FXSYS_wcslen(main)); |
| 517 } | 493 } |
| 518 const wchar_t* JS_GetTypeof(v8::Local<v8::Value> pObj) { | 494 const wchar_t* JS_GetTypeof(v8::Local<v8::Value> pObj) { |
| 519 if (pObj.IsEmpty()) | 495 if (pObj.IsEmpty()) |
| 520 return NULL; | 496 return NULL; |
| 521 if (pObj->IsString()) | 497 if (pObj->IsString()) |
| 522 return VALUE_NAME_STRING; | 498 return kFXJSValueNameString; |
| 523 if (pObj->IsNumber()) | 499 if (pObj->IsNumber()) |
| 524 return VALUE_NAME_NUMBER; | 500 return kFXJSValueNameNumber; |
| 525 if (pObj->IsBoolean()) | 501 if (pObj->IsBoolean()) |
| 526 return VALUE_NAME_BOOLEAN; | 502 return kFXJSValueNameBoolean; |
| 527 if (pObj->IsDate()) | 503 if (pObj->IsDate()) |
| 528 return VALUE_NAME_DATE; | 504 return kFXJSValueNameDate; |
| 529 if (pObj->IsObject()) | 505 if (pObj->IsObject()) |
| 530 return VALUE_NAME_OBJECT; | 506 return kFXJSValueNameObject; |
| 531 if (pObj->IsNull()) | 507 if (pObj->IsNull()) |
| 532 return VALUE_NAME_NULL; | 508 return kFXJSValueNameNull; |
| 533 if (pObj->IsUndefined()) | 509 if (pObj->IsUndefined()) |
| 534 return VALUE_NAME_UNDEFINED; | 510 return kFXJSValueNameUndefined; |
| 535 return NULL; | 511 return NULL; |
| 536 } | 512 } |
| 537 void JS_SetPrivate(v8::Local<v8::Object> pObj, void* p) { | 513 void JS_SetPrivate(v8::Local<v8::Object> pObj, void* p) { |
| 538 JS_SetPrivate(NULL, pObj, p); | 514 JS_SetPrivate(NULL, pObj, p); |
| 539 } | 515 } |
| 540 | 516 |
| 541 void* JS_GetPrivate(v8::Local<v8::Object> pObj) { | 517 void* JS_GetPrivate(v8::Local<v8::Object> pObj) { |
| 542 return JS_GetPrivate(NULL, pObj); | 518 return JS_GetPrivate(NULL, pObj); |
| 543 } | 519 } |
| 544 | 520 |
| (...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1119 | 1095 |
| 1120 bool JS_PortIsNan(double d) { | 1096 bool JS_PortIsNan(double d) { |
| 1121 return d != d; | 1097 return d != d; |
| 1122 } | 1098 } |
| 1123 | 1099 |
| 1124 double JS_LocalTime(double d) { | 1100 double JS_LocalTime(double d) { |
| 1125 return JS_GetDateTime() + _getDaylightSavingTA(d); | 1101 return JS_GetDateTime() + _getDaylightSavingTA(d); |
| 1126 } | 1102 } |
| 1127 | 1103 |
| 1128 // JavaScript time implement End. | 1104 // JavaScript time implement End. |
| OLD | NEW |