Mike Gerwitz
adb7e088b7
[ #19 ] Cannot declare virtual static methods
2011-06-09 22:22:14 -04:00
Mike Gerwitz
08dc2559b4
[ #19 ] Cannot declare virtual properties
2011-06-09 19:46:13 -04:00
Mike Gerwitz
4fea62a8ed
[ #19 ] Removed 'final' keyword and all associated logic
...
- Kept FinalClass'
2011-06-08 01:26:04 -04:00
Mike Gerwitz
8b83e85c43
[ #19 ] Implemented 'virtual' keyword
...
- Baby steps. 'override' keyword is not yet necessary.
- Final not yet removed
2011-06-08 01:11:53 -04:00
Mike Gerwitz
24a04369ae
Properly copying over abstract methods in implement()
2011-06-08 01:10:44 -04:00
Mike Gerwitz
557dcf6904
Fixed static bug and removed late static binding
...
- Late static binding will be revisited in the future
2011-05-31 22:29:07 -04:00
Mike Gerwitz
9db4e8d99f
Supplying alternative to getMethodInstance() for static methods
2011-05-30 23:03:08 -04:00
Mike Gerwitz
85c4c70b7d
Removed unneeded argument
2011-05-30 20:10:52 -04:00
Mike Gerwitz
76bc7361d3
Implemented GH#2 - Keyword restrictions; throw exception when unknown keywords are used
2011-05-22 22:11:57 -04:00
Mike Gerwitz
cf344186fc
Implement GH#1 Provide useful error when attempting to extend from non-constructor
2011-05-22 21:54:41 -04:00
Mike Gerwitz
8c62ee021c
Added support for final subtypes
2011-05-22 21:35:29 -04:00
Mike Gerwitz
a67d704837
Added support for named abstract subclasses
2011-05-22 21:05:46 -04:00
Mike Gerwitz
db9de2712e
Added class_abstract docblocks
2011-05-22 19:15:19 -04:00
Mike Gerwitz
e0de030cee
Implemented AbstractClass
...
- Some of this functionality requires further refactoring
2011-05-22 16:08:48 -04:00
Mike Gerwitz
b359906aa3
Refactored method validations into separate method
2011-05-22 11:25:15 -04:00
Mike Gerwitz
9690663d1c
Added support for final classes
...
- This commit was originally many. Unfortunately, certain Git objects became
corrupt shortly after my 500th commit due to HDD issues. Due to the scope, I
was unable to recover the set of commits I needed (after an hour of trying
every method).
- Fortunately, vim's swap files came to the rescue. Had I been able to
properly shut down my PC, I would have been rather frustrated.
2011-05-22 11:19:51 -04:00
Mike Gerwitz
6e1d796092
Implemented constant properties
2011-05-19 19:48:51 -04:00
Mike Gerwitz
2d91a221aa
Const keyword now results in static property
2011-05-19 19:07:31 -04:00
Mike Gerwitz
030bdef821
Static keyword cannot be used with const for properties
2011-05-19 18:30:55 -04:00
Mike Gerwitz
f3c1d0f9af
Methods cannot be declared as constant
2011-05-19 07:54:51 -04:00
Mike Gerwitz
0c5293991c
Disallowed use of final keyword with properties
2011-05-18 20:51:02 -04:00
Mike Gerwitz
f47fcf4f46
Simplified and enhanced util.freeze()
2011-05-15 19:12:24 -04:00
Mike Gerwitz
4c74f2a1f2
Added final keyword for methods
2011-05-15 19:11:23 -04:00
Mike Gerwitz
775438c1b6
Implemented private static properties
2011-05-13 00:55:09 -04:00
Mike Gerwitz
9b20cdff48
Initial concept for protected static property access
2011-05-12 00:25:34 -04:00
Mike Gerwitz
9067bbf0cf
Static property accessor method is no longer enumerable
2011-05-11 20:53:43 -04:00
Mike Gerwitz
fa8d1bebe1
Implemented private static methods
2011-05-11 20:10:10 -04:00
Mike Gerwitz
a303adddea
Added tests to ensure that static method overrides are supported
2011-05-11 18:36:49 -04:00
Mike Gerwitz
9822894eae
Protected static methods are now inherited by subtypes
2011-05-11 17:56:48 -04:00
Mike Gerwitz
d542f9d803
Extendig concrete classes should no longer consume an instance id unnecessarily
...
- This is not tested because it would be testing too closely to the implementation
2011-05-10 23:35:43 -04:00
Mike Gerwitz
6325b0cf17
[Cleanup] Removed unused arguments from concrete ctor
2011-05-10 23:32:13 -04:00
Mike Gerwitz
91a47e4dcd
[Bug Fix] Concrete class constructor is no longer invoked on extend
...
- The ctor must be instantiated for use in the prototype chain
- This was working in the past, but apparently no test existed for it and
refactoring broke it
2011-05-10 23:32:13 -04:00
Mike Gerwitz
3c774a7b16
Implemented protected static members within static methods
...
- Still not inheritence
2011-05-10 19:54:23 -04:00
Mike Gerwitz
a246dd67e0
Began adding protected static members (supported for instance methods)
...
- No inheritance support yet
2011-05-09 23:09:32 -04:00
Mike Gerwitz
c980a59273
Comment correction for static members
2011-04-14 20:28:42 -04:00
Mike Gerwitz
26cf32abe5
Enhanced static property setter to support setting to both undefined and null values
2011-04-13 23:53:03 -04:00
Mike Gerwitz
462671cfba
Can no longer set values of undeclared static properties
2011-04-13 23:45:26 -04:00
Mike Gerwitz
7e53df0e84
Static property setter now returns calling class
2011-04-13 23:35:54 -04:00
Mike Gerwitz
e3c526b89d
Writes to public static properties now work properly
2011-04-13 23:06:24 -04:00
Mike Gerwitz
44cd8db82d
Began implementing static property method (getter)
2011-04-13 22:38:05 -04:00
Mike Gerwitz
143348d390
propobj doSetup() param doc fix
2011-04-13 19:53:22 -04:00
Mike Gerwitz
63a4f95f65
Fix for overriding protected with protected
...
- A better solution may be explored
2011-04-13 14:48:20 -04:00
Mike Gerwitz
4a90b7b809
Public static properties references are now shared with subtypes
2011-04-10 22:32:46 -04:00
Mike Gerwitz
aead20290c
Inherited static members are no longer copied by reference
...
- Sharing values with supertype = bad
2011-04-05 23:47:44 -04:00
Mike Gerwitz
604e03fa55
util.clone() no longer falsely attempts to clone functions
2011-04-05 23:47:08 -04:00
Mike Gerwitz
4a0537223b
Added deep copy to util.copyTo()
2011-04-05 23:38:13 -04:00
Mike Gerwitz
fad503422e
Subtypes now inherit public static members from their supertype
2011-04-05 23:11:25 -04:00
Mike Gerwitz
a1ed610681
More efficient inheritance check for __initProps()'s __inst definition
2011-04-05 22:09:02 -04:00
Mike Gerwitz
7560d57619
Implemented __self for static access
2011-04-05 22:07:13 -04:00
Mike Gerwitz
af53fe81b4
Added support for public static getters/setters
2011-04-05 00:08:39 -04:00
Mike Gerwitz
4d0724b85d
Added util.copyTo()
2011-04-05 00:05:18 -04:00
Mike Gerwitz
e93a4db3e4
Began implementing public static members
2011-04-04 23:07:01 -04:00
Mike Gerwitz
7a2640eb5d
Removing unnecessary method reference (more post-refactor cleanup)
2011-04-04 22:42:09 -04:00
Mike Gerwitz
666d1df3fb
Removed unused var from class_builder
...
- 'properties' var no longer used after prior refactoring
2011-04-04 22:42:04 -04:00
Mike Gerwitz
dddd26761c
Current __self -> __inst; __self will be used in a different manner in following commits
2011-04-03 11:57:15 -04:00
Mike Gerwitz
1abf127ccc
Protected property values, when set by the parent, are now available to subtypes
2011-04-02 10:58:26 -04:00
Mike Gerwitz
0c48f00c74
Corrected documentation and default value for unless_exists in propobj's doSetup()
2011-04-02 10:31:39 -04:00
Mike Gerwitz
61f2f7e22d
Methods can now be properly overridden when visibility is escalated
2011-04-01 06:28:45 -04:00
Mike Gerwitz
170eb06af6
Only adding __self() for instance, not supertype init
2011-03-30 23:31:46 -04:00
Mike Gerwitz
6ade1c021f
Implemented GH#15 Access to public interface from within class instance
2011-03-30 00:55:27 -04:00
Mike Gerwitz
9d47e64ac3
Properties can no longer be declared as abstract
2011-03-29 23:48:17 -04:00
Mike Gerwitz
8a3010c964
Implemented GH#3 Abstract keyword cannot be used with private members
2011-03-29 23:39:49 -04:00
Mike Gerwitz
08771b2b97
Chose a more tolerable name to show in debuggers for class instances
2011-03-29 22:04:54 -04:00
Mike Gerwitz
5cb0b8355f
__super() method is now properly set on context
2011-03-29 22:02:42 -04:00
Mike Gerwitz
f43959640c
Moved attachId() to class_builder
2011-03-29 00:15:16 -04:00
Mike Gerwitz
55288f1e07
Moved attachAbstract() to class_builder
2011-03-29 00:08:49 -04:00
Mike Gerwitz
c8e2ebc4ea
Added toString() to forced-public methods list
2011-03-28 19:52:16 -04:00
Mike Gerwitz
bc8ec4e0be
Added tests for forced-public methods
2011-03-28 19:17:38 -04:00
Mike Gerwitz
52aab7fa54
reserved => reserved_members
2011-03-28 19:01:58 -04:00
Mike Gerwitz
2555a0db47
Added tests for reserved members
2011-03-28 18:58:23 -04:00
Mike Gerwitz
030b207f8f
Public-required members are now stored in a hash
2011-03-28 18:21:06 -04:00
Mike Gerwitz
8cd25b1bc4
Now storing reserved names in a hash
2011-03-28 18:18:40 -04:00
Mike Gerwitz
8ba68b31dc
Split concrete and abstract ctor generation into two separate functions
2011-03-27 23:16:19 -04:00
Mike Gerwitz
5bb0269280
Added test todo for class_builder
2011-03-27 23:09:17 -04:00
Mike Gerwitz
adfc607c8b
Continued moving class creation logic into class_builder module
...
- Again, very messy. Not yet complete.
2011-03-27 23:04:40 -04:00
Mike Gerwitz
87e7872f61
Using __dirname for modules rather than relative path
2011-03-27 02:02:04 -04:00
Mike Gerwitz
af8f0b1566
Began refactoring into class_builder module
...
- Sloppy thusfar. Baby steps.
2011-03-27 01:57:17 -04:00
Mike Gerwitz
30d10ff9d7
Constructor must now be public
2011-03-23 21:35:25 -04:00
Mike Gerwitz
2388d8f4d3
Typo caught my eye in comment
2011-03-23 21:03:19 -04:00
Mike Gerwitz
4d2852627e
All interface members must now be public
2011-03-19 00:58:42 -04:00
Mike Gerwitz
5af833ab05
Disallowing member redeclaration in same class definition
2011-03-19 00:48:02 -04:00
Mike Gerwitz
ce736bea55
Visibility de-escalation no longer permitted
2011-03-18 23:42:07 -04:00
Mike Gerwitz
9b9bcfd150
Apparently methodOverride callback isn't used anymore in this context. Forgot to remove.
2011-03-16 23:32:48 -04:00
Mike Gerwitz
36ae6bcd81
Now throwing expection if more than two arguments are passed to extend() when implementing
2011-03-16 19:50:47 -04:00
Mike Gerwitz
14cac6b461
Can now specify parent class in extend() when implementing atop an empty base
2011-03-16 19:24:02 -04:00
Mike Gerwitz
80f3ec6b68
Preventing base specification via extend() when implementing off of an existing base class
2011-03-16 19:06:16 -04:00
Mike Gerwitz
58cb196213
Extending class while using temporary name object is now permitted
2011-03-16 18:18:33 -04:00
Mike Gerwitz
dde4fb99d3
Corrected error language for invoking class module
2011-03-16 17:50:11 -04:00
Mike Gerwitz
5fe08a18ac
Corrected argument documentation
2011-03-15 00:17:02 -04:00
Mike Gerwitz
b2161d1822
Now storing visibility data in class instance (so GC can clear it)
2011-03-14 23:49:11 -04:00
Mike Gerwitz
66758500e6
Class metadata is now stored in class object (first step in working with GC)
2011-03-14 23:43:56 -04:00
Mike Gerwitz
7b766c1b14
Altered toString() defaults to be more consistent with v8
2011-03-14 18:16:53 -04:00
Mike Gerwitz
d05652f880
Fixed visibility issues in IE6
...
- Wasn't properly falling back
2011-03-13 21:47:40 -04:00
Mike Gerwitz
984a14b087
Added more detailed documentation regarding the class_instance object
2011-03-13 14:51:40 -04:00
Mike Gerwitz
e03c081cfd
Fixed bug that made private members of a supertype inaccessible to methods that have not been overridden by a subtype
...
- In doing so, abandoned the super identifier (sid) for a more elegant solution with class ids (cid's)
- This permits fast and easy private member swapping via getMethodInstance() in class.js
2011-03-13 04:51:00 -04:00
Mike Gerwitz
e4e8900a9f
Storing each supertype's private members in a separate object to prepare for future change
...
- sid = super identifier
2011-03-13 03:55:43 -04:00
Mike Gerwitz
6b374902ae
Separated private members into a separate object (propobj) to prepare for future modifications
...
- This incurs a performance hit for accessing protected members, and even further for public, internally
- But speeds up access to private members, likely due to there being less members
2011-03-12 23:48:38 -05:00
Mike Gerwitz
e0fb37daa0
Overridden methods now property return instance when returning 'this'
...
- There may be a cleaner way to do this. This is a quick fix.
2011-03-10 12:40:55 -05:00
Mike Gerwitz
7427958ec0
Returning 'this' from a method will now return the object instance, not the internal property object
2011-03-10 12:19:39 -05:00
Mike Gerwitz
960be880ab
Merge branch 'master' into visibility/master
2011-03-07 23:09:02 -05:00
Mike Gerwitz
841b5ac5a5
Replaed all __{define,lookup}[GS]etter__'s with defineProperty/getOwnPropertyDescriptor
2011-03-07 22:44:47 -05:00
Mike Gerwitz
df409c1e58
Property object now properly falls back in IE8
2011-03-07 09:05:05 -05:00
Mike Gerwitz
00378da630
Merge branch 'master' into visibility/master
2011-03-07 09:03:34 -05:00
Mike Gerwitz
fbc58384b4
Provided a more accurate mechanism for detecting Object.defineProperty (tests in IE8 fixed)
2011-03-07 09:03:03 -05:00
Mike Gerwitz
e05a65d5fa
Initial concept of inheriting protected/private members
2011-03-07 00:14:43 -05:00
Mike Gerwitz
f692ebcdfd
Once again refactored propobj.setup(), removing unnecessary argument and separating into inheritance and non-inheritance methods
2011-03-07 00:10:12 -05:00
Mike Gerwitz
d1be2d5351
Refactored propbj.setup() to be a bit more managable
2011-03-06 23:56:19 -05:00
Mike Gerwitz
30bfde50cd
Tada! Private members.
2011-03-06 23:03:39 -05:00
Mike Gerwitz
c1765cd720
Using visibility fallback for browsers that do not support getters/setters
2011-03-06 22:43:14 -05:00
Mike Gerwitz
df2943b5a1
Replaced __define[GS]etter__ with defineProperty for prop proxy
2011-03-06 22:16:50 -05:00
Mike Gerwitz
3651e31d20
Refactored property proxying into its own method
2011-03-06 21:48:18 -05:00
Mike Gerwitz
e463d2c411
Began factoring property instance object out of class module
2011-03-06 18:19:19 -05:00
Mike Gerwitz
5d8fdc5204
Merge branch 'master' into visibility/master
...
Conflicts:
lib/class.js
2011-03-06 12:39:26 -05:00
Mike Gerwitz
517b2be464
Fix toString() override for IE
...
- All tests once again pass on IE6
2011-03-06 12:38:31 -05:00
Mike Gerwitz
c0f351d173
Merge branch 'master' into visibility/master
2011-03-05 23:12:55 -05:00
Mike Gerwitz
d6cca75093
Can now override toString() method of a class
2011-03-05 23:11:13 -05:00
Mike Gerwitz
b321610cc7
Interface name included in instantiation error, if available
2011-03-05 21:46:44 -05:00
Mike Gerwitz
6f7dabe35e
Interface name is included in declaration errors, if available
2011-03-05 17:27:02 -05:00
Mike Gerwitz
2967cc7a9a
Class name is now provided in all errors where name is available, within class module
2011-03-05 13:13:53 -05:00
Mike Gerwitz
da8be9affa
Interface definition errors now contain class name when available
2011-03-05 12:57:21 -05:00
Mike Gerwitz
5f739e604b
Class name is included in definition errors when available
2011-03-05 12:56:14 -05:00
Mike Gerwitz
635395b303
Merge branch 'master' into visibility/master
2011-03-05 03:23:11 -05:00
Mike Gerwitz
2c2701f4ab
Implemented staging-style named class definition when implementing interfaces
2011-03-05 03:22:45 -05:00
Mike Gerwitz
8749228764
interface() calls now push/pop rather than shift/unshift (performance)
2011-03-05 03:03:50 -05:00
Mike Gerwitz
0f9454b79b
interface() no longer returns a usable class
...
- Number of reasons. First and foremost, it doesn't make sense to return a usable class with no body/definition
- Secondly, to make the following commit(s) possible and consistent
2011-03-05 02:59:21 -05:00
Mike Gerwitz
ace9f4c1ea
Began implementing class name staging (implement() does not yet work with it)
2011-03-05 00:33:47 -05:00
Mike Gerwitz
bedc3c95af
Moved named class argument check error to a more sensible location and amended error message
2011-03-04 23:44:19 -05:00
Mike Gerwitz
0ccdf07145
Implemented strict argument check for interface creation
2011-03-04 23:43:30 -05:00
Mike Gerwitz
649356ef23
Refactored interface module invocation into separate functions for named and anonymous
2011-03-04 23:35:28 -05:00
Mike Gerwitz
e3075b0479
Refactored class module invocation method into separate functions
...
- The class module is getting too big. Something will have to be done soon.
2011-03-04 19:49:15 -05:00
Mike Gerwitz
b158e542d5
Declaring named class will throw error for extreaneous arguments
2011-03-04 16:36:15 -05:00
Mike Gerwitz
dca7653adf
Merge branch 'master' into visibility/master
2011-03-04 00:26:02 -05:00
Mike Gerwitz
7bb87e370f
No need to recheck the type each time
2011-03-04 00:24:42 -05:00
Mike Gerwitz
009c4a93e9
Interfaces now have sane/useful values when converted to strings
2011-03-04 00:19:02 -05:00
Mike Gerwitz
ec7b4e2b6b
Updated class module docblock
2011-03-04 00:17:25 -05:00
Mike Gerwitz
85e687e29c
Added Interface.isInterface()
2011-03-03 23:59:37 -05:00
Mike Gerwitz
4148f8742d
Merge branch 'master' into visibility/master
...
Conflicts:
test/test-class-extend.js
2011-03-03 23:29:20 -05:00
Mike Gerwitz
81d03cb984
Altered class toString() representations to be more consistent with JS
2011-03-03 23:00:59 -05:00
Mike Gerwitz
e2cba458d8
Class instances now have different default toString() implementations than uninstantiated classes
...
- Instance id is not yet included, as that is currently in a different branch
2011-03-03 22:53:20 -05:00
Mike Gerwitz
840a495017
Began implementing named classes
...
- toString() implementation
2011-03-03 22:33:18 -05:00
Mike Gerwitz
d23ae6210c
Initial implementation of natural class definition by invoking class module
2011-03-03 19:43:20 -05:00
Mike Gerwitz
3f915d3644
The interface module may now be invoked, providing a more natural looking means of declaring interfaces
2011-03-03 19:08:24 -05:00
Mike Gerwitz
bc9e2bb7b2
Fix setting public properties
...
- This currently only works with ES5 engines
- Fallback to follow so this will work with pre-ES5 engines
- As such, I do not recommend using this commit outside of ES5-compliant engines that work properly with getters/setters
- This does NOT include IE8, as IE8 only works with getters/setters on DOM elements
2011-03-02 23:21:10 -05:00
Mike Gerwitz
74c2fc57c1
Initial implementation of protected members
...
- This was quite the pain in the ass
- There are additional considerations. I DO NOT recommend using this commit. Check out a later commit.
2011-03-02 20:43:24 -05:00
Mike Gerwitz
2af7bcf45d
Merge branch 'master' into visibility/master
2011-03-02 07:54:52 -05:00
Mike Gerwitz
e239352fc0
Resolved bug that was causing the system to think that Object prototype members were part of the abstract member list when attempting to define a method with the same name
2011-03-01 12:11:36 -05:00
Mike Gerwitz
e3561a492f
Modified interface property message to be a bit more helpful in a likely common scenerio
2011-03-01 09:17:24 -05:00
Mike Gerwitz
38c16048cb
Began adding protected/private member support
...
- No longer adding ANY properties to prototype
- protected/private members no longer part of the public access level
2011-01-27 22:35:40 -05:00
Mike Gerwitz
8c7ad787c8
Abstract methods list is no longer public
2011-01-25 00:24:50 -05:00
Mike Gerwitz
fb5d541ea3
Removed old console.log
2011-01-25 00:23:56 -05:00