diff options
-rwxr-xr-x | compiler/commands.nim | 11 | ||||
-rwxr-xr-x | lib/system.nim | 4 | ||||
-rw-r--r-- | tests/run/tobject.nim | 15 |
3 files changed, 25 insertions, 5 deletions
diff --git a/compiler/commands.nim b/compiler/commands.nim index 1da632858..4dcf011f4 100755 --- a/compiler/commands.nim +++ b/compiler/commands.nim @@ -65,8 +65,13 @@ proc writeCommandLineUsage() = MsgWriteln(getCommandLineDesc()) helpWritten = true +proc addPrefix(switch: string): string = + if len(switch) == 1: result = "-" & switch + else: result = "--" & switch + proc InvalidCmdLineOption(pass: TCmdLinePass, switch: string, info: TLineInfo) = - LocalError(info, errInvalidCmdLineOption, switch) + if switch == " ": LocalError(info, errInvalidCmdLineOption, "-") + else: LocalError(info, errInvalidCmdLineOption, addPrefix(switch)) proc splitSwitch(switch: string, cmd, arg: var string, pass: TCmdLinePass, info: TLineInfo) = @@ -98,10 +103,10 @@ proc ProcessOnOffSwitchG(op: TGlobalOptions, arg: string, pass: TCmdlinePass, else: LocalError(info, errOnOrOffExpectedButXFound, arg) proc ExpectArg(switch, arg: string, pass: TCmdLinePass, info: TLineInfo) = - if arg == "": LocalError(info, errCmdLineArgExpected, switch) + if arg == "": LocalError(info, errCmdLineArgExpected, addPrefix(switch)) proc ExpectNoArg(switch, arg: string, pass: TCmdLinePass, info: TLineInfo) = - if arg != "": LocalError(info, errCmdLineNoArgExpected, switch) + if arg != "": LocalError(info, errCmdLineNoArgExpected, addPrefix(switch)) proc ProcessSpecificNote(arg: string, state: TSpecialWord, pass: TCmdlinePass, info: TLineInfo) = diff --git a/lib/system.nim b/lib/system.nim index 5f9a24ba9..db78d2740 100755 --- a/lib/system.nim +++ b/lib/system.nim @@ -1532,7 +1532,7 @@ iterator fieldPairs*[S: tuple|object, T: tuple|object](x: S, y: T): tuple[ ## The current implementation also has a bug that affects symbol binding ## in the loop body. -proc `==`*[T: tuple](x, y: T): bool = +proc `==`*[T: tuple|object](x, y: T): bool = ## generic ``==`` operator for tuples that is lifted from the components ## of `x` and `y`. for a, b in fields(x, y): @@ -1557,7 +1557,7 @@ proc `<`*[T: tuple](x, y: T): bool = if c > 0: return false return false -proc `$`*[T: tuple](x: T): string = +proc `$`*[T: tuple|object](x: T): string = ## generic ``$`` operator for tuples that is lifted from the components ## of `x`. Example: ## diff --git a/tests/run/tobject.nim b/tests/run/tobject.nim new file mode 100644 index 000000000..5fec84441 --- /dev/null +++ b/tests/run/tobject.nim @@ -0,0 +1,15 @@ +import unittest + +type Obj = object + foo: int + +proc makeObj(x: int): Obj = + result.foo = x + +suite "object basic methods": + test "it should convert an object to a string": + var obj = makeObj(1) + # Should be "obj: (foo: 1)" or similar. + check($obj == "(foo: 1)") + test "it should test equality based on fields": + check(makeObj(1) == makeObj(1)) |