1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-24 16:19:12 -05:00
denoland-deno/ops/op2/generator_state.rs
Matt Mastracci 65d9bfb533
refactor(ops): Adding op2 macro and implementing in a couple of places (#19534)
This is a new op system that will eventually replace `#[op]`. 

Features
 - More maintainable, generally less-coupled code
 - More modern Rust proc-macro libraries
- Enforces correct `fast` labelling for fast ops, allowing for visual
scanning of fast ops
 - Explicit marking of `#[string]`, `#[serde]` and `#[smi]` parameters.

This first version of op2 supports integer and Option<integer>
parameters only, and allows us to start working on converting ops and
adding features.
2023-06-24 13:54:10 +02:00

32 lines
1.1 KiB
Rust

// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
use proc_macro2::Ident;
use proc_macro2::TokenStream;
pub struct GeneratorState {
/// The path to the `deno_core` crate (either `deno_core` or `crate`, the latter used if the op is `(core)`).
pub deno_core: TokenStream,
/// Identifiers for each of the arguments of the original function
pub args: Vec<Ident>,
/// The new identifier for the original function's contents.
pub call: Ident,
/// The result of the `call` function
pub result: Ident,
/// The `v8::CallbackScope` used if necessary for the function.
pub scope: Ident,
/// The `v8::FunctionCallbackInfo` used to pass args into the slow function.
pub info: Ident,
/// The `v8::FunctionCallbackArguments` used to pass args into the slow function.
pub fn_args: Ident,
/// The `v8::ReturnValue` used in the slow function
pub retval: Ident,
/// The "slow" function (ie: the one that isn't a fastcall)
pub slow_function: Ident,
/// The "fast" function (ie: a fastcall)
pub fast_function: Ident,
pub needs_args: bool,
pub needs_retval: bool,
pub needs_scope: bool,
}