add circuit self keyword wip

This commit is contained in:
collin 2020-07-02 21:36:22 -07:00
parent a78d077d40
commit 36b2508de3
4 changed files with 10 additions and 3 deletions

View File

@ -384,7 +384,8 @@ import [package].*;
``` ```
### Local ### Local
You can import from a local file in the `src/` directory by using its `[file].leo` as the `[package]` name. You can import from a local file in the same package using its direct path.
`src/` directory by using its `[file].leo` as the `[package]` name.
```rust ```rust
import [file].[name]; import [file].[name];

View File

@ -34,6 +34,8 @@ use snarkos_models::{
}, },
}; };
static SELF_KEYWORD: &'static str = "self";
impl<F: Field + PrimeField, G: GroupType<F>> ConstrainedProgram<F, G> { impl<F: Field + PrimeField, G: GroupType<F>> ConstrainedProgram<F, G> {
/// Enforce a variable expression by getting the resolved value /// Enforce a variable expression by getting the resolved value
pub(crate) fn evaluate_identifier( pub(crate) fn evaluate_identifier(
@ -699,6 +701,7 @@ impl<F: Field + PrimeField, G: GroupType<F>> ConstrainedProgram<F, G> {
circuit_member: Identifier, circuit_member: Identifier,
span: Span, span: Span,
) -> Result<ConstrainedValue<F, G>, ExpressionError> { ) -> Result<ConstrainedValue<F, G>, ExpressionError> {
println!("access");
let (circuit_name, members) = match self.enforce_expression_value( let (circuit_name, members) = match self.enforce_expression_value(
cs, cs,
file_scope.clone(), file_scope.clone(),
@ -725,8 +728,10 @@ impl<F: Field + PrimeField, G: GroupType<F>> ConstrainedProgram<F, G> {
_ => { _ => {
let circuit_scope = new_scope(file_scope.clone(), circuit_name.to_string()); let circuit_scope = new_scope(file_scope.clone(), circuit_name.to_string());
let function_scope = new_scope(circuit_scope, member.0.to_string()); let function_scope = new_scope(circuit_scope, member.0.to_string());
let field = new_scope(function_scope, stored_member.0.to_string()); let self_keyword = new_scope(function_scope, SELF_KEYWORD.to_string());
let field = new_scope(self_keyword, stored_member.0.to_string());
println!("storing");
self.store(field, stored_member.1.clone()); self.store(field, stored_member.1.clone());
} }
} }

View File

@ -22,6 +22,7 @@ impl<F: Field + PrimeField, G: GroupType<F>> ConstrainedProgram<F, G> {
} }
pub(crate) fn store(&mut self, name: String, value: ConstrainedValue<F, G>) { pub(crate) fn store(&mut self, name: String, value: ConstrainedValue<F, G>) {
println!("{}", name);
self.identifiers.insert(name, value); self.identifiers.insert(name, value);
} }

View File

@ -13,7 +13,7 @@ pub struct Identifier {
impl Identifier { impl Identifier {
pub fn is_self(&self) -> bool { pub fn is_self(&self) -> bool {
self.name == "Self" self.name == "Self" || self.name == "self"
} }
} }