MCPcopy Create free account
hub / github.com/ZDoom/Raze / EmitCompare

Method EmitCompare

source/common/scripting/backend/codegen.cpp:382–417  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

380//==========================================================================
381
382void FxExpression::EmitCompare(VMFunctionBuilder *build, bool invert, TArray<size_t> &patchspots_yes, TArray<size_t> &patchspots_no)
383{
384 ExpEmit op = Emit(build);
385 ExpEmit i;
386 assert(op.RegType != REGT_NIL && op.RegCount == 1);
387 if (op.Konst)
388 {
389 ScriptPosition.Message(MSG_WARNING, "Conditional expression is constant");
390 }
391 switch (op.RegType)
392 {
393 case REGT_INT:
394 build->Emit(OP_EQ_K, !invert, op.RegNum, build->GetConstantInt(0));
395 break;
396
397 case REGT_FLOAT:
398 build->Emit(OP_EQF_K, !invert, op.RegNum, build->GetConstantFloat(0));
399 break;
400
401 case REGT_POINTER:
402 build->Emit(OP_EQA_K, !invert, op.RegNum, build->GetConstantAddress(0));
403 break;
404
405 case REGT_STRING:
406 i = ExpEmit(build, REGT_INT);
407 build->Emit(OP_LENS, i.RegNum, op.RegNum);
408 build->Emit(OP_EQ_K, !invert, i.RegNum, build->GetConstantInt(0));
409 i.Free(build);
410 break;
411
412 default:
413 break;
414 }
415 patchspots_no.Push(build->Emit(OP_JMP, 0));
416 op.Free(build);
417}
418
419//==========================================================================
420//

Callers 1

EmitMethod · 0.80

Calls 8

ExpEmitClass · 0.85
MessageMethod · 0.80
GetConstantIntMethod · 0.80
GetConstantFloatMethod · 0.80
GetConstantAddressMethod · 0.80
EmitMethod · 0.45
FreeMethod · 0.45
PushMethod · 0.45

Tested by

no test coverage detected