| // Flags: --expose-gc --experimental-vm-modules |
| |
| 'use strict'; |
| |
| // This tests that vm.Script would not get GC'ed while the script can still |
| // initiate dynamic import. |
| // See https://github.com/nodejs/node/issues/43205. |
| |
| require('../common'); |
| const vm = require('vm'); |
| |
| const code = ` |
| new Promise(resolve => { |
| setTimeout(() => { |
| gc(); // vm.Script should not be GC'ed while the script is alive. |
| resolve(); |
| }, 1); |
| }).then(() => import('foo'));`; |
| |
| // vm.runInThisContext creates a vm.Script underneath, which should not be GC'ed |
| // while import() can still be initiated. |
| vm.runInThisContext(code, { |
| async importModuleDynamically() { |
| const m = new vm.SyntheticModule(['bar'], () => { |
| m.setExport('bar', 1); |
| }); |
| |
| await m.link(() => {}); |
| await m.evaluate(); |
| return m; |
| } |
| }); |