UNPKG

@composita/compiler

Version:

Composita language compiler.

52 lines (42 loc) 1.22 kB
import { SourceLocation } from '../source-location/location'; import { Node } from './node'; import { Visitor } from './visitor'; import { RequiredInterfaceNode, OfferedInterfaceNode } from './interface-declaration'; enum TypeTag { Tag, } export abstract class TypeNode extends Node { protected readonly _tag: TypeTag = TypeTag.Tag; accept(visitor: Visitor): void { visitor.visitType(this); } } export class BasicTypeNode extends TypeNode { constructor(location: SourceLocation, private identifier: string) { super(location); } getIdentifier(): string { return this.identifier; } accept(visitor: Visitor): void { visitor.visitBasicType(this); } } export class AnyTypeNode extends TypeNode { constructor( location: SourceLocation, private offered: Array<OfferedInterfaceNode>, private required: Array<RequiredInterfaceNode>, ) { super(location); } getOffered(): Array<OfferedInterfaceNode> { return this.offered; } getRequired(): Array<RequiredInterfaceNode> { return this.required; } accept(visitor: Visitor): void { visitor.visitAnyType(this); } }