aboutsummaryrefslogtreecommitdiffhomepage
path: root/notes/method_syntax.txt
blob: 2970222dd84c8bf59c669390046442fa774058d2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62

Method syntax
=============

Definition syntax
-----------------
The parser needs to set a flag if it an identifier is followed by a dot.

1.
    func SomeThing.get_number() -> int
    func var SomeThing.set_number(int num)

2.
    func SomeThing.get_number() -> int
    func SomeThing.set_number(int num) var

3.
    func SomeThing.get_number() -> int
    func SomeThing var.set_number(int num)

4.
    func SomeThing.get_number() -> int
    func SomeThing.var set_number(int num)

5.
    func SomeThing.get_number() -> int
    func SomeThing.set_number var(int num)


5.
    func SomeThing.get_number() -> int
    func SomeThing.set_number!(int num)


Call syntax
-----------
    s.set_number(1)
    s var.set_number(1)
    s.var set_number(1)
    s.set_number var(1)
    s.set_number!(1)


The ! syntax is the by far most user-friendly.
But how to extend it to other qualifiers?
    aliased, threaded, writeonly etc.

Perhaps something like this:

    func SomeThing.set_number!(int num)
    func SomeThing.set_number threaded(int num)
    func SomeThing.set_number threaded!(int num)

    s.set_number!(1)
    s.set_number threaded(1)
    s.set_number threaded!(1)


Things to decide
----------------
* Should the "this" parameter always be passed by reference?
  It is rarely any meaningful to pass it by value.
* At least "var"-less value receivers should be disallowed.