Почему у LClosures есть 2 разных повышения стоимости? - PullRequest
2 голосов
/ 29 мая 2020

Итак, при исследовании LCLosures я вижу, что он имеет тот же тип внешнего вида, что и CClosures, но дальше в прототипе есть upvalues, также хранящиеся внутри. 1004 *

typedef struct Proto {
  CommonHeader;
  TValue *k;  /* constants used by the function */
  Instruction *code;
  struct Proto **p;  /* functions defined inside the function */
  int *lineinfo;  /* map from opcodes to source lines */
  struct LocVar *locvars;  /* information about local variables */
  TString **upvalues;  /* upvalue names */
  TString  *source;
  int sizeupvalues;
  int sizek;  /* size of `k' */
  int sizecode;
  int sizelineinfo;
  int sizep;  /* size of `p' */
  int sizelocvars;
  int linedefined;
  int lastlinedefined;
  GCObject *gclist;
  lu_byte nups;  /* number of upvalues */
  lu_byte numparams;
  lu_byte is_vararg;
  lu_byte maxstacksize;
} Proto;

Мой вопрос: вы используете оба? Означают ли они разные вещи с точки зрения Lua? Я не смог найти хорошего объяснения. Поскольку функция lua_getupvalue не касается первой, она использует только повышающие значения в прототипе. Любая помощь будет принята с благодарностью.

...