81 lines
1.3 KiB
JavaScript
81 lines
1.3 KiB
JavaScript
/**
|
|
* @flow
|
|
*/
|
|
|
|
export type InferredType =
|
|
| 'unknown'
|
|
| 'gender'
|
|
| 'enum'
|
|
| 'number-or-string'
|
|
| 'number'
|
|
| 'string'
|
|
| 'error'
|
|
;
|
|
|
|
export type Pos = {
|
|
firstLine: number,
|
|
firstColumn: number,
|
|
lastLine: number,
|
|
lastColumn: number,
|
|
};
|
|
|
|
export type TypedBinaryOpNode = {
|
|
exprNodeType: 'binary_op',
|
|
binaryOp: 'plus' | 'multiply' | 'divide' | 'minus',
|
|
lhs: TypedNode,
|
|
rhs: TypedNode,
|
|
pos: Pos,
|
|
exprType: InferredType,
|
|
typed: true,
|
|
}
|
|
|
|
export type TypedUnaryMinusNode = {
|
|
exprNodeType: 'unary_minus',
|
|
op: TypedNode,
|
|
pos: Pos,
|
|
exprType: InferredType,
|
|
typed: true,
|
|
}
|
|
|
|
export type TypedNumberNode = {
|
|
exprNodeType: 'number',
|
|
value: number,
|
|
pos: Pos,
|
|
exprType: 'number',
|
|
typed: true,
|
|
}
|
|
|
|
export type TypedStringLiteralNode = {
|
|
exprNodeType: 'string_literal',
|
|
value: string,
|
|
pos: Pos,
|
|
exprType: 'string',
|
|
typed: true,
|
|
}
|
|
|
|
export type TypedVariableNode = {
|
|
exprNodeType: 'variable',
|
|
name: string,
|
|
pos: Pos,
|
|
exprType: InferredType,
|
|
typed: true,
|
|
};
|
|
|
|
export type TypedFunctionInvocationNode = {
|
|
exprNodeType: 'function_invocation',
|
|
name: string,
|
|
parameters: TypedNode[],
|
|
pos: Pos,
|
|
exprType: 'error' | 'string',
|
|
typed: true,
|
|
}
|
|
|
|
export type TypedNode =
|
|
| TypedBinaryOpNode
|
|
| TypedUnaryMinusNode
|
|
| TypedNumberNode
|
|
| TypedStringLiteralNode
|
|
| TypedVariableNode
|
|
| TypedFunctionInvocationNode
|
|
;
|