Skip to content

Commit 550e23d

Browse files
authored
codegen: Change as to changetype (#756)
1 parent a707cb1 commit 550e23d

File tree

1 file changed

+38
-34
lines changed

1 file changed

+38
-34
lines changed

src/codegen/abi.js

Lines changed: 38 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -274,8 +274,8 @@ module.exports = class AbiCodeGenerator {
274274
let isTupleType = util.isTupleType(type)
275275
let returnValue = typesCodegen.ethereumToAsc(
276276
parentType === 'tuple'
277-
? `this[${index}]`
278-
: `this._${parentType}.${parentField}[${index}].value`,
277+
? `this[${index}]`
278+
: `this._${parentType}.${parentField}[${index}].value`,
279279
type,
280280
tupleClassName,
281281
)
@@ -286,7 +286,9 @@ module.exports = class AbiCodeGenerator {
286286
[],
287287
util.isTupleArrayType(type) ? `Array<${tupleClassName}>` : tupleClassName,
288288
`
289-
return ${isTupleType ? `changetype<${tupleClassName}>(${returnValue})` : `${returnValue}`}
289+
return ${
290+
isTupleType ? `changetype<${tupleClassName}>(${returnValue})` : `${returnValue}`
291+
}
290292
`,
291293
)
292294

@@ -510,8 +512,8 @@ module.exports = class AbiCodeGenerator {
510512
: ''
511513
}]`
512514

513-
let methodCallBody = isTry =>
514-
`
515+
let methodCallBody = isTry => {
516+
const methodBody = `
515517
${
516518
isTry
517519
? `
@@ -525,9 +527,9 @@ module.exports = class AbiCodeGenerator {
525527
let result = super.call(${superInputs})
526528
527529
return (`
528-
}
529-
${
530-
simpleReturnType
530+
}`
531+
532+
const returnVal = simpleReturnType
531533
? typesCodegen.ethereumToAsc(
532534
isTry ? 'value[0]' : 'result[0]',
533535
outputs.get(0).get('type'),
@@ -542,34 +544,36 @@ module.exports = class AbiCodeGenerator {
542544
)
543545
: `new ${returnType.name}(
544546
${outputs
545-
.map(
546-
(output, index) =>
547-
`${typesCodegen.ethereumToAsc(
548-
isTry ? `value[${index}]` : `result[${index}]`,
549-
output.get('type'),
550-
util.isTupleArrayType(output.get('type'))
551-
? this._tupleTypeName(
552-
output,
553-
index,
554-
tupleResultParentType,
555-
this.abi.name,
556-
)
557-
: '',
558-
)} ${
559-
util.isTupleType(output.get('type'))
560-
? 'as ' +
561-
this._tupleTypeName(
562-
output,
563-
index,
564-
tupleResultParentType,
565-
this.abi.name,
566-
)
567-
: ''
568-
}`,
569-
)
547+
.map((output, index) => {
548+
const val = typesCodegen.ethereumToAsc(
549+
isTry ? `value[${index}]` : `result[${index}]`,
550+
output.get('type'),
551+
util.isTupleArrayType(output.get('type'))
552+
? this._tupleTypeName(
553+
output,
554+
index,
555+
tupleResultParentType,
556+
this.abi.name,
557+
)
558+
: '',
559+
)
560+
return util.isTupleType(output.get('type'))
561+
? `changetype<${this._tupleTypeName(
562+
output,
563+
index,
564+
tupleResultParentType,
565+
this.abi.name,
566+
)}>(${val})`
567+
: val
568+
})
570569
.join(', ')}
571570
)`
572-
} ${util.isTupleType(outputs.get(0).get('type')) ? 'as ' + returnType : ''} )`
571+
572+
const isTuple = util.isTupleType(outputs.get(0).get('type'))
573+
return `${methodBody} ${
574+
isTuple ? `changetype<${returnType}>(${returnVal})` : returnVal
575+
})`
576+
}
573577

574578
// Generate method with an without `try_`.
575579
klass.addMethod(

0 commit comments

Comments
 (0)