Пример #1
0
 void select(NoImm)
 {
     if(controlStack.back().isReachable)
     {
         validateStackAccess(3);
         ValueType operandType = stack[stack.size() - 3];
         popAndValidateOperands(operandType,ValueType::i32);
     }
 }
Пример #2
0
 void call_indirect(CallIndirectImm imm)
 {
     VALIDATE_INDEX(imm.typeIndex,module.types.size());
     VALIDATE_UNLESS("call_indirect in module without default function table: ",moduleContext.numTables==0);
     const FunctionType* calleeType = module.types[imm.typeIndex];
     popAndValidateOperand(ValueType::i32);
     popAndValidateOperands(calleeType->parameters.data(),calleeType->parameters.size());
     push(calleeType->ret);
 }
Пример #3
0
		void call_indirect(CallIndirectImm imm)
		{
			VALIDATE_INDEX(imm.type.index,module.types.size());
			VALIDATE_UNLESS("call_indirect is only valid if there is a default function table: ",module.tables.size()==0);
			const FunctionType* calleeType = module.types[imm.type.index];
			popAndValidateOperand("call_indirect function index",ValueType::i32);
			popAndValidateOperands("call_indirect arguments",calleeType->parameters.data(),(Uptr)calleeType->parameters.size());
			pushOperand(calleeType->ret);
		}
Пример #4
0
 void popAndValidateResultType(ResultType expectedType)
 {
     if(expectedType != ResultType::none) {
         popAndValidateOperands(asValueType(expectedType));
     }
 }
Пример #5
0
 void popAndValidateOperands(OperandTypes... operands)
 {
     ValueType operandTypes[] = {operands...};
     popAndValidateOperands(operandTypes);
 }
Пример #6
0
 void popAndValidateOperands(const ValueType (&expectedTypes)[num]) {
     popAndValidateOperands(expectedTypes,num);
 }
Пример #7
0
 void call(CallImm imm)
 {
     const FunctionType* calleeType = moduleContext.validateFunctionIndex(imm.functionIndex);
     popAndValidateOperands(calleeType->parameters.data(),calleeType->parameters.size());
     push(calleeType->ret);
 }
Пример #8
0
		void popAndValidateOperands(const char* context,OperandTypes... operands)
		{
			ValueType operandTypes[] = {operands...};
			popAndValidateOperands(context,operandTypes);
		}
Пример #9
0
		void popAndValidateOperands(const char* context,const ValueType (&expectedTypes)[num]) { popAndValidateOperands(context,expectedTypes,num); }
Пример #10
0
		void call(CallImm imm)
		{
			const FunctionType* calleeType = validateFunctionIndex(module,imm.functionIndex);
			popAndValidateOperands("call arguments",calleeType->parameters.data(),(Uptr)calleeType->parameters.size());
			pushOperand(calleeType->ret);
		}