Merge for v0.1.1 #57
							
								
								
									
										20
									
								
								engine/vm.c
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								engine/vm.c
									
									
									
									
									
								
							@@ -2852,17 +2852,14 @@ static sxi32 VmByteCodeExec(
 | 
				
			|||||||
				if(pTos < pStack) {
 | 
									if(pTos < pStack) {
 | 
				
			||||||
					goto Abort;
 | 
										goto Abort;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				if((pTos->nType & (MEMOBJ_HASHMAP | MEMOBJ_OBJ | MEMOBJ_RES)) == 0) {
 | 
									if(pTos->nType & (MEMOBJ_INT | MEMOBJ_REAL) && (pTos->nType & MEMOBJ_HASHMAP) == 0) {
 | 
				
			||||||
					if(pTos->nIdx != SXU32_HIGH) {
 | 
										if(pTos->nIdx != SXU32_HIGH) {
 | 
				
			||||||
						ph7_value *pObj;
 | 
											ph7_value *pObj;
 | 
				
			||||||
						if((pObj = (ph7_value *)SySetAt(&pVm->aMemObj, pTos->nIdx)) != 0) {
 | 
											if((pObj = (ph7_value *)SySetAt(&pVm->aMemObj, pTos->nIdx)) != 0) {
 | 
				
			||||||
							/* Force a numeric cast */
 | 
					 | 
				
			||||||
							PH7_MemObjToNumeric(pObj);
 | 
					 | 
				
			||||||
							if(pObj->nType & MEMOBJ_REAL) {
 | 
												if(pObj->nType & MEMOBJ_REAL) {
 | 
				
			||||||
								pObj->x.rVal++;
 | 
													pObj->x.rVal++;
 | 
				
			||||||
							} else {
 | 
												} else {
 | 
				
			||||||
								pObj->x.iVal++;
 | 
													pObj->x.iVal++;
 | 
				
			||||||
								MemObjSetType(pTos, MEMOBJ_INT);
 | 
					 | 
				
			||||||
							}
 | 
												}
 | 
				
			||||||
							if(pInstr->iP1) {
 | 
												if(pInstr->iP1) {
 | 
				
			||||||
								/* Pre-increment */
 | 
													/* Pre-increment */
 | 
				
			||||||
@@ -2871,8 +2868,6 @@ static sxi32 VmByteCodeExec(
 | 
				
			|||||||
						}
 | 
											}
 | 
				
			||||||
					} else {
 | 
										} else {
 | 
				
			||||||
						if(pInstr->iP1) {
 | 
											if(pInstr->iP1) {
 | 
				
			||||||
							/* Force a numeric cast */
 | 
					 | 
				
			||||||
							PH7_MemObjToNumeric(pTos);
 | 
					 | 
				
			||||||
							/* Pre-increment */
 | 
												/* Pre-increment */
 | 
				
			||||||
							if(pTos->nType & MEMOBJ_REAL) {
 | 
												if(pTos->nType & MEMOBJ_REAL) {
 | 
				
			||||||
								pTos->x.rVal++;
 | 
													pTos->x.rVal++;
 | 
				
			||||||
@@ -2882,6 +2877,9 @@ static sxi32 VmByteCodeExec(
 | 
				
			|||||||
							}
 | 
												}
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										PH7_VmThrowError(&(*pVm), PH7_CTX_ERR,
 | 
				
			||||||
 | 
														"Increment operator cannot be applied to a non-numeric operand");
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			/*
 | 
								/*
 | 
				
			||||||
@@ -2895,19 +2893,14 @@ static sxi32 VmByteCodeExec(
 | 
				
			|||||||
				if(pTos < pStack) {
 | 
									if(pTos < pStack) {
 | 
				
			||||||
					goto Abort;
 | 
										goto Abort;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				if((pTos->nType & (MEMOBJ_HASHMAP | MEMOBJ_OBJ | MEMOBJ_RES | MEMOBJ_NULL)) == 0) {
 | 
									if(pTos->nType & (MEMOBJ_INT | MEMOBJ_REAL) && (pTos->nType & MEMOBJ_HASHMAP) == 0) {
 | 
				
			||||||
					/* Force a numeric cast */
 | 
					 | 
				
			||||||
					PH7_MemObjToNumeric(pTos);
 | 
					 | 
				
			||||||
					if(pTos->nIdx != SXU32_HIGH) {
 | 
										if(pTos->nIdx != SXU32_HIGH) {
 | 
				
			||||||
						ph7_value *pObj;
 | 
											ph7_value *pObj;
 | 
				
			||||||
						if((pObj = (ph7_value *)SySetAt(&pVm->aMemObj, pTos->nIdx)) != 0) {
 | 
											if((pObj = (ph7_value *)SySetAt(&pVm->aMemObj, pTos->nIdx)) != 0) {
 | 
				
			||||||
							/* Force a numeric cast */
 | 
					 | 
				
			||||||
							PH7_MemObjToNumeric(pObj);
 | 
					 | 
				
			||||||
							if(pObj->nType & MEMOBJ_REAL) {
 | 
												if(pObj->nType & MEMOBJ_REAL) {
 | 
				
			||||||
								pObj->x.rVal--;
 | 
													pObj->x.rVal--;
 | 
				
			||||||
							} else {
 | 
												} else {
 | 
				
			||||||
								pObj->x.iVal--;
 | 
													pObj->x.iVal--;
 | 
				
			||||||
								MemObjSetType(pTos, MEMOBJ_INT);
 | 
					 | 
				
			||||||
							}
 | 
												}
 | 
				
			||||||
							if(pInstr->iP1) {
 | 
												if(pInstr->iP1) {
 | 
				
			||||||
								/* Pre-decrement */
 | 
													/* Pre-decrement */
 | 
				
			||||||
@@ -2925,6 +2918,9 @@ static sxi32 VmByteCodeExec(
 | 
				
			|||||||
							}
 | 
												}
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										PH7_VmThrowError(&(*pVm), PH7_CTX_ERR,
 | 
				
			||||||
 | 
														"Decrement operator cannot be applied to a non-numeric operand");
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			/*
 | 
								/*
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user