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
Mike Gerwitz
fa8cddea07
Meta now uses deep cloning
2011-01-25 00:19:48 -05:00
Mike Gerwitz
881edc0cc6
Preparing to remove abstractMethods from public prototype; now uses hash for performance since it no longer needs to be referenced cleanly externally
...
- It will be later referenced via reflection
2011-01-25 00:13:47 -05:00
Mike Gerwitz
194aa02402
{new,} TypeError
2011-01-24 23:57:19 -05:00
Mike Gerwitz
188ad2f4eb
Getters/setters are not supported within interface definitions
2011-01-24 23:56:54 -05:00
Mike Gerwitz
c7b262b271
Concrete methods cannot be overridden by abstract methods
2011-01-24 23:52:06 -05:00
Mike Gerwitz
37e5b1d94d
util.propCopy() no longer needed
2011-01-24 23:38:27 -05:00
Mike Gerwitz
70f5d09c34
Interface now uses propParse and member builders
2011-01-24 23:35:45 -05:00
Mike Gerwitz
cd7b2563e5
Combined shared conditions in separate if statements
2011-01-24 23:30:32 -05:00
Mike Gerwitz
eba32ed4cb
Beginning to move Class over to use member builders
2011-01-24 23:28:48 -05:00
Mike Gerwitz
2a54662716
Added getter/setter keywords to propParse
2011-01-24 23:27:55 -05:00
Mike Gerwitz
5a3b401647
Began moving abstract logic out of propCopy
2011-01-24 20:58:58 -05:00
Mike Gerwitz
96d2f74dae
Method builder wraps overrides in an override function
2011-01-21 23:16:20 -05:00
Mike Gerwitz
e03d5861bb
Overridden methods must have >= length parameter lists
2011-01-21 22:19:22 -05:00
Mike Gerwitz
b8a6aa2af6
Method builder does not permit overriding properties with methods
2011-01-21 21:53:31 -05:00
Mike Gerwitz
12e5b48a7d
Cannot override method with property
2011-01-21 21:43:18 -05:00
Mike Gerwitz
dea6972416
Began adding basic method builder (currently operates the same as property builder)
...
- They are essentially the same, but the method builder will have additional logic (e.g. method overriding) and support different keywords
2011-01-21 20:54:55 -05:00
Mike Gerwitz
94d6fb1655
Added params to member_builder.initMembers() docblock
2011-01-21 00:09:26 -05:00
Mike Gerwitz
f55def4f06
Preparing class to use member_builder
2011-01-21 00:03:41 -05:00
Mike Gerwitz
2205af8c07
Can initialize member object with existing objects for each level of visibility
2011-01-20 23:56:39 -05:00
Mike Gerwitz
96cee9660b
Began adding member_builder.initMembers()
2011-01-20 23:53:00 -05:00
Mike Gerwitz
3c45912f25
Added getter/setter to member builder
2011-01-20 23:50:53 -05:00
Mike Gerwitz
a58b7989ee
Throws TypeError if multiple visibility keywords are given to member builder
2011-01-20 22:11:36 -05:00
Mike Gerwitz
9d9d00388c
Presumably private keywords will be used more frequently than protected, if the class is properly encapsulated
2011-01-20 21:51:35 -05:00
Mike Gerwitz
7f92a76e1f
Member builder uses public prototype by default
2011-01-20 21:50:52 -05:00
Mike Gerwitz
f27b0b01ab
Member builder recognizes private members
2011-01-20 21:48:09 -05:00
Mike Gerwitz
0ba3122db5
Member builder recognizes protected members
2011-01-20 21:46:49 -05:00
Mike Gerwitz
23a7d9d540
Began adding member_builder
2011-01-18 23:47:58 -05:00
Mike Gerwitz
96f5b8ff58
Multiple spaces now properly handled in keyword parser
2011-01-18 19:33:33 -05:00
Mike Gerwitz
7dab5c7b20
Keywords are now returned by propParse
2011-01-17 22:24:02 -05:00
Mike Gerwitz
afc5d4668d
Abstract classes also have a more intuitive string representation
2011-01-17 20:22:30 -05:00
Mike Gerwitz
d19638be4f
Classes now return a more intuitive string representation
2011-01-17 20:20:39 -05:00
Mike Gerwitz
7fb0f6a820
Classes now contain implement() method
2011-01-10 19:56:09 -05:00
Mike Gerwitz
ec9f24a926
Moved implement() into its own method, accepting destination object as the first parameter
2011-01-10 19:00:26 -05:00
Mike Gerwitz
fba94f2e0b
Added todo to profile propParse's use of fvoid vs if statements
2011-01-09 19:44:09 -05:00
Mike Gerwitz
7301ddbac2
[minor] formatting fix
2011-01-09 19:41:47 -05:00
Mike Gerwitz
aa1d38b007
Added deep cloning for objects
2011-01-09 01:46:46 -05:00
Mike Gerwitz
0f905481bf
Added deep cloning for arrays
2011-01-09 01:38:40 -05:00
Mike Gerwitz
3e8dba2fdc
Added missing comma to variable list
2011-01-09 00:40:35 -05:00
Mike Gerwitz
56c13b757b
isInstanceOf() now works with interfaces
2011-01-04 00:37:54 -05:00
Mike Gerwitz
c3b00ab9b7
Encapsulating implemented list (can use isInstanceOf() or a future reflection API)
2011-01-03 23:41:45 -05:00
Mike Gerwitz
0b112dac51
Abstract method list is now updated for classes that implement interfaces
2011-01-03 23:25:27 -05:00
Mike Gerwitz
c12ac412cb
Class.{implements => implement} - like Class.extend(), we're looking for a verb
2010-12-30 09:54:53 -05:00
Mike Gerwitz
d5d6082bfb
Interface methods are now copied to the class prototype (basic implementation - no deep copy for interface subtypes yet)
2010-12-29 23:34:12 -05:00
Mike Gerwitz
459d5e967b
Classes now store implemented interfaces in a list (does not yet import methods)
2010-12-29 23:33:30 -05:00
Mike Gerwitz
9ef73195c5
[minor] formatting fix
2010-12-29 22:51:29 -05:00
Mike Gerwitz
ca71fc6296
Remove accidental attach of isInstanceOf() to Class
2010-12-29 22:45:47 -05:00
Mike Gerwitz
80b0732be1
Interfaces cannot be instantiated
2010-12-29 22:40:23 -05:00
Mike Gerwitz
76969201fb
Added isA() as an alias for isInstanceOf()
2010-12-29 21:37:11 -05:00
Mike Gerwitz
6a24f2ad13
Added isInstanceOf() partially applied function to class instances
2010-12-29 21:32:16 -05:00
Mike Gerwitz
96909732db
Began adding isInstanceOf, starting with prototype chain checks
2010-12-29 21:13:21 -05:00
Mike Gerwitz
0103df3e71
Fixed self-invoking constructor issue in IE
2010-12-29 09:43:00 -05:00
Mike Gerwitz
38a6a4ee6a
Added missing semi-colons that would otherwise be inserted via semicolon insertion
2010-12-28 22:10:12 -05:00
Mike Gerwitz
789f2390af
All functions are now camelCase
2010-12-28 22:08:30 -05:00
Mike Gerwitz
004ccfa05b
Interfaces cannot inherit from Classes
2010-12-28 21:56:55 -05:00
Mike Gerwitz
c9d0e027fa
Added isClass() and isClassInstance() methods
2010-12-28 20:58:42 -05:00
Mike Gerwitz
928a0ea297
Removed Interface.abstractMethod() in favor of 'abstract' keyword
2010-12-28 20:13:50 -05:00
Mike Gerwitz
44186068b4
Class constructors are now self-invoking
...
- Permits omitting 'new' keyword, which is a style preferred by some (such as Crockford)
- It's very difficult to use apply() with the 'new' keyword - this method permits a simple way of passing an argument list to the constructor
2010-12-28 19:05:53 -05:00
Mike Gerwitz
828a366f29
Renamed prop_parse.{parse => parseKeywords}
2010-12-27 23:12:37 -05:00
Mike Gerwitz
87e293e33f
Property keyword parser now simply checks for spaces (to be flexible enough to support any keywords in the future)
2010-12-27 23:04:50 -05:00
Mike Gerwitz
3277a30d54
Removed now unnecessary abstract keyword check from util.propParse()
2010-12-27 22:32:30 -05:00
Mike Gerwitz
1364d5967f
Abstract methods must contain a parameter list as an array
2010-12-27 22:30:28 -05:00
Mike Gerwitz
69391f9b48
Finished correcting assertion tests with new implementation
2010-12-27 22:20:29 -05:00
Mike Gerwitz
e789e58000
Removed Class.abstractMethod in favor of property keyword
2010-12-27 22:11:37 -05:00
Mike Gerwitz
f705f38640
Began adding prop_parser module and moved existing property keyword parser function into it
2010-12-27 20:56:36 -05:00
Mike Gerwitz
9666a5f80f
Began adding property keyword parsing (concept)
2010-12-27 20:49:59 -05:00
Mike Gerwitz
3ef2a28e24
Merge branch 'master' of github.com:mikegerwitz/easejs
2010-12-23 15:59:57 -05:00
Mike Gerwitz
f58586fc94
Added tests to ensure constructor is properly applied to subtypes
2010-12-23 15:57:45 -05:00
Mike Gerwitz
a93ff61bde
If setting a secure property fails, it will force a fallback to prevent performance degredation due to exceptions
2010-12-22 22:17:07 -05:00
Mike Gerwitz
7e7080ccbf
util.defineSecureProp() no longer performs fallback check on each invocation
2010-12-21 22:41:50 -05:00
Mike Gerwitz
d5f37f294e
IE8 does not support Object.defineProperty on non-DOM objects
...
(see http://stackoverflow.com/questions/3830800/object-defineproperty-in-es5 )
2010-12-21 14:37:34 -05:00
Mike Gerwitz
e1d7b80d46
Calling hasOwnProperty via Object prototype in case it has been overridden
2010-12-21 10:09:18 -05:00
Mike Gerwitz
3a0972c79d
Removed unneeded 'continue' statement
2010-12-20 13:51:44 -05:00
Mike Gerwitz
1f40665e57
Added tests for util.defineSecureProp()
2010-12-20 13:43:12 -05:00
Mike Gerwitz
0d84cd829a
util.defineSecureProp was failing in browsers that do not support Object.defineProperty()
...
- This is untested! Test needed.
2010-12-20 10:04:11 -05:00
Mike Gerwitz
cd9ef1ea71
Finished refactoring to remove result_data object in class extend() function
2010-12-19 13:54:31 -05:00
Mike Gerwitz
1ff9408885
Rearranged util.overrideMethod() arguments to match methodOverride propCopy() action (to avoid unnecessary mistakes and confusion)
2010-12-19 00:12:41 -05:00
Mike Gerwitz
600e389b40
Refactored abstract method logic out of util.propCopy() into class extend()
2010-12-19 00:11:39 -05:00
Mike Gerwitz
2789e5fcf9
Abstract map no longer passed to method_override() - it's only used in that method
2010-12-18 10:57:00 -05:00
Mike Gerwitz
e39cfea741
Now exporting util's array_shrink() as util.arrayShrink()
2010-12-18 09:38:58 -05:00
Mike Gerwitz
3a2ddbb29b
class.js 'extending' var is an argument and shouldn't be declared with var keyword
2010-12-18 08:24:15 -05:00
Mike Gerwitz
2c49e9719f
util.propParse() now ignores instance prototype properties
2010-12-18 07:07:27 -05:00
Mike Gerwitz
f2baf82100
Removed unneeded var
2010-12-18 06:59:35 -05:00
Mike Gerwitz
755b79725f
Corrected attach_prop_init() documentation (__propInit => __initProps)
2010-12-16 23:56:35 -05:00
Mike Gerwitz
a06d9a7204
Ensured __initProps() is treated as a reserved method and cannot be declared within Classes
2010-12-16 23:55:56 -05:00
Mike Gerwitz
a60fe9c2de
Class extend() now implements propCopy's performDefault (see previous commit)
2010-12-16 23:51:22 -05:00
Mike Gerwitz
6b6ffe0134
propCopy() parser function overrides can now invoke default functionality
2010-12-16 23:49:52 -05:00
Mike Gerwitz
591434b82f
[*] Previous commit (property cloning per instance) now applied to subtypes as well
2010-12-16 23:37:18 -05:00
Mike Gerwitz
fe853b505b
[*] Properties are no longer shared between class instances
...
- Properties were previously shared on the prototype level, acting as though they were static class properties, which can cause some nasty bugs
2010-12-16 23:18:30 -05:00
Mike Gerwitz
6efaba7fc5
Added util.clone(); does not yet support deep cloning
2010-12-16 23:15:42 -05:00
Mike Gerwitz
a2c894b6bb
Added ability to override propCopy() parser functions
2010-12-16 21:11:07 -05:00
Mike Gerwitz
5126c71a2d
Using TypeError instead of Error for property type inconsistiencies
2010-12-10 00:00:47 -05:00
Mike Gerwitz
25dc7e031e
Ensured properties cannot be overridden with methods
2010-12-07 20:24:51 -05:00
Mike Gerwitz
459335cf62
attempt_override() within propCopy() no longer needed after previous commit
2010-12-07 00:49:00 -05:00
Mike Gerwitz
eced0a7e91
Both concrete and abstract methods now use the same callback in propParse()
...
- Now uses an is_abstract parameter
- Intended to reduce clutter and duplicate code
2010-12-07 00:46:50 -05:00
Mike Gerwitz
52b1ef657f
Resolved failing test (methods may only be overridden with methods) with propParse() 'each'
2010-12-07 00:41:30 -05:00
Mike Gerwitz
994b8e16fa
[1 failing test] Added support for 'each' in propParse()
2010-12-07 00:39:25 -05:00
Mike Gerwitz
abefb0858b
[1 failing test] Crude beginning of implementation of propParse()
...
- Looks ugly now because it is. Attempting to refactor before doing a proper implementation. Baby steps.
2010-12-07 00:38:51 -05:00
Mike Gerwitz
fd2b3ccc6d
Added support for getters/setters in propParse()
2010-12-05 20:50:13 -05:00
Mike Gerwitz
20b78ba73a
Minor formatting change in propParse test
2010-12-04 14:05:56 -05:00
Mike Gerwitz
6fd31a8e76
Added abstract method support to propParse()
2010-12-04 14:03:26 -05:00
Mike Gerwitz
4037cc1343
Began adding util.propParse() to simplify design (supports scalar, arr and obj props and concrete methods)
2010-12-04 13:59:06 -05:00
Mike Gerwitz
729b977088
Fix of unintended global var
2010-12-03 07:19:16 -05:00
Mike Gerwitz
60025bd048
Added extend method to Interface
2010-12-01 23:27:31 -05:00
Mike Gerwitz
78e1913eb9
Comment spelling correction
2010-12-01 23:19:59 -05:00
Mike Gerwitz
0d45716a43
Added missing space to error string
2010-12-01 23:04:22 -05:00
Mike Gerwitz
84dcca35d2
Interface prototype contains defined methods
2010-12-01 23:01:20 -05:00
Mike Gerwitz
c910dafb76
Interfaces permit only abstract methods
2010-12-01 21:39:41 -05:00
Mike Gerwitz
2e930482d2
Abstract methods of subtypes overriding abstract methods must be compatiable with the previous definition
2010-12-01 21:34:57 -05:00
Mike Gerwitz
2e8097e21e
Altered abstract method declaration (using strings to represent arguments rather than a function)
2010-12-01 21:13:51 -05:00
Mike Gerwitz
837422c46f
Added util.isAbstractMethod
2010-12-01 21:00:15 -05:00
Mike Gerwitz
54432c78fa
abstractMethod() moved to util.defineAbstractMethod
2010-12-01 20:45:27 -05:00
Mike Gerwitz
b3c4b757e7
util.canFreeze removed, replaced with util.freeze()
2010-12-01 20:41:54 -05:00
Mike Gerwitz
c29bd010b0
define_secure_prop moved to util.defineSecureProp
2010-12-01 20:38:50 -05:00
Mike Gerwitz
2edcb8a75e
Only methods are permitted within interface declarations
2010-12-01 19:38:30 -05:00
Mike Gerwitz
b294f84481
Began Interface development
2010-12-01 19:27:40 -05:00
Mike Gerwitz
1e2e73c9f0
Began moving utility methods into their own module
2010-11-15 23:44:15 -05:00
Mike Gerwitz
0e232b4a2c
Freezing class object after creation
2010-11-15 23:22:24 -05:00
Mike Gerwitz
f632b93d64
Refactored constructor creation logic for new classes into its own method and placed both functions (and their shared var) into a closure to remove the 'extending' var from the module's scope
2010-11-15 07:07:49 -05:00
Mike Gerwitz
095683ba42
Simply moved extend() function higher up in the source file, since it will be one of the most commonly referenced functions
2010-11-15 06:54:37 -05:00
Mike Gerwitz
f9d7dca4b3
Removed old code from attach_extend()
2010-11-14 22:07:04 -05:00
Mike Gerwitz
e26d7971ce
Refactored abstract method logic
2010-11-14 22:03:55 -05:00
Mike Gerwitz
52944c4207
Grammar
2010-11-14 21:52:02 -05:00
Mike Gerwitz
3f169d87ea
Refactored method override logic into its own function
2010-11-14 21:50:56 -05:00
Mike Gerwitz
1a9cc40c31
Refactored abstract method regeneration logic into a array_shrink() function
2010-11-14 21:39:46 -05:00
Mike Gerwitz
d4593725a4
If a definition is provided for an abstract method, the concrete implementation must be compatiable (proper number of arguments)
2010-11-14 21:33:13 -05:00
Mike Gerwitz
e0657e1c44
abstractFlag now defined using define_secure_prop()
2010-11-14 21:18:40 -05:00
Mike Gerwitz
0d1ba74415
Ensured abstract classes cannot be instantiated and permitted their instantiation during extending so that it may be used in the subclass's prototype
2010-11-14 20:48:39 -05:00
Mike Gerwitz
746a9ee53d
Class.isAbstract() now defined using define_secure_prop
2010-11-14 20:31:23 -05:00
Mike Gerwitz
113e3b974f
Properly implemented abstract methods list
2010-11-14 20:30:33 -05:00
Mike Gerwitz
ad4b317955
Refactored defineProperty() code into define_secure_prop() function to reduce duplicate code
2010-11-14 01:37:12 -05:00
Mike Gerwitz
d5b4477109
Abstract methods are now passed to subtypes
2010-11-14 01:18:49 -05:00
Mike Gerwitz
de979d07f0
Added isAbstract() method to class
2010-11-14 01:10:55 -05:00
Mike Gerwitz
716db6d086
prop_copy() will now keep track of abstract methods
2010-11-14 01:02:57 -05:00
Mike Gerwitz
e783713ca7
Added a result_data argment to prop_copy()
2010-11-14 00:56:54 -05:00
Mike Gerwitz
9dc025e6b1
Added setup_props function to prepare for adding multiple properties to generated classes
2010-11-14 00:49:52 -05:00
Mike Gerwitz
a083313538
Began implementing abstract methods
2010-11-14 00:47:27 -05:00
Mike Gerwitz
16a91b728e
Methods can no longer be overridden with non-methods (anything other than a Function)
2010-11-10 23:42:26 -05:00
Mike Gerwitz
c34f40db19
Converted vars to conventional function delcarations (no difference; just preference)
2010-11-10 23:35:57 -05:00
Mike Gerwitz
4e38898c93
Added additional documentation to prop_copy()
2010-11-10 23:31:58 -05:00
Mike Gerwitz
60bf9deaf5
Moved class extend() export to the top of the module to make it more noticable in the mess of functions
2010-11-10 23:30:30 -05:00
Mike Gerwitz
86bbef6f77
Added documentation for attach_extend()
2010-11-10 23:29:28 -05:00
Mike Gerwitz
61985eea47
Added checks for ES5 features
2010-11-10 23:28:20 -05:00
Mike Gerwitz
8422bea1d6
Added getter/setter override support
2010-11-10 23:19:46 -05:00
Mike Gerwitz
0c963d1d00
Added access to parent prototype via parent property
2010-11-10 22:54:24 -05:00
Mike Gerwitz
607bbf7f4c
Added support for _super method
...
- Motivation from John Reisg's "Simple Javascript Inheritance": http://ejohn.org/blog/simple-javascript-inheritance/
2010-11-10 22:49:27 -05:00
Mike Gerwitz
26b70bcd93
Changed license to LGPL
...
My reason for doing so is more practical - for the same reasons that GNU released glib and
other libraries under the LGPL. The reason is that there are so many other alternatives out
there that are released under more permissive licenses. This isn't anything special. Therefore,
to encourage its adoption, I've released it under the LGPL.
All my larger projects/libraries that have few/no alternatives will be released under the
GPL/AGPL.
2010-11-10 22:07:03 -05:00
Mike Gerwitz
909542d19b
Added support for extending classes via convenience method and tests for property inheritance
2010-11-10 21:10:31 -05:00
Mike Gerwitz
c42598c47b
Class.extend() should not be part of the prototype (we're extending the class, not an object instance)
2010-11-10 21:05:52 -05:00