45 lines
1.6 KiB
Rust
45 lines
1.6 KiB
Rust
use super::*;
|
|
|
|
impl Compiler {
|
|
pub(in crate::counter) fn count_static_member_expression(&self, expr: &Expression, ctx: &mut CompileCtx) {
|
|
let Expression::StaticMemberExpression(member) = expr else {
|
|
return;
|
|
};
|
|
if matches!(&member.object, Expression::Super(_)) {
|
|
ctx.count_load_const(); // key
|
|
ctx.count_load_var(); // this
|
|
ctx.alloc_reg(); // result
|
|
ctx.count_instr(); // SUPER_GET_PROP
|
|
return;
|
|
}
|
|
self.count_expression(&member.object, ctx);
|
|
ctx.count_load_const(); // key
|
|
ctx.count_ic_instr_with_ext(); // IC_GET_PROP + 3 ext words
|
|
}
|
|
|
|
pub(in crate::counter) fn count_computed_member_expression(&self, expr: &Expression, ctx: &mut CompileCtx) {
|
|
let Expression::ComputedMemberExpression(member) = expr else {
|
|
return;
|
|
};
|
|
self.count_expression(&member.object, ctx);
|
|
self.count_expression(&member.expression, ctx);
|
|
ctx.alloc_reg();
|
|
ctx.projected_pc += 1; // GET_PROP_DYNAMIC
|
|
}
|
|
|
|
pub(in crate::counter) fn count_private_field_expression(&self, expr: &Expression, ctx: &mut CompileCtx) {
|
|
let Expression::PrivateFieldExpression(member) = expr else {
|
|
return;
|
|
};
|
|
self.count_expression(&member.object, ctx);
|
|
ctx.count_private_access();
|
|
}
|
|
|
|
pub(in crate::counter) fn count_parenthesized_expression(&self, expr: &Expression, ctx: &mut CompileCtx) {
|
|
let Expression::ParenthesizedExpression(p) = expr else {
|
|
return;
|
|
};
|
|
self.count_expression(&p.expression, ctx);
|
|
}
|
|
}
|