5e34a113ea
Before this patch MP_BINARY_OP_IN had two meanings: coming from bytecode it meant that the args needed to be swapped, but coming from within the runtime meant that the args were already in the correct order. This lead to some confusion in the code and comments stating how args were reversed. It also lead to 2 bugs: 1) containment for a subclass of a native type didn't work; 2) the expression "{True} in True" would illegally succeed and return True. In both of these cases it was because the args to MP_BINARY_OP_IN ended up being reversed twice. To fix these things this patch introduces MP_BINARY_OP_CONTAINS which corresponds exactly to the __contains__ special method, and this is the operator that built-in types should implement. MP_BINARY_OP_IN is now only emitted by the compiler and is converted to MP_BINARY_OP_CONTAINS by swapping the arguments.
26 lines
1.2 KiB
Plaintext
26 lines
1.2 KiB
Plaintext
SyntaxError('parameter annotation must be an identifier',)
|
|
SyntaxError('return annotation must be an identifier',)
|
|
ViperTypeError("unknown type 'unknown_type'",)
|
|
ViperTypeError("Viper functions don't currently support more than 4 arguments",)
|
|
ViperTypeError("local 'x' used before type known",)
|
|
ViperTypeError("local 'x' has type 'int' but source is 'object'",)
|
|
ViperTypeError("can't implicitly convert 'ptr' to 'bool'",)
|
|
ViperTypeError("return expected 'int' but got 'object'",)
|
|
ViperTypeError("can't do binary op between 'int' and 'object'",)
|
|
ViperTypeError("can't load from 'int'",)
|
|
ViperTypeError("can't load from 'int'",)
|
|
ViperTypeError("can't store to 'int'",)
|
|
ViperTypeError("can't store to 'int'",)
|
|
ViperTypeError("can't store to 'int'",)
|
|
ViperTypeError("can't store 'None'",)
|
|
ViperTypeError("can't store 'None'",)
|
|
ViperTypeError('must raise an object',)
|
|
ViperTypeError('unary op __pos__ not implemented',)
|
|
ViperTypeError('unary op __neg__ not implemented',)
|
|
ViperTypeError('unary op __invert__ not implemented',)
|
|
ViperTypeError('binary op not implemented',)
|
|
NotImplementedError('native yield',)
|
|
NotImplementedError('native yield from',)
|
|
NotImplementedError('conversion to object',)
|
|
NotImplementedError('casting',)
|