@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
93 lines (92 loc) • 3.29 kB
TypeScript
import ts from 'typescript';
import { StructuredStorageType } from '../compile/constants';
import { Context } from '../Context';
export interface PropInfoBase {
readonly classDecl: ts.ClassDeclaration | ts.ClassExpression;
readonly isPublic: boolean;
}
export interface DeployPropInfo extends PropInfoBase {
readonly type: 'deploy';
readonly name: string;
readonly isMixinDeploy: boolean;
readonly decl?: ts.ConstructorDeclaration;
readonly callSignature?: ts.Signature;
}
export interface RefundAssetsPropInfo extends PropInfoBase {
readonly type: 'refundAssets';
readonly name: string;
}
export interface CompleteSendPropInfo extends PropInfoBase {
readonly type: 'completeSend';
readonly name: string;
}
export interface UpgradePropInfo extends PropInfoBase {
readonly type: 'upgrade';
readonly name: string;
readonly approveUpgrade: ts.PropertyDeclaration | ts.MethodDeclaration;
}
export interface FunctionPropInfo extends PropInfoBase {
readonly type: 'function';
readonly name: string;
readonly symbol: ts.Symbol;
readonly decl: ts.PropertyDeclaration | ts.MethodDeclaration;
readonly callSignature: ts.Signature | undefined;
readonly send: boolean;
readonly sendUnsafe: boolean;
readonly receive: boolean;
readonly claim: boolean;
readonly constant: boolean;
readonly acceptsClaim: boolean;
readonly returnType: ts.Type | undefined;
readonly isAbstract: boolean;
}
export interface PropertyPropInfo extends PropInfoBase {
readonly type: 'property';
readonly name: string;
readonly symbol: ts.Symbol;
readonly decl: ts.PropertyDeclaration | ts.ParameterPropertyDeclaration;
readonly propertyType: ts.Type | undefined;
readonly isReadonly: boolean;
readonly isAbstract: boolean;
readonly structuredStorageType: StructuredStorageType | undefined;
}
export interface AccessorPropInfo extends PropInfoBase {
readonly type: 'accessor';
readonly name: string;
readonly symbol: ts.Symbol;
readonly getter?: {
readonly name: string;
readonly decl: ts.GetAccessorDeclaration;
readonly constant: boolean;
};
readonly setter?: {
readonly name: string;
readonly decl: ts.SetAccessorDeclaration;
};
readonly propertyType: ts.Type | undefined;
}
export declare type PropInfo = PropertyPropInfo | AccessorPropInfo | FunctionPropInfo | DeployPropInfo | RefundAssetsPropInfo | UpgradePropInfo | CompleteSendPropInfo;
export interface ContractInfo {
readonly smartContract: ts.ClassDeclaration | ts.ClassExpression;
readonly propInfos: ReadonlyArray<PropInfo>;
readonly superSmartContract?: ContractInfo;
}
export declare class ContractInfoProcessor {
readonly context: Context;
readonly smartContract: ts.ClassDeclaration;
constructor(context: Context, smartContract: ts.ClassDeclaration);
process(): ContractInfo;
private processClass;
private processProperty;
private hasConstant;
private hasSend;
private hasSendUnsafe;
private hasReceive;
private hasClaim;
private hasDecorator;
private isValidDecorator;
private isDecorator;
private isLastParamClaim;
private hasDeployInfo;
private getApproveUpgradeDecl;
}