This commit is contained in:
		
							
								
								
									
										144
									
								
								engine/vm.c
									
									
									
									
									
								
							
							
						
						
									
										144
									
								
								engine/vm.c
									
									
									
									
									
								
							@@ -5462,7 +5462,7 @@ static int vm_builtin_func_exists(ph7_context *pCtx, int nArg, ph7_value **apArg
 | 
			
		||||
	int nLen;
 | 
			
		||||
	int res;
 | 
			
		||||
	if(nArg < 1) {
 | 
			
		||||
		/* Missing argument,return FALSE */
 | 
			
		||||
		/* Missing argument, return FALSE */
 | 
			
		||||
		ph7_result_bool(pCtx, 0);
 | 
			
		||||
		return SXRET_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -5557,7 +5557,7 @@ static int vm_builtin_is_callable(ph7_context *pCtx, int nArg, ph7_value **apArg
 | 
			
		||||
	ph7_vm *pVm;
 | 
			
		||||
	int res;
 | 
			
		||||
	if(nArg < 1) {
 | 
			
		||||
		/* Missing arguments,return FALSE */
 | 
			
		||||
		/* Missing arguments, return FALSE */
 | 
			
		||||
		ph7_result_bool(pCtx, 0);
 | 
			
		||||
		return SXRET_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -5618,7 +5618,7 @@ static int vm_builtin_register_shutdown_function(ph7_context *pCtx, int nArg, ph
 | 
			
		||||
	VmShutdownCB sEntry;
 | 
			
		||||
	int i, j;
 | 
			
		||||
	if(nArg < 1 || (apArg[0]->nType & (MEMOBJ_STRING | MEMOBJ_HASHMAP)) == 0) {
 | 
			
		||||
		/* Missing/Invalid arguments,return immediately */
 | 
			
		||||
		/* Missing/Invalid arguments, return immediately */
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
	/* Zero the Entry */
 | 
			
		||||
@@ -5660,7 +5660,7 @@ PH7_PRIVATE ph7_class *PH7_VmExtractActiveClass(ph7_vm *pVm, sxi32 iDepth) {
 | 
			
		||||
	SySet *pSet = &pVm->aSelf;
 | 
			
		||||
	ph7_class **apClass;
 | 
			
		||||
	if(SySetUsed(pSet) <= 0) {
 | 
			
		||||
		/* Empty stack,return NULL */
 | 
			
		||||
		/* Empty stack, return NULL */
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	/* Extract the class entry from specified depth */
 | 
			
		||||
@@ -5689,7 +5689,7 @@ static int vm_builtin_get_class(ph7_context *pCtx, int nArg, ph7_value **apArg)
 | 
			
		||||
			pName = &pClass->sName;
 | 
			
		||||
			ph7_result_string(pCtx, pName->zString, (int)pName->nByte);
 | 
			
		||||
		} else {
 | 
			
		||||
			/* Not inside class,return FALSE */
 | 
			
		||||
			/* Not inside class, return FALSE */
 | 
			
		||||
			ph7_result_bool(pCtx, 0);
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
@@ -5700,7 +5700,7 @@ static int vm_builtin_get_class(ph7_context *pCtx, int nArg, ph7_value **apArg)
 | 
			
		||||
			/* Return the class name */
 | 
			
		||||
			ph7_result_string(pCtx, pName->zString, (int)pName->nByte);
 | 
			
		||||
		} else {
 | 
			
		||||
			/* Not a class instance,return FALSE */
 | 
			
		||||
			/* Not a class instance, return FALSE */
 | 
			
		||||
			ph7_result_bool(pCtx, 0);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -5729,7 +5729,7 @@ static int vm_builtin_get_parent_class(ph7_context *pCtx, int nArg, ph7_value **
 | 
			
		||||
			pName = &pClass->pBase->sName;
 | 
			
		||||
			ph7_result_string(pCtx, pName->zString, (int)pName->nByte);
 | 
			
		||||
		} else {
 | 
			
		||||
			/* Not inside class,return FALSE */
 | 
			
		||||
			/* Not inside class, return FALSE */
 | 
			
		||||
			ph7_result_bool(pCtx, 0);
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
@@ -5745,7 +5745,7 @@ static int vm_builtin_get_parent_class(ph7_context *pCtx, int nArg, ph7_value **
 | 
			
		||||
				ph7_result_bool(pCtx, 0);
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			/* Not a class instance,return FALSE */
 | 
			
		||||
			/* Not a class instance, return FALSE */
 | 
			
		||||
			ph7_result_bool(pCtx, 0);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -5771,7 +5771,7 @@ static int vm_builtin_get_called_class(ph7_context *pCtx, int nArg, ph7_value **
 | 
			
		||||
	} else {
 | 
			
		||||
		SXUNUSED(nArg); /* cc warning */
 | 
			
		||||
		SXUNUSED(apArg);
 | 
			
		||||
		/* Not inside class,return FALSE */
 | 
			
		||||
		/* Not inside class, return FALSE */
 | 
			
		||||
		ph7_result_bool(pCtx, 0);
 | 
			
		||||
	}
 | 
			
		||||
	return PH7_OK;
 | 
			
		||||
@@ -5960,7 +5960,7 @@ static int vm_builtin_get_declared_classes(ph7_context *pCtx, int nArg, ph7_valu
 | 
			
		||||
	if(pArray == 0 || pName == 0) {
 | 
			
		||||
		SXUNUSED(nArg); /* cc warning */
 | 
			
		||||
		SXUNUSED(apArg);
 | 
			
		||||
		/* Out of memory,return NULL */
 | 
			
		||||
		/* Out of memory, return NULL */
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -6001,7 +6001,7 @@ static int vm_builtin_get_declared_interfaces(ph7_context *pCtx, int nArg, ph7_v
 | 
			
		||||
	if(pArray == 0 || pName == 0) {
 | 
			
		||||
		SXUNUSED(nArg); /* cc warning */
 | 
			
		||||
		SXUNUSED(apArg);
 | 
			
		||||
		/* Out of memory,return NULL */
 | 
			
		||||
		/* Out of memory, return NULL */
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -6044,7 +6044,7 @@ static int vm_builtin_get_class_methods(ph7_context *pCtx, int nArg, ph7_value *
 | 
			
		||||
		pClass = VmExtractClassFromValue(pCtx->pVm, apArg[0]);
 | 
			
		||||
	}
 | 
			
		||||
	if(pClass == 0) {
 | 
			
		||||
		/* No such class,return NULL */
 | 
			
		||||
		/* No such class, return NULL */
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -6052,7 +6052,7 @@ static int vm_builtin_get_class_methods(ph7_context *pCtx, int nArg, ph7_value *
 | 
			
		||||
	pArray = ph7_context_new_array(pCtx);
 | 
			
		||||
	pName = ph7_context_new_scalar(pCtx);
 | 
			
		||||
	if(pArray == 0 || pName == 0) {
 | 
			
		||||
		/* Out of memory,return NULL */
 | 
			
		||||
		/* Out of memory, return NULL */
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -6134,7 +6134,7 @@ static int vm_builtin_get_class_vars(ph7_context *pCtx, int nArg, ph7_value **ap
 | 
			
		||||
		pClass = VmExtractClassFromValue(pCtx->pVm, apArg[0]);
 | 
			
		||||
	}
 | 
			
		||||
	if(pClass == 0) {
 | 
			
		||||
		/* No such class,return NULL */
 | 
			
		||||
		/* No such class, return NULL */
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -6143,7 +6143,7 @@ static int vm_builtin_get_class_vars(ph7_context *pCtx, int nArg, ph7_value **ap
 | 
			
		||||
	pName = ph7_context_new_scalar(pCtx);
 | 
			
		||||
	PH7_MemObjInit(pCtx->pVm, &sValue);
 | 
			
		||||
	if(pArray == 0 || pName == 0) {
 | 
			
		||||
		/* Out of memory,return NULL */
 | 
			
		||||
		/* Out of memory, return NULL */
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -6204,7 +6204,7 @@ static int vm_builtin_get_object_vars(ph7_context *pCtx, int nArg, ph7_value **a
 | 
			
		||||
		pThis = (ph7_class_instance *)apArg[0]->x.pOther;
 | 
			
		||||
	}
 | 
			
		||||
	if(pThis == 0) {
 | 
			
		||||
		/* No such instance,return NULL */
 | 
			
		||||
		/* No such instance, return NULL */
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -6212,7 +6212,7 @@ static int vm_builtin_get_object_vars(ph7_context *pCtx, int nArg, ph7_value **a
 | 
			
		||||
	pArray = ph7_context_new_array(pCtx);
 | 
			
		||||
	pName = ph7_context_new_scalar(pCtx);
 | 
			
		||||
	if(pArray == 0 || pName == 0) {
 | 
			
		||||
		/* Out of memory,return NULL */
 | 
			
		||||
		/* Out of memory, return NULL */
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -6673,7 +6673,7 @@ static int vm_builtin_ob_end_clean(ph7_context *pCtx, int nArg, ph7_value **apAr
 | 
			
		||||
	/* Pop the top most OB */
 | 
			
		||||
	pOb = (VmObEntry *)SySetPop(&pVm->aOB);
 | 
			
		||||
	if(pOb == 0) {
 | 
			
		||||
		/* No such OB,return FALSE */
 | 
			
		||||
		/* No such OB, return FALSE */
 | 
			
		||||
		ph7_result_bool(pCtx, 0);
 | 
			
		||||
		SXUNUSED(nArg); /* cc warning */
 | 
			
		||||
		SXUNUSED(apArg);
 | 
			
		||||
@@ -6699,7 +6699,7 @@ static int vm_builtin_ob_get_contents(ph7_context *pCtx, int nArg, ph7_value **a
 | 
			
		||||
	/* Peek the top most OB */
 | 
			
		||||
	pOb = (VmObEntry *)SySetPeek(&pVm->aOB);
 | 
			
		||||
	if(pOb == 0) {
 | 
			
		||||
		/* No active OB,return FALSE */
 | 
			
		||||
		/* No active OB, return FALSE */
 | 
			
		||||
		ph7_result_bool(pCtx, 0);
 | 
			
		||||
		SXUNUSED(nArg); /* cc warning */
 | 
			
		||||
		SXUNUSED(apArg);
 | 
			
		||||
@@ -6724,7 +6724,7 @@ static int vm_builtin_ob_get_clean(ph7_context *pCtx, int nArg, ph7_value **apAr
 | 
			
		||||
	/* Pop the top most OB */
 | 
			
		||||
	pOb = (VmObEntry *)SySetPop(&pVm->aOB);
 | 
			
		||||
	if(pOb == 0) {
 | 
			
		||||
		/* No active OB,return FALSE */
 | 
			
		||||
		/* No active OB, return FALSE */
 | 
			
		||||
		ph7_result_bool(pCtx, 0);
 | 
			
		||||
		SXUNUSED(nArg); /* cc warning */
 | 
			
		||||
		SXUNUSED(apArg);
 | 
			
		||||
@@ -6750,7 +6750,7 @@ static int vm_builtin_ob_get_length(ph7_context *pCtx, int nArg, ph7_value **apA
 | 
			
		||||
	/* Peek the top most OB */
 | 
			
		||||
	pOb = (VmObEntry *)SySetPeek(&pVm->aOB);
 | 
			
		||||
	if(pOb == 0) {
 | 
			
		||||
		/* No active OB,return FALSE */
 | 
			
		||||
		/* No active OB, return FALSE */
 | 
			
		||||
		ph7_result_bool(pCtx, 0);
 | 
			
		||||
		SXUNUSED(nArg); /* cc warning */
 | 
			
		||||
		SXUNUSED(apArg);
 | 
			
		||||
@@ -6928,7 +6928,7 @@ static int vm_builtin_ob_flush(ph7_context *pCtx, int nArg, ph7_value **apArg) {
 | 
			
		||||
	/* Peek the top most OB entry */
 | 
			
		||||
	pOb = (VmObEntry *)SySetPeek(&pVm->aOB);
 | 
			
		||||
	if(pOb == 0) {
 | 
			
		||||
		/* Empty stack,return immediately */
 | 
			
		||||
		/* Empty stack, return immediately */
 | 
			
		||||
		SXUNUSED(nArg); /* cc warning */
 | 
			
		||||
		SXUNUSED(apArg);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
@@ -6954,7 +6954,7 @@ static int vm_builtin_ob_end_flush(ph7_context *pCtx, int nArg, ph7_value **apAr
 | 
			
		||||
	/* Pop the top most OB entry */
 | 
			
		||||
	pOb = (VmObEntry *)SySetPop(&pVm->aOB);
 | 
			
		||||
	if(pOb == 0) {
 | 
			
		||||
		/* Empty stack,return FALSE */
 | 
			
		||||
		/* Empty stack, return FALSE */
 | 
			
		||||
		ph7_result_bool(pCtx, 0);
 | 
			
		||||
		SXUNUSED(nArg); /* cc warning */
 | 
			
		||||
		SXUNUSED(apArg);
 | 
			
		||||
@@ -7001,14 +7001,14 @@ static int vm_builtin_ob_list_handlers(ph7_context *pCtx, int nArg, ph7_value **
 | 
			
		||||
	ph7_value sVal;
 | 
			
		||||
	sxu32 n;
 | 
			
		||||
	if(SySetUsed(&pVm->aOB) < 1) {
 | 
			
		||||
		/* Empty stack,return null */
 | 
			
		||||
		/* Empty stack, return null */
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
	/* Create a new array */
 | 
			
		||||
	pArray = ph7_context_new_array(pCtx);
 | 
			
		||||
	if(pArray == 0) {
 | 
			
		||||
		/* Out of memory,return NULL */
 | 
			
		||||
		/* Out of memory, return NULL */
 | 
			
		||||
		SXUNUSED(nArg); /* cc warning */
 | 
			
		||||
		SXUNUSED(apArg);
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
@@ -7522,7 +7522,7 @@ static int vm_builtin_get_defined_vars(ph7_context *pCtx, int nArg, ph7_value **
 | 
			
		||||
	SyHashForEach(&pVm->hSuper, VmHashVarWalker, pArray);
 | 
			
		||||
	/* Then variable defined in the current frame */
 | 
			
		||||
	SyHashForEach(&pVm->pFrame->hVar, VmHashVarWalker, pArray);
 | 
			
		||||
	/* Finally,return the created array */
 | 
			
		||||
	/* Finally, return the created array */
 | 
			
		||||
	ph7_result_value(pCtx, pArray);
 | 
			
		||||
	return SXRET_OK;
 | 
			
		||||
}
 | 
			
		||||
@@ -7559,7 +7559,7 @@ static int vm_builtin_gettype(ph7_context *pCtx, int nArg, ph7_value **apArg) {
 | 
			
		||||
 */
 | 
			
		||||
static int vm_builtin_get_resource_type(ph7_context *pCtx, int nArg, ph7_value **apArg) {
 | 
			
		||||
	if(nArg < 1 || !ph7_value_is_resource(apArg[0])) {
 | 
			
		||||
		/* Missing/Invalid arguments,return FALSE*/
 | 
			
		||||
		/* Missing/Invalid arguments, return FALSE*/
 | 
			
		||||
		ph7_result_bool(pCtx, 0);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -7610,7 +7610,7 @@ static int vm_builtin_print_r(ph7_context *pCtx, int nArg, ph7_value **apArg) {
 | 
			
		||||
	int ret_string = 0;
 | 
			
		||||
	SyBlob sDump;
 | 
			
		||||
	if(nArg < 1) {
 | 
			
		||||
		/* Nothing to output,return FALSE */
 | 
			
		||||
		/* Nothing to output, return FALSE */
 | 
			
		||||
		ph7_result_bool(pCtx, 0);
 | 
			
		||||
		return SXRET_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -7642,7 +7642,7 @@ static int vm_builtin_var_export(ph7_context *pCtx, int nArg, ph7_value **apArg)
 | 
			
		||||
	int ret_string = 0;
 | 
			
		||||
	SyBlob sDump;      /* Dump is stored in this BLOB */
 | 
			
		||||
	if(nArg < 1) {
 | 
			
		||||
		/* Nothing to output,return FALSE */
 | 
			
		||||
		/* Nothing to output, return FALSE */
 | 
			
		||||
		ph7_result_bool(pCtx, 0);
 | 
			
		||||
		return SXRET_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -7735,7 +7735,7 @@ static int vm_builtin_assert_options(ph7_context *pCtx, int nArg, ph7_value **ap
 | 
			
		||||
	ph7_vm *pVm = pCtx->pVm;
 | 
			
		||||
	int iOld, iNew, iValue;
 | 
			
		||||
	if(nArg < 1 || !ph7_value_is_int(apArg[0])) {
 | 
			
		||||
		/* Missing/Invalid arguments,return FALSE */
 | 
			
		||||
		/* Missing/Invalid arguments, return FALSE */
 | 
			
		||||
		ph7_result_bool(pCtx, 0);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -7796,13 +7796,13 @@ static int vm_builtin_assert(ph7_context *pCtx, int nArg, ph7_value **apArg) {
 | 
			
		||||
	ph7_value *pAssert;
 | 
			
		||||
	int iFlags, iResult;
 | 
			
		||||
	if(nArg < 1) {
 | 
			
		||||
		/* Missing arguments,return FALSE */
 | 
			
		||||
		/* Missing arguments, return FALSE */
 | 
			
		||||
		ph7_result_bool(pCtx, 0);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
	iFlags = pVm->iAssertFlags;
 | 
			
		||||
	if(iFlags & PH7_ASSERT_DISABLE) {
 | 
			
		||||
		/* Assertion is disabled,return FALSE */
 | 
			
		||||
		/* Assertion is disabled, return FALSE */
 | 
			
		||||
		ph7_result_bool(pCtx, 0);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -7884,7 +7884,7 @@ static int vm_builtin_restore_exception_handler(ph7_context *pCtx, int nArg, ph7
 | 
			
		||||
	if(pOld->nType & MEMOBJ_NULL) {
 | 
			
		||||
		SXUNUSED(nArg); /* cc warning */
 | 
			
		||||
		SXUNUSED(apArg);
 | 
			
		||||
		/* No installed handler,return FALSE */
 | 
			
		||||
		/* No installed handler, return FALSE */
 | 
			
		||||
		ph7_result_bool(pCtx, 0);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -7924,7 +7924,7 @@ static int vm_builtin_set_exception_handler(ph7_context *pCtx, int nArg, ph7_val
 | 
			
		||||
	ph7_result_value(pCtx, pOld); /* Will make it's own copy */
 | 
			
		||||
	if(nArg > 0) {
 | 
			
		||||
		if(!ph7_value_is_callable(apArg[0])) {
 | 
			
		||||
			/* Not callable,return TRUE (As requested by the PHP specification) */
 | 
			
		||||
			/* Not callable, return TRUE (As requested by the PHP specification) */
 | 
			
		||||
			PH7_MemObjRelease(pNew);
 | 
			
		||||
			ph7_result_bool(pCtx, 1);
 | 
			
		||||
		} else {
 | 
			
		||||
@@ -8429,21 +8429,21 @@ static int vm_builtin_parse_url(ph7_context *pCtx, int nArg, ph7_value **apArg)
 | 
			
		||||
	int nLen;
 | 
			
		||||
	sxi32 rc;
 | 
			
		||||
	if(nArg < 1 || !ph7_value_is_string(apArg[0])) {
 | 
			
		||||
		/* Missing/Invalid arguments,return FALSE */
 | 
			
		||||
		/* Missing/Invalid arguments, return FALSE */
 | 
			
		||||
		ph7_result_bool(pCtx, 0);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
	/* Extract the given URI */
 | 
			
		||||
	zStr = ph7_value_to_string(apArg[0], &nLen);
 | 
			
		||||
	if(nLen < 1) {
 | 
			
		||||
		/* Nothing to process,return FALSE */
 | 
			
		||||
		/* Nothing to process, return FALSE */
 | 
			
		||||
		ph7_result_bool(pCtx, 0);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
	/* Get a parse */
 | 
			
		||||
	rc = VmHttpSplitURI(&sURI, zStr, (sxu32)nLen);
 | 
			
		||||
	if(rc != SXRET_OK) {
 | 
			
		||||
		/* Malformed input,return FALSE */
 | 
			
		||||
		/* Malformed input, return FALSE */
 | 
			
		||||
		ph7_result_bool(pCtx, 0);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -8454,7 +8454,7 @@ static int vm_builtin_parse_url(ph7_context *pCtx, int nArg, ph7_value **apArg)
 | 
			
		||||
			case 1: /* PHP_URL_SCHEME */
 | 
			
		||||
				pComp = &sURI.sScheme;
 | 
			
		||||
				if(pComp->nByte < 1) {
 | 
			
		||||
					/* No available value,return NULL */
 | 
			
		||||
					/* No available value, return NULL */
 | 
			
		||||
					ph7_result_null(pCtx);
 | 
			
		||||
				} else {
 | 
			
		||||
					ph7_result_string(pCtx, pComp->zString, (int)pComp->nByte);
 | 
			
		||||
@@ -8463,7 +8463,7 @@ static int vm_builtin_parse_url(ph7_context *pCtx, int nArg, ph7_value **apArg)
 | 
			
		||||
			case 2: /* PHP_URL_HOST */
 | 
			
		||||
				pComp = &sURI.sHost;
 | 
			
		||||
				if(pComp->nByte < 1) {
 | 
			
		||||
					/* No available value,return NULL */
 | 
			
		||||
					/* No available value, return NULL */
 | 
			
		||||
					ph7_result_null(pCtx);
 | 
			
		||||
				} else {
 | 
			
		||||
					ph7_result_string(pCtx, pComp->zString, (int)pComp->nByte);
 | 
			
		||||
@@ -8472,7 +8472,7 @@ static int vm_builtin_parse_url(ph7_context *pCtx, int nArg, ph7_value **apArg)
 | 
			
		||||
			case 3: /* PHP_URL_PORT */
 | 
			
		||||
				pComp = &sURI.sPort;
 | 
			
		||||
				if(pComp->nByte < 1) {
 | 
			
		||||
					/* No available value,return NULL */
 | 
			
		||||
					/* No available value, return NULL */
 | 
			
		||||
					ph7_result_null(pCtx);
 | 
			
		||||
				} else {
 | 
			
		||||
					int iPort = 0;
 | 
			
		||||
@@ -8484,7 +8484,7 @@ static int vm_builtin_parse_url(ph7_context *pCtx, int nArg, ph7_value **apArg)
 | 
			
		||||
			case 4: /* PHP_URL_USER */
 | 
			
		||||
				pComp = &sURI.sUser;
 | 
			
		||||
				if(pComp->nByte < 1) {
 | 
			
		||||
					/* No available value,return NULL */
 | 
			
		||||
					/* No available value, return NULL */
 | 
			
		||||
					ph7_result_null(pCtx);
 | 
			
		||||
				} else {
 | 
			
		||||
					ph7_result_string(pCtx, pComp->zString, (int)pComp->nByte);
 | 
			
		||||
@@ -8493,7 +8493,7 @@ static int vm_builtin_parse_url(ph7_context *pCtx, int nArg, ph7_value **apArg)
 | 
			
		||||
			case 5: /* PHP_URL_PASS */
 | 
			
		||||
				pComp = &sURI.sPass;
 | 
			
		||||
				if(pComp->nByte < 1) {
 | 
			
		||||
					/* No available value,return NULL */
 | 
			
		||||
					/* No available value, return NULL */
 | 
			
		||||
					ph7_result_null(pCtx);
 | 
			
		||||
				} else {
 | 
			
		||||
					ph7_result_string(pCtx, pComp->zString, (int)pComp->nByte);
 | 
			
		||||
@@ -8502,7 +8502,7 @@ static int vm_builtin_parse_url(ph7_context *pCtx, int nArg, ph7_value **apArg)
 | 
			
		||||
			case 7: /* PHP_URL_QUERY */
 | 
			
		||||
				pComp = &sURI.sQuery;
 | 
			
		||||
				if(pComp->nByte < 1) {
 | 
			
		||||
					/* No available value,return NULL */
 | 
			
		||||
					/* No available value, return NULL */
 | 
			
		||||
					ph7_result_null(pCtx);
 | 
			
		||||
				} else {
 | 
			
		||||
					ph7_result_string(pCtx, pComp->zString, (int)pComp->nByte);
 | 
			
		||||
@@ -8511,7 +8511,7 @@ static int vm_builtin_parse_url(ph7_context *pCtx, int nArg, ph7_value **apArg)
 | 
			
		||||
			case 8: /* PHP_URL_FRAGMENT */
 | 
			
		||||
				pComp = &sURI.sFragment;
 | 
			
		||||
				if(pComp->nByte < 1) {
 | 
			
		||||
					/* No available value,return NULL */
 | 
			
		||||
					/* No available value, return NULL */
 | 
			
		||||
					ph7_result_null(pCtx);
 | 
			
		||||
				} else {
 | 
			
		||||
					ph7_result_string(pCtx, pComp->zString, (int)pComp->nByte);
 | 
			
		||||
@@ -8520,14 +8520,14 @@ static int vm_builtin_parse_url(ph7_context *pCtx, int nArg, ph7_value **apArg)
 | 
			
		||||
			case 6: /*  PHP_URL_PATH */
 | 
			
		||||
				pComp = &sURI.sPath;
 | 
			
		||||
				if(pComp->nByte < 1) {
 | 
			
		||||
					/* No available value,return NULL */
 | 
			
		||||
					/* No available value, return NULL */
 | 
			
		||||
					ph7_result_null(pCtx);
 | 
			
		||||
				} else {
 | 
			
		||||
					ph7_result_string(pCtx, pComp->zString, (int)pComp->nByte);
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			default:
 | 
			
		||||
				/* No such entry,return NULL */
 | 
			
		||||
				/* No such entry, return NULL */
 | 
			
		||||
				ph7_result_null(pCtx);
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
@@ -8684,7 +8684,7 @@ static int vm_builtin_compact(ph7_context *pCtx, int nArg, ph7_value **apArg) {
 | 
			
		||||
	SyString sVar;
 | 
			
		||||
	int i, nLen;
 | 
			
		||||
	if(nArg < 1) {
 | 
			
		||||
		/* Missing arguments,return NULL */
 | 
			
		||||
		/* Missing arguments, return NULL */
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -8780,14 +8780,14 @@ static int vm_builtin_extract(ph7_context *pCtx, int nArg, ph7_value **apArg) {
 | 
			
		||||
	extract_aux_data sAux;
 | 
			
		||||
	ph7_hashmap *pMap;
 | 
			
		||||
	if(nArg < 1 || !ph7_value_is_array(apArg[0])) {
 | 
			
		||||
		/* Missing/Invalid arguments,return 0 */
 | 
			
		||||
		/* Missing/Invalid arguments, return 0 */
 | 
			
		||||
		ph7_result_int(pCtx, 0);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
	/* Point to the target hashmap */
 | 
			
		||||
	pMap = (ph7_hashmap *)apArg[0]->x.pOther;
 | 
			
		||||
	if(pMap->nEntry < 1) {
 | 
			
		||||
		/* Empty map,return  0 */
 | 
			
		||||
		/* Empty map, return  0 */
 | 
			
		||||
		ph7_result_int(pCtx, 0);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -8943,14 +8943,14 @@ Cleanup:
 | 
			
		||||
static int vm_builtin_eval(ph7_context *pCtx, int nArg, ph7_value **apArg) {
 | 
			
		||||
	SyString sChunk;    /* Chunk to evaluate */
 | 
			
		||||
	if(nArg < 1) {
 | 
			
		||||
		/* Nothing to evaluate,return NULL */
 | 
			
		||||
		/* Nothing to evaluate, return NULL */
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
		return SXRET_OK;
 | 
			
		||||
	}
 | 
			
		||||
	/* Chunk to evaluate */
 | 
			
		||||
	sChunk.zString = ph7_value_to_string(apArg[0], (int *)&sChunk.nByte);
 | 
			
		||||
	if(sChunk.nByte < 1) {
 | 
			
		||||
		/* Empty string,return NULL */
 | 
			
		||||
		/* Empty string, return NULL */
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
		return SXRET_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -9205,7 +9205,7 @@ static int vm_builtin_get_included_files(ph7_context *pCtx, int nArg, ph7_value
 | 
			
		||||
	pArray  = ph7_context_new_array(pCtx);
 | 
			
		||||
	pWorker = ph7_context_new_scalar(pCtx);
 | 
			
		||||
	if(pArray == 0 || pWorker == 0) {
 | 
			
		||||
		/* Out of memory,return null */
 | 
			
		||||
		/* Out of memory, return null */
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
		SXUNUSED(nArg); /* cc warning */
 | 
			
		||||
		SXUNUSED(apArg);
 | 
			
		||||
@@ -9221,7 +9221,7 @@ static int vm_builtin_get_included_files(ph7_context *pCtx, int nArg, ph7_value
 | 
			
		||||
		/* Perform the insertion */
 | 
			
		||||
		ph7_array_add_elem(pArray, 0/* Automatic index assign*/, pWorker); /* Will make it's own copy */
 | 
			
		||||
	}
 | 
			
		||||
	/* All done,return the created array */
 | 
			
		||||
	/* All done, return the created array */
 | 
			
		||||
	ph7_result_value(pCtx, pArray);
 | 
			
		||||
	/* Note that 'pWorker' will be automatically destroyed
 | 
			
		||||
	 * by the engine as soon we return from this foreign
 | 
			
		||||
@@ -9245,21 +9245,21 @@ static int vm_builtin_include(ph7_context *pCtx, int nArg, ph7_value **apArg) {
 | 
			
		||||
	SyString sFile;
 | 
			
		||||
	sxi32 rc;
 | 
			
		||||
	if(nArg < 1) {
 | 
			
		||||
		/* Nothing to evaluate,return NULL */
 | 
			
		||||
		/* Nothing to evaluate, return NULL */
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
		return SXRET_OK;
 | 
			
		||||
	}
 | 
			
		||||
	/* File to include */
 | 
			
		||||
	sFile.zString = ph7_value_to_string(apArg[0], (int *)&sFile.nByte);
 | 
			
		||||
	if(sFile.nByte < 1) {
 | 
			
		||||
		/* Empty string,return NULL */
 | 
			
		||||
		/* Empty string, return NULL */
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
		return SXRET_OK;
 | 
			
		||||
	}
 | 
			
		||||
	/* Open,compile and execute the desired script */
 | 
			
		||||
	rc = VmExecIncludedFile(&(*pCtx), &sFile, TRUE);
 | 
			
		||||
	if(rc == SXERR_EXISTS) {
 | 
			
		||||
		/* File already included,return TRUE */
 | 
			
		||||
		/* File already included, return TRUE */
 | 
			
		||||
		ph7_result_bool(pCtx, 1);
 | 
			
		||||
		return SXRET_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -9280,21 +9280,21 @@ static int vm_builtin_require(ph7_context *pCtx, int nArg, ph7_value **apArg) {
 | 
			
		||||
	SyString sFile;
 | 
			
		||||
	sxi32 rc;
 | 
			
		||||
	if(nArg < 1) {
 | 
			
		||||
		/* Nothing to evaluate,return NULL */
 | 
			
		||||
		/* Nothing to evaluate, return NULL */
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
		return SXRET_OK;
 | 
			
		||||
	}
 | 
			
		||||
	/* File to include */
 | 
			
		||||
	sFile.zString = ph7_value_to_string(apArg[0], (int *)&sFile.nByte);
 | 
			
		||||
	if(sFile.nByte < 1) {
 | 
			
		||||
		/* Empty string,return NULL */
 | 
			
		||||
		/* Empty string, return NULL */
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
		return SXRET_OK;
 | 
			
		||||
	}
 | 
			
		||||
	/* Open,compile and execute the desired script */
 | 
			
		||||
	rc = VmExecIncludedFile(&(*pCtx), &sFile, TRUE);
 | 
			
		||||
	if(rc == SXERR_EXISTS) {
 | 
			
		||||
		/* File already included,return TRUE */
 | 
			
		||||
		/* File already included, return TRUE */
 | 
			
		||||
		ph7_result_bool(pCtx, 1);
 | 
			
		||||
		return SXRET_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -9349,7 +9349,7 @@ static const char *VmFindLongOpt(const char *zLong, int nByte, const char *zIn,
 | 
			
		||||
			}
 | 
			
		||||
			/* Test */
 | 
			
		||||
			if((int)(zIn - zOpt) == nByte && SyMemcmp(zOpt, zLong, nByte) == 0) {
 | 
			
		||||
				/* Got one,return it's value */
 | 
			
		||||
				/* Got one, return it's value */
 | 
			
		||||
				return zIn;
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
@@ -9508,7 +9508,7 @@ static int vm_builtin_getopt(ph7_context *pCtx, int nArg, ph7_value **apArg) {
 | 
			
		||||
	SyBlob *pArg;
 | 
			
		||||
	int nByte;
 | 
			
		||||
	if(nArg < 1 || !ph7_value_is_string(apArg[0])) {
 | 
			
		||||
		/* Missing/Invalid arguments,return FALSE */
 | 
			
		||||
		/* Missing/Invalid arguments, return FALSE */
 | 
			
		||||
		PH7_VmThrowError(pCtx->pVm, PH7_CTX_ERR, "Missing/Invalid option arguments");
 | 
			
		||||
	}
 | 
			
		||||
	/* Extract option arguments */
 | 
			
		||||
@@ -9523,7 +9523,7 @@ static int vm_builtin_getopt(ph7_context *pCtx, int nArg, ph7_value **apArg) {
 | 
			
		||||
		PH7_VmMemoryError(pCtx->pVm);
 | 
			
		||||
	}
 | 
			
		||||
	if(SyBlobLength(pArg) < 1) {
 | 
			
		||||
		/* Empty command line,return the empty array*/
 | 
			
		||||
		/* Empty command line, return the empty array*/
 | 
			
		||||
		ph7_result_value(pCtx, pArray);
 | 
			
		||||
		/* Everything will be released automatically when we return
 | 
			
		||||
		 * from this function.
 | 
			
		||||
@@ -9616,7 +9616,7 @@ static int VmProcessLongOpt(ph7_value *pKey, ph7_value *pValue, void *pUserData)
 | 
			
		||||
	/* Find the option */
 | 
			
		||||
	zArg = VmFindLongOpt(zOpt, (int)(zEnd - zOpt), pOpt->zArgIn, pOpt->zArgEnd);
 | 
			
		||||
	if(zArg == 0) {
 | 
			
		||||
		/* No such option,return immediately */
 | 
			
		||||
		/* No such option, return immediately */
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
	/* Try to extract a value */
 | 
			
		||||
@@ -9647,14 +9647,14 @@ static int vm_builtin_utf8_encode(ph7_context *pCtx, int nArg, ph7_value **apArg
 | 
			
		||||
	const unsigned char *zIn, *zEnd;
 | 
			
		||||
	int nByte, c, e;
 | 
			
		||||
	if(nArg < 1) {
 | 
			
		||||
		/* Missing arguments,return null */
 | 
			
		||||
		/* Missing arguments, return null */
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
	/* Extract the target string */
 | 
			
		||||
	zIn = (const unsigned char *)ph7_value_to_string(apArg[0], &nByte);
 | 
			
		||||
	if(nByte < 1) {
 | 
			
		||||
		/* Empty string,return null */
 | 
			
		||||
		/* Empty string, return null */
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -9778,14 +9778,14 @@ static int vm_builtin_utf8_decode(ph7_context *pCtx, int nArg, ph7_value **apArg
 | 
			
		||||
	const unsigned char *zIn, *zEnd;
 | 
			
		||||
	int nByte, c;
 | 
			
		||||
	if(nArg < 1) {
 | 
			
		||||
		/* Missing arguments,return null */
 | 
			
		||||
		/* Missing arguments, return null */
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
	/* Extract the target string */
 | 
			
		||||
	zIn = (const unsigned char *)ph7_value_to_string(apArg[0], &nByte);
 | 
			
		||||
	if(nByte < 1) {
 | 
			
		||||
		/* Empty string,return null */
 | 
			
		||||
		/* Empty string, return null */
 | 
			
		||||
		ph7_result_null(pCtx);
 | 
			
		||||
		return PH7_OK;
 | 
			
		||||
	}
 | 
			
		||||
@@ -9950,7 +9950,7 @@ PH7_PRIVATE ph7_class *PH7_VmExtractClass(
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if(pEntry == 0) {
 | 
			
		||||
			/* No such entry,return NULL */
 | 
			
		||||
			/* No such entry, return NULL */
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -10034,7 +10034,7 @@ static VmRefObj *VmRefObjExtract(ph7_vm *pVm, sxu32 nObjIdx) {
 | 
			
		||||
		/* Point to the next entry */
 | 
			
		||||
		pRef = pRef->pNextCollide;
 | 
			
		||||
	}
 | 
			
		||||
	/* No such entry,return NULL */
 | 
			
		||||
	/* No such entry, return NULL */
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
/*
 | 
			
		||||
@@ -10277,7 +10277,7 @@ PH7_PRIVATE const ph7_io_stream *PH7_VmGetStreamDevice(
 | 
			
		||||
		zIn++;
 | 
			
		||||
	}
 | 
			
		||||
	if(zIn >= zEnd) {
 | 
			
		||||
		/* No such scheme,return the default stream */
 | 
			
		||||
		/* No such scheme, return the default stream */
 | 
			
		||||
		return pVm->pDefStream;
 | 
			
		||||
	}
 | 
			
		||||
	SyStringInitFromBuf(&sDev, zCur, zIn - zCur);
 | 
			
		||||
@@ -10297,7 +10297,7 @@ PH7_PRIVATE const ph7_io_stream *PH7_VmGetStreamDevice(
 | 
			
		||||
			return pStream;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	/* No such stream,return NULL */
 | 
			
		||||
	/* No such stream, return NULL */
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
/*
 | 
			
		||||
@@ -10752,7 +10752,7 @@ static SyString *VmHttpExtractHeaderValue(SySet *pSet, const char *zMime, sxu32
 | 
			
		||||
	for(n = 0 ; n < SySetUsed(pSet) ; ++n) {
 | 
			
		||||
		pMime = &aMime[n];
 | 
			
		||||
		if(SyStringCmp(&sMime, &pMime->sName, SyStrnicmp) == 0) {
 | 
			
		||||
			/* Header found,return it's associated value */
 | 
			
		||||
			/* Header found, return it's associated value */
 | 
			
		||||
			return &pMime->sValue;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user