Skip to content

Commit

Permalink
Add for TemplateCreate opcode
Browse files Browse the repository at this point in the history
  • Loading branch information
HalidOdat committed Sep 4, 2023
1 parent 6959fb4 commit fcb4182
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 15 deletions.
6 changes: 4 additions & 2 deletions boa_engine/src/bytecompiler/expression/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -268,8 +268,10 @@ impl ByteCompiler<'_, '_> {
));
}

self.emit(Opcode::TemplateCreate, &[Operand::U32(count)]);
self.emit_u64(site);
self.emit(
Opcode::TemplateCreate,
&[Operand::Varying(count), Operand::U64(site)],
);

self.patch_jump(jump_label);

Expand Down
6 changes: 3 additions & 3 deletions boa_engine/src/vm/code_block.rs
Original file line number Diff line number Diff line change
Expand Up @@ -368,9 +368,9 @@ impl CodeBlock {
} => {
format!("{value1}, {value2}")
}
Instruction::TemplateLookup { exit: value, site }
| Instruction::TemplateCreate { count: value, site } => {
format!("{value}, {site}")
Instruction::TemplateLookup { exit: value, site } => format!("{value}, {site}"),
Instruction::TemplateCreate { count, site } => {
format!("{}, {site}", count.value())
}
Instruction::GetFunction { index, method }
| Instruction::GetFunctionAsync { index, method } => {
Expand Down
4 changes: 2 additions & 2 deletions boa_engine/src/vm/opcode/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2013,10 +2013,10 @@ generate_opcodes! {

/// Create a new tagged template object and cache it.
///
/// Operands: count: `u32`, site: `u64`
/// Operands: count: `VaryingOperand`, site: `u64`
///
/// Stack: count * (cooked_value, raw_value) **=>** template
TemplateCreate { count: u32, site: u64 },
TemplateCreate { count: VaryingOperand, site: u64 },

/// Push a private environment.
///
Expand Down
34 changes: 26 additions & 8 deletions boa_engine/src/vm/opcode/templates/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,9 @@ impl Operation for TemplateLookup {
#[derive(Debug, Clone, Copy)]
pub(crate) struct TemplateCreate;

impl Operation for TemplateCreate {
const NAME: &'static str = "TemplateCreate";
const INSTRUCTION: &'static str = "INST - TemplateCreate";

fn execute(context: &mut Context<'_>) -> JsResult<CompletionType> {
let count = context.vm.read::<u32>();
let site = context.vm.read::<u64>();

impl TemplateCreate {
#[allow(clippy::unnecessary_wraps)]
fn operation(context: &mut Context<'_>, count: u32, site: u64) -> JsResult<CompletionType> {
let template =
Array::array_create(count.into(), None, context).expect("cannot fail per spec");
let raw_obj =
Expand Down Expand Up @@ -102,3 +97,26 @@ impl Operation for TemplateCreate {
Ok(CompletionType::Normal)
}
}

impl Operation for TemplateCreate {
const NAME: &'static str = "TemplateCreate";
const INSTRUCTION: &'static str = "INST - TemplateCreate";

fn execute(context: &mut Context<'_>) -> JsResult<CompletionType> {
let count = u32::from(context.vm.read::<u8>());
let site = context.vm.read::<u64>();
Self::operation(context, count, site)
}

fn half_execute(context: &mut Context<'_>) -> JsResult<CompletionType> {
let count = u32::from(context.vm.read::<u16>());
let site = context.vm.read::<u64>();
Self::operation(context, count, site)
}

fn wide_execute(context: &mut Context<'_>) -> JsResult<CompletionType> {
let count = context.vm.read::<u32>();
let site = context.vm.read::<u64>();
Self::operation(context, count, site)
}
}

0 comments on commit fcb4182

Please sign in to comment.