MCPcopy Create free account
hub / github.com/HaxeFoundation/hxcpp / genVariantValueTemp0

Method genVariantValueTemp0

src/hx/cppia/CppiaCompiler.cpp:1000–1079  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

998
999
1000 void genVariantValueTemp0(int inOffset, const JitVal &inDest, ExprType destType) HXCPP_OVERRIDE
1001 {
1002 std::vector<JumpId> jumpDone;
1003
1004 move(sJitTemp1, sJitTemp0.star(jtInt, inOffset + (int)offsetof(cpp::Variant,type) ) );
1005 switch(destType)
1006 {
1007 case etObject:
1008 {
1009 JumpId isObject = compare(cmpI_EQUAL, sJitTemp1.as(jtInt), (int)cpp::Variant::typeObject, 0);
1010
1011 // Not object ...
1012 add( sJitArg0, sJitTemp0.as(jtPointer), inOffset );
1013 callNative( (void *)variantToObject, sJitArg0 );
1014 if (inDest!=sJitReturnReg)
1015 move(inDest, sJitReturnReg.as(jtPointer));
1016
1017 jumpDone.push_back( jump() );
1018
1019 comeFrom(isObject);
1020 move( inDest, sJitTemp0.star(jtPointer, inOffset + (int)offsetof(cpp::Variant,valObject) ) );
1021 }
1022 break;
1023 case etString:
1024 {
1025 JumpId isString = compare(cmpI_EQUAL, sJitTemp1.as(jtInt), (int)cpp::Variant::typeString, 0);
1026
1027 // Not string ...
1028 add( sJitArg0, sJitTemp0.as(jtPointer), inOffset );
1029 callNative( (void *)variantToString, sJitArg0, inDest.as(jtString) );
1030 jumpDone.push_back( jump() );
1031
1032 comeFrom(isString);
1033 move( inDest.as(jtInt), sJitTemp0.star(jtInt, inOffset + (int)offsetof(cpp::Variant,valStringLen) ) );
1034 move( inDest.as(jtPointer) + StringOffset::Ptr, sJitTemp0.star(jtPointer, inOffset + (int)offsetof(cpp::Variant,valStringPtr) ) );
1035 }
1036 break;
1037
1038 case etFloat:
1039 {
1040 JumpId isFloat = compare(cmpI_EQUAL, sJitTemp1.as(jtInt), (int)cpp::Variant::typeDouble, 0);
1041
1042 JumpId notInt = compare(cmpI_NOT_EQUAL, sJitTemp1.as(jtInt), (int)cpp::Variant::typeInt, 0);
1043 // Is int...
1044 convert( sJitTemp0.star(jtInt, inOffset + (int)offsetof(cpp::Variant,valInt) ), etInt, inDest, destType );
1045 jumpDone.push_back( jump() );
1046
1047 comeFrom(notInt);
1048 // Not Int/Float ...
1049 add( sJitArg0, sJitTemp0.as(jtPointer), inOffset );
1050 callNative( (void *)variantToFloat, sJitArg0, inDest.as(jtFloat) );
1051 jumpDone.push_back( jump() );
1052
1053 comeFrom(isFloat);
1054 move( inDest.as(jtFloat), sJitTemp0.star(jtFloat, inOffset + (int)offsetof(cpp::Variant,valDouble) ) );
1055 }
1056 break;
1057

Callers 2

genCodeMethod · 0.80
genCodeMethod · 0.80

Calls 5

compareFunction · 0.85
convertFunction · 0.85
asMethod · 0.80
starMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected