Пример #1
0
void readVarInfo(const AstVar* var, uint16_t& localId, uint16_t& localContext, Context* ctx) {
  VarInfo* info = getInfo<VarInfo>(var);
  uint16_t varFunctionId = info->functionId();
  uint16_t curFunctionId = ctx->currentFunctionId();
  localId = info->localId();
  localContext = 0;

  if (varFunctionId != curFunctionId) {
    InterpreterFunction* varFunction = ctx->functionById(varFunctionId);
    InterpreterFunction* curFunction = ctx->functionById(curFunctionId);

    int32_t varFunctionDeep = varFunction->deepness();
    int32_t curFunctionDeep = curFunction->deepness();
    // var function deepness always >= current function deepness
    localContext = static_cast<uint16_t>(curFunctionDeep - varFunctionDeep);
  } 
}