types.js 947 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import { BaseTypes } from './baseTypes';
  2. import { MultiType } from "./multiType";
  3. export class Type {
  4. constructor(baseType) {
  5. this.baseType = baseType;
  6. }
  7. get value () {
  8. return this.baseType.value;
  9. }
  10. get ord () {
  11. return this.baseType.ord;
  12. }
  13. isCompatible (another) {
  14. if(another instanceof Type) {
  15. return this.baseType.isCompatible(another.baseType);
  16. }
  17. return false;
  18. }
  19. }
  20. const INTEGER = new Type(BaseTypes.INTEGER);
  21. const REAL = new Type(BaseTypes.REAL);
  22. const STRING = new Type(BaseTypes.STRING);
  23. const BOOLEAN = new Type(BaseTypes.BOOLEAN);
  24. const VOID = new Type(BaseTypes.VOID);
  25. const UNDEFINED = new Type(BaseTypes.UNDEFINED);
  26. const ALL = new MultiType(innerTypes.INTEGER, innerTypes.REAL, innerTypes.STRING, innerTypes.BOOLEAN);
  27. export const Types = Object.freeze({
  28. INTEGER: INTEGER,
  29. REAL: REAL,
  30. STRING: STRING,
  31. BOOLEAN: BOOLEAN,
  32. VOID: VOID,
  33. UNDEFINED: UNDEFINED,
  34. ALL: ALL
  35. });