Skip to content
This repository has been archived by the owner on Sep 5, 2023. It is now read-only.

replaced CairoAssert by FunctionCall #1057

Merged
Merged
31 changes: 0 additions & 31 deletions src/ast/cairoNodes/cairoAssert.ts

This file was deleted.

1 change: 0 additions & 1 deletion src/ast/cairoNodes/export.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
export * from './cairoAssert';
export * from './cairoFunctionDefinition';
export * from './cairoContract';
export * from './cairoTempVarStatement';
1 change: 0 additions & 1 deletion src/ast/cairoNodes/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
export * from './cairoAssert';
export * from './cairoContract';
export * from './cairoGeneratedFunctionDefinition';
export * from './cairoFunctionDefinition';
Expand Down
11 changes: 1 addition & 10 deletions src/ast/visitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,12 +65,7 @@ import {
StatementWithChildren,
ASTNodeWithChildren,
} from 'solc-typed-ast';
import {
CairoAssert,
CairoContract,
CairoFunctionDefinition,
CairoTempVarStatement,
} from './cairoNodes';
import { CairoContract, CairoFunctionDefinition, CairoTempVarStatement } from './cairoNodes';

import { AST } from './ast';
import { CairoGeneratedFunctionDefinition } from './cairoNodes/cairoGeneratedFunctionDefinition';
Expand Down Expand Up @@ -106,7 +101,6 @@ export abstract class ASTVisitor<T> {
// Expression
else if (node instanceof Assignment) res = this.visitAssignment(node, ast);
else if (node instanceof BinaryOperation) res = this.visitBinaryOperation(node, ast);
else if (node instanceof CairoAssert) res = this.visitCairoAssert(node, ast);
else if (node instanceof Conditional) res = this.visitConditional(node, ast);
else if (node instanceof ElementaryTypeNameExpression)
res = this.visitElementaryTypeNameExpression(node, ast);
Expand Down Expand Up @@ -349,9 +343,6 @@ export abstract class ASTVisitor<T> {
visitSourceUnit(node: SourceUnit, ast: AST): T {
return this.visitASTNodeWithChildren(node, ast);
}
visitCairoAssert(node: CairoAssert, ast: AST): T {
return this.visitExpression(node, ast);
}
visitTypeName(node: TypeName, ast: AST): T {
return this.commonVisit(node, ast);
}
Expand Down
3 changes: 0 additions & 3 deletions src/cairoWriter/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ import {
WhileStatement,
} from 'solc-typed-ast';
import {
CairoAssert,
CairoContract,
CairoFunctionDefinition,
CairoGeneratedFunctionDefinition,
Expand All @@ -69,7 +68,6 @@ import {
AssignmentWriter,
BinaryOperationWriter,
BlockWriter,
CairoAssertWriter,
CairoContractWriter,
CairoFunctionDefinitionWriter,
CairoTempVarWriter,
Expand Down Expand Up @@ -104,7 +102,6 @@ export const CairoASTMapping = (ast: AST, throwOnUnimplemented: boolean) =>
[BinaryOperation, new BinaryOperationWriter(ast, throwOnUnimplemented)],
[Block, new BlockWriter(ast, throwOnUnimplemented)],
[Break, new NotImplementedWriter(ast, throwOnUnimplemented)],
[CairoAssert, new CairoAssertWriter(ast, throwOnUnimplemented)],
[CairoContract, new CairoContractWriter(ast, throwOnUnimplemented)],
[CairoFunctionDefinition, new CairoFunctionDefinitionWriter(ast, throwOnUnimplemented)],
[
Expand Down
11 changes: 0 additions & 11 deletions src/cairoWriter/writers/cairoAssertWriter.ts

This file was deleted.

4 changes: 1 addition & 3 deletions src/cairoWriter/writers/expressionStatementWriter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import {
FunctionCallKind,
SrcDesc,
} from 'solc-typed-ast';
import { CairoAssert } from '../../ast/cairoNodes';
import { CairoASTNodeWriter } from '../base';
import { getDocumentation } from '../utils';

Expand All @@ -17,8 +16,7 @@ export class ExpressionStatementWriter extends CairoASTNodeWriter {
if (
(node.vExpression instanceof FunctionCall &&
node.vExpression.kind !== FunctionCallKind.StructConstructorCall) ||
node.vExpression instanceof Assignment ||
node.vExpression instanceof CairoAssert
node.vExpression instanceof Assignment
) {
return [[documentation, `${writer.write(node.vExpression)};`].join('\n')];
} else {
Expand Down
4 changes: 3 additions & 1 deletion src/cairoWriter/writers/functionCallWriter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ export class FunctionCallWriter extends CairoASTNodeWriter {
const func = writer.write(node.vExpression);
switch (node.kind) {
case FunctionCallKind.FunctionCall: {
if (node.vExpression instanceof MemberAccess) {
if (['assert', 'require', 'revert'].includes(func)) {
return [`assert(${args}${node.vArguments.length === 1 ? ", 'Assertion error'" : ''})`];
} else if (node.vExpression instanceof MemberAccess) {
// check if we're calling a member of a contract
const nodeType = safeGetNodeType(node.vExpression.vExpression, this.ast.inference);
if (
Expand Down
1 change: 0 additions & 1 deletion src/cairoWriter/writers/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
export * from './assignmentWriter';
export * from './binaryOperationWriter';
export * from './blockWriter';
export * from './cairoAssertWriter';
export * from './cairoContractWriter';
export * from './cairoFunctionDefinitionWriter';
export * from './cairoGeneratedFunctionDefinitionWriter';
Expand Down
24 changes: 9 additions & 15 deletions src/passes/builtinHandler/require.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,9 @@ import {
ExpressionStatement,
ExternalReferenceType,
FunctionCall,
Literal,
Return,
} from 'solc-typed-ast';
import { AST } from '../../ast/ast';
import { CairoAssert } from '../../ast/cairoNodes';
import { ASTMapper } from '../../ast/mapper';
import { createBoolLiteral } from '../../utils/nodeTemplates';

Expand Down Expand Up @@ -50,33 +48,29 @@ export class Require extends ASTMapper {
}

if (expression.vIdentifier === 'require' || expression.vIdentifier === 'assert') {
const requireMessage =
expression.vArguments[1] instanceof Literal ? expression.vArguments[1].value : null;

return new ExpressionStatement(
ast.reserveId(),
expression.src,
new CairoAssert(
new FunctionCall(
ast.reserveId(),
expression.src,
expression.vArguments[0],
requireMessage,
expression.raw,
expression.typeString,
expression.kind,
expression.vExpression,
expression.vArguments,
),
);
} else if (expression.vIdentifier === 'revert') {
const revertMessage =
expression.vArguments[0] instanceof Literal ? expression.vArguments[0].value : null;

return new ExpressionStatement(
ast.reserveId(),
expression.src,
new CairoAssert(
new FunctionCall(
ast.reserveId(),
expression.src,
expression.typeString,
expression.kind,
createBoolLiteral(false, ast),
revertMessage,
expression.raw,
expression.vArguments,
),
);
}
Expand Down
3 changes: 1 addition & 2 deletions src/passes/references/expectedLocationAnalyser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import {
VariableDeclarationStatement,
} from 'solc-typed-ast';
import { AST } from '../../ast/ast';
import { CairoAssert } from '../../ast/cairoNodes';
import { ASTMapper } from '../../ast/mapper';
import { locationIfComplexType } from '../../cairoUtilFuncGen/base';
import { printNode } from '../../utils/astPrinter';
Expand Down Expand Up @@ -320,7 +319,7 @@ export class ExpectedLocationAnalyser extends ASTMapper {
this.visitStatement(node, ast);
}

visitCairoAssert(node: CairoAssert, ast: AST): void {
visitCairoAssert(node: FunctionCall, ast: AST): void {
this.expectedLocations.set(node.vExpression, DataLocation.Default);
this.visitExpression(node, ast);
}
Expand Down
10 changes: 0 additions & 10 deletions src/solWriter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import {
SrcDesc,
} from 'solc-typed-ast';
import {
CairoAssert,
CairoContract,
CairoFunctionDefinition,
CairoGeneratedFunctionDefinition,
Expand Down Expand Up @@ -108,21 +107,12 @@ class CairoImportFunctionDefinitionSolWriter extends ASTNodeWriter {
}
}

class CairoAssertSolWriter extends ASTNodeWriter {
writeInner(node: CairoAssert, writer: ASTWriter): SrcDesc {
const result: SrcDesc = [];
result.push(`<cairo information> assert ${writer.write(node.vExpression)} = 1`);
return result;
}
}

const CairoExtendedASTWriterMapping = (printStubs: boolean) =>
new Map<ASTNodeConstructor<ASTNode>, ASTNodeWriter>([
[CairoContract, new CairoContractSolWriter()],
[CairoFunctionDefinition, new CairoFunctionDefinitionSolWriter(printStubs)],
[CairoGeneratedFunctionDefinition, new CairoGeneratedFunctionDefinitionSolWriter()],
[CairoImportFunctionDefinition, new CairoImportFunctionDefinitionSolWriter()],
[CairoAssert, new CairoAssertSolWriter()],
]);

export const CairoToSolASTWriterMapping = (printStubs: boolean) =>
Expand Down
4 changes: 1 addition & 3 deletions src/utils/astChecking.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ import {
} from 'solc-typed-ast';
import { pp } from 'solc-typed-ast/dist/misc/index';
import { AST } from '../ast/ast';
import { CairoAssert, CairoTempVarStatement } from '../ast/cairoNodes';
import { CairoTempVarStatement } from '../ast/cairoNodes';
import { ASTMapper } from '../ast/mapper';
import { printNode } from './astPrinter';
import { InsaneASTError } from './errors';
Expand Down Expand Up @@ -667,8 +667,6 @@ export function checkSane(unit: SourceUnit, ctx: ASTContext): void {
} else if (node instanceof UnaryOperation) {
checkVFieldCtx(node, 'vSubExpression', ctx);
checkDirectChildren(node, 'vSubExpression');
} else if (node instanceof CairoAssert) {
checkDirectChildren(node, 'vExpression');
} else if (node instanceof CairoTempVarStatement) {
// Not being checked because this node does not get affected by any
// other ast pass
Expand Down
10 changes: 1 addition & 9 deletions src/utils/cloning.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ import {
WhileStatement,
} from 'solc-typed-ast';
import { AST } from '../ast/ast';
import { CairoAssert, CairoFunctionDefinition } from '../ast/cairoNodes';
import { CairoFunctionDefinition } from '../ast/cairoNodes';
import { printNode } from './astPrinter';
import { NotSupportedYetError, TranspileFailedError } from './errors';
import { createParameterList } from './nodeTemplates';
Expand Down Expand Up @@ -104,14 +104,6 @@ function cloneASTNodeImpl<T extends ASTNode>(
cloneASTNodeImpl(node.vRightExpression, ast, remappedIds),
node.raw,
);
} else if (node instanceof CairoAssert) {
newNode = new CairoAssert(
replaceId(node.id, ast, remappedIds),
node.src,
cloneASTNodeImpl(node.vExpression, ast, remappedIds),
node.assertMessage,
node.raw,
);
} else if (node instanceof ElementaryTypeNameExpression) {
newNode = new ElementaryTypeNameExpression(
replaceId(node.id, ast, remappedIds),
Expand Down
1 change: 0 additions & 1 deletion src/utils/nodeTypeProcessing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ import { TranspileFailedError } from './errors';
import { error } from './formatting';
import { getContainingSourceUnit } from './utils';
import { getNodeType, getNodeTypeInCtx } from './typeStrings/typeStringParser';
import { CairoAssert } from '../ast/cairoNodes'; // eslint-disable-line

/*
Normal function calls and struct constructors require different methods for
Expand Down