Issue #964. Super should trigger an implicit call.
This commit is contained in:
parent
6a1730956e
commit
61705e4d22
|
@ -373,7 +373,7 @@
|
||||||
}
|
}
|
||||||
EXPRESSION_CLOSE = ['CATCH', 'WHEN', 'ELSE', 'FINALLY'].concat(EXPRESSION_END);
|
EXPRESSION_CLOSE = ['CATCH', 'WHEN', 'ELSE', 'FINALLY'].concat(EXPRESSION_END);
|
||||||
IMPLICIT_FUNC = ['IDENTIFIER', 'SUPER', ')', 'CALL_END', ']', 'INDEX_END', '@', 'THIS'];
|
IMPLICIT_FUNC = ['IDENTIFIER', 'SUPER', ')', 'CALL_END', ']', 'INDEX_END', '@', 'THIS'];
|
||||||
IMPLICIT_CALL = ['IDENTIFIER', 'NUMBER', 'STRING', 'JS', 'REGEX', 'NEW', 'PARAM_START', 'CLASS', 'IF', 'TRY', 'SWITCH', 'THIS', 'BOOL', 'UNARY', '@', '->', '=>', '[', '(', '{', '--', '++'];
|
IMPLICIT_CALL = ['IDENTIFIER', 'NUMBER', 'STRING', 'JS', 'REGEX', 'NEW', 'PARAM_START', 'CLASS', 'IF', 'TRY', 'SWITCH', 'THIS', 'BOOL', 'UNARY', 'SUPER', '@', '->', '=>', '[', '(', '{', '--', '++'];
|
||||||
IMPLICIT_UNSPACED_CALL = ['+', '-'];
|
IMPLICIT_UNSPACED_CALL = ['+', '-'];
|
||||||
IMPLICIT_BLOCK = ['->', '=>', '{', '[', ','];
|
IMPLICIT_BLOCK = ['->', '=>', '{', '[', ','];
|
||||||
IMPLICIT_END = ['POST_IF', 'FOR', 'WHILE', 'UNTIL', 'WHEN', 'BY', 'LOOP', 'TERMINATOR', 'INDENT'];
|
IMPLICIT_END = ['POST_IF', 'FOR', 'WHILE', 'UNTIL', 'WHEN', 'BY', 'LOOP', 'TERMINATOR', 'INDENT'];
|
||||||
|
|
|
@ -290,10 +290,8 @@ grammar =
|
||||||
Invocation: [
|
Invocation: [
|
||||||
o 'Value OptFuncExist Arguments', -> new Call $1, $3, $2
|
o 'Value OptFuncExist Arguments', -> new Call $1, $3, $2
|
||||||
o 'Invocation OptFuncExist Arguments', -> new Call $1, $3, $2
|
o 'Invocation OptFuncExist Arguments', -> new Call $1, $3, $2
|
||||||
o 'SUPER', ->
|
o 'SUPER', -> new Call 'super', [new Splat new Literal 'arguments']
|
||||||
new Call 'super', [new Splat new Literal 'arguments']
|
o 'SUPER Arguments', -> new Call 'super', $2
|
||||||
o 'SUPER Arguments', ->
|
|
||||||
new Call 'super', $2
|
|
||||||
]
|
]
|
||||||
|
|
||||||
# An optional existence check on a function.
|
# An optional existence check on a function.
|
||||||
|
|
|
@ -321,7 +321,7 @@ IMPLICIT_FUNC = ['IDENTIFIER', 'SUPER', ')', 'CALL_END', ']', 'INDEX_END', '@
|
||||||
# If preceded by an `IMPLICIT_FUNC`, indicates a function invocation.
|
# If preceded by an `IMPLICIT_FUNC`, indicates a function invocation.
|
||||||
IMPLICIT_CALL = [
|
IMPLICIT_CALL = [
|
||||||
'IDENTIFIER', 'NUMBER', 'STRING', 'JS', 'REGEX', 'NEW', 'PARAM_START', 'CLASS'
|
'IDENTIFIER', 'NUMBER', 'STRING', 'JS', 'REGEX', 'NEW', 'PARAM_START', 'CLASS'
|
||||||
'IF', 'TRY', 'SWITCH', 'THIS', 'BOOL', 'UNARY',
|
'IF', 'TRY', 'SWITCH', 'THIS', 'BOOL', 'UNARY', 'SUPER'
|
||||||
'@', '->', '=>', '[', '(', '{', '--', '++'
|
'@', '->', '=>', '[', '(', '{', '--', '++'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -39,17 +39,19 @@ ok result is '9two/three/four'
|
||||||
ok (new ThirdChild).array.join(' ') is '1 2 3'
|
ok (new ThirdChild).array.join(' ') is '1 2 3'
|
||||||
|
|
||||||
|
|
||||||
|
identity = (f) -> f
|
||||||
|
|
||||||
class TopClass
|
class TopClass
|
||||||
constructor: (arg) ->
|
constructor: (arg) ->
|
||||||
@prop = 'top-' + arg
|
@prop = 'top-' + arg
|
||||||
|
|
||||||
class SuperClass extends TopClass
|
class SuperClass extends TopClass
|
||||||
constructor: (arg) ->
|
constructor: (arg) ->
|
||||||
super 'super-' + arg
|
identity super 'super-' + arg
|
||||||
|
|
||||||
class SubClass extends SuperClass
|
class SubClass extends SuperClass
|
||||||
constructor: ->
|
constructor: ->
|
||||||
super 'sub'
|
identity super 'sub'
|
||||||
|
|
||||||
ok (new SubClass).prop is 'top-super-sub'
|
ok (new SubClass).prop is 'top-super-sub'
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue