スタックを調べる

スタックが良く分からなかったので、調べてみた。

#include <stdio.h>

#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"

int main() {
  lua_State *L = lua_open();
  luaL_loadstring(L,"function f(x, y) return x + y end");
  printf("top: %d\n", lua_gettop(L));
  lua_call(L, 0, 0);
  printf("top: %d\n", lua_gettop(L));
  lua_getglobal(L, "f");
  printf("top: %d\n", lua_gettop(L));
  lua_pushnumber(L, 1);
  printf("top: %d\n", lua_gettop(L));
  lua_pushnumber(L, 2);
  printf("top: %d\n", lua_gettop(L));

  if(lua_pcall(L, 2, 1, 0) != 0) {
    printf("error: %s\n", lua_tostring(L, -1));
  } else {
    printf("%f\n", lua_tonumber(L, -1));
  }

  printf("top: %d\n", lua_gettop(L));

  lua_pop(L, 1);
  lua_close(L);
}


top: 1
top: 0
top: 1
top: 2
top: 3
3.000000
top: 1