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