| 489 | // Node that calls function |
| 490 | |
| 491 | NodeFuncCall::NodeFuncCall(FunctionInfo *info, FunctionType *type) |
| 492 | { |
| 493 | // Function description |
| 494 | funcInfo = info; |
| 495 | |
| 496 | // Function type description |
| 497 | funcType = type; |
| 498 | |
| 499 | // Result type is fetched from function type |
| 500 | typeInfo = funcType->retType; |
| 501 | |
| 502 | if(funcInfo && (funcInfo->type == FunctionInfo::LOCAL || funcInfo->type == FunctionInfo::COROUTINE)) |
| 503 | first = TakeLastNode(); |
| 504 | |
| 505 | if(!funcInfo) |
| 506 | first = TakeLastNode(); |
| 507 | |
| 508 | if(funcType->paramCount > 0) |
| 509 | { |
| 510 | paramHead = paramTail = TakeLastNode(); |
| 511 | if(paramHead->nodeType == typeNodeNumber && funcType->paramType[funcType->paramCount-1] != paramHead->typeInfo) |
| 512 | ((NodeNumber*)paramHead)->ConvertTo(funcType->paramType[funcType->paramCount-1]); |
| 513 | }else{ |
| 514 | paramHead = paramTail = NULL; |
| 515 | } |
| 516 | |
| 517 | // Take nodes for all parameters |
| 518 | for(unsigned int i = 1; i < funcType->paramCount; i++) |
| 519 | { |
| 520 | paramTail->next = TakeLastNode(); |
| 521 | TypeInfo *paramType = funcType->paramType[funcType->paramCount-i-1]; |
| 522 | if(paramTail->next->nodeType == typeNodeNumber && paramType != paramTail->next->typeInfo) |
| 523 | ((NodeNumber*)paramTail->next)->ConvertTo(paramType); |
| 524 | paramTail->next->prev = paramTail; |
| 525 | paramTail = paramTail->next; |
| 526 | } |
| 527 | |
| 528 | if(funcInfo && funcInfo->type == FunctionInfo::THISCALL) |
| 529 | first = TakeLastNode(); |
| 530 | |
| 531 | nodeType = typeNodeFuncCall; |
| 532 | } |
| 533 | NodeFuncCall::~NodeFuncCall() |
| 534 | { |
| 535 | } |
nothing calls this directly
no test coverage detected