0xweb
Version:
Contract package manager and other web3 tools
38 lines (33 loc) • 1.14 kB
text/typescript
import { EvmBytecode } from '../EvmBytecode';
import Opcode from '../interfaces/IOpcode';
import stringify from '../utils/stringify';
export class RETURNDATACOPY {
readonly name: string;
readonly type?: string;
readonly wrapped: boolean;
readonly returnDataPosition: any;
readonly returnDataSize: any;
constructor(returnDataPosition: any, returnDataSize: any) {
this.name = 'RETURNDATACOPY';
this.wrapped = true;
this.returnDataPosition = returnDataPosition;
this.returnDataSize = returnDataSize;
}
toString() {
return (
'output[' +
stringify(this.returnDataPosition) +
':(' +
stringify(this.returnDataPosition) +
'+' +
stringify(this.returnDataSize) +
')]'
);
}
}
export default (opcode: Opcode, state: EvmBytecode): void => {
const memoryPosition = state.stack.pop();
const returnDataPosition = state.stack.pop();
const returnDataSize = state.stack.pop();
state.memory[memoryPosition] = new RETURNDATACOPY(returnDataPosition, returnDataSize);
};