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
|
||
|
;
|