HomeMAL' // MANUFACTORUM
datacrypt
Piton / src / typed-builtin.rkt
src/typed-builtin.rkt2.4 KB
#lang racket/base

(require (prefix-in std- "types.rkt"))
(provide (all-defined-out))

(define lib
  (hash
   "input"      (std-func std-str (list std-str))
   ; print functions
   "print_int"  (std-func std-none (list std-int))
   "print_str"  (std-func std-none (list std-str))
   "print_bool" (std-func std-none (list std-bool))
   ; string functions
   "str_len"    (std-func std-int (list std-str))))

;; (name . return-type) of internal functions performing operations
(define ops
  (hash
   ; integer operations
   (list '+ std-int std-int)      (cons "add_ints" std-int)
   (list '- std-int std-int)      (cons "sub_ints" std-int)
   (list '* std-int std-int)      (cons "mul_ints" std-int)
   (list '/ std-int std-int)      (cons "div_ints" std-int)  ; TODO convert to float
   (list '== std-int std-int)     (cons "eq_ints" std-bool)
   (list '!= std-int std-int)     (cons "neq_ints" std-bool)
   (list '> std-int std-int)      (cons "gt_ints" std-bool)
   (list '< std-int std-int)      (cons "lt_ints" std-bool)
   (list '>= std-int std-int)     (cons "gte_ints" std-bool)
   (list '<= std-int std-int)     (cons "lte_ints" std-bool)
   (list 'lnot std-int)           (cons "lnot_bool" std-bool)
   ; bool operations
   (list '+ std-bool std-bool)    (cons "add_ints" std-int)
   (list '- std-bool std-bool)    (cons "sub_ints" std-int)
   (list '* std-bool std-bool)    (cons "mul_ints" std-int)
   (list '/ std-bool std-bool)    (cons "div_ints" std-int) ; TODO convert to float
   (list '== std-bool std-bool)   (cons "eq_ints" std-bool)
   (list '!= std-bool std-bool)   (cons "neq_ints" std-bool)
   (list '> std-bool std-bool)    (cons "gt_ints" std-bool)
   (list '< std-bool std-bool)    (cons "lt_ints" std-bool)
   (list '>= std-bool std-bool)   (cons "gte_ints" std-bool)
   (list '<= std-bool std-bool)   (cons "lte_ints" std-bool)
   (list 'land std-bool std-bool) (cons "land_bools" std-bool)
   (list 'lor std-bool std-bool)  (cons "lor_bools" std-bool)
   (list 'lnot std-bool)          (cons "lnot_bool" std-bool)
   ; string operations
   (list '== std-str std-str)     (cons "eq_strs" std-bool)
   (list '!= std-str std-str)     (cons "neq_strs" std-bool)
   (list '+ std-str std-str)      (cons "add_strs" std-str)
   (list 'lnot std-str)          (cons "lnot_str" std-bool)
  ; none operations
   (list 'lnot std-none)          (cons "lnot_none" std-bool)))
  ; TODO func operations. Cannot do "not func" although func can be in test condition