Skip to content

Commit cbc29df

Browse files
committed
add test
1 parent 99f8cbf commit cbc29df

6 files changed

+212
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"asc_flags": [],
3+
"stderr": [
4+
"AS240: Operator '==' overloading ambiguity.",
5+
"compare_nonnull_a == compare_nonnull_b;",
6+
"AS240: Operator '==' overloading ambiguity.",
7+
"compare_nonnull_b == compare_nonnull_a;",
8+
"AS240: Operator '==' overloading ambiguity.",
9+
"compare_nonnull_c == compare_nonnull_d;",
10+
"AS240: Operator '==' overloading ambiguity.",
11+
"compare_extend_1 == compare_extend_2;",
12+
"EOF"
13+
]
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
class A {
2+
@operator("==") __eq(other: B): bool {
3+
return true;
4+
}
5+
}
6+
class B {
7+
@operator("==") __eq(other: A): bool {
8+
return true;
9+
}
10+
}
11+
export function compare_nonnull(compare_nonnull_a: A, compare_nonnull_b: B): void {
12+
compare_nonnull_a == compare_nonnull_b;
13+
compare_nonnull_b == compare_nonnull_a;
14+
}
15+
16+
class C {
17+
@operator("==") static __eq(self: C | null, other: D | null): bool {
18+
return true;
19+
}
20+
}
21+
class D {
22+
@operator("==") __eq(other: i32): bool {
23+
return true;
24+
}
25+
}
26+
export function compare_null(compare_nonnull_c: C | null, compare_nonnull_d: D | null): void {
27+
compare_nonnull_c == compare_nonnull_d;
28+
}
29+
30+
31+
class PA extends A {}
32+
class PB extends B {}
33+
export function compare_extend(compare_extend_1: PA, compare_extend_2: PB): void {
34+
compare_extend_1 == compare_extend_2;
35+
}
36+
37+
38+
export function end(): void {
39+
ERROR("EOF");
40+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
(module
2+
(type $i32_i32_=>_none (func (param i32 i32)))
3+
(type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
4+
(type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
5+
(type $none_=>_none (func))
6+
(import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
7+
(global $~lib/memory/__data_end i32 (i32.const 8))
8+
(global $~lib/memory/__stack_pointer (mut i32) (i32.const 32776))
9+
(global $~lib/memory/__heap_base i32 (i32.const 32776))
10+
(memory $0 0)
11+
(table $0 1 1 funcref)
12+
(elem $0 (i32.const 1))
13+
(export "memory" (memory $0))
14+
(export "compare_extends" (func $export:operator-overload-non-ambiguity/compare_extends))
15+
(func $operator-overload-non-ambiguity/Base#__eq (param $this i32) (param $other i32) (result i32)
16+
i32.const 1
17+
return
18+
)
19+
(func $~stack_check
20+
global.get $~lib/memory/__stack_pointer
21+
global.get $~lib/memory/__data_end
22+
i32.lt_s
23+
if
24+
i32.const 32800
25+
i32.const 32848
26+
i32.const 1
27+
i32.const 1
28+
call $~lib/builtins/abort
29+
unreachable
30+
end
31+
)
32+
(func $operator-overload-non-ambiguity/compare_extends (param $v1 i32) (param $v2 i32)
33+
(local $2 i32)
34+
global.get $~lib/memory/__stack_pointer
35+
i32.const 8
36+
i32.sub
37+
global.set $~lib/memory/__stack_pointer
38+
call $~stack_check
39+
global.get $~lib/memory/__stack_pointer
40+
i64.const 0
41+
i64.store $0
42+
local.get $v1
43+
local.set $2
44+
global.get $~lib/memory/__stack_pointer
45+
local.get $2
46+
i32.store $0
47+
local.get $2
48+
local.get $v2
49+
local.set $2
50+
global.get $~lib/memory/__stack_pointer
51+
local.get $2
52+
i32.store $0 offset=4
53+
local.get $2
54+
call $operator-overload-non-ambiguity/Base#__eq
55+
drop
56+
global.get $~lib/memory/__stack_pointer
57+
i32.const 8
58+
i32.add
59+
global.set $~lib/memory/__stack_pointer
60+
)
61+
(func $export:operator-overload-non-ambiguity/compare_extends (param $0 i32) (param $1 i32)
62+
global.get $~lib/memory/__stack_pointer
63+
i32.const 8
64+
i32.sub
65+
global.set $~lib/memory/__stack_pointer
66+
call $~stack_check
67+
global.get $~lib/memory/__stack_pointer
68+
local.get $0
69+
i32.store $0
70+
global.get $~lib/memory/__stack_pointer
71+
local.get $1
72+
i32.store $0 offset=4
73+
local.get $0
74+
local.get $1
75+
call $operator-overload-non-ambiguity/compare_extends
76+
global.get $~lib/memory/__stack_pointer
77+
i32.const 8
78+
i32.add
79+
global.set $~lib/memory/__stack_pointer
80+
)
81+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"asc_flags": []
3+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
(module
2+
(type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
3+
(type $i32_i32_=>_none (func (param i32 i32)))
4+
(import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
5+
(global $~lib/memory/__stack_pointer (mut i32) (i32.const 33792))
6+
(memory $0 0)
7+
(export "memory" (memory $0))
8+
(export "compare_extends" (func $export:operator-overload-non-ambiguity/compare_extends))
9+
(func $export:operator-overload-non-ambiguity/compare_extends (param $0 i32) (param $1 i32)
10+
(local $2 i32)
11+
global.get $~lib/memory/__stack_pointer
12+
i32.const 8
13+
i32.sub
14+
global.set $~lib/memory/__stack_pointer
15+
block $folding-inner0
16+
global.get $~lib/memory/__stack_pointer
17+
i32.const 1024
18+
i32.lt_s
19+
br_if $folding-inner0
20+
global.get $~lib/memory/__stack_pointer
21+
local.tee $2
22+
local.get $0
23+
i32.store $0
24+
local.get $2
25+
local.get $1
26+
i32.store $0 offset=4
27+
local.get $2
28+
i32.const 8
29+
i32.sub
30+
global.set $~lib/memory/__stack_pointer
31+
global.get $~lib/memory/__stack_pointer
32+
i32.const 1024
33+
i32.lt_s
34+
br_if $folding-inner0
35+
global.get $~lib/memory/__stack_pointer
36+
local.tee $2
37+
i64.const 0
38+
i64.store $0
39+
local.get $2
40+
local.get $0
41+
i32.store $0
42+
local.get $2
43+
local.get $1
44+
i32.store $0 offset=4
45+
local.get $2
46+
i32.const 8
47+
i32.add
48+
global.set $~lib/memory/__stack_pointer
49+
global.get $~lib/memory/__stack_pointer
50+
i32.const 8
51+
i32.add
52+
global.set $~lib/memory/__stack_pointer
53+
return
54+
end
55+
i32.const 33824
56+
i32.const 33872
57+
i32.const 1
58+
i32.const 1
59+
call $~lib/builtins/abort
60+
unreachable
61+
)
62+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Base {
2+
@operator("==") __eq(other: Base): bool {
3+
return true;
4+
}
5+
}
6+
7+
class P1 extends Base {}
8+
class P2 extends Base {}
9+
10+
export function compare_extends(v1: P1, v2: P2): void {
11+
v1 == v2;
12+
}

0 commit comments

Comments
 (0)