builtin.go 860 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package muesli
  2. import "fmt"
  3. func printf(vm *VM, args ...Value) ListValue {
  4. var form string
  5. var rest = args[1:len(args)]
  6. resri := ListFromList(rest)
  7. err := From(args[0], &form)
  8. if err != nil {
  9. fmt.Printf("Error: %s\n", err.Error())
  10. } else {
  11. fmt.Printf(form, resri...)
  12. }
  13. return NewListValue()
  14. }
  15. func println(vm *VM, args ...Value) ListValue {
  16. var msg string
  17. // resri := ListFromList(rest)
  18. err := From(args[0], &msg)
  19. if err != nil {
  20. fmt.Printf("Error: %s\n", err.Error())
  21. }
  22. fmt.Println(msg)
  23. return NewListValue()
  24. }
  25. func p(vm *VM, args ...Value) ListValue {
  26. argi := ListFromList(args)
  27. fmt.Println(argi...)
  28. for _, arg := range args {
  29. fmt.Printf("%v\n", arg)
  30. }
  31. return NewListValue()
  32. }
  33. func (vm *VM) RegisterBuiltins() {
  34. vm.RegisterBuiltin("p", p)
  35. vm.RegisterBuiltin("prinln", println)
  36. vm.RegisterBuiltin("printf", printf)
  37. }