loc est utilisé si une erreur a lieu. Mauvais nombre d'argument/Mauvais type, normalement le système de type devrait pouvoir nous assurer qu'aucune erreur ne vas avoir lieu mais pour l'instant l'information est utile pour le débogage. De plus, lorsque les arguments sont extraits ocaml imprimerait un warning "macth not exhaustive" si le cas impossible n'était pas géré.
Je pense qu'aucune fonction n'utilise le contexte en ce moment. il avait utilisé dans une ancienne implémentation des builtins lorsque les arguments des builtins étaient stockés dans le contexte.
depth est la profondeur de récursion de l'évaluateur. Il est utilisé pour imprimer la call trace de l'évaluateur. Avant lorsqu'un builtin était appelé s'il utilisais l’évaluateur la profondeur revenait à 0 ce qui rendait la calltrace moins lisible.
Pour ce qui est des accesseurs, je ne suis pas sur de comprendre.
Le code suivant:
x = 2; xtype = decltype x;
devrait être transformé (apres lexp_parse) en
x = 2; xtype : Type; xtype = Int;
si decltype est une fonction le code sera transformé en
x = 2; xtype : Type; xtype = Call(Builtin(decltype), [x]);
et la valeur de xtype ne sera connu qu'après évaluation.