fix(parser): treat persistent/temporary/instance as identifiers for non-Soroban targets#1852
Closed
sridhar-panigrahi wants to merge 2 commits intohyperledger-solang:mainfrom
Conversation
…on-Soroban targets PR #1664 introduced three Soroban-specific storage type keywords (persistent, temporary, instance) directly into the global keyword map, making them reserved words for all targets. This breaks standard Solidity code that happens to use these common English words as variable or function names. The fix makes the lexer target-aware: a new `soroban` flag is added to `Lexer`. When the flag is false (the default), the three tokens are returned as plain `Identifier` tokens rather than keyword tokens. `parse_soroban()` is added to `solang-parser` as a counterpart to the existing `parse()` function; the semantic analysis layer now calls the appropriate variant based on the compilation target. Two new parser-level tests verify the behaviour in both modes. Fixes #1847 Signed-off-by: Shridhar Panigrahi <sridharpanigrahi2006@gmail.com>
1fa5b1e to
62555ac
Compare
Author
|
@salaheldinsoliman , please let me know your thoughts on this ! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What is the problem?
When PR #1664 added Soroban storage type support, it registered
persistent,temporary, andinstanceas reserved keywords in the global keyword table. This means those words are now off-limits as identifiers in every compilation target — not just Soroban. A regular Solidity contract that uses something likeuint256 persistent = 0;or a function namedinstance()will fail to parse under Solang even when targeting EVM or Polkadot.Closes #1847.
How is it fixed?
The lexer is made aware of the target. A
sorobanflag is added to theLexerstruct. When the flag is off (which is the default), those three tokens are handed back to the parser as plain identifiers — just like any other user-defined name. When the flag is on, they behave exactly as before: full keywords with their own token types.A new
parse_soroban()function is added tosolang-parsernext to the existingparse(). The semantic analysis layer picks the right one at the point where it knows the compilation target.What changed?
solang-parser/src/lexer.rs— addedsoroban: boolto theLexerstruct and awith_soroban_keywords()builder method; the keyword lookup now returns anIdentifiertoken for the three Soroban words when the flag is not set.solang-parser/src/lib.rs—parse()is unchanged and remains the default non-Soroban entry point;parse_soroban()is added for Soroban targets.src/sema/mod.rs— dispatches toparse_soroban()when the target is Soroban,parse()otherwise.solang-parser/src/tests.rs— two new regression tests: one that verifiespersistent,temporary, andinstanceare accepted as identifiers and function names underparse(), and one that verifies they still work as storage-type annotations underparse_soroban().Testing
cargo test -p solang-parser -- --skip test_libsolidity)cargo test --no-default-features -p solang --lib)