Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
notes:decker_hacking [2024/04/15 13:30] maffnotes:decker_hacking [2024/04/15 20:43] (current) maff
Line 1: Line 1:
-Decker hacking+====== Decker hacking ======
  
 This page documents the modifications I've been making to Decker and to lil/lilt, the programming/scripting language it has. This page documents the modifications I've been making to Decker and to lil/lilt, the programming/scripting language it has.
  
-## Patches+===== Patches =====
  
 Patch to change the prompt to '''%>''' and make it return a newline on exit Patch to change the prompt to '''%>''' and make it return a newline on exit
  
-## C implementation notes+===== C implementation notes =====
  
 It seems like the norm is for interfaces to be defined in dom.h within the constants block. In order to avoid dom.h containing all the functionality implementations, it uses forward refs. It seems like the norm is for interfaces to be defined in dom.h within the constants block. In order to avoid dom.h containing all the functionality implementations, it uses forward refs.
Line 35: Line 35:
 I think that if the last argument to lnmat isn't self then it would be a global method rather than part of the 'x' interface. I think that if the last argument to lnmat isn't self then it would be a global method rather than part of the 'x' interface.
  
-## Notes on the types+===== Notes on the types =====
  
 to turn a char* into a lil string: to turn a char* into a lil string:
 +
   lv *r = lmutf8(chrstr)   lv *r = lmutf8(chrstr)
 +
 don't forget to free() the chrstr don't forget to free() the chrstr
  
 to get the first arg of the lv *a inside a method, use l_first(a) to get the first arg of the lv *a inside a method, use l_first(a)
  
-## methods i don't understand the function of yet:+===== methods i don't understand the function of yet: =====
  
-lis(lv*) +lis(lv*) lil(lv*) lmistr(lv*) lmnat(lv*,lv*) - i think this is signalling that the method in question is a native function?
-lil(lv*) +
-lmistr(lv*) +
-lmnat(lv*,lv*) - i think this is signalling that the method in question is a native function?+
  
 also what are x and i also what are x and i
 +
 +===== API docs now that i understand it a bit better =====
 +
 +`lv` is a variable that's a struct. the actual `char *` is member `sv`.
 +
 +When defining an interface with `ikey`, the second arg can be lmnat if it's supposed to call a function with arguments (a native method) or it can be just a function call that returns an lv* or it can be just an lv* itself, if it should be a member and not a method.
 +
 +invoking a method via lmnat will cause the first arg to be lv *self and the second to be lv *a. i'm unsure what self is, but a is a list of arguments.
 +
 +lmnat, lms and so on are all declared via the lm(str, int) macro
  
  
Navigation
  • Home