Skip to content

Conversation

rodiazet
Copy link
Contributor

@rodiazet rodiazet commented Oct 14, 2024

Depends on #15456. Merged
Depends on #15521 Dropped
Depends on: #15529 Merged
Depends on #15535 Merged
Depends on #15536 Merged

Copy link

Thank you for your contribution to the Solidity compiler! A team member will follow up shortly.

If you haven't read our contributing guidelines and our review checklist before, please do it now, this makes the reviewing process and accepting your contribution smoother.

If you have any questions or need our help, feel free to post them in the PR or talk to us directly on the #solidity-dev channel on Matrix.

@rodiazet rodiazet force-pushed the eof-contract-creation branch 4 times, most recently from f8a9ae7 to 947c5dd Compare October 14, 2024 13:36
@cameel cameel added EOF has dependencies The PR depends on other PRs that must be merged first labels Oct 14, 2024
@cameel cameel changed the title Eof contract creation EOF contract creation Oct 14, 2024
Copy link
Collaborator

@cameel cameel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I only skimmed through the PR for now. Here's some initial feedback.

My main question would be whether it wouldn't make more sense to deal with loadimmutable/setimmutable in a separate PR first. It's related dataloadn and looks like creation depends on immutables to some extent.

@rodiazet rodiazet force-pushed the eof-contract-creation branch 2 times, most recently from 6567616 to 82930c3 Compare October 15, 2024 13:06
@cameel cameel removed the has dependencies The PR depends on other PRs that must be merged first label Oct 16, 2024
@rodiazet rodiazet force-pushed the eof-contract-creation branch 2 times, most recently from feeb58b to 75122e0 Compare October 18, 2024 13:23
@rodiazet

This comment was marked as resolved.

@rodiazet rodiazet force-pushed the eof-contract-creation branch 2 times, most recently from 7bde2af to e1840a3 Compare October 18, 2024 13:29
@rodiazet rodiazet changed the title EOF contract creation eof: new contract creation Oct 18, 2024
@rodiazet rodiazet force-pushed the eof-contract-creation branch 3 times, most recently from a200d15 to 107b86e Compare October 18, 2024 14:11
@cameel cameel added the has dependencies The PR depends on other PRs that must be merged first label Oct 18, 2024
@rodiazet rodiazet force-pushed the eof-contract-creation branch from 107b86e to 2bb05a2 Compare October 18, 2024 18:02
@rodiazet rodiazet force-pushed the eof-contract-creation branch 5 times, most recently from def54bb to 46af949 Compare October 21, 2024 11:05
@rodiazet rodiazet force-pushed the eof-contract-creation branch from e213e0e to 57bcb13 Compare October 24, 2024 15:29
cameel
cameel previously approved these changes Oct 25, 2024
Copy link
Collaborator

@cameel cameel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving, since only a few cosmetic things are left now.

// dup1
// dup1
// dup1
// eofcreate(0)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This actually looks a bit ambiguous, as if EOFCREATE was getting only one argument.

How about we change the notation to for immediates in asm output to {} in AssemblyItem::toAssemblyText)? Then we'd get this:

Suggested change
// eofcreate(0)
// eofcreate{0}

I'd do that for RETURNCONTRACT and AUXDATALOADN as well. And I'd also return true for RETURNCONTRACT from AssemblyItem::canBeFunctional(). Is there actually a good reason why it's not like that already?

Copy link
Contributor Author

@rodiazet rodiazet Oct 25, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will change to brackets in AssemblyItem::toAssemblyText. Fot DATALOADN I would do this in a separated PR #15545.

Regarding ssemblyItem::canBeFunctional()
It depends how you define functional context. I assumed that if there is no return value it's not functional.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It depends how you define functional context. I assumed that if there is no return value it's not functional.

canBeFunctional() determines whether the parameters of the item should be printed in parentheses after it (in functional style) or as separate instructions before it.

At least that's how I understand it from how Functionalizer uses it: https://github.com/ethereum/solidity/blob/879d8e69f884419a9bc4a0cfe17a6d73ae14d836/libevmasm/Assembly.cpp#L324-L345

Here m_pending is a list of previous expressions, which are assumed to be the arguments.

I think that we want true for almost everything. The only things for which we return false seem to be PUSH and DUP instructions and Tag, AssignImmutable, VerbatimBytecode items. Not sure about the reasons for all of them but e.g. DUP is defined as taking the whole top of the stack as arguments (so e.g. DUP16 takes 17 arguments).

The closest thing we have to RETURNCONTRACT is probably RETURN and for that we return true.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BTW, I wonder if it wouldn't be better to show sub names like we do for dataOffset/dataSize instead of the numeric container IDs.

So for example in the assembly we would print eofcreate{sub_0} rather than eofcreate{0}.

Though I guess with EOF the ID approach is actually viable because we can't have nesting so maybe the current approach is still good. It's something to consider though.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

First fixed. I will check the later.

@rodiazet rodiazet force-pushed the eof-contract-creation branch from 5e691b4 to d1d6eb3 Compare October 28, 2024 10:51
Copy link
Collaborator

@cameel cameel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, can be merged as soon as #15536 goes in.

In the meantime... a few more nitpicks :P

cameel
cameel previously approved these changes Oct 29, 2024
@rodiazet rodiazet force-pushed the eof-contract-creation branch 4 times, most recently from b80ff60 to 4777b33 Compare October 30, 2024 10:13
@cameel cameel removed the has dependencies The PR depends on other PRs that must be merged first label Oct 30, 2024
@cameel
Copy link
Collaborator

cameel commented Oct 30, 2024

#15536 has been merged. Please rebase.

@rodiazet rodiazet force-pushed the eof-contract-creation branch from 4777b33 to 974c112 Compare October 30, 2024 11:42
@cameel cameel merged commit b5b8084 into argotorg:develop Oct 30, 2024
73 checks passed
@hirwabr hirwabr mentioned this pull request Dec 5, 2024
71 tasks
@rodiazet rodiazet deleted the eof-contract-creation branch December 9, 2024 21:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants