diff options
Diffstat (limited to 'tests/js/tmangle.nim')
-rw-r--r-- | tests/js/tmangle.nim | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/tests/js/tmangle.nim b/tests/js/tmangle.nim new file mode 100644 index 000000000..caaa15fa1 --- /dev/null +++ b/tests/js/tmangle.nim @@ -0,0 +1,106 @@ +discard """ + output: '''true +true +true +true +true +true +true''' +""" + +# Test not mangled: +block: + type T = object + a: int + b: cstring + proc test(): bool = + let obj = T(a: 11, b: "foo") + {. emit: [result, " = (", obj, ".a == 11);"] .} + {. emit: [result, " = ", result, " && (", obj, ".b == \"foo\");"] .} + echo test() + +# Test indirect (fields in genAddr): +block: + type T = object + a: int + b: cstring + var global = T(a: 11, b: "foo") + proc test(): bool = + var obj = T(a: 11, b: "foo") + {. emit: [result, " = (", obj.addr[], ".a == 11);"] .} + {. emit: [result, " = ", result, " && (", obj.addr[], ".b == \"foo\");"] .} + {. emit: [result, " = ", result, " && (", global, ".a == 11);"] .} + {. emit: [result, " = ", result, " && (", global, ".b == \"foo\");"] .} + echo test() + +# Test addr of field: +block: + type T = object + a: int + b: cstring + proc test(): bool = + var obj = T(a: 11, b: "foo") + result = obj.a.addr[] == 11 + result = result and obj.b.addr[] == "foo".cstring + echo test() + +# Test reserved words: +block: + type T = ref object + `if`: int + `for`: int + `==`: cstring + `&&`: cstring + proc test(): bool = + var + obj1 = T(`if`: 11, `for`: 22, `==`: "foo", `&&`: "bar") + obj2: T + new obj2 # Test behaviour for createRecordVarAux. + result = obj1.`if` == 11 + result = result and obj1.addr[].`for` == 22 + result = result and obj1.`==` == "foo".cstring + result = result and obj1.`&&`.addr[] == "bar".cstring + result = result and obj2.`if` == 0 + result = result and obj2.`for` == 0 + result = result and obj2.`==`.isNil + result = result and obj2.`&&`.isNil + echo test() + +# Test codegen for fields with uppercase letters: +block: + type MyObj = object + mField: int + proc test(): bool = + var a: MyObj + var b = a + result = b.mField == 0 + echo test() + +# Test tuples +block: + type T = tuple + a: int + b: int + proc test(): bool = + var a: T = (a: 1, b: 1) + result = a.a == 1 + result = result and a.b == 1 + echo test() + +# Test importc / exportc fields: +block: + type T = object + a: int + b {. importc: "notB" .}: cstring + type U = object + a: int + b {. exportc: "notB" .}: cstring + proc test(): bool = + var + obj1 = T(a: 11, b: "foo") + obj2 = U(a: 11, b: "foo") + {. emit: [result, " = (", obj1, ".a == 11);"] .} + {. emit: [result, " = ", result, " && (", obj1, ".notB == \"foo\");"] .} + {. emit: [result, " = (", obj2, ".a == 11);"] .} + {. emit: [result, " = ", result, " && (", obj2, ".notB == \"foo\");"] .} + echo test() |