Skip to content

Error for struct constructor syntax #439

@lydiagarms

Description

@lydiagarms

Overview

There are several zappify errors when using the struct constructor syntax.

Tasks

Describe which contracts are affected
// SPDX-License-Identifier: CC0

pragma solidity ^0.8.0;

contract Assign {

secret uint256 private a;
secret uint256 private b;

struct MyStruct {
uint256 prop1;
bool prop2;
}

MyStruct public x;

function add( secret MyStruct memory value) public {
MyStruct memory localStruct = MyStruct({prop1: 7, prop2: false});
known a += value.prop1 + localStruct.prop1;
x.prop2 = true;
}

function remove( secret MyStruct memory value) public {
add(value);
known b += value.prop1;
x.prop2 = true;
}
}

Describe the bug that should be fixed
The errors:

TypeError: Cannot destructure property 'name' of '(intermediate value)(intermediate value)(intermediate value)' as it is null.
at publicInputsVisitor (file:///Users/lydiagarms/starlight/built/transformers/visitors/toCircuitVisitor.js:252:11)
at traversePathsFast (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:159:5)
at NodePath.traversePathsFast (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:114:9)
at Object.enter (file:///Users/lydiagarms/starlight/built/transformers/visitors/toCircuitVisitor.js:1116:22)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:47:17)
at NodePath.traverse (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:111:9)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:78:25)
at NodePath.traverse (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:111:9)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:78:25)
at NodePath.traverse (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:111:9)

and

TypeError: Cannot read properties of undefined (reading 'expression')
at Object.enter (file:///Users/lydiagarms/starlight/built/transformers/visitors/toCircuitVisitor.js:1140:77)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:47:17)
at NodePath.traverse (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:111:9)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:78:25)
at NodePath.traverse (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:111:9)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:78:25)
at NodePath.traverse (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:111:9)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:65:29)
at NodePath.traverse (file:///Users/lydiagarms/starlight/built/traverse/NodePath.js:111:9)
at traverse (file:///Users/lydiagarms/starlight/built/traverse/traverse.js:78:25)

Definition of done

When is this task complete?
Test contracts both public and secret structs being created via the constructor syntax, ensure this is working correctly.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions