Skip to content

Commit

Permalink
fix(dojo-lang): ensure macro expansion does not depend on prelude (#1260
Browse files Browse the repository at this point in the history
)

* ensure the macro expansion does not depend on prelude

* ensure the macro expansion does not depend on prelude

* fix cairo tests

* fix tests print expansion
  • Loading branch information
glihm authored Dec 11, 2023
1 parent 79317c3 commit 194a1ec
Show file tree
Hide file tree
Showing 9 changed files with 88 additions and 80 deletions.
7 changes: 4 additions & 3 deletions crates/dojo-lang/src/inline_macros/emit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ impl InlineMacroExprPlugin for EmitMacro {
let mut builder = PatchBuilder::new(db);
builder.add_str(
"{
let mut keys = Default::<array::Array>::default();
let mut data = Default::<array::Array>::default();",
let mut keys = Default::<core::array::Array>::default();
let mut data = Default::<core::array::Array>::default();",
);

let args = arg_list.arguments(db).elements(db);
Expand All @@ -44,7 +44,8 @@ impl InlineMacroExprPlugin for EmitMacro {
let event = &args[1];

builder.add_str(
"\n starknet::Event::append_keys_and_data(@traits::Into::<_, Event>::into(",
"\n starknet::Event::append_keys_and_data(@core::traits::Into::<_, \
Event>::into(",
);
builder.add_node(event.as_syntax_node());
builder.add_str("), ref keys, ref data);");
Expand Down
25 changes: 14 additions & 11 deletions crates/dojo-lang/src/inline_macros/get.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ impl InlineMacroExprPlugin for GetMacro {
let mut builder = PatchBuilder::new(db);
builder.add_str(
"{
let mut __get_macro_keys__ = array::ArrayTrait::new();\n",
let mut __get_macro_keys__ = core::array::ArrayTrait::new();\n",
);

let args = arg_list.arguments(db).elements(db);
Expand Down Expand Up @@ -78,8 +78,8 @@ impl InlineMacroExprPlugin for GetMacro {
};

builder.add_str(&format!(
"serde::Serde::serialize(@{args}, ref __get_macro_keys__);
let __get_macro_keys__ = array::ArrayTrait::span(@__get_macro_keys__);\n"
"core::serde::Serde::serialize(@{args}, ref __get_macro_keys__);
let __get_macro_keys__ = core::array::ArrayTrait::span(@__get_macro_keys__);\n"
));

let mut system_reads = SYSTEM_READS.lock().unwrap();
Expand Down Expand Up @@ -107,20 +107,23 @@ impl InlineMacroExprPlugin for GetMacro {
deser_err_msg.truncate(CAIRO_ERR_MSG_LEN);

builder.add_str(&format!(
"\n let mut __{model}_layout__ = array::ArrayTrait::new();
"\n let mut __{model}_layout__ = core::array::ArrayTrait::new();
dojo::database::introspect::Introspect::<{model}>::layout(ref __{model}_layout__);
let mut __{model}_layout_clone__ = __{model}_layout__.clone();
let mut __{model}_layout_span__ = array::ArrayTrait::span(@__{model}_layout__);
let mut __{model}_layout_span__ = \
core::array::ArrayTrait::span(@__{model}_layout__);
let mut __{model}_layout_clone_span__ = \
array::ArrayTrait::span(@__{model}_layout_clone__);
core::array::ArrayTrait::span(@__{model}_layout_clone__);
let mut __{model}_values__ = {}.entity('{model}', __get_macro_keys__, 0_u8,
dojo::packing::calculate_packed_size(ref __{model}_layout_clone_span__),
__{model}_layout_span__);
let mut __{model}_model__ = array::ArrayTrait::new();
array::serialize_array_helper(__get_macro_keys__, ref __{model}_model__);
array::serialize_array_helper(__{model}_values__, ref __{model}_model__);
let mut __{model}_model_span__ = array::ArrayTrait::span(@__{model}_model__);
let __{model} = option::OptionTrait::expect(serde::Serde::<{model}>::deserialize(
let mut __{model}_model__ = core::array::ArrayTrait::new();
core::array::serialize_array_helper(__get_macro_keys__, ref __{model}_model__);
core::array::serialize_array_helper(__{model}_values__, ref __{model}_model__);
let mut __{model}_model_span__ = \
core::array::ArrayTrait::span(@__{model}_model__);
let __{model} = \
core::option::OptionTrait::expect(core::serde::Serde::<{model}>::deserialize(
ref __{model}_model_span__
), '{deser_err_msg}');\n",
world.as_syntax_node().get_text(db),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@ dependencies = [

[[package]]
name = "dojo"
version = "0.4.0-rc0"
version = "0.4.0-rc1"
dependencies = [
"dojo_plugin",
]

[[package]]
name = "dojo_plugin"
version = "0.4.0"
version = "0.3.11"
source = "git+https://github.com/dojoengine/dojo?tag=v0.3.11#1e651b5d4d3b79b14a7d8aa29a92062fcb9e6659"
22 changes: 11 additions & 11 deletions crates/dojo-lang/src/model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,13 @@ pub fn handle_model_struct(

if m.ty == "felt252" {
return Some(RewriteNode::Text(format!(
"array::ArrayTrait::append(ref serialized, *self.{});",
"core::array::ArrayTrait::append(ref serialized, *self.{});",
m.name
)));
}

Some(RewriteNode::Text(format!(
"serde::Serde::serialize(self.{}, ref serialized);",
"core::serde::Serde::serialize(self.{}, ref serialized);",
m.name
)))
};
Expand All @@ -81,23 +81,23 @@ pub fn handle_model_struct(
#[inline(always)]
fn keys(self: @$type_name$) -> Span<felt252> {
let mut serialized = ArrayTrait::new();
let mut serialized = core::array::ArrayTrait::new();
$serialized_keys$
array::ArrayTrait::span(@serialized)
core::array::ArrayTrait::span(@serialized)
}
#[inline(always)]
fn values(self: @$type_name$) -> Span<felt252> {
let mut serialized = ArrayTrait::new();
let mut serialized = core::array::ArrayTrait::new();
$serialized_values$
array::ArrayTrait::span(@serialized)
core::array::ArrayTrait::span(@serialized)
}
#[inline(always)]
fn layout(self: @$type_name$) -> Span<u8> {
let mut layout = ArrayTrait::new();
let mut layout = core::array::ArrayTrait::new();
dojo::database::introspect::Introspect::<$type_name$>::layout(ref layout);
array::ArrayTrait::span(@layout)
core::array::ArrayTrait::span(@layout)
}
#[inline(always)]
Expand Down Expand Up @@ -133,17 +133,17 @@ pub fn handle_model_struct(
#[external(v0)]
fn packed_size(self: @ContractState) -> usize {
let mut layout = ArrayTrait::new();
let mut layout = core::array::ArrayTrait::new();
dojo::database::introspect::Introspect::<$type_name$>::layout(ref layout);
let mut layout_span = layout.span();
dojo::packing::calculate_packed_size(ref layout_span)
}
#[external(v0)]
fn layout(self: @ContractState) -> Span<u8> {
let mut layout = ArrayTrait::new();
let mut layout = core::array::ArrayTrait::new();
dojo::database::introspect::Introspect::<$type_name$>::layout(ref layout);
array::ArrayTrait::span(@layout)
core::array::ArrayTrait::span(@layout)
}
#[external(v0)]
Expand Down
64 changes: 32 additions & 32 deletions crates/dojo-lang/src/plugin_test_data/model
Original file line number Diff line number Diff line change
Expand Up @@ -756,23 +756,23 @@ impl PositionSerde of core::serde::Serde::<Position> {

#[inline(always)]
fn keys(self: @Position) -> Span<felt252> {
let mut serialized = ArrayTrait::new();
array::ArrayTrait::append(ref serialized, *self.id);
array::ArrayTrait::span(@serialized)
let mut serialized = core::array::ArrayTrait::new();
core::array::ArrayTrait::append(ref serialized, *self.id);
core::array::ArrayTrait::span(@serialized)
}

#[inline(always)]
fn values(self: @Position) -> Span<felt252> {
let mut serialized = ArrayTrait::new();
serde::Serde::serialize(self.v, ref serialized);
array::ArrayTrait::span(@serialized)
let mut serialized = core::array::ArrayTrait::new();
core::serde::Serde::serialize(self.v, ref serialized);
core::array::ArrayTrait::span(@serialized)
}

#[inline(always)]
fn layout(self: @Position) -> Span<u8> {
let mut layout = ArrayTrait::new();
let mut layout = core::array::ArrayTrait::new();
dojo::database::introspect::Introspect::<Position>::layout(ref layout);
array::ArrayTrait::span(@layout)
core::array::ArrayTrait::span(@layout)
}

#[inline(always)]
Expand Down Expand Up @@ -838,17 +838,17 @@ impl PositionIntrospect<> of dojo::database::introspect::Introspect<Position<>>

#[external(v0)]
fn packed_size(self: @ContractState) -> usize {
let mut layout = ArrayTrait::new();
let mut layout = core::array::ArrayTrait::new();
dojo::database::introspect::Introspect::<Position>::layout(ref layout);
let mut layout_span = layout.span();
dojo::packing::calculate_packed_size(ref layout_span)
}

#[external(v0)]
fn layout(self: @ContractState) -> Span<u8> {
let mut layout = ArrayTrait::new();
let mut layout = core::array::ArrayTrait::new();
dojo::database::introspect::Introspect::<Position>::layout(ref layout);
array::ArrayTrait::span(@layout)
core::array::ArrayTrait::span(@layout)
}

#[external(v0)]
Expand All @@ -875,23 +875,23 @@ impl RolesSerde of core::serde::Serde::<Roles> {

#[inline(always)]
fn keys(self: @Roles) -> Span<felt252> {
let mut serialized = ArrayTrait::new();
let mut serialized = core::array::ArrayTrait::new();

array::ArrayTrait::span(@serialized)
core::array::ArrayTrait::span(@serialized)
}

#[inline(always)]
fn values(self: @Roles) -> Span<felt252> {
let mut serialized = ArrayTrait::new();
serde::Serde::serialize(self.role_ids, ref serialized);
array::ArrayTrait::span(@serialized)
let mut serialized = core::array::ArrayTrait::new();
core::serde::Serde::serialize(self.role_ids, ref serialized);
core::array::ArrayTrait::span(@serialized)
}

#[inline(always)]
fn layout(self: @Roles) -> Span<u8> {
let mut layout = ArrayTrait::new();
let mut layout = core::array::ArrayTrait::new();
dojo::database::introspect::Introspect::<Roles>::layout(ref layout);
array::ArrayTrait::span(@layout)
core::array::ArrayTrait::span(@layout)
}

#[inline(always)]
Expand Down Expand Up @@ -953,17 +953,17 @@ impl RolesIntrospect<> of dojo::database::introspect::Introspect<Roles<>> {

#[external(v0)]
fn packed_size(self: @ContractState) -> usize {
let mut layout = ArrayTrait::new();
let mut layout = core::array::ArrayTrait::new();
dojo::database::introspect::Introspect::<Roles>::layout(ref layout);
let mut layout_span = layout.span();
dojo::packing::calculate_packed_size(ref layout_span)
}

#[external(v0)]
fn layout(self: @ContractState) -> Span<u8> {
let mut layout = ArrayTrait::new();
let mut layout = core::array::ArrayTrait::new();
dojo::database::introspect::Introspect::<Roles>::layout(ref layout);
array::ArrayTrait::span(@layout)
core::array::ArrayTrait::span(@layout)
}

#[external(v0)]
Expand Down Expand Up @@ -996,23 +996,23 @@ impl PlayerSerde of core::serde::Serde::<Player> {

#[inline(always)]
fn keys(self: @Player) -> Span<felt252> {
let mut serialized = ArrayTrait::new();
array::ArrayTrait::append(ref serialized, *self.game);serde::Serde::serialize(self.player, ref serialized);
array::ArrayTrait::span(@serialized)
let mut serialized = core::array::ArrayTrait::new();
core::array::ArrayTrait::append(ref serialized, *self.game);core::serde::Serde::serialize(self.player, ref serialized);
core::array::ArrayTrait::span(@serialized)
}

#[inline(always)]
fn values(self: @Player) -> Span<felt252> {
let mut serialized = ArrayTrait::new();
array::ArrayTrait::append(ref serialized, *self.name);
array::ArrayTrait::span(@serialized)
let mut serialized = core::array::ArrayTrait::new();
core::array::ArrayTrait::append(ref serialized, *self.name);
core::array::ArrayTrait::span(@serialized)
}

#[inline(always)]
fn layout(self: @Player) -> Span<u8> {
let mut layout = ArrayTrait::new();
let mut layout = core::array::ArrayTrait::new();
dojo::database::introspect::Introspect::<Player>::layout(ref layout);
array::ArrayTrait::span(@layout)
core::array::ArrayTrait::span(@layout)
}

#[inline(always)]
Expand Down Expand Up @@ -1082,17 +1082,17 @@ impl PlayerIntrospect<> of dojo::database::introspect::Introspect<Player<>> {

#[external(v0)]
fn packed_size(self: @ContractState) -> usize {
let mut layout = ArrayTrait::new();
let mut layout = core::array::ArrayTrait::new();
dojo::database::introspect::Introspect::<Player>::layout(ref layout);
let mut layout_span = layout.span();
dojo::packing::calculate_packed_size(ref layout_span)
}

#[external(v0)]
fn layout(self: @ContractState) -> Span<u8> {
let mut layout = ArrayTrait::new();
let mut layout = core::array::ArrayTrait::new();
dojo::database::introspect::Introspect::<Player>::layout(ref layout);
array::ArrayTrait::span(@layout)
core::array::ArrayTrait::span(@layout)
}

#[external(v0)]
Expand Down
34 changes: 17 additions & 17 deletions crates/dojo-lang/src/plugin_test_data/print
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,14 @@ struct Position {
}

#[cfg(test)]
impl PositionPrintImpl of debug::PrintTrait<Position> {
impl PositionPrintImpl of core::debug::PrintTrait<Position> {
fn print(self: Position) {
debug::PrintTrait::print('id');
debug::PrintTrait::print(self.id);
debug::PrintTrait::print('x');
debug::PrintTrait::print(self.x);
debug::PrintTrait::print('y');
debug::PrintTrait::print(self.y);
core::debug::PrintTrait::print('id');
core::debug::PrintTrait::print(self.id);
core::debug::PrintTrait::print('x');
core::debug::PrintTrait::print(self.x);
core::debug::PrintTrait::print('y');
core::debug::PrintTrait::print(self.y);
}
}

Expand All @@ -64,10 +64,10 @@ struct Roles {
}

#[cfg(test)]
impl RolesPrintImpl of debug::PrintTrait<Roles> {
impl RolesPrintImpl of core::debug::PrintTrait<Roles> {
fn print(self: Roles) {
debug::PrintTrait::print('role_ids');
debug::PrintTrait::print(self.role_ids);
core::debug::PrintTrait::print('role_ids');
core::debug::PrintTrait::print(self.role_ids);
}
}

Expand All @@ -85,14 +85,14 @@ struct Player {
name: felt252,
}
#[cfg(test)]
impl PlayerPrintImpl of debug::PrintTrait<Player> {
impl PlayerPrintImpl of core::debug::PrintTrait<Player> {
fn print(self: Player) {
debug::PrintTrait::print('game');
debug::PrintTrait::print(self.game);
debug::PrintTrait::print('player');
debug::PrintTrait::print(self.player);
debug::PrintTrait::print('name');
debug::PrintTrait::print(self.name);
core::debug::PrintTrait::print('game');
core::debug::PrintTrait::print(self.game);
core::debug::PrintTrait::print('player');
core::debug::PrintTrait::print(self.player);
core::debug::PrintTrait::print('name');
core::debug::PrintTrait::print(self.name);
}
}

Expand Down
4 changes: 2 additions & 2 deletions crates/dojo-lang/src/print.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ pub fn derive_print(db: &dyn SyntaxGroup, struct_ast: ItemStruct) -> RewriteNode
.iter()
.map(|m| {
format!(
"debug::PrintTrait::print('{}'); debug::PrintTrait::print(self.{});",
"core::debug::PrintTrait::print('{}'); core::debug::PrintTrait::print(self.{});",
m.name(db).text(db).to_string(),
m.name(db).text(db).to_string()
)
Expand All @@ -26,7 +26,7 @@ pub fn derive_print(db: &dyn SyntaxGroup, struct_ast: ItemStruct) -> RewriteNode

RewriteNode::interpolate_patched(
"#[cfg(test)]
impl $type_name$PrintImpl of debug::PrintTrait<$type_name$> {
impl $type_name$PrintImpl of core::debug::PrintTrait<$type_name$> {
fn print(self: $type_name$) {
$print$
}
Expand Down
3 changes: 3 additions & 0 deletions examples/spawn-and-move/Scarb.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
cairo-version = "2.4.0"
name = "dojo_examples"
version = "0.4.0-rc0"
# Use the prelude with the less imports as possible
# from corelib.
edition = "2023_10"

[cairo]
sierra-replace-ids = true
Expand Down
Loading

0 comments on commit 194a1ec

Please sign in to comment.