optimized global variable access

This commit is contained in:
Fabrice Bellard
2025-11-03 16:57:20 +01:00
parent eb2c89087d
commit a6816be23a
3 changed files with 796 additions and 532 deletions

View File

@@ -368,7 +368,7 @@ function test_template_skip()
function test_object_literal()
{
var x = 0, get = 1, set = 2; async = 3;
var x = 0, get = 1, set = 2, async = 3;
a = { get: 2, set: 3, async: 4, get a(){ return this.get} };
assert(JSON.stringify(a), '{"get":2,"set":3,"async":4,"a":2}');
assert(a.a === 2);
@@ -628,6 +628,33 @@ function test_unicode_ident()
assert(typeof õ, "undefined");
}
/* check global variable optimization */
function test_global_var_opt()
{
var v2;
(1, eval)('var gvar1'); /* create configurable global variables */
gvar1 = 1;
Object.defineProperty(globalThis, "gvar1", { writable: false });
gvar1 = 2;
assert(gvar1, 1);
Object.defineProperty(globalThis, "gvar1", { get: function() { return "hello" },
set: function(v) { v2 = v; } });
assert(gvar1, "hello");
gvar1 = 3;
assert(v2, 3);
Object.defineProperty(globalThis, "gvar1", { value: 4, writable: true, configurable: true });
assert(gvar1, 4);
gvar1 = 6;
delete gvar1;
assert_throws(ReferenceError, function() { return gvar1 });
gvar1 = 5;
assert(gvar1, 5);
}
test_op1();
test_cvt();
test_eq();
@@ -652,3 +679,4 @@ test_parse_semicolon();
test_optional_chaining();
test_parse_arrow_function();
test_unicode_ident();
test_global_var_opt();