*/
startAt.isGoodArgsCnt(2, 3);
/**
* début du traitement
*/
ASymbol symbole_n = startAt.getSubNode(1, Node.TYPE_QSYMBOL).getSymbol();
//dépréciation 2012-05-31 : Node register = null;
if (symbole_n.getStr().charAt(0) == PCoder.REG) {
if (symbole_n.getStr().indexOf(PCoder.SEP) < 0) {
// seul les espace de nom sont acceptables...
throw new InterpreterException(StdErrors.Illegal_access_to_register);
}
}
//System.out.println("DEF:"+snode);
if (startAt.size() == 2) {
Node tmpn = Node.createNothing();
Heap.defv(symbole_n, tmpn);
return Node.createRef(tmpn);
}
else {
// il y a une valeur d'affectation...
Node rnode = startAt.getSubNode(2, Node.VTYPE_VALUABLE);
/**
* Etablissement du code de conditions pour (define 't s) :
* 1 : s est final.
* 2 : s est un symbole.
* 4 : t est immutable.
*
* Remarque: Au niveau du Heap, si le symbole recherché est immutable,
* un .newRef() .setImmutable() est tjrs réalisé d'office.
*
* D'où la table de vérités en considérant que t est toujours un symbole:
*
* code | t=immutable | s=symbole | s=final | opération
* -----+-------------+-----------+---------+----------
* 7 | 1 | 1 | 1 | Référence
* 6 | 1 | 1 | 0 | Clonage
* 5 | 1 | 0 | 1 | Référence
* 4 | 1 | 0 | 0 | Référence
* 3 | 0 | 1 | 1 | Clonage
* 2 | 0 | 1 | 0 | Référence
* 1 | 0 | 0 | 1 | Clonage
* 0 | 0 | 0 | 0 | // dépréciationnewRef (16/12/20010)
*
*/
boolean isImmutable=symbole_n.isImmutable();
int code = (isImmutable ? 4: 0) + (startAt.isNodeType(2, Node.TYPE_SYMBOL) ? 2: 0) + (rnode.isFinalNode() ? 1: 0);
//dépréciation 2012-05-31 : register=Heap.createUseOnceRegisterGlobalSymbol(isImmutable);
/**
* Dispatching des fonctionnalités selon le code:
* - Référence : 7, 2, 5, 4