close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Ticket #721: ticket_1.ClassNameAsGrammar.tol

File ticket_1.ClassNameAsGrammar.tol, 1.8 KB (added by pgea@…, 16 years ago)
Line 
1//////////////////////////////////////////////////////////////////////////////
2// Uso de las clases como una gramática.
3
4Class CPrueba {
5  Real _.valor;
6  Real GetValor(Real unused) { Copy(_.valor) };
7  Real SetValor(Real val) { Real _.valor := val }
8};
9
10//////////////////////////////////////////////////////////////////////////////
11// [1]:
12/*
13CPrueba CPrueba.New(Real val) {
14  CPrueba [[ Real _.valor = val ]]
15};
16
17CPrueba CPrueba.New(0);
18*/
19// ERROR: La expresión no devuelve una instancia de Class CPrueba:
20// {CPrueba SetOfAnything[[Real _.valor=val]]}
21// Recuerde que las declaraciones de instancias deben seguir la sintaxis:
22//   Class <instance_name> = [[ ... ]];
23//
24// No veo la necesidad de que la instancia tenga que tener un nombre.
25
26//////////////////////////////////////////////////////////////////////////////
27// [2]:
28/*
29CPrueba CPrueba.New(Real val) {
30  CPrueba [[ Real _.valor = val ]]
31};
32
33CPrueba a = CPrueba.New(0);
34*/
35// OK
36
37//////////////////////////////////////////////////////////////////////////////
38// [3]:
39/*
40CPrueba CPrueba.New(Real val) {
41  CPrueba newPrueba = [[ Real _.valor = val ]]
42};
43
44Text "";
45CPrueba CPrueba.New(0);
46*/
47// ERROR: No ha sido posible convertir de NameBlock hacia Text para el objeto 'newPrueba'
48// Este error se debe a que no se reconoce CPrueba como un equivalente a NameBlock
49// y se asume la gramática de la línea anterior.
50
51// Tras un error como éste, si se decompila y compila,
52// se obtienen errores del tipo:
53// ERROR: Class 'CPrueba' ya fue definida como ""
54// Parece que algo queda sin destruir por ahí.
55
56// Sin embargo, funciona si probamos algo como esto:
57/*
58CPrueba CPrueba.New(Real val) {
59  CPrueba newPrueba = [[ Real _.valor = val ]]
60};
61
62NameBlock CPrueba CPrueba.New(0);
63*/
64//////////////////////////////////////////////////////////////////////////////
65