MCPcopy Create free account
hub / github.com/d1ll0n/stack-packer / getReadField

Function getReadField

src/code-gen/fields.ts:275–303  ·  view source on GitHub ↗
(
  struct: AbiStruct,
  field: AbiStructField,
  offset: number,
  context: FileContext,
  maxValueReference: string
)

Source from the content-addressed store, hash-verified

273};
274
275export const getReadField = (
276 struct: AbiStruct,
277 field: AbiStructField,
278 offset: number,
279 context: FileContext,
280 maxValueReference: string
281) => {
282 if (field.type.meta !== "elementary" && field.type.meta !== 'enum') throw Error("Unsupported field!");
283 const constantsPrefix = `${struct.name}_${field.name}`;
284 const size = field.type.size;
285 const bitsAfter = 256 - (offset + size);
286 let rightAligned = "encoded";
287 if (bitsAfter > 0) {
288 const bitsAfterName = `${constantsPrefix}_bitsAfter`;
289 const bitsAfterReference = context.addConstant(bitsAfterName, toHex(bitsAfter));
290 rightAligned = `shr(${bitsAfterReference}, encoded)`;
291 }
292 if (field.type.meta === "elementary" && field.type.type === 'int') {
293 const bytesLess1 = (field.type.size / 8) - 1;
294 return `signextend(${toHex(bytesLess1)}, ${rightAligned})`
295 }
296 let masked = rightAligned;
297 if (offset > 0) {
298 // const maskName = `MaskOnlyLast${numberToPascalCaseWords(size / 8)}Bytes`;
299 // const maskReference = context.addConstant(maskName, getInclusionMask(size));
300 masked = `and(${maxValueReference}, ${rightAligned})`;
301 }
302 return masked;
303};

Callers 1

processFieldsFunction · 0.85

Calls 2

toHexFunction · 0.90
addConstantMethod · 0.80

Tested by

no test coverage detected