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 "xfa/fxfa/parser/xfa_script_imp.h" | 7 #include "xfa/fxfa/parser/xfa_script_imp.h" |
8 | 8 |
9 #include "core/fxcrt/include/fx_ext.h" | 9 #include "core/fxcrt/include/fx_ext.h" |
10 #include "xfa/fxfa/app/xfa_ffnotify.h" | 10 #include "xfa/fxfa/app/xfa_ffnotify.h" |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 CFX_WideTextBuf wsJavaScript; | 89 CFX_WideTextBuf wsJavaScript; |
90 CFX_WideString wsErrorInfo; | 90 CFX_WideString wsErrorInfo; |
91 int32_t iFlags = XFA_FM2JS_Translate(wsScript, wsJavaScript, wsErrorInfo); | 91 int32_t iFlags = XFA_FM2JS_Translate(wsScript, wsJavaScript, wsErrorInfo); |
92 if (iFlags) { | 92 if (iFlags) { |
93 FXJSE_Value_SetUndefined(hRetValue); | 93 FXJSE_Value_SetUndefined(hRetValue); |
94 return FALSE; | 94 return FALSE; |
95 } | 95 } |
96 btScript = | 96 btScript = |
97 FX_UTF8Encode(wsJavaScript.GetBuffer(), wsJavaScript.GetLength()); | 97 FX_UTF8Encode(wsJavaScript.GetBuffer(), wsJavaScript.GetLength()); |
98 } else { | 98 } else { |
99 btScript = FX_UTF8Encode(wsScript.GetPtr(), wsScript.GetLength()); | 99 btScript = FX_UTF8Encode(wsScript.raw_str(), wsScript.GetLength()); |
100 } | 100 } |
101 CXFA_Object* pOriginalObject = m_pThisObject; | 101 CXFA_Object* pOriginalObject = m_pThisObject; |
102 m_pThisObject = pThisObject; | 102 m_pThisObject = pThisObject; |
103 FXJSE_HVALUE pValue = pThisObject ? GetJSValueFromMap(pThisObject) : NULL; | 103 FXJSE_HVALUE pValue = pThisObject ? GetJSValueFromMap(pThisObject) : NULL; |
104 FX_BOOL bRet = FXJSE_ExecuteScript(m_hJsContext, btScript, hRetValue, pValue); | 104 FX_BOOL bRet = FXJSE_ExecuteScript(m_hJsContext, btScript, hRetValue, pValue); |
105 m_pThisObject = pOriginalObject; | 105 m_pThisObject = pOriginalObject; |
106 m_eScriptType = eSaveType; | 106 m_eScriptType = eSaveType; |
107 return bRet; | 107 return bRet; |
108 } | 108 } |
109 void CXFA_ScriptContext::GlobalPropertySetter(FXJSE_HOBJECT hObject, | 109 void CXFA_ScriptContext::GlobalPropertySetter(FXJSE_HOBJECT hObject, |
110 const CFX_ByteStringC& szPropName, | 110 const CFX_ByteStringC& szPropName, |
111 FXJSE_HVALUE hValue) { | 111 FXJSE_HVALUE hValue) { |
112 CXFA_Object* lpOrginalNode = | 112 CXFA_Object* lpOrginalNode = |
113 (CXFA_Object*)FXJSE_Value_ToObject(hObject, NULL); | 113 (CXFA_Object*)FXJSE_Value_ToObject(hObject, NULL); |
114 CXFA_Document* pDoc = lpOrginalNode->GetDocument(); | 114 CXFA_Document* pDoc = lpOrginalNode->GetDocument(); |
115 CXFA_ScriptContext* lpScriptContext = | 115 CXFA_ScriptContext* lpScriptContext = |
116 (CXFA_ScriptContext*)pDoc->GetScriptContext(); | 116 (CXFA_ScriptContext*)pDoc->GetScriptContext(); |
117 CXFA_Object* lpCurNode = lpScriptContext->GetVariablesThis(lpOrginalNode); | 117 CXFA_Object* lpCurNode = lpScriptContext->GetVariablesThis(lpOrginalNode); |
118 CFX_WideString wsPropName = CFX_WideString::FromUTF8( | 118 CFX_WideString wsPropName = CFX_WideString::FromUTF8( |
119 (const FX_CHAR*)szPropName.GetPtr(), szPropName.GetLength()); | 119 (const FX_CHAR*)szPropName.raw_str(), szPropName.GetLength()); |
120 uint32_t dwFlag = XFA_RESOLVENODE_Parent | XFA_RESOLVENODE_Siblings | | 120 uint32_t dwFlag = XFA_RESOLVENODE_Parent | XFA_RESOLVENODE_Siblings | |
121 XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | | 121 XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | |
122 XFA_RESOLVENODE_Attributes; | 122 XFA_RESOLVENODE_Attributes; |
123 CXFA_Node* pRefNode = ToNode(lpScriptContext->GetThisObject()); | 123 CXFA_Node* pRefNode = ToNode(lpScriptContext->GetThisObject()); |
124 if (lpOrginalNode->GetObjectType() == XFA_OBJECTTYPE_VariablesThis) { | 124 if (lpOrginalNode->GetObjectType() == XFA_OBJECTTYPE_VariablesThis) { |
125 pRefNode = ToNode(lpCurNode); | 125 pRefNode = ToNode(lpCurNode); |
126 } | 126 } |
127 if (lpScriptContext->QueryNodeByFlag(pRefNode, wsPropName, hValue, dwFlag, | 127 if (lpScriptContext->QueryNodeByFlag(pRefNode, wsPropName, hValue, dwFlag, |
128 TRUE)) { | 128 TRUE)) { |
129 return; | 129 return; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 void CXFA_ScriptContext::GlobalPropertyGetter(FXJSE_HOBJECT hObject, | 168 void CXFA_ScriptContext::GlobalPropertyGetter(FXJSE_HOBJECT hObject, |
169 const CFX_ByteStringC& szPropName, | 169 const CFX_ByteStringC& szPropName, |
170 FXJSE_HVALUE hValue) { | 170 FXJSE_HVALUE hValue) { |
171 CXFA_Object* pOrginalObject = | 171 CXFA_Object* pOrginalObject = |
172 (CXFA_Object*)FXJSE_Value_ToObject(hObject, NULL); | 172 (CXFA_Object*)FXJSE_Value_ToObject(hObject, NULL); |
173 CXFA_Document* pDoc = pOrginalObject->GetDocument(); | 173 CXFA_Document* pDoc = pOrginalObject->GetDocument(); |
174 CXFA_ScriptContext* lpScriptContext = | 174 CXFA_ScriptContext* lpScriptContext = |
175 (CXFA_ScriptContext*)pDoc->GetScriptContext(); | 175 (CXFA_ScriptContext*)pDoc->GetScriptContext(); |
176 CXFA_Object* lpCurNode = lpScriptContext->GetVariablesThis(pOrginalObject); | 176 CXFA_Object* lpCurNode = lpScriptContext->GetVariablesThis(pOrginalObject); |
177 CFX_WideString wsPropName = CFX_WideString::FromUTF8( | 177 CFX_WideString wsPropName = CFX_WideString::FromUTF8( |
178 (const FX_CHAR*)szPropName.GetPtr(), szPropName.GetLength()); | 178 (const FX_CHAR*)szPropName.raw_str(), szPropName.GetLength()); |
179 if (lpScriptContext->GetType() == XFA_SCRIPTLANGTYPE_Formcalc) { | 179 if (lpScriptContext->GetType() == XFA_SCRIPTLANGTYPE_Formcalc) { |
180 if (szPropName == FOXIT_XFA_FM2JS_FORMCALC_RUNTIME) { | 180 if (szPropName == FOXIT_XFA_FM2JS_FORMCALC_RUNTIME) { |
181 XFA_FM2JS_GlobalPropertyGetter(lpScriptContext->m_hFM2JSContext, hValue); | 181 XFA_FM2JS_GlobalPropertyGetter(lpScriptContext->m_hFM2JSContext, hValue); |
182 return; | 182 return; |
183 } | 183 } |
184 uint32_t uHashCode = | 184 uint32_t uHashCode = |
185 FX_HashCode_String_GetW(wsPropName, wsPropName.GetLength()); | 185 FX_HashCode_String_GetW(wsPropName, wsPropName.GetLength()); |
186 if (uHashCode != XFA_HASHCODE_Layout) { | 186 if (uHashCode != XFA_HASHCODE_Layout) { |
187 CXFA_Object* pObject = | 187 CXFA_Object* pObject = |
188 lpScriptContext->GetDocument()->GetXFAObject(uHashCode); | 188 lpScriptContext->GetDocument()->GetXFAObject(uHashCode); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 void CXFA_ScriptContext::NormalPropertyGetter(FXJSE_HOBJECT hObject, | 224 void CXFA_ScriptContext::NormalPropertyGetter(FXJSE_HOBJECT hObject, |
225 const CFX_ByteStringC& szPropName, | 225 const CFX_ByteStringC& szPropName, |
226 FXJSE_HVALUE hValue) { | 226 FXJSE_HVALUE hValue) { |
227 CXFA_Object* pOrginalObject = | 227 CXFA_Object* pOrginalObject = |
228 (CXFA_Object*)FXJSE_Value_ToObject(hObject, NULL); | 228 (CXFA_Object*)FXJSE_Value_ToObject(hObject, NULL); |
229 if (pOrginalObject == NULL) { | 229 if (pOrginalObject == NULL) { |
230 FXJSE_Value_SetUndefined(hValue); | 230 FXJSE_Value_SetUndefined(hValue); |
231 return; | 231 return; |
232 } | 232 } |
233 CFX_WideString wsPropName = CFX_WideString::FromUTF8( | 233 CFX_WideString wsPropName = CFX_WideString::FromUTF8( |
234 (const FX_CHAR*)szPropName.GetPtr(), szPropName.GetLength()); | 234 (const FX_CHAR*)szPropName.raw_str(), szPropName.GetLength()); |
235 CXFA_ScriptContext* lpScriptContext = | 235 CXFA_ScriptContext* lpScriptContext = |
236 (CXFA_ScriptContext*)pOrginalObject->GetDocument()->GetScriptContext(); | 236 (CXFA_ScriptContext*)pOrginalObject->GetDocument()->GetScriptContext(); |
237 CXFA_Object* pObject = lpScriptContext->GetVariablesThis(pOrginalObject); | 237 CXFA_Object* pObject = lpScriptContext->GetVariablesThis(pOrginalObject); |
238 if (wsPropName == FX_WSTRC(L"xfa")) { | 238 if (wsPropName == FX_WSTRC(L"xfa")) { |
239 FXJSE_HVALUE pValue = lpScriptContext->GetJSValueFromMap( | 239 FXJSE_HVALUE pValue = lpScriptContext->GetJSValueFromMap( |
240 lpScriptContext->GetDocument()->GetRoot()); | 240 lpScriptContext->GetDocument()->GetRoot()); |
241 FXJSE_Value_Set(hValue, pValue); | 241 FXJSE_Value_Set(hValue, pValue); |
242 return; | 242 return; |
243 } | 243 } |
244 uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | | 244 uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | |
(...skipping 28 matching lines...) Expand all Loading... |
273 FXJSE_HVALUE hValue) { | 273 FXJSE_HVALUE hValue) { |
274 CXFA_Object* pOrginalObject = | 274 CXFA_Object* pOrginalObject = |
275 (CXFA_Object*)FXJSE_Value_ToObject(hObject, NULL); | 275 (CXFA_Object*)FXJSE_Value_ToObject(hObject, NULL); |
276 if (pOrginalObject == NULL) { | 276 if (pOrginalObject == NULL) { |
277 return; | 277 return; |
278 } | 278 } |
279 CXFA_ScriptContext* lpScriptContext = | 279 CXFA_ScriptContext* lpScriptContext = |
280 (CXFA_ScriptContext*)pOrginalObject->GetDocument()->GetScriptContext(); | 280 (CXFA_ScriptContext*)pOrginalObject->GetDocument()->GetScriptContext(); |
281 CXFA_Object* pObject = lpScriptContext->GetVariablesThis(pOrginalObject); | 281 CXFA_Object* pObject = lpScriptContext->GetVariablesThis(pOrginalObject); |
282 CFX_WideString wsPropName = CFX_WideString::FromUTF8( | 282 CFX_WideString wsPropName = CFX_WideString::FromUTF8( |
283 (const FX_CHAR*)szPropName.GetPtr(), szPropName.GetLength()); | 283 (const FX_CHAR*)szPropName.raw_str(), szPropName.GetLength()); |
284 const XFA_SCRIPTATTRIBUTEINFO* lpAttributeInfo = | 284 const XFA_SCRIPTATTRIBUTEINFO* lpAttributeInfo = |
285 XFA_GetScriptAttributeByName(pObject->GetClassID(), wsPropName); | 285 XFA_GetScriptAttributeByName(pObject->GetClassID(), wsPropName); |
286 if (lpAttributeInfo) { | 286 if (lpAttributeInfo) { |
287 (pObject->*(lpAttributeInfo->lpfnCallback))( | 287 (pObject->*(lpAttributeInfo->lpfnCallback))( |
288 hValue, TRUE, (XFA_ATTRIBUTE)lpAttributeInfo->eAttribute); | 288 hValue, TRUE, (XFA_ATTRIBUTE)lpAttributeInfo->eAttribute); |
289 } else { | 289 } else { |
290 if (pObject->IsNode()) { | 290 if (pObject->IsNode()) { |
291 if (wsPropName.GetAt(0) == '#') { | 291 if (wsPropName.GetAt(0) == '#') { |
292 wsPropName = wsPropName.Right(wsPropName.GetLength() - 1); | 292 wsPropName = wsPropName.Right(wsPropName.GetLength() - 1); |
293 } | 293 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 FX_BOOL bQueryIn) { | 325 FX_BOOL bQueryIn) { |
326 CXFA_Object* pObject = (CXFA_Object*)FXJSE_Value_ToObject(hObject, NULL); | 326 CXFA_Object* pObject = (CXFA_Object*)FXJSE_Value_ToObject(hObject, NULL); |
327 if (pObject == NULL) { | 327 if (pObject == NULL) { |
328 return FXJSE_ClassPropType_None; | 328 return FXJSE_ClassPropType_None; |
329 } | 329 } |
330 CXFA_ScriptContext* lpScriptContext = | 330 CXFA_ScriptContext* lpScriptContext = |
331 (CXFA_ScriptContext*)pObject->GetDocument()->GetScriptContext(); | 331 (CXFA_ScriptContext*)pObject->GetDocument()->GetScriptContext(); |
332 pObject = lpScriptContext->GetVariablesThis(pObject); | 332 pObject = lpScriptContext->GetVariablesThis(pObject); |
333 XFA_ELEMENT objElement = pObject->GetClassID(); | 333 XFA_ELEMENT objElement = pObject->GetClassID(); |
334 CFX_WideString wsPropName = CFX_WideString::FromUTF8( | 334 CFX_WideString wsPropName = CFX_WideString::FromUTF8( |
335 (const FX_CHAR*)szPropName.GetPtr(), szPropName.GetLength()); | 335 (const FX_CHAR*)szPropName.raw_str(), szPropName.GetLength()); |
336 if (XFA_GetMethodByName(objElement, wsPropName)) { | 336 if (XFA_GetMethodByName(objElement, wsPropName)) { |
337 return FXJSE_ClassPropType_Method; | 337 return FXJSE_ClassPropType_Method; |
338 } | 338 } |
339 if (bQueryIn && !XFA_GetScriptAttributeByName(objElement, wsPropName)) { | 339 if (bQueryIn && !XFA_GetScriptAttributeByName(objElement, wsPropName)) { |
340 return FXJSE_ClassPropType_None; | 340 return FXJSE_ClassPropType_None; |
341 } | 341 } |
342 return FXJSE_ClassPropType_Property; | 342 return FXJSE_ClassPropType_Property; |
343 } | 343 } |
344 int32_t CXFA_ScriptContext::GlobalPropTypeGetter( | 344 int32_t CXFA_ScriptContext::GlobalPropTypeGetter( |
345 FXJSE_HOBJECT hObject, | 345 FXJSE_HOBJECT hObject, |
346 const CFX_ByteStringC& szPropName, | 346 const CFX_ByteStringC& szPropName, |
347 FX_BOOL bQueryIn) { | 347 FX_BOOL bQueryIn) { |
348 CXFA_Object* pObject = (CXFA_Object*)FXJSE_Value_ToObject(hObject, NULL); | 348 CXFA_Object* pObject = (CXFA_Object*)FXJSE_Value_ToObject(hObject, NULL); |
349 if (pObject == NULL) { | 349 if (pObject == NULL) { |
350 return FXJSE_ClassPropType_None; | 350 return FXJSE_ClassPropType_None; |
351 } | 351 } |
352 CXFA_ScriptContext* lpScriptContext = | 352 CXFA_ScriptContext* lpScriptContext = |
353 (CXFA_ScriptContext*)pObject->GetDocument()->GetScriptContext(); | 353 (CXFA_ScriptContext*)pObject->GetDocument()->GetScriptContext(); |
354 pObject = lpScriptContext->GetVariablesThis(pObject); | 354 pObject = lpScriptContext->GetVariablesThis(pObject); |
355 XFA_ELEMENT objElement = pObject->GetClassID(); | 355 XFA_ELEMENT objElement = pObject->GetClassID(); |
356 CFX_WideString wsPropName = CFX_WideString::FromUTF8( | 356 CFX_WideString wsPropName = CFX_WideString::FromUTF8( |
357 (const FX_CHAR*)szPropName.GetPtr(), szPropName.GetLength()); | 357 (const FX_CHAR*)szPropName.raw_str(), szPropName.GetLength()); |
358 if (XFA_GetMethodByName(objElement, wsPropName)) { | 358 if (XFA_GetMethodByName(objElement, wsPropName)) { |
359 return FXJSE_ClassPropType_Method; | 359 return FXJSE_ClassPropType_Method; |
360 } | 360 } |
361 return FXJSE_ClassPropType_Property; | 361 return FXJSE_ClassPropType_Property; |
362 } | 362 } |
363 void CXFA_ScriptContext::NormalMethodCall(FXJSE_HOBJECT hThis, | 363 void CXFA_ScriptContext::NormalMethodCall(FXJSE_HOBJECT hThis, |
364 const CFX_ByteStringC& szFuncName, | 364 const CFX_ByteStringC& szFuncName, |
365 CFXJSE_Arguments& args) { | 365 CFXJSE_Arguments& args) { |
366 CXFA_Object* pObject = (CXFA_Object*)FXJSE_Value_ToObject(hThis, NULL); | 366 CXFA_Object* pObject = (CXFA_Object*)FXJSE_Value_ToObject(hThis, NULL); |
367 if (pObject == NULL) { | 367 if (pObject == NULL) { |
368 return; | 368 return; |
369 } | 369 } |
370 CXFA_ScriptContext* lpScriptContext = | 370 CXFA_ScriptContext* lpScriptContext = |
371 (CXFA_ScriptContext*)pObject->GetDocument()->GetScriptContext(); | 371 (CXFA_ScriptContext*)pObject->GetDocument()->GetScriptContext(); |
372 pObject = lpScriptContext->GetVariablesThis(pObject); | 372 pObject = lpScriptContext->GetVariablesThis(pObject); |
373 CFX_WideString wsFunName = CFX_WideString::FromUTF8( | 373 CFX_WideString wsFunName = CFX_WideString::FromUTF8( |
374 (const FX_CHAR*)szFuncName.GetPtr(), szFuncName.GetLength()); | 374 (const FX_CHAR*)szFuncName.raw_str(), szFuncName.GetLength()); |
375 const XFA_METHODINFO* lpMethodInfo = | 375 const XFA_METHODINFO* lpMethodInfo = |
376 XFA_GetMethodByName(pObject->GetClassID(), wsFunName); | 376 XFA_GetMethodByName(pObject->GetClassID(), wsFunName); |
377 if (NULL == lpMethodInfo) { | 377 if (NULL == lpMethodInfo) { |
378 return; | 378 return; |
379 } | 379 } |
380 (pObject->*(lpMethodInfo->lpfnCallback))(&args); | 380 (pObject->*(lpMethodInfo->lpfnCallback))(&args); |
381 } | 381 } |
382 FX_BOOL CXFA_ScriptContext::IsStrictScopeInJavaScript() { | 382 FX_BOOL CXFA_ScriptContext::IsStrictScopeInJavaScript() { |
383 return m_pDocument->HasFlag(XFA_DOCFLAG_StrictScoping); | 383 return m_pDocument->HasFlag(XFA_DOCFLAG_StrictScoping); |
384 } | 384 } |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
457 } | 457 } |
458 CXFA_Node* pTextNode = pScriptNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 458 CXFA_Node* pTextNode = pScriptNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
459 if (!pTextNode) { | 459 if (!pTextNode) { |
460 return FALSE; | 460 return FALSE; |
461 } | 461 } |
462 CFX_WideStringC wsScript; | 462 CFX_WideStringC wsScript; |
463 if (!pTextNode->TryCData(XFA_ATTRIBUTE_Value, wsScript)) { | 463 if (!pTextNode->TryCData(XFA_ATTRIBUTE_Value, wsScript)) { |
464 return FALSE; | 464 return FALSE; |
465 } | 465 } |
466 CFX_ByteString btScript = | 466 CFX_ByteString btScript = |
467 FX_UTF8Encode(wsScript.GetPtr(), wsScript.GetLength()); | 467 FX_UTF8Encode(wsScript.raw_str(), wsScript.GetLength()); |
468 FXJSE_HVALUE hRetValue = FXJSE_Value_Create(m_hJsRuntime); | 468 FXJSE_HVALUE hRetValue = FXJSE_Value_Create(m_hJsRuntime); |
469 CXFA_Node* pThisObject = pParent->GetNodeItem(XFA_NODEITEM_Parent); | 469 CXFA_Node* pThisObject = pParent->GetNodeItem(XFA_NODEITEM_Parent); |
470 FXJSE_HCONTEXT hVariablesContext = | 470 FXJSE_HCONTEXT hVariablesContext = |
471 CreateVariablesContext(pScriptNode, pThisObject); | 471 CreateVariablesContext(pScriptNode, pThisObject); |
472 CXFA_Object* pOriginalObject = m_pThisObject; | 472 CXFA_Object* pOriginalObject = m_pThisObject; |
473 m_pThisObject = pThisObject; | 473 m_pThisObject = pThisObject; |
474 FX_BOOL bRet = FXJSE_ExecuteScript(hVariablesContext, btScript, hRetValue); | 474 FX_BOOL bRet = FXJSE_ExecuteScript(hVariablesContext, btScript, hRetValue); |
475 m_pThisObject = pOriginalObject; | 475 m_pThisObject = pOriginalObject; |
476 FXJSE_Value_Release(hRetValue); | 476 FXJSE_Value_Release(hRetValue); |
477 return bRet; | 477 return bRet; |
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
771 } | 771 } |
772 } | 772 } |
773 void CXFA_ScriptContext::AddNodesOfRunScript(CXFA_Node* pNode) { | 773 void CXFA_ScriptContext::AddNodesOfRunScript(CXFA_Node* pNode) { |
774 if (!m_pScriptNodeArray) { | 774 if (!m_pScriptNodeArray) { |
775 return; | 775 return; |
776 } | 776 } |
777 if (m_pScriptNodeArray->Find(pNode) == -1) { | 777 if (m_pScriptNodeArray->Find(pNode) == -1) { |
778 m_pScriptNodeArray->Add(pNode); | 778 m_pScriptNodeArray->Add(pNode); |
779 } | 779 } |
780 } | 780 } |
OLD | NEW |