packages feed

spade-0.1.0.0: src/Interpreter/Initialize.hs

module Interpreter.Initialize where

import Prelude hiding (map)

import Compiler.Lexer
import Interpreter.Common
import Interpreter.Interpreter
import Interpreter.Lib.Math
import Interpreter.Lib.Misc
import Interpreter.Lib.Concurrency
import Interpreter.Lib.SDL

loadBuiltIns :: InterpretM ()
loadBuiltIns = do
  insertBuiltIn (SkOperator OpStar) multiplication
  insertBuiltIn (SkOperator OpPlus) addition
  insertBuiltIn (SkOperator OpMinus) substraction
  insertBuiltIn (SkOperator OpDivide) division
  insertBuiltIn (SkOperator OpEquality) (comparison (==))
  insertBuiltIn (SkOperator OpLT) (comparison (<))
  insertBuiltIn (SkOperator OpGT) (comparison (>))
  insertBuiltIn (SkOperator OpLTE) (comparison (<=))
  insertBuiltIn (SkOperator OpGTE) (comparison (>=))
  insertBuiltIn (SkOperator OpNotEquality) (comparison (/=))
  insertBuiltIn (SkOperator OpAnd) (boolean (&&))
  insertBuiltIn (SkOperator OpOr) (boolean (||))

  -- Containers
  insertBuiltInWithDoc (SkIdentifier $ Identifier "size") (SomeBuiltin valueSize)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "contains") (SomeBuiltin contains)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "haskey") (SomeBuiltin haskey)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "filter") (SomeBuiltin filter_)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "drop") (SomeBuiltin arrayDrop)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "take") (SomeBuiltin arrayTake)

  -- Time
  insertBuiltInWithDoc (SkIdentifier $ Identifier "timestamp") (SomeBuiltin builtInTimestamp)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "wait") (SomeBuiltin waitMillisec)

  -- Keyboard
  insertBuiltInWithDoc (SkIdentifier $ Identifier "getkey") (SomeBuiltin waitForKey)

  -- Files
  insertBuiltInWithDoc (SkIdentifier $ Identifier "readfile") (SomeBuiltin builtInReadFile)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "readtextfile") (SomeBuiltin builtInReadTextFile)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "writefile") (SomeBuiltin builtInWriteFile)

  -- Math
  insertBuiltInWithDoc (SkIdentifier $ Identifier "mod") (SomeBuiltin builtInMod)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "random") (SomeBuiltin builtInRandom)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "sin") (SomeBuiltin builtInSin)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "cos") (SomeBuiltin builtInCos)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "tan") (SomeBuiltin builtInTan)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "asin") (SomeBuiltin builtInASin)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "acos") (SomeBuiltin builtInACos)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "atan") (SomeBuiltin builtInATan)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "sum") (SomeBuiltin builtInSum)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "round") (SomeBuiltin builtInRound)

  -- List/Map
  insertBuiltInWithDoc (SkIdentifier $ Identifier "insertleft") (SomeBuiltin builtInArrayInsertLeft)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "insertright") (SomeBuiltin builtInArrayInsertRight)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "head") (SomeBuiltin builtInHead)

  -- Misc
  insertBuiltInWithDoc (SkIdentifier $ Identifier "try") (SomeBuiltin builtInTry)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "jsondecode") (SomeBuiltin builtInJSONParse)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "jsonencode") (SomeBuiltin builtInJSONSerialize)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "decodeutf8") (SomeBuiltin builtInDecodeUTF8Bytes)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "encodeutf8") (SomeBuiltin builtInEncodeUTF8Bytes)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "not") (SomeBuiltin not')
  insertBuiltInWithDoc (SkIdentifier $ Identifier "debug") (SomeBuiltin builtInDebug)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "inspect") (SomeBuiltin builtInInspect)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "println") (SomeBuiltin printValLn)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "print") (SomeBuiltin printVal)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "inputline") (SomeBuiltin builtinInputLine)

  -- SDL Sound
  insertBuiltInWithDoc (SkIdentifier $ Identifier "maketone") (SomeBuiltin builtInMakeTone)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "makesound") (SomeBuiltin builtInMakeSoundSample)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "loadsound") (SomeBuiltin builtInMakeSoundSampleFromFile)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "playsound") (SomeBuiltin builtInPlaySoundSample)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "setvolume") (SomeBuiltin builtInSetSampleVolume)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "setvolumelr") (SomeBuiltin builtInSetSampleLRVolume)

  -- SDL Graphics
  insertBuiltInWithDoc (SkIdentifier $ Identifier "graphicswindow") (SomeBuiltin createGraphicsWindow)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "graphics") (SomeBuiltin createGraphicsFullscreen)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "point") (SomeBuiltin drawPoint)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "points") (SomeBuiltin drawPoints)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "line") (SomeBuiltin drawLine)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "lines") (SomeBuiltin drawLines)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "circle") (SomeBuiltin drawCircle)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "box") (SomeBuiltin drawBox)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "drawscreen") (SomeBuiltin draw)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "setcolor") (SomeBuiltin setDrawColor)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "clearscreen") (SomeBuiltin clear)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "getwindowsize") (SomeBuiltin getWindowSize)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "setlogicalsize") (SomeBuiltin setLogicalSize)

  -- SDL Keyboard
  insertBuiltInWithDoc (SkIdentifier $ Identifier "getkeypresses") (SomeBuiltin getKeys)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "waitforkey") (SomeBuiltin waitForSDLKey)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "getkeystate") (SomeBuiltin getKeyboardState)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "inkeystate") (SomeBuiltin wasKeyDownIn)

  --  Concurrency
  insertBuiltInWithDoc (SkIdentifier $ Identifier "startthread") (SomeBuiltin builtInLaunchThread)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "killthread") (SomeBuiltin builtInKillThread)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "await") (SomeBuiltin builtInAwait)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "awaitresult") (SomeBuiltin builtInAwaitResult)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "newchannel") (SomeBuiltin builtInNewChannel)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "writechannel") (SomeBuiltin builtInWriteChannel)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "readchannel") (SomeBuiltin builtInReadChannel)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "newref") (SomeBuiltin builtInNewRef)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "readref") (SomeBuiltin builtInReadRef)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "writeref") (SomeBuiltin builtInWriteRef)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "modifyref") (SomeBuiltin builtInModifyRef)

  -- Constants
  insertBuiltInVal (SkIdentifier $ Identifier "keycodes") keycodes
  insertBuiltInVal (SkIdentifier $ Identifier "scancodes") scancodes