
|
If you were logged in you would be able to see more operations.
|
|
|
| Severity: |
Minor
|
| Fixed in Change#: |
7,476
|
| Fixed in branch: |
trunk
|
| Runtime: |
N/A
|
| Fix in hand: |
False
|
|
New JS2 keywords should be allowed in the language,
as they will be needed for SWF9.
It will be okay to ignore these for all other targets
at least in the short term.
|
|
Description
|
New JS2 keywords should be allowed in the language,
as they will be needed for SWF9.
It will be okay to ignore these for all other targets
at least in the short term. |
Show » |
|
r7476 | dda | 2007-12-06 15:37:08 -0500 (Thu, 06 Dec 2007) | 120 lines
Changed paths:
M /openlaszlo/trunk/WEB-INF/lps/server/sc/src/org/openlaszlo/sc/Parser.jjt
A /openlaszlo/trunk/WEB-INF/lps/server/sc/src/org/openlaszlo/sc/parser/ASTModifiedDefinition.java
M /openlaszlo/trunk/WEB-INF/lps/server/src/org/openlaszlo/js2doc/JS2Doc.java
M /openlaszlo/trunk/WEB-INF/lps/server/src/org/openlaszlo/sc/CodeGenerator.java
M /openlaszlo/trunk/WEB-INF/lps/server/src/org/openlaszlo/sc/CommonGenerator.java
M /openlaszlo/trunk/WEB-INF/lps/server/src/org/openlaszlo/sc/JavascriptGenerator.java
Change 20071205-dda-z by dda@freddie.local on 2007-12-05 10:32:16 EST
in /Users/dda/laszlo/src/svn/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: Initial support for keywords in script compiler
New Features: no exposed features yet
Bugs Fixed:
LPP-5175Technical Reviewer: ptw
QA Reviewer: hminsky
Doc Reviewer: (pending)
Documentation:
Nothing here affects .lzx files, and even for lzs coders, there is no effect
unless the new keywords are used. Even so -- they don't do anything for SWF8/9,DHTML,
they are merely accepted.. Some of these keywords will be used internally
to help implement SWF9 (in later reviews), some may be exposed to users indirectly
via .lzx tags in the future, at which time they may be documented.
All keywords used in accordance with ActionScript 3.0 and the Ecmascript draft standard.
Release Notes:
None.
Details:
Initial support for several JS2 keywords: 'dynamic', 'override', 'final',
'private', 'protected', 'public', 'internal'. The keyword 'static', although previously
supported, is now handled in same way as the new group. In fact new keyword modifiers (I just
noticed const) should now be easy to add. These keywords are all modifiers,
in that they appear as part of a function, class, var definition, before
the keywords 'function', 'class', 'var'. Multiple keywords can
of course appear, for example, 'public static var x;'
Also name space names can appear in this position, for example,
mynamespace function f1() { }
final override mynamespace function f2() { }
There is no specific ordering of keywords enforced, and there are few
restrictions: override is only for methods, dynamic is only for classes,
only a single namespace name can appear, and a namespace cannot appear
along with a visibility modifier ('public', 'private', 'protected', 'internal').
By 'initial support', I mean that the keywords are now accepted, in the proper
place and the infrastructure is available to take advantage of them.
For SWF9, we plan to implement most or all of these keywords.
Any code in the compilers or doc tools that already knew about 'static',
has been changed to use this new modifier class.
To make for easy handling of these modifiers (and potentially new ones), there
is a new AST type: ASTModifiedDefinition. This can generally appear in the AST
wherever a ClassDefinition, FunctionDeclaration or VariableStatement appears,
and it has a child which is the ClassDefinition, FunctionDeclaration, VariableStatement.
There is only one of these objects in the tree for any definition/declaration,
and it holds information about all modifiers, including namespace names for the
given declaration. This should make it easy to change any specifics about
the modifiers, which ones are supported, etc. and allows each runtime to make
its own decisions about how to treat the modifiers.
Tests:
smoketest for SWF7/8 and DHTML
exact comparison of LFC binaries (using 'generatePredictableTemps' option)
comparison of JS2doc outputs for representative classes
to ensure that no visible changes.
A basic .lzs test to test that various keyword combinations are accepted/rejected.
since 'test/' directory does not have .lzs files, I only include it here:
///////////////////////
// tests for new script compiler keywords
// to test keyword combinations that should
// give errors, uncomment lines beginning with //XXXX
function f1() { }
static function f2() { }
private static function f3() { }
static protected function f4() { }
static override function f5() { }
ns1 function f6() { }
ns1 final function f7() { }
final ns1 function f8() { }
var v1;
// Not allowed outside of class:
//XXXX public var badv1;
//XXXX static var badv2;
//XXXX protected static var badv3;
class c1 {
function cf1() { }
static function cf2() { }
private static function cf3() { }
static protected function cf4() { }
static override function cf5() { }
ns1 function cf6() { }
ns1 final function cf7() { }
final ns1 function cf8() { }
var cv1;
public var cv2;
static var cv3;
protected static var cv4;
}
private class c2 {}
ns2 class c3 {}
dynamic class c4 {}
// Multiple namespace names not allowed
//XXXX ns1 ns2 class badc1{}
// namespace not allowed with public/private/etc.
//XXXX public ns1 class badc2{}
//XXXX ns2 protected class badc3{}
// Inappropriate combinations
//XXXX override var badv4;
//XXXX dynamic function badf1() {}
//XXXX dynamic var badv5;
//XXXX override class badc4{}
///////////////////////
------------------------------------------------------------------------