
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 : 에러핸들러를 실행하는 경우