mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 17:57:35 +00:00
LibJS/Bytecode: Cache object own property accesses
The instructions GetById and GetByIdWithThis now remember the last-seen Shape, and if we see the same object again, we reuse the property offset from last time without doing a new lookup. This allows us to use Object::get_direct(), bypassing the entire lookup machinery and saving lots of time. ~23% speed-up on Kraken/ai-astar.js :^)
This commit is contained in:
parent
52cd671163
commit
de8e4b1853
8 changed files with 76 additions and 26 deletions
|
@ -199,6 +199,9 @@ public:
|
|||
m_boundaries.take_last();
|
||||
}
|
||||
|
||||
void emit_get_by_id(IdentifierTableIndex);
|
||||
void emit_get_by_id_with_this(IdentifierTableIndex, Register);
|
||||
|
||||
private:
|
||||
Generator();
|
||||
~Generator() = default;
|
||||
|
@ -218,6 +221,7 @@ private:
|
|||
|
||||
u32 m_next_register { 2 };
|
||||
u32 m_next_block { 1 };
|
||||
u32 m_next_property_lookup_cache { 0 };
|
||||
FunctionKind m_enclosing_function_kind { FunctionKind::Normal };
|
||||
Vector<LabelableScope> m_continuable_scopes;
|
||||
Vector<LabelableScope> m_breakable_scopes;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue