From 6d1484d41f5b5d561d21d6e497bd1ec437973464 Mon Sep 17 00:00:00 2001 From: daurnimator Date: Mon, 29 May 2017 15:35:46 +1000 Subject: src/lfunc.js: Give UpVals an id field This way they have an id when printed via %p. e.g. `debug.upvalueid(function() print() end, 1)` --- src/lfunc.js | 5 +++-- src/lobject.js | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/lfunc.js b/src/lfunc.js index 97e5f02..b4684e1 100644 --- a/src/lfunc.js +++ b/src/lfunc.js @@ -29,7 +29,8 @@ class Proto { class UpVal { - constructor() { + constructor(L) { + this.id = L.l_G.id_counter++; this.v = void 0; /* if open: reference to TValue on stack. if closed: TValue */ this.vOff = void 0; /* if open: index on stack. if closed: undefined */ this.refcount = 0; @@ -59,7 +60,7 @@ const luaF_findupval = function(L, level) { p = p.open_next; } /* not found: create a new upvalue */ - let uv = new UpVal(); + let uv = new UpVal(L); /* link it to list of open upvalues */ uv.open_next = p; if (prevp) diff --git a/src/lobject.js b/src/lobject.js index db76cb5..44d8c9b 100644 --- a/src/lobject.js +++ b/src/lobject.js @@ -7,6 +7,7 @@ const defs = require('./defs.js'); const ljstype = require('./ljstype.js'); const ldebug = require('./ldebug.js'); const ldo = require('./ldo.js'); +const lfunc = require('./lfunc.js'); const lstate = require('./lstate.js'); const lstring = require('./lstring.js'); const ltable = require('./ltable.js'); @@ -577,7 +578,8 @@ const luaO_pushvfstring = function(L, fmt, argp) { v instanceof ltable.Table || v instanceof Udata || v instanceof LClosure || - v instanceof CClosure) { + v instanceof CClosure || + v instanceof lfunc.UpVal) { pushstr(L, defs.to_luastring("0x"+v.id.toString(16))); } else { /* user provided object. no id available */ -- cgit v1.2.3-54-g00ecf