Skip to content

Commit de4ff5e

Browse files
authored
Add support for member access in assembly (#332)
1 parent 76687a2 commit de4ff5e

File tree

9 files changed

+49
-7
lines changed

9 files changed

+49
-7
lines changed

__tests__/nodes/__snapshots__/index.test.js.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Array [
1111
"AssemblyFunctionDefinition",
1212
"AssemblyIf",
1313
"AssemblyLocalDefinition",
14+
"AssemblyMemberAccess",
1415
"AssemblySwitch",
1516
"BinaryOperation",
1617
"Block",

package-lock.json

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
"jest-watch-typeahead": "^0.6.0"
7272
},
7373
"dependencies": {
74-
"@solidity-parser/parser": "^0.7.0",
74+
"@solidity-parser/parser": "^0.8.0",
7575
"dir-to-object": "^2.0.0",
7676
"emoji-regex": "^9.0.0",
7777
"escape-string-regexp": "^4.0.0",

scripts/__snapshots__/makeData.test.js.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@ exports[`makeData to match snapshot for nodes 1`] = `
1313
1414
/* eslint-disable global-require */
1515
16-
module.exports = {ArrayTypeName:require('./ArrayTypeName.js'),AssemblyAssignment:require('./AssemblyAssignment.js'),AssemblyBlock:require('./AssemblyBlock.js'),AssemblyCall:require('./AssemblyCall.js'),AssemblyCase:require('./AssemblyCase.js'),AssemblyFor:require('./AssemblyFor.js'),AssemblyFunctionDefinition:require('./AssemblyFunctionDefinition.js'),AssemblyIf:require('./AssemblyIf.js'),AssemblyLocalDefinition:require('./AssemblyLocalDefinition.js'),AssemblySwitch:require('./AssemblySwitch.js'),BinaryOperation:require('./BinaryOperation.js'),Block:require('./Block.js'),BooleanLiteral:require('./BooleanLiteral.js'),BreakStatement:require('./BreakStatement.js'),CatchClause:require('./CatchClause.js'),Conditional:require('./Conditional.js'),ContinueStatement:require('./ContinueStatement.js'),ContractDefinition:require('./ContractDefinition.js'),DecimalNumber:require('./DecimalNumber.js'),DoWhileStatement:require('./DoWhileStatement.js'),ElementaryTypeName:require('./ElementaryTypeName.js'),EmitStatement:require('./EmitStatement.js'),EnumDefinition:require('./EnumDefinition.js'),EnumValue:require('./EnumValue.js'),EventDefinition:require('./EventDefinition.js'),ExpressionStatement:require('./ExpressionStatement.js'),ForStatement:require('./ForStatement.js'),FunctionCall:require('./FunctionCall.js'),FunctionDefinition:require('./FunctionDefinition.js'),FunctionTypeName:require('./FunctionTypeName.js'),HexLiteral:require('./HexLiteral.js'),HexNumber:require('./HexNumber.js'),Identifier:require('./Identifier.js'),IfStatement:require('./IfStatement.js'),ImportDirective:require('./ImportDirective.js'),IndexAccess:require('./IndexAccess.js'),IndexRangeAccess:require('./IndexRangeAccess.js'),InheritanceSpecifier:require('./InheritanceSpecifier.js'),InlineAssemblyStatement:require('./InlineAssemblyStatement.js'),LabelDefinition:require('./LabelDefinition.js'),Mapping:require('./Mapping.js'),MemberAccess:require('./MemberAccess.js'),ModifierDefinition:require('./ModifierDefinition.js'),ModifierInvocation:require('./ModifierInvocation.js'),NameValueExpression:require('./NameValueExpression.js'),NameValueList:require('./NameValueList.js'),NewExpression:require('./NewExpression.js'),NumberLiteral:require('./NumberLiteral.js'),PragmaDirective:require('./PragmaDirective.js'),ReturnStatement:require('./ReturnStatement.js'),SourceUnit:require('./SourceUnit.js'),StateVariableDeclaration:require('./StateVariableDeclaration.js'),StringLiteral:require('./StringLiteral.js'),StructDefinition:require('./StructDefinition.js'),ThrowStatement:require('./ThrowStatement.js'),TryStatement:require('./TryStatement.js'),TupleExpression:require('./TupleExpression.js'),TypeNameExpression:require('./TypeNameExpression.js'),UnaryOperation:require('./UnaryOperation.js'),UserDefinedTypeName:require('./UserDefinedTypeName.js'),UsingForDeclaration:require('./UsingForDeclaration.js'),VariableDeclaration:require('./VariableDeclaration.js'),VariableDeclarationStatement:require('./VariableDeclarationStatement.js'),WhileStatement:require('./WhileStatement.js')};"
16+
module.exports = {ArrayTypeName:require('./ArrayTypeName.js'),AssemblyAssignment:require('./AssemblyAssignment.js'),AssemblyBlock:require('./AssemblyBlock.js'),AssemblyCall:require('./AssemblyCall.js'),AssemblyCase:require('./AssemblyCase.js'),AssemblyFor:require('./AssemblyFor.js'),AssemblyFunctionDefinition:require('./AssemblyFunctionDefinition.js'),AssemblyIf:require('./AssemblyIf.js'),AssemblyLocalDefinition:require('./AssemblyLocalDefinition.js'),AssemblyMemberAccess:require('./AssemblyMemberAccess.js'),AssemblySwitch:require('./AssemblySwitch.js'),BinaryOperation:require('./BinaryOperation.js'),Block:require('./Block.js'),BooleanLiteral:require('./BooleanLiteral.js'),BreakStatement:require('./BreakStatement.js'),CatchClause:require('./CatchClause.js'),Conditional:require('./Conditional.js'),ContinueStatement:require('./ContinueStatement.js'),ContractDefinition:require('./ContractDefinition.js'),DecimalNumber:require('./DecimalNumber.js'),DoWhileStatement:require('./DoWhileStatement.js'),ElementaryTypeName:require('./ElementaryTypeName.js'),EmitStatement:require('./EmitStatement.js'),EnumDefinition:require('./EnumDefinition.js'),EnumValue:require('./EnumValue.js'),EventDefinition:require('./EventDefinition.js'),ExpressionStatement:require('./ExpressionStatement.js'),ForStatement:require('./ForStatement.js'),FunctionCall:require('./FunctionCall.js'),FunctionDefinition:require('./FunctionDefinition.js'),FunctionTypeName:require('./FunctionTypeName.js'),HexLiteral:require('./HexLiteral.js'),HexNumber:require('./HexNumber.js'),Identifier:require('./Identifier.js'),IfStatement:require('./IfStatement.js'),ImportDirective:require('./ImportDirective.js'),IndexAccess:require('./IndexAccess.js'),IndexRangeAccess:require('./IndexRangeAccess.js'),InheritanceSpecifier:require('./InheritanceSpecifier.js'),InlineAssemblyStatement:require('./InlineAssemblyStatement.js'),LabelDefinition:require('./LabelDefinition.js'),Mapping:require('./Mapping.js'),MemberAccess:require('./MemberAccess.js'),ModifierDefinition:require('./ModifierDefinition.js'),ModifierInvocation:require('./ModifierInvocation.js'),NameValueExpression:require('./NameValueExpression.js'),NameValueList:require('./NameValueList.js'),NewExpression:require('./NewExpression.js'),NumberLiteral:require('./NumberLiteral.js'),PragmaDirective:require('./PragmaDirective.js'),ReturnStatement:require('./ReturnStatement.js'),SourceUnit:require('./SourceUnit.js'),StateVariableDeclaration:require('./StateVariableDeclaration.js'),StringLiteral:require('./StringLiteral.js'),StructDefinition:require('./StructDefinition.js'),ThrowStatement:require('./ThrowStatement.js'),TryStatement:require('./TryStatement.js'),TupleExpression:require('./TupleExpression.js'),TypeNameExpression:require('./TypeNameExpression.js'),UnaryOperation:require('./UnaryOperation.js'),UserDefinedTypeName:require('./UserDefinedTypeName.js'),UsingForDeclaration:require('./UsingForDeclaration.js'),VariableDeclaration:require('./VariableDeclaration.js'),VariableDeclarationStatement:require('./VariableDeclarationStatement.js'),WhileStatement:require('./WhileStatement.js')};"
1717
`;

src/binary-operator-printers/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* This file was automatically generated on 1589415198.559 */
1+
/* This file was automatically generated on 1599144978.689 */
22

33
/* eslint-disable global-require */
44

src/nodes/AssemblyMemberAccess.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
const {
2+
doc: {
3+
builders: { concat }
4+
}
5+
} = require('prettier/standalone');
6+
7+
const AssemblyMemberAccess = {
8+
print: ({ path, print }) => {
9+
return concat([
10+
path.call(print, 'expression'),
11+
'.',
12+
path.call(print, 'memberName')
13+
]);
14+
}
15+
};
16+
17+
module.exports = AssemblyMemberAccess;

src/nodes/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* This file was automatically generated on 1589415198.485 */
1+
/* This file was automatically generated on 1599144978.631 */
22

33
/* eslint-disable global-require */
44

@@ -12,6 +12,7 @@ module.exports = {
1212
AssemblyFunctionDefinition: require('./AssemblyFunctionDefinition.js'),
1313
AssemblyIf: require('./AssemblyIf.js'),
1414
AssemblyLocalDefinition: require('./AssemblyLocalDefinition.js'),
15+
AssemblyMemberAccess: require('./AssemblyMemberAccess.js'),
1516
AssemblySwitch: require('./AssemblySwitch.js'),
1617
BinaryOperation: require('./BinaryOperation.js'),
1718
Block: require('./Block.js'),

tests/Assembly/Assembly.sol

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,4 +152,12 @@ function $somefn(somearg) {
152152

153153
assembly { let result }
154154
}
155+
156+
function memberAccess ( ) {
157+
158+
assembly {
159+
ds.slot := position
160+
offset := x.offset
161+
}
162+
}
155163
}

tests/Assembly/__snapshots__/jsfmt.spec.js.snap

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,14 @@ function $somefn(somearg) {
155155
156156
assembly { let result }
157157
}
158+
159+
function memberAccess ( ) {
160+
161+
assembly {
162+
ds.slot := position
163+
offset := x.offset
164+
}
165+
}
158166
}
159167
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
160168
contract Assembly {
@@ -347,6 +355,13 @@ contract Assembly {
347355
let result
348356
}
349357
}
358+
359+
function memberAccess() {
360+
assembly {
361+
ds.slot := position
362+
offset := x.offset
363+
}
364+
}
350365
}
351366
352367
`;

0 commit comments

Comments
 (0)