mirror of
https://github.com/fluencelabs/wasm-bindgen
synced 2025-06-18 15:31:25 +00:00
webidl: translate webidl const to backend const
This commit is contained in:
@ -29,12 +29,12 @@ use std::path::Path;
|
|||||||
use backend::defined::{ImportedTypeDefinitions, RemoveUndefinedImports};
|
use backend::defined::{ImportedTypeDefinitions, RemoveUndefinedImports};
|
||||||
use backend::util::{ident_ty, rust_ident, wrap_import_function};
|
use backend::util::{ident_ty, rust_ident, wrap_import_function};
|
||||||
use failure::ResultExt;
|
use failure::ResultExt;
|
||||||
use heck::CamelCase;
|
use heck::{CamelCase, ShoutySnakeCase};
|
||||||
use quote::ToTokens;
|
use quote::ToTokens;
|
||||||
|
|
||||||
use util::{
|
use util::{
|
||||||
create_basic_method, create_function, create_getter, create_setter, webidl_ty_to_syn_ty,
|
create_basic_method, create_function, create_getter, create_setter, webidl_const_ty_to_syn_ty,
|
||||||
TypePosition,
|
webidl_const_v_to_backend_const_v, webidl_ty_to_syn_ty, TypePosition,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Either `Ok(t)` or `Err(failure::Error)`.
|
/// Either `Ok(t)` or `Err(failure::Error)`.
|
||||||
@ -297,9 +297,9 @@ impl<'a> WebidlParse<&'a str> for webidl::ast::InterfaceMember {
|
|||||||
attr.webidl_parse(program, self_name)
|
attr.webidl_parse(program, self_name)
|
||||||
}
|
}
|
||||||
webidl::ast::InterfaceMember::Operation(ref op) => op.webidl_parse(program, self_name),
|
webidl::ast::InterfaceMember::Operation(ref op) => op.webidl_parse(program, self_name),
|
||||||
|
webidl::ast::InterfaceMember::Const(ref c) => c.webidl_parse(program, self_name),
|
||||||
// TODO
|
// TODO
|
||||||
webidl::ast::InterfaceMember::Const(_)
|
webidl::ast::InterfaceMember::Iterable(_)
|
||||||
| webidl::ast::InterfaceMember::Iterable(_)
|
|
||||||
| webidl::ast::InterfaceMember::Maplike(_)
|
| webidl::ast::InterfaceMember::Maplike(_)
|
||||||
| webidl::ast::InterfaceMember::Setlike(_) => {
|
| webidl::ast::InterfaceMember::Setlike(_) => {
|
||||||
warn!("Unsupported WebIDL interface member: {:?}", self);
|
warn!("Unsupported WebIDL interface member: {:?}", self);
|
||||||
@ -474,3 +474,28 @@ impl<'a> WebidlParse<()> for webidl::ast::Enum {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'a> WebidlParse<&'a str> for webidl::ast::Const {
|
||||||
|
fn webidl_parse(
|
||||||
|
&self,
|
||||||
|
program: &mut backend::ast::Program,
|
||||||
|
interface_name: &'a str,
|
||||||
|
) -> Result<()> {
|
||||||
|
let syn_ty = webidl_const_ty_to_syn_ty(&self.type_);
|
||||||
|
program.imports.push(backend::ast::Import {
|
||||||
|
module: None,
|
||||||
|
version: None,
|
||||||
|
js_namespace: None,
|
||||||
|
kind: backend::ast::ImportKind::Const(backend::ast::Const {
|
||||||
|
vis: syn::Visibility::Public(syn::VisPublic {
|
||||||
|
pub_token: Default::default(),
|
||||||
|
}),
|
||||||
|
name: rust_ident(self.name.to_shouty_snake_case().as_str()),
|
||||||
|
interface_name: rust_ident(interface_name),
|
||||||
|
ty: syn_ty,
|
||||||
|
value: webidl_const_v_to_backend_const_v(&self.value),
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -90,6 +90,35 @@ pub fn webidl_ty_to_syn_ty(ty: &webidl::ast::Type, pos: TypePosition) -> Option<
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn webidl_const_ty_to_syn_ty(ty: &webidl::ast::ConstType) -> syn::Type {
|
||||||
|
use webidl::ast::ConstType::*;
|
||||||
|
|
||||||
|
// similar to webidl_ty_to_syn_ty
|
||||||
|
match ty {
|
||||||
|
Boolean => ident_ty(raw_ident("bool")),
|
||||||
|
Byte => ident_ty(raw_ident("i8")),
|
||||||
|
Octet => ident_ty(raw_ident("u8")),
|
||||||
|
RestrictedDouble | UnrestrictedDouble => ident_ty(raw_ident("f64")),
|
||||||
|
RestrictedFloat | UnrestrictedFloat => ident_ty(raw_ident("f32")),
|
||||||
|
SignedLong => ident_ty(raw_ident("i32")),
|
||||||
|
SignedLongLong => ident_ty(raw_ident("i64")),
|
||||||
|
SignedShort => ident_ty(raw_ident("i16")),
|
||||||
|
UnsignedLong => ident_ty(raw_ident("u32")),
|
||||||
|
UnsignedLongLong => ident_ty(raw_ident("u64")),
|
||||||
|
UnsignedShort => ident_ty(raw_ident("u16")),
|
||||||
|
Identifier(ref id) => ident_ty(rust_ident(id)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn webidl_const_v_to_backend_const_v(v: &webidl::ast::ConstValue) -> backend::ast::ConstValue {
|
||||||
|
match *v {
|
||||||
|
webidl::ast::ConstValue::BooleanLiteral(b) => backend::ast::ConstValue::BooleanLiteral(b),
|
||||||
|
webidl::ast::ConstValue::FloatLiteral(f) => backend::ast::ConstValue::FloatLiteral(f),
|
||||||
|
webidl::ast::ConstValue::IntegerLiteral(i) => backend::ast::ConstValue::IntegerLiteral(i),
|
||||||
|
webidl::ast::ConstValue::Null => backend::ast::ConstValue::Null,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn simple_fn_arg(ident: Ident, ty: syn::Type) -> syn::ArgCaptured {
|
fn simple_fn_arg(ident: Ident, ty: syn::Type) -> syn::ArgCaptured {
|
||||||
syn::ArgCaptured {
|
syn::ArgCaptured {
|
||||||
pat: syn::Pat::Ident(syn::PatIdent {
|
pat: syn::Pat::Ident(syn::PatIdent {
|
||||||
|
Reference in New Issue
Block a user