A basic compiler based off of thejameskyle's super-tiny-compiler

str.js 830B

1234567891011121314151617181920212223242526272829303132333435363738
  1. const global_obj = {}
  2. const function_defs = {}
  3. const warnings = {}
  4. const builtins = {
  5. concat: function () {
  6. let str = ""
  7. for (let i = 0; i < arguments.length; i++) {
  8. str += arguments[i].value
  9. }
  10. return {
  11. value: str
  12. }
  13. }
  14. }
  15. const my_handler = {
  16. get: function (target, prop) {
  17. let methods = Object.keys(builtins)
  18. if (methods.includes(prop)) {
  19. return builtins[prop]
  20. } else {
  21. console.error("Undefined function call! No such function: ", prop)
  22. }
  23. },
  24. set: function (target, prop, data) {
  25. if (prop === 'w') data.map((w) => warnings.w = true)
  26. else console.error("Attempting to set unknown property on interpreter! How did you do that?")
  27. }
  28. }
  29. const proxy_obj = new Proxy({}, my_handler)
  30. let _
  31. module.exports = function (self) {
  32. _ = self
  33. return proxy_obj
  34. }