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

Method genCode

src/hx/cppia/Cppia.cpp:7359–7446  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7357 }
7358 #ifdef CPPIA_JIT
7359 void genCode(CppiaCompiler *compiler, const JitVal &inDest, ExprType destType) HXCPP_OVERRIDE
7360 {
7361 if (!AS_DYNAMIC)
7362 {
7363 // String version
7364 if (destType==etObject || destType==etString)
7365 {
7366 JitTemp s0(compiler,jtString);
7367 JitTemp s1(compiler,jtString);
7368 left->genCode(compiler, s0, etString);
7369 right->genCode(compiler, s1, etString);
7370 compiler->add( sJitTemp0, s0.getReg().as(jtPointer), s0.offset );
7371 compiler->add( sJitTemp1, s1.getReg().as(jtPointer), s1.offset );
7372 if (destType==etString)
7373 {
7374 compiler->callNative((void *)strAddStrToStrOver, sJitTemp0.as(jtPointer), sJitTemp1.as(jtPointer));
7375 compiler->move(inDest.as(jtInt), s0.as(jtInt));
7376 compiler->move(inDest.as(jtPointer)+StringOffset::Ptr, s0.as(jtPointer)+StringOffset::Ptr);
7377 }
7378 else // Object
7379 {
7380 compiler->callNative((void *)strAddStrToObj, sJitTemp0.as(jtPointer), sJitTemp1.as(jtPointer));
7381 compiler->checkException();
7382 compiler->move( inDest, sJitReturnReg.as(jtPointer) );
7383 }
7384 }
7385 else
7386 {
7387 left->genCode(compiler, JitVal(), etObject);
7388 right->genCode(compiler, JitVal(), etObject);
7389 }
7390 }
7391 else
7392 {
7393 JitTemp tLeft(compiler,jtPointer);
7394 left->genCode(compiler, tLeft, etObject);
7395 right->genCode(compiler, sJitTemp1.as(jtPointer), etObject);
7396
7397 switch(destType)
7398 {
7399 case etString:
7400 if (inDest.offset==0)
7401 {
7402 compiler->callNative((void *)dynamicAddStr, tLeft, sJitTemp1.as(jtPointer), inDest.getReg());
7403 compiler->checkException();
7404 }
7405 else
7406 {
7407 compiler->add(sJitTemp2, inDest.getReg(), inDest.offset);
7408 compiler->callNative((void *)dynamicAddStr, tLeft, sJitTemp1.as(jtPointer), sJitTemp2);
7409 compiler->checkException();
7410 }
7411 break;
7412
7413 case etObject:
7414 compiler->callNative((void *)dynamicAddObj, tLeft, sJitTemp1.as(jtPointer));
7415 compiler->checkException();
7416 compiler->move(inDest, sJitReturnReg.as(jtPointer));

Callers

nothing calls this directly

Calls 9

JitValClass · 0.85
isMemoryValFunction · 0.85
asMethod · 0.80
getRegMethod · 0.80
callNativeMethod · 0.80
moveMethod · 0.80
checkExceptionMethod · 0.80
genCodeMethod · 0.45
addMethod · 0.45

Tested by

no test coverage detected