Commit Graph

222 Commits

Author SHA1 Message Date
Yuriy Artemyev
f945eb056f refactor: Move middleclass.lua module to lua/ folder
And create a symlink in the root to the lua/middleclass.lua file.
2022-09-20 19:45:26 +03:00
Yuriy Artemyev
7db1ec5857 Create lua/middleclass.lua symlink to origin file
To make middleclass git repo work with Neovim plugin managers.
2022-08-12 12:55:54 +03:00
Enrique García Cota
aa8f88b317
Merge pull request #58 from jojo59516/optimize 2022-01-20 23:31:22 +01:00
jojo59516
cc5cc98873 add test case for checking type of instance's __index 2019-11-27 11:21:56 +08:00
Chao Yin
63f83ea0ef reduce a conditional branch in wrapped __index function 2019-10-18 18:50:22 +08:00
Chao Yin
fd25b1a006 subclass's __instanceDict.__index should be a table if there is no custom __index 2019-10-18 18:49:15 +08:00
Enrique García Cota
6102f676c2 new rockspec 2018-03-10 12:39:15 +01:00
Enrique García Cota
dc0fb3612d update changelog 2018-03-10 12:36:26 +01:00
Enrique García Cota
d7725e5acd Bump version to 4.1.1 2018-03-10 12:36:16 +01:00
Enrique García Cota
ccab332079 isInstanceOf works on primitives.
Fixes #55
2018-03-07 09:27:56 -08:00
Enrique García Cota
f9955f9285
Merge pull request #51 from qaisjp/patch-1
Fix return of super.static if val false (fix #50)
2017-12-06 12:55:05 +01:00
Qais Patankar
c13b4a4f6a
Fix use of C-syntax 2017-11-08 13:45:31 +00:00
Qais Patankar
6b4bc410d6
Fix return of super.static if val false (fix #50) 2017-11-08 11:19:31 +00:00
kikito
27a64f107e updates rockspec 2016-07-02 06:13:25 +02:00
kikito
13e889d06c bump version to 4.1.0 2016-07-02 06:08:20 +02:00
Enrique García
0250f97bea Merge pull request #41 from kikito/simplify
simplifies isInstanceOf & isSubclassOf. Fixes #39
2016-07-02 06:05:55 +02:00
kikito
2bcef2b9ff simplifies isInstanceOf & isSubclassOf. Fixes #39 2016-07-02 06:00:03 +02:00
Enrique García
566a809333 Update UPDATING.md 2016-03-20 18:49:56 +01:00
kikito
bffb00b195 fixes luacheck errors 2016-01-02 09:57:00 +01:00
kikito
443dd5e3f5 adds luacheck to travis 2016-01-02 09:33:34 +01:00
kikito
49579a59f4 adds rockspec for v4.0 2015-12-31 18:58:13 +01:00
kikito
9cb11c4dd6 Merge branch 'v4.0' 2015-12-31 18:54:36 +01:00
kikito
3527b5cab9 eliminates innecessary metatable setting 2015-12-31 18:52:39 +01:00
kikito
958cae6c1c restores :allocate and adds more documentation 2015-12-31 00:47:37 +01:00
kikito
4789a39d14 update changelog 2015-12-28 10:58:49 +01:00
kikito
7894eb7790 Refactor & remove class:allocate 2015-12-27 23:53:10 +01:00
kikito
fc61416c81 first green version using unified method/metamethod resolver 2015-12-27 15:42:49 +01:00
kikito
13173150de adds coveralls badge 2015-12-27 12:51:50 +01:00
kikito
8baac4b8f0 attempts to exclude files from luacov 2015-12-26 13:27:36 +01:00
kikito
2e069c5e5b separates before_install & install steps in travis 2015-12-26 13:11:58 +01:00
kikito
052840502b attempts to use luacov 2015-12-26 13:04:33 +01:00
kikito
0f20fc4288 removes default includes(mixin) method and __mixins attribute 2015-12-13 01:13:49 +01:00
kikito
d5776a20ed makes Object a mixin instead of a global variable 2015-12-13 01:06:23 +01:00
kikito
79a7e02954 Merge branch 'index-newindex' of https://github.com/mpeterv/middleclass into mpeterv-index-newindex 2015-12-10 09:25:13 +01:00
mpeterv
ab1699bb05 Do not wrap __newindex 2015-11-28 18:10:35 +03:00
mpeterv
7574380519 Add tests for custom __index and __newindex 2015-11-24 18:48:17 +03:00
mpeterv
227705b3ec Support __index and __newindex metamethods
Separate instance dictionary and instance metatable.
When defining a metamethod and it's __index or __newindex,
wrap it in a function, so that it's used only when the key
is missing in the whole dictionary chain.

class.__metamethods table is now redundant; raw access of instance
dictionary can be used to check if a metamethod is defined in a class.
2015-11-24 18:26:53 +03:00
kikito
0ffa9094c0 add 3.2.0 rockspec 2015-11-23 23:39:54 +01:00
kikito
28c745f99e bump version to 3.2.0 2015-11-23 23:37:54 +01:00
kikito
15f6c82c50 Refactoring and renaming 2015-11-23 23:20:20 +01:00
kikito
3de0dc2166 propogate -> propagate 2015-11-23 22:47:50 +01:00
mpeterv
524d0ddc8c Fix not inheriting metamethods from grandparent class 2015-11-23 15:42:49 +03:00
mpeterv
b66ba54ccb Add tests for __mode 2015-11-19 14:10:38 +03:00
mpeterv
b0b655d1c0 Add tests for __metatable 2015-11-19 13:59:19 +03:00
mpeterv
f331dc4248 Fix __gc tests
Tests for inherited __gc used to pass even without the feature being
implemented, most likely because objects from previous tests got
collected just in time.
2015-11-19 13:53:51 +03:00
mpeterv
beee81e36a Support inheriting __gc, __mode, __metatable
Do not directly set metatable of an instance dict to super's
instance dict so that special metamethods do not affect it.
2015-11-19 13:53:03 +03:00
mpeterv
0f9d5c8e61 Add tests for overriding metamethods 2015-11-19 13:13:04 +03:00
mpeterv
d9f00351b2 Implement inheritable metamethods without stubs
In __newindex metamethods of each Class detect if
a metamethod is assigned. In that case, propogate assignment
to all child classes that do not overwrite the metamethod.
Track set of metamethods each class defines itself.
On subclassing, copy all parent metamethods to child.

Benefits of this approach:

* Objects only have metamethods when they are, in fact, defined.
  Ignoring overhead, the problem with stubs is that other libraries,
  seeing a stub metamethod, could try to call it and get an error
  if it's missing in the class. E.g. various deep comparison functions
  often try to detect and use __eq.
* Non-function metafields such as __metatable can be used.
* Less overhead when using metamethods (but more when defining them).
2015-11-19 13:05:09 +03:00
kikito
e7d8bc00d6 add 3.1.0 rockspec 2015-11-02 17:40:47 +01:00
kikito
738c1968a5 add 3.1.0 rockspec 2015-11-02 17:39:06 +01:00