Commit Graph

61 Commits

Author SHA1 Message Date
mpeterv
ab1699bb05 Do not wrap __newindex 2015-11-28 18:10:35 +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
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
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
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
9fb0f72a74 bump version to 3.1.0 2015-11-02 17:37:30 +01:00
kikito
d6b5f5c22d do not stub __metatable or __mode 2015-10-31 16:26:20 +01:00
kikito
d97a1bfbd4 do not stub the __gc metamethod 2015-10-31 15:56:17 +01:00
kikito
512e6c2968 __gc metamethod for 5.3 2015-10-12 13:39:35 +02:00
kikito
fd02469814 Improve the static class lookup. Fixes #27 2015-10-12 12:46:28 +02:00
Enrique García
a8a8298a4c Add _URL 2014-04-01 23:27:36 +02:00
kikito
e196695517 pushed 3.0.1 2013-12-06 22:04:31 +01:00
kenshin
b89bf82db4 supplement unit test for __len, __pairs, __ipairs 2013-12-04 18:09:54 +08:00
kenshin
151c5b2c71 new metamethod __len,__pairs,__ipairs in lua 5.2 2013-12-02 11:48:20 +08:00
kikito
36379fd165 improved parameter error treatment 2013-09-18 23:47:07 +02:00
kikito
2208c84dae klass -> aClass 2013-09-18 23:43:53 +02:00
kikito
f5aac38418 made includes a private method 2013-09-17 01:14:57 +02:00
kikito
1be9e39deb fixed isInstanceOf 2013-09-17 00:48:47 +02:00
kikito
219550cd58 started working on 3.0 2013-09-16 10:37:56 +02:00
kikito
cd9609e1ae made Object non-global 2013-09-15 23:18:08 +02:00
kikito
88e84d13c2 made class non-global 2013-09-15 23:14:00 +02:00
kikito
491eb44628 if walks like a class and talks like a class, it is a class 2013-09-15 23:03:35 +02:00
kikito
f107a68a20 added header to middleclass, and returned it 2013-09-15 15:51:49 +02:00
Enrique García Cota
04ffc69a5e added license directly to middleclass.lua 2011-09-19 00:32:17 +02:00
Enrique García Cota
3f9ae1d6e8 merged branch 2.0 2011-09-19 00:21:14 +02:00
Enrique García Cota
c2e4fce043 mixins now support static methods 2011-09-18 17:40:50 +02:00
Enrique García Cota
1df9ccf178 added list of subclasses per class 2011-08-14 18:39:57 +02:00
Enrique García Cota
252b63f8f6 removed mixin parameters. Added possibility of including several mixins simultaneously 2011-08-14 18:07:44 +02:00
Enrique García Cota
21735533d5 updated README, removed unused lines 2011-08-14 00:17:29 +02:00
Enrique García Cota
69d469b67a added subclassed hook method 2011-08-14 00:08:33 +02:00
Enrique García Cota
6c9f6a0074 added mixin support 2011-08-13 23:58:55 +02:00
Enrique García Cota
ce3be2d45b Class.superclass -> Class.super . YEAH 2011-08-13 03:38:31 +02:00
Enrique García Cota
af03b4f6d8 fixed error in Object_spec that made other tests fail in some cases. Added some minor optimizations & fixes 2011-08-13 03:12:21 +02:00
Enrique García Cota
da557bb207 split tests more. refactorized class creation. included metamethod support 2011-08-12 10:33:58 +02:00
Enrique García Cota
90bef60d86 fixed test with Object() 2011-08-11 11:36:23 +02:00
Enrique Garcia Cota
40e14838a2 added instanceOf and subclassOf, as well as splitted into more files. Having issues with Object() (call metamethod) 2011-08-10 21:45:15 +02:00
Enrique García Cota
0e637ea8da separated into more files added instancemethods and attributes 2011-08-08 23:59:23 +02:00
Enrique García Cota
fc682e12dd initial implementation of allocate and new done 2011-08-08 23:18:15 +02:00
Enrique García Cota
7487c9ba79 added the initial subclass implementation. renamed Class.class to Class.static 2011-08-08 22:29:18 +02:00
Enrique García Cota
3461767eba discarded static() approach due to syntax error. Using Class.class for static variables 2011-08-08 07:38:11 +02:00
Enrique García Cota
25fcd5e030 bootstrapping and little else 2011-08-08 00:07:02 +02:00
Enrique García Cota
268004682c renamed "module" to "mixin" 2011-08-07 00:48:13 +02:00
Enrique García Cota
30b6195435 made the __metamethods table part of Object, so it can be reused in mixins 2011-04-14 00:33:42 +02:00
Enrique García Cota
01f2248ce1 small fix on Object.include param check 2011-04-12 00:00:40 +02:00
Enrique García
f775d375e3 changed date on initial comment. fixes #10 2011-04-06 15:28:35 +02:00
Enrique García
08076c765d preparing v1.4 tag 2011-03-30 20:34:15 +02:00
Enrique García
060886ee90 made allocate overridable by subclasses and mixins 2011-03-30 20:28:56 +02:00