1. 개요

 

    이 문서는 lua_pcall에 대하여 기술 합니다.
   
2. lua_pcall

 

    lua_pcall  함수에 대하여 알아 봅니다.
   
    기본 함수 형태는 다음과 같습니다.
       
        int lua_pcall (lua_State *L, int nargs, int nresults, int errfunc);
   
    기능    : 루아 스택에 있는 함수를 호출한다.
   
    nagrs   : 루아 스크립트 함수에 전달될 인자 수          
                  이 인자수 만큼 스택에 전달된 매개변수 값들이 있어야 합니다.
    nresult : 루아 스크립트 함수가 수행된 이후에 돌려진 반환 값 수
                  이 수만큼 스택에 결과값이 존합니다.
    errfunc : 루아 스크립트 함수내부에서 수행에 실패 했을때
                 호출될 루아 함수가 저장된 스택내 인덱스를 지정한다.
             
    lua_pcall은 실제 결과 값의 수를 적용할떄 nresults 보다
    결과 값 갯수가 적으면 나머지 부분은 nil을 스택에 할당합니다.
    결과 값 갯수가 크면 무시합니다.
   
    결과를 스택에 적재하기 전에 lua_pcall은 스택에 정의된 함수와 매개변수를 전부 제거합니다.
    함수의 첫 번째 결과는 첫 번째 스택 인덱스에 존재합니다.
   
    만약 lua_pcall이 실행되는 동안 에러가 발생하면
    lua_pcall은 0이 아닌 다른 값을 리턴합니다.
    이 경우 에러 메시지가 스택에 적재됩니다.
    이때 lua_pcall호출 시 사용했던 스택의 데이터는 제거됩니다.
   
    lua_pcall은 에러 메시지를 스택에 담기전에
    lua_pcall의 마지막 매개변수에 지정된 스택에 에러핸들러 함수가 있으면
    에러핸들러 함수를 호출합니다.
   
    마지막 매계 변수에 0을 지정하면 에러 핸들러 함수가 없다는 의미입니다.
    이 경우는 마지막 에러 메시지는 원래의 메시지가 됩니다.

    에러의 경우 lua_pcall()은 다음을 반환합니다.
    
        LUA_ERRRUN  :  일반적인 에러
        LUA_ERRMEM :  메모리 부족 오류
        LUA_ERRERR    : 에러핸들러를 실행하는 경우