Skip to content

Commit 1a9fd52

Browse files
committed
Add left operator ordering for access and member operator
1 parent 13ef5e8 commit 1a9fd52

File tree

8 files changed

+531
-247
lines changed

8 files changed

+531
-247
lines changed

examples/start/main.asa

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,23 +25,28 @@ Or individual components:
2525
create::string() #inline; #replaceable; {
2626
return *(#new string);
2727
}
28-
//cast::string(c : *char) #inline; {
29-
// s = string();
30-
//
31-
// len : uint32 = 0;
32-
// for(i : 0..4_294_967_296){
33-
// if(c[i] == '\0')
34-
// break;
35-
// len++;
36-
// }
37-
// s.address = malloc(len);
38-
// for(i : 0..len){
39-
// s.address[i] = c[i];
40-
// }
41-
// s.length = len;
42-
//}
28+
create::string(c : *char) #inline; {
29+
s : string = string();
30+
puts("Creating new string from *char\n");
4331

44-
operator|| :: bool(a : bool, b : bool) #inline {
32+
s.tS.x = 5;
33+
34+
len : uint32 = 0;
35+
for(i : 0..4_294_967_296){
36+
//if(c[i] == '\0')
37+
// break;
38+
len++;
39+
}
40+
s.address = malloc(len);
41+
for(i : 0..len){
42+
s.address[i] = 'A';
43+
//s.address[i] = c[i];
44+
}
45+
puts("Done!\n");
46+
s.length = len;
47+
}
48+
49+
operator|| :: bool(a : bool, b : bool) #inline; #hideast {
4550
if(a){
4651
return true;
4752
}
@@ -62,22 +67,22 @@ TEST_MACRO :: {printl("Macro works!")};
6267
// int b = 1;
6368
//}
6469

65-
printint:: (n : uint64) {
70+
printint:: (n : uint64) #hideast {
6671
putchar(48+n);
6772
}
6873

69-
modifyReference::(n : ref int){
74+
modifyReference::(n : ref int) #hideast {
7075
n = 4;
7176
}
72-
modifyReference::(n : ref float){
77+
modifyReference::(n : ref float) #hideast {
7378
n = 4;
7479
}
7580

76-
operator[] :: (x : int, y : int){
77-
puts("Bracket overload works!\n");
78-
}
81+
//operator[] :: (x : int, y : int){
82+
// puts("Bracket overload works!\n");
83+
//}
7984

80-
newline::() #inline; {
85+
newline::() #inline; #hideast {
8186
putchar(10);
8287
}
8388

@@ -96,9 +101,9 @@ main :: (){
96101
s : string = string();
97102
s = string("This works");
98103

99-
s.length = 8;
104+
//s.length = 8;
100105
printint(s.length);
101-
s.size();
106+
//s.size();
102107

103108
newline();
104109

modules/Builtin/asa.asa

Lines changed: 37 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,110 +1,110 @@
11

22
Casts :: module {
33
// Float casting
4-
cast:: float(x : int) #inline; #noast {
4+
cast:: float(x : int) #inline; #hideast {
55
return #cast x : float;
66
}
7-
cast:: float(x : char) #inline; #noast {
7+
cast:: float(x : char) #inline; #hideast {
88
return #cast x : float;
99
}
10-
cast:: float(x : float) #inline; #noast {
10+
cast:: float(x : float) #inline; #hideast {
1111
return #cast x : float;
1212
}
13-
cast:: float(x : double) #inline; #noast {
13+
cast:: float(x : double) #inline; #hideast {
1414
return #cast x : float;
1515
}
16-
cast:: float(x : bool) #inline; #noast {
16+
cast:: float(x : bool) #inline; #hideast {
1717
return #cast x : float;
1818
}
1919
// Double
20-
cast:: double(x : int) #inline; #noast {
20+
cast:: double(x : int) #inline; #hideast {
2121
return #cast x : double;
2222
}
23-
cast:: double(x : char) #inline; #noast {
23+
cast:: double(x : char) #inline; #hideast {
2424
return #cast x : double;
2525
}
26-
cast:: double(x : float) #inline; #noast {
26+
cast:: double(x : float) #inline; #hideast {
2727
return #cast x : double;
2828
}
29-
cast:: double(x : double) #inline; #noast {
29+
cast:: double(x : double) #inline; #hideast {
3030
return #cast x : double;
3131
}
32-
cast:: double(x : bool) #inline; #noast {
32+
cast:: double(x : bool) #inline; #hideast {
3333
return #cast x : double;
3434
}
3535

3636
// Int casting
37-
cast:: int(x : float) #inline; #noast {
37+
cast:: int(x : float) #inline; #hideast {
3838
return #cast x : int;
3939
}
40-
cast:: int(x : double) #inline; #noast {
40+
cast:: int(x : double) #inline; #hideast {
4141
return #cast x : int;
4242
}
43-
cast:: int(x : int) #inline; #noast {
43+
cast:: int(x : int) #inline; #hideast {
4444
return #cast x : int;
4545
}
46-
cast:: int(x : uint) #inline; #noast {
46+
cast:: int(x : uint) #inline; #hideast {
4747
return #cast x : int;
4848
}
49-
cast:: int(x : bool) #inline; #noast {
49+
cast:: int(x : bool) #inline; #hideast {
5050
return #cast x : int;
5151
}
5252

53-
cast:: uint(x : float) #inline; #noast {
53+
cast:: uint(x : float) #inline; #hideast {
5454
return #cast x : uint;
5555
}
56-
cast:: uint(x : double) #inline; #noast {
56+
cast:: uint(x : double) #inline; #hideast {
5757
return #cast x : uint;
5858
}
59-
cast:: uint(x : int) #inline; #noast {
59+
cast:: uint(x : int) #inline; #hideast {
6060
return #cast x : uint;
6161
}
62-
cast:: uint(x : uint) #inline; #noast {
62+
cast:: uint(x : uint) #inline; #hideast {
6363
return #cast x : uint;
6464
}
65-
cast:: uint(x : bool) #inline; #noast {
65+
cast:: uint(x : bool) #inline; #hideast {
6666
return #cast x : uint;
6767
}
6868

69-
cast:: uint64(x : float) #inline; #noast {
69+
cast:: uint64(x : float) #inline; #hideast {
7070
return #cast x : uint64;
7171
}
72-
cast:: uint64(x : double) #inline; #noast {
72+
cast:: uint64(x : double) #inline; #hideast {
7373
return #cast x : uint64;
7474
}
75-
cast:: uint64(x : int) #inline; #noast {
75+
cast:: uint64(x : int) #inline; #hideast {
7676
return #cast x : uint64;
7777
}
78-
cast:: uint64(x : uint) #inline; #noast {
78+
cast:: uint64(x : uint) #inline; #hideast {
7979
return #cast x : uint64;
8080
}
81-
cast:: uint64(x : bool) #inline; #noast {
81+
cast:: uint64(x : bool) #inline; #hideast {
8282
return #cast x : uint64;
8383
}
8484

85-
cast:: uint16(x : float) #inline; #noast {
85+
cast:: uint16(x : float) #inline; #hideast {
8686
return #cast x : uint16;
8787
}
88-
cast:: uint16(x : double) #inline; #noast {
88+
cast:: uint16(x : double) #inline; #hideast {
8989
return #cast x : uint16;
9090
}
91-
cast:: uint16(x : int) #inline; #noast {
91+
cast:: uint16(x : int) #inline; #hideast {
9292
return #cast x : uint16;
9393
}
94-
cast:: uint16(x : uint) #inline; #noast {
94+
cast:: uint16(x : uint) #inline; #hideast {
9595
return #cast x : uint16;
9696
}
97-
cast:: uint16(x : bool) #inline; #noast {
97+
cast:: uint16(x : bool) #inline; #hideast {
9898
return #cast x : uint16;
9999
}
100100
}
101101

102102
Operators::module{
103-
operator++ :: int(i : ref int) #inline; #noast {
103+
operator++ :: int(i : ref int) #inline; #hideast {
104104
i = i+1;
105105
return i;
106106
}
107-
operator-- :: int(i : ref int) #inline; #noast {
107+
operator-- :: int(i : ref int) #inline; #hideast {
108108
i = i-1;
109109
return i;
110110
}
@@ -120,9 +120,14 @@ Strings :: module{
120120
//#import Builtin.Memory;
121121
//#import Builtin.Operators;
122122

123+
testStruct :: struct {
124+
x : int;
125+
}
126+
123127
string :: struct {
124128
address : *char;
125129
length : uint32;
130+
tS : testStruct;
126131

127132
size::uint32(){
128133
return this.length;

0 commit comments

Comments
 (0)