Skip to content

Commit

Permalink
Add support for member access in assembly (#332)
Browse files Browse the repository at this point in the history
  • Loading branch information
fvictorio authored Sep 5, 2020
1 parent 76687a2 commit de4ff5e
Show file tree
Hide file tree
Showing 9 changed files with 49 additions and 7 deletions.
1 change: 1 addition & 0 deletions __tests__/nodes/__snapshots__/index.test.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Array [
"AssemblyFunctionDefinition",
"AssemblyIf",
"AssemblyLocalDefinition",
"AssemblyMemberAccess",
"AssemblySwitch",
"BinaryOperation",
"Block",
Expand Down
6 changes: 3 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@
"jest-watch-typeahead": "^0.6.0"
},
"dependencies": {
"@solidity-parser/parser": "^0.7.0",
"@solidity-parser/parser": "^0.8.0",
"dir-to-object": "^2.0.0",
"emoji-regex": "^9.0.0",
"escape-string-regexp": "^4.0.0",
Expand Down
2 changes: 1 addition & 1 deletion scripts/__snapshots__/makeData.test.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ exports[`makeData to match snapshot for nodes 1`] = `
/* eslint-disable global-require */
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')};"
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')};"
`;
2 changes: 1 addition & 1 deletion src/binary-operator-printers/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* This file was automatically generated on 1589415198.559 */
/* This file was automatically generated on 1599144978.689 */

/* eslint-disable global-require */

Expand Down
17 changes: 17 additions & 0 deletions src/nodes/AssemblyMemberAccess.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
const {
doc: {
builders: { concat }
}
} = require('prettier/standalone');

const AssemblyMemberAccess = {
print: ({ path, print }) => {
return concat([
path.call(print, 'expression'),
'.',
path.call(print, 'memberName')
]);
}
};

module.exports = AssemblyMemberAccess;
3 changes: 2 additions & 1 deletion src/nodes/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* This file was automatically generated on 1589415198.485 */
/* This file was automatically generated on 1599144978.631 */

/* eslint-disable global-require */

Expand All @@ -12,6 +12,7 @@ module.exports = {
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'),
Expand Down
8 changes: 8 additions & 0 deletions tests/Assembly/Assembly.sol
Original file line number Diff line number Diff line change
Expand Up @@ -152,4 +152,12 @@ function $somefn(somearg) {

assembly { let result }
}

function memberAccess ( ) {

assembly {
ds.slot := position
offset := x.offset
}
}
}
15 changes: 15 additions & 0 deletions tests/Assembly/__snapshots__/jsfmt.spec.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,14 @@ function $somefn(somearg) {
assembly { let result }
}
function memberAccess ( ) {
assembly {
ds.slot := position
offset := x.offset
}
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
contract Assembly {
Expand Down Expand Up @@ -347,6 +355,13 @@ contract Assembly {
let result
}
}
function memberAccess() {
assembly {
ds.slot := position
offset := x.offset
}
}
}
`;

0 comments on commit de4ff5e

Please sign in to comment.