import { Type } from "./type"; import { Literal } from "./literal"; declare type Metadata = number; export declare enum PatternTag { HAS_TYPE = 0, GLOBAL = 1, STATIC_TYPE = 2, VARIABLE = 3, SELF = 4, WILDCARD = 5, LITERAL = 6 } export declare type Pattern = TypePattern | GlobalPattern | VariablePattern | SelfPattern | WildcardPattern | LiteralPattern | StaticTypePattern; export declare abstract class PatternBase { } export declare class TypePattern extends PatternBase { readonly meta: Metadata; readonly type: Type; readonly pattern: Pattern; readonly tag = PatternTag.HAS_TYPE; constructor(meta: Metadata, type: Type, pattern: Pattern); } export declare class LiteralPattern extends PatternBase { readonly meta: Metadata; readonly literal: Literal; readonly tag = PatternTag.LITERAL; constructor(meta: Metadata, literal: Literal); } export declare class GlobalPattern extends PatternBase { readonly meta: Metadata; readonly name: string; readonly tag = PatternTag.GLOBAL; constructor(meta: Metadata, name: string); } export declare class SelfPattern extends PatternBase { readonly meta: Metadata; readonly tag = PatternTag.SELF; constructor(meta: Metadata); } export declare class VariablePattern extends PatternBase { readonly meta: Metadata; readonly name: string; readonly tag = PatternTag.VARIABLE; constructor(meta: Metadata, name: string); } export declare class WildcardPattern extends PatternBase { readonly meta: Metadata; readonly tag = PatternTag.WILDCARD; constructor(meta: Metadata); } export declare class StaticTypePattern extends PatternBase { readonly meta: Metadata; readonly type: Type; readonly tag = PatternTag.STATIC_TYPE; constructor(meta: Metadata, type: Type); } export {};