diff --git a/src/lpython/semantics/python_ast_to_asr.cpp b/src/lpython/semantics/python_ast_to_asr.cpp index 51e8b5b219..2293967229 100644 --- a/src/lpython/semantics/python_ast_to_asr.cpp +++ b/src/lpython/semantics/python_ast_to_asr.cpp @@ -2497,7 +2497,7 @@ class BodyVisitor : public CommonVisitor { ASR::expr_t *ele = ASRUtils::EXPR(tmp); ASR::ttype_t *ele_type = ASRUtils::expr_type(ele); if (!ASRUtils::check_equal_type(ele_type, set_type)) { - throw SemanticError("Found type mismatch, (" + + throw SemanticError("Found type mismatch in '" + attr + "'(" + ASRUtils::type_to_str(ele_type) + " and " + ASRUtils::type_to_str(set_type) + ").", x.base.base.loc); } diff --git a/tests/errors/test_list1.py b/tests/errors/test_list1.py new file mode 100644 index 0000000000..ce95655b65 --- /dev/null +++ b/tests/errors/test_list1.py @@ -0,0 +1,6 @@ +from ltypes import i32 + +def test1(): + a: list[i32] + a = [1, 2, 3] + a.remove('error') diff --git a/tests/errors/test_list2.py b/tests/errors/test_list2.py new file mode 100644 index 0000000000..b3d8c04076 --- /dev/null +++ b/tests/errors/test_list2.py @@ -0,0 +1,6 @@ +from ltypes import i32 + +def test1(): + a: list[i32] + a = [1, 2, 3] + a.append(4, 5) diff --git a/tests/errors/test_set1.py b/tests/errors/test_set1.py new file mode 100644 index 0000000000..63a4aef978 --- /dev/null +++ b/tests/errors/test_set1.py @@ -0,0 +1,6 @@ +from ltypes import i32 + +def test1(): + a: set[i32] + a = {1, 2, 3} + a.add('err') diff --git a/tests/errors/test_set2.py b/tests/errors/test_set2.py new file mode 100644 index 0000000000..62ac8b2816 --- /dev/null +++ b/tests/errors/test_set2.py @@ -0,0 +1,6 @@ +from ltypes import i32 + +def test1(): + a: set[i32] + a = {1, 2, 3} + a.remove('error', 'error2') diff --git a/tests/reference/asr-test_list1-73fd538.json b/tests/reference/asr-test_list1-73fd538.json new file mode 100644 index 0000000000..49c894ab3b --- /dev/null +++ b/tests/reference/asr-test_list1-73fd538.json @@ -0,0 +1,13 @@ +{ + "basename": "asr-test_list1-73fd538", + "cmd": "lpython --show-asr --no-color {infile} -o {outfile}", + "infile": "tests/errors/test_list1.py", + "infile_hash": "86f36c119afcaef5c6f790c88c7c517fa6f766bfcc95d121bc16becd", + "outfile": null, + "outfile_hash": null, + "stdout": null, + "stdout_hash": null, + "stderr": "asr-test_list1-73fd538.stderr", + "stderr_hash": "b09a9abfc3c61d6d4fe93b81ebbfd29ab1494db6d1e7b6a3bd4cba25", + "returncode": 2 +} \ No newline at end of file diff --git a/tests/reference/asr-test_list1-73fd538.stderr b/tests/reference/asr-test_list1-73fd538.stderr new file mode 100644 index 0000000000..28e3fc18ea --- /dev/null +++ b/tests/reference/asr-test_list1-73fd538.stderr @@ -0,0 +1,5 @@ +semantic error: Type mismatch while removing from a list, found (character and integer). + --> tests/errors/test_list1.py:6:5 + | +6 | a.remove('error') + | ^^^^^^^^^^^^^^^^^ diff --git a/tests/reference/asr-test_list2-10ffdd7.json b/tests/reference/asr-test_list2-10ffdd7.json new file mode 100644 index 0000000000..b421983d9a --- /dev/null +++ b/tests/reference/asr-test_list2-10ffdd7.json @@ -0,0 +1,13 @@ +{ + "basename": "asr-test_list2-10ffdd7", + "cmd": "lpython --show-asr --no-color {infile} -o {outfile}", + "infile": "tests/errors/test_list2.py", + "infile_hash": "0fde6372e40865fa25b4ef87b0ac31978ae2df367215004cad31a414", + "outfile": null, + "outfile_hash": null, + "stdout": null, + "stdout_hash": null, + "stderr": "asr-test_list2-10ffdd7.stderr", + "stderr_hash": "be192bc4655f28313c415c7180d676e0383f0acb7e4de75a6b3d1a37", + "returncode": 2 +} \ No newline at end of file diff --git a/tests/reference/asr-test_list2-10ffdd7.stderr b/tests/reference/asr-test_list2-10ffdd7.stderr new file mode 100644 index 0000000000..0607fb8266 --- /dev/null +++ b/tests/reference/asr-test_list2-10ffdd7.stderr @@ -0,0 +1,5 @@ +semantic error: append() takes exactly one argument + --> tests/errors/test_list2.py:6:5 + | +6 | a.append(4, 5) + | ^^^^^^^^^^^^^^ diff --git a/tests/reference/asr-test_set1-11379c7.json b/tests/reference/asr-test_set1-11379c7.json new file mode 100644 index 0000000000..09ad3d227c --- /dev/null +++ b/tests/reference/asr-test_set1-11379c7.json @@ -0,0 +1,13 @@ +{ + "basename": "asr-test_set1-11379c7", + "cmd": "lpython --show-asr --no-color {infile} -o {outfile}", + "infile": "tests/errors/test_set1.py", + "infile_hash": "8b09bdc33cffccdb66d9d70f13474d148c5f422ee3892d30fe45eb95", + "outfile": null, + "outfile_hash": null, + "stdout": null, + "stdout_hash": null, + "stderr": "asr-test_set1-11379c7.stderr", + "stderr_hash": "8b09cefb3289bc45f00ca5a571562e62502aaeab7e92fa8ffeb341e7", + "returncode": 2 +} \ No newline at end of file diff --git a/tests/reference/asr-test_set1-11379c7.stderr b/tests/reference/asr-test_set1-11379c7.stderr new file mode 100644 index 0000000000..dd4c8889ab --- /dev/null +++ b/tests/reference/asr-test_set1-11379c7.stderr @@ -0,0 +1,5 @@ +semantic error: Found type mismatch in 'add'(character and integer). + --> tests/errors/test_set1.py:6:5 + | +6 | a.add('err') + | ^^^^^^^^^^^^ diff --git a/tests/reference/asr-test_set2-d91a6f0.json b/tests/reference/asr-test_set2-d91a6f0.json new file mode 100644 index 0000000000..549c404f14 --- /dev/null +++ b/tests/reference/asr-test_set2-d91a6f0.json @@ -0,0 +1,13 @@ +{ + "basename": "asr-test_set2-d91a6f0", + "cmd": "lpython --show-asr --no-color {infile} -o {outfile}", + "infile": "tests/errors/test_set2.py", + "infile_hash": "46c06330c2f51316a178c5d487fb5628d19ffb4e8f95e50653a19fcd", + "outfile": null, + "outfile_hash": null, + "stdout": null, + "stdout_hash": null, + "stderr": "asr-test_set2-d91a6f0.stderr", + "stderr_hash": "5459ddb5148c630f9374c827aad9c37d25967248002dc0dff5314530", + "returncode": 2 +} \ No newline at end of file diff --git a/tests/reference/asr-test_set2-d91a6f0.stderr b/tests/reference/asr-test_set2-d91a6f0.stderr new file mode 100644 index 0000000000..7c5dfa54d2 --- /dev/null +++ b/tests/reference/asr-test_set2-d91a6f0.stderr @@ -0,0 +1,5 @@ +semantic error: remove() takes exactly one argument + --> tests/errors/test_set2.py:6:5 + | +6 | a.remove('error', 'error2') + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/tests/tests.toml b/tests/tests.toml index f1fc8df21e..8f5f3cd453 100644 --- a/tests/tests.toml +++ b/tests/tests.toml @@ -294,3 +294,19 @@ asr = true [[test]] filename = "errors/test_append_type_mismatch.py" asr = true + +[[test]] +filename = "errors/test_list1.py" +asr = true + +[[test]] +filename = "errors/test_list2.py" +asr = true + +[[test]] +filename = "errors/test_set1.py" +asr = true + +[[test]] +filename = "errors/test_set2.py" +asr = true