Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement substitute_error_message_attribute_references #689

Merged
merged 25 commits into from
Jan 12, 2023
Merged
Changes from 1 commit
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
0f62bba
Add flow_tracking_data to Attribute
fmoletta Jan 5, 2023
81b7294
Start substitute_error_message_references method
fmoletta Jan 5, 2023
e0dc119
First draft
fmoletta Jan 5, 2023
7d05b3b
Finish first draft
fmoletta Jan 5, 2023
538acf9
Remove duplicated error_attr management
fmoletta Jan 5, 2023
923421a
Fix string format
fmoletta Jan 5, 2023
23c9fcb
Fix invalid reference string + filter out ap-based references
fmoletta Jan 5, 2023
9f98269
Copy get_maybe_relocatable_from_reference from PR 687
fmoletta Jan 5, 2023
10e1ef4
Filter out complex cairo types
fmoletta Jan 5, 2023
195ab4f
Clippy
fmoletta Jan 5, 2023
bd8a1e0
Add tests for ap-based references in error attribute messages
fmoletta Jan 5, 2023
5470d1b
Add tests for complex references in error attribute messages
fmoletta Jan 5, 2023
093a87b
Start changelog entry
fmoletta Jan 5, 2023
997d050
Merge branch 'main' of github.com:lambdaclass/cairo-rs into substitut…
fmoletta Jan 5, 2023
0b89b93
Merge branch 'main' of github.com:lambdaclass/cairo-rs into substitut…
fmoletta Jan 6, 2023
56e5298
Fix eof
fmoletta Jan 6, 2023
a819eeb
Add changelog entry
fmoletta Jan 6, 2023
4d44dd0
Fix test
fmoletta Jan 6, 2023
ef50803
Update changelog
fmoletta Jan 6, 2023
3154d2f
Merge branch 'main' of github.com:lambdaclass/cairo-rs into substitut…
fmoletta Jan 6, 2023
5646d1b
Fix chanhgelog
fmoletta Jan 6, 2023
2a687c0
Fix chanhgelog
fmoletta Jan 6, 2023
c0f1ace
Remove debug print
fmoletta Jan 6, 2023
ce32146
Simplify test
fmoletta Jan 6, 2023
914e288
Merge branch 'main' into substitute-error-attr-ref
Jrigada Jan 11, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
First draft
fmoletta committed Jan 5, 2023

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
commit e0dc1195ab50a60e435e2d98bdc6a83d79e0152c
21 changes: 15 additions & 6 deletions src/vm/errors/vm_exception.rs
Original file line number Diff line number Diff line change
@@ -8,7 +8,9 @@ use std::{
use thiserror::Error;

use crate::{
hint_processor::hint_processor_utils::get_integer_from_reference,
serde::deserialize_program::{Attribute, Location},
types::relocatable::MaybeRelocatable,
vm::{runners::cairo_runner::CairoRunner, vm_core::VirtualMachine},
};

@@ -92,17 +94,24 @@ pub fn get_traceback(vm: &VirtualMachine, runner: &CairoRunner) -> Option<String

// Substitutes references in the given error_message attribute with their actual value.
// References are defined with '{}'. E.g., 'x must be positive. Got: {x}'.
fn substitute_error_message_references(error_message_attr: &Attribute) -> Option<String> {
fn substitute_error_message_references(
error_message_attr: &Attribute,
runner: &CairoRunner,
vm: &VirtualMachine,
) -> Option<String> {
let mut error_msg = error_message_attr.value.clone();
if let Some(tracking_data) = &error_message_attr.flow_tracking_data {
// We iterate over the available references and check if one of them is addressed in the error message
for (cairo_variable_name, ref_id) in &tracking_data.reference_ids {
if error_msg.contains(&format!(
"{{ {} }}",
cairo_variable_name.rsplit('.').next()?
)) {
let formated_variable_name =
format!("{{ {} }}", cairo_variable_name.rsplit('.').next()?);
if error_msg.contains(&formated_variable_name) {
// Check if we need to restrict this
//let cairo_valiable = get_m
let cairo_valiable: MaybeRelocatable = runner
.get_value_from_reference(ref_id, &tracking_data.ap_tracking)
.ok()?;
error_msg =
error_msg.replace(&formated_variable_name, &format!("{}", cairo_variable));
}
}
}