diff options
author | Benoit Giannangeli <benoit.giannangeli@boursorama.fr> | 2017-02-08 15:31:44 +0100 |
---|---|---|
committer | Benoit Giannangeli <giann008@gmail.com> | 2017-02-10 08:53:03 +0100 |
commit | ad5cb0ddb6d4bd187cd4370711b1c9e34245fe07 (patch) | |
tree | 3e8bccded1cd4625661fe9b06f66e11202c1dec2 /src/lfunc.js | |
parent | bd6367e8f3162ff76628fa42948e66ba9e6ae281 (diff) | |
download | fengari-ad5cb0ddb6d4bd187cd4370711b1c9e34245fe07.tar.gz fengari-ad5cb0ddb6d4bd187cd4370711b1c9e34245fe07.tar.bz2 fengari-ad5cb0ddb6d4bd187cd4370711b1c9e34245fe07.zip |
Upvalues
Diffstat (limited to 'src/lfunc.js')
-rw-r--r-- | src/lfunc.js | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/lfunc.js b/src/lfunc.js index 929dae8..2c33a7d 100644 --- a/src/lfunc.js +++ b/src/lfunc.js @@ -24,16 +24,25 @@ class Proto { class UpVal { constructor() { - this.v = null; + this.v = null; /* if null, upval is closed, value is in u.value */ this.u = { - open: { - next: null, - touched: false + open: { /* (when open) */ + next: null, /* linked list */ + touched: false /* mark to avoid cycles with dead threads */ }, - value: null + value: null /* the value (when closed) */ }; } + val(L) { + return this.v !== null ? L.stack[this.v] : this.u.value; + } + + setval(L, ra) { + if (this.v !== null) this.v = ra; + else this.u.value = L.stack[ra]; + } + } module.exports = { |