Handle user defined types in visitor methods when continuing on error

This commit is contained in:
Shreerang Kale 2025-08-11 19:19:35 +05:30
parent b572eb9032
commit c557cbe035

View File

@ -69,16 +69,18 @@ export class Visitor {
return { name: item.name, type: item.typeName.name };
});
let errorMessage = '';
// Check for unhandled return type params
node.returnParameters.forEach(returnParameter => {
assert(returnParameter.typeName);
const isTypeHandled = ['ElementaryTypeName', 'ArrayTypeName'].includes(returnParameter.typeName.type);
if (!isTypeHandled) {
const errorMessage = `No support in codegen for type ${returnParameter.typeName.type} from method "${node.name}"`;
errorMessage = `No support in codegen for type ${returnParameter.typeName.type} from method "${node.name}"`;
if (this._continueOnError) {
console.log(errorMessage);
return;
}
@ -86,6 +88,11 @@ export class Visitor {
}
});
if (this._continueOnError && errorMessage !== '') {
console.log(errorMessage);
return;
}
this._schema.addQuery(name, params, node.returnParameters);
this._resolvers.addQuery(name, params);
assert(this._contract);
@ -125,12 +132,24 @@ export class Visitor {
// If the variable type is mapping, extract key as a param:
// Eg. mapping(address => mapping(address => uint256)) private _allowances;
while (typeName.type === 'Mapping') {
assert(typeName.keyType.type === 'ElementaryTypeName', 'UserDefinedTypeName map keys like enum type not handled');
if (typeName.keyType.type === 'UserDefinedTypeName') {
errorMessage = 'No support in codegen for user defined type map keys';
break;
}
params.push({ name: `key${numParams.toString()}`, type: typeName.keyType.name });
typeName = typeName.valueType;
numParams++;
}
if (typeName.type === 'UserDefinedTypeName') {
errorMessage = 'No support in codegen for user defined type map values';
}
if (errorMessage !== '') {
break;
}
// falls through
}