JavaScriptCompletionParser.st
author Claus Gittinger <cg@exept.de>
Fri, 21 Feb 2020 20:48:14 +0100
changeset 1231 b7d945ef967a
parent 1220 bc9a4740d530
permissions -rw-r--r--
#REFACTORING by exept class: JavaScriptParser changed: #forStatement class: JavaScriptParser class added: #forOfAllowed comment/format in: #forInAllowed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1076
eee418fab62a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 836
diff changeset
     1
"{ Encoding: utf8 }"
eee418fab62a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 836
diff changeset
     2
1220
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
     3
"
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
     4
 COPYRIGHT (c) 2018 by eXept Software AG
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
     5
              All Rights Reserved
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
     6
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
     7
 This software is furnished under a license and may be used
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
     8
 only in accordance with the terms of that license and with the
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
    10
 be provided or otherwise made available to, or used by, any
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
    11
 other person.  No title to or ownership of the software is
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
    12
 hereby transferred.
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
    13
"
692
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
"{ Package: 'stx:libjavascript' }"
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
1076
eee418fab62a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 836
diff changeset
    16
"{ NameSpace: Smalltalk }"
eee418fab62a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 836
diff changeset
    17
692
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
JavaScriptParser subclass:#JavaScriptCompletionParser
836
c69919dff53d Fix for #D112863.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 728
diff changeset
    19
	instanceVariableNames:'nodeRewriteHook error'
692
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
	classVariableNames:''
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
	poolDictionaries:''
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
	category:'Languages-JavaScript-Compiling & Parsing'
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
!
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
1220
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
    25
!JavaScriptCompletionParser class methodsFor:'documentation'!
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
    26
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
    27
copyright
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
    28
"
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
    29
 COPYRIGHT (c) 2018 by eXept Software AG
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
    30
              All Rights Reserved
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
    31
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
    32
 This software is furnished under a license and may be used
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
    33
 only in accordance with the terms of that license and with the
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
    34
 inclusion of the above copyright notice.   This software may not
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
    35
 be provided or otherwise made available to, or used by, any
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
    36
 other person.  No title to or ownership of the software is
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
    37
 hereby transferred.
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
    38
"
bc9a4740d530 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1076
diff changeset
    39
! !
692
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
!JavaScriptCompletionParser methodsFor:'accessing'!
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
nodeRewriteHook
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
    ^ nodeRewriteHook
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
!
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
nodeRewriteHook:oneArgBlock
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
    nodeRewriteHook := oneArgBlock.
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
! !
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
701
740af7ecc058 Support for completing variables.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 692
diff changeset
    51
!JavaScriptCompletionParser methodsFor:'error handling'!
740af7ecc058 Support for completing variables.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 692
diff changeset
    52
836
c69919dff53d Fix for #D112863.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 728
diff changeset
    53
parseError:message position:startPos to:endPos
701
740af7ecc058 Support for completing variables.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 692
diff changeset
    54
836
c69919dff53d Fix for #D112863.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 728
diff changeset
    55
    error := ParseErrorNode new 
c69919dff53d Fix for #D112863.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 728
diff changeset
    56
                errorString: message;
c69919dff53d Fix for #D112863.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 728
diff changeset
    57
                errorToken:  (token notNil ifTrue:[token asString] ifFalse:[nil]);
c69919dff53d Fix for #D112863.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 728
diff changeset
    58
                startPosition: startPos endPosition: endPos.
c69919dff53d Fix for #D112863.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 728
diff changeset
    59
    ^ super parseError:message position:startPos to:endPos
c69919dff53d Fix for #D112863.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 728
diff changeset
    60
c69919dff53d Fix for #D112863.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 728
diff changeset
    61
    "Created: / 27-11-2011 / 09:35:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
c69919dff53d Fix for #D112863.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 728
diff changeset
    62
    "Modified: / 26-09-2014 / 20:22:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
701
740af7ecc058 Support for completing variables.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 692
diff changeset
    63
! !
740af7ecc058 Support for completing variables.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 692
diff changeset
    64
692
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
!JavaScriptCompletionParser methodsFor:'initialization'!
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
initialize
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
    "Invoked when a new instance is created."
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
    "/ please change as required (and remove this comment)
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
    super initialize.
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
    nodeRewriteHook := [:node | node ].
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
    "Modified: / 23-09-2013 / 13:33:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
! !
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
!JavaScriptCompletionParser methodsFor:'parsing-expressions'!
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
expression
725
1654323dc2fd class: JavaScriptCompletionParser
Claus Gittinger <cg@exept.de>
parents: 708
diff changeset
    81
    |expr|
1654323dc2fd class: JavaScriptCompletionParser
Claus Gittinger <cg@exept.de>
parents: 708
diff changeset
    82
728
34a44a79fc2e class: JavaScriptCompletionParser
Stefan Vogel <sv@exept.de>
parents: 725
diff changeset
    83
    (expr := super expression) isNil ifTrue:[^ nil].
725
1654323dc2fd class: JavaScriptCompletionParser
Claus Gittinger <cg@exept.de>
parents: 708
diff changeset
    84
    ^ nodeRewriteHook value: expr.
692
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
    "Created: / 16-06-2011 / 14:58:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
    "Modified: / 23-09-2013 / 13:32:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
725
1654323dc2fd class: JavaScriptCompletionParser
Claus Gittinger <cg@exept.de>
parents: 708
diff changeset
    88
    "Modified: / 06-11-2013 / 17:26:40 / cg"
692
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
!
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
1076
eee418fab62a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 836
diff changeset
    91
functionCallExpression:recIn
eee418fab62a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 836
diff changeset
    92
    |node|
eee418fab62a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 836
diff changeset
    93
eee418fab62a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 836
diff changeset
    94
    node := super functionCallExpression:recIn.
eee418fab62a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 836
diff changeset
    95
    ^ nodeRewriteHook value:node.
eee418fab62a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 836
diff changeset
    96
eee418fab62a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 836
diff changeset
    97
    "Created: / 21-03-2019 / 10:03:45 / Claus Gittinger"
eee418fab62a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 836
diff changeset
    98
!
eee418fab62a #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 836
diff changeset
    99
708
e579a063d162 Minor fixes, making StatementBlockNode obsolete.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 701
diff changeset
   100
newExpression
e579a063d162 Minor fixes, making StatementBlockNode obsolete.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 701
diff changeset
   101
    | node |
e579a063d162 Minor fixes, making StatementBlockNode obsolete.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 701
diff changeset
   102
e579a063d162 Minor fixes, making StatementBlockNode obsolete.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 701
diff changeset
   103
    node := super newExpression.
e579a063d162 Minor fixes, making StatementBlockNode obsolete.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 701
diff changeset
   104
    node classOrFunc: (nodeRewriteHook value: node classOrFunc).
e579a063d162 Minor fixes, making StatementBlockNode obsolete.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 701
diff changeset
   105
    ^ node
e579a063d162 Minor fixes, making StatementBlockNode obsolete.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 701
diff changeset
   106
e579a063d162 Minor fixes, making StatementBlockNode obsolete.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 701
diff changeset
   107
    "Created: / 24-09-2013 / 17:58:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
e579a063d162 Minor fixes, making StatementBlockNode obsolete.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 701
diff changeset
   108
!
e579a063d162 Minor fixes, making StatementBlockNode obsolete.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 701
diff changeset
   109
692
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
primaryExpression
725
1654323dc2fd class: JavaScriptCompletionParser
Claus Gittinger <cg@exept.de>
parents: 708
diff changeset
   111
    |expr|
1654323dc2fd class: JavaScriptCompletionParser
Claus Gittinger <cg@exept.de>
parents: 708
diff changeset
   112
728
34a44a79fc2e class: JavaScriptCompletionParser
Stefan Vogel <sv@exept.de>
parents: 725
diff changeset
   113
    (expr := super primaryExpression) isNil ifTrue:[^ nil].
725
1654323dc2fd class: JavaScriptCompletionParser
Claus Gittinger <cg@exept.de>
parents: 708
diff changeset
   114
    ^ nodeRewriteHook value: expr.
692
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
    "Created: / 22-07-2013 / 15:37:04 / cg"
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
    "Modified: / 23-09-2013 / 13:34:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
725
1654323dc2fd class: JavaScriptCompletionParser
Claus Gittinger <cg@exept.de>
parents: 708
diff changeset
   118
    "Modified: / 06-11-2013 / 17:26:07 / cg"
692
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
!
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
unaryExpression
725
1654323dc2fd class: JavaScriptCompletionParser
Claus Gittinger <cg@exept.de>
parents: 708
diff changeset
   122
    |expr|
1654323dc2fd class: JavaScriptCompletionParser
Claus Gittinger <cg@exept.de>
parents: 708
diff changeset
   123
728
34a44a79fc2e class: JavaScriptCompletionParser
Stefan Vogel <sv@exept.de>
parents: 725
diff changeset
   124
    (expr := super unaryExpression) isNil ifTrue:[^ nil].
725
1654323dc2fd class: JavaScriptCompletionParser
Claus Gittinger <cg@exept.de>
parents: 708
diff changeset
   125
    ^ nodeRewriteHook value: expr.
692
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
    "Created: / 05-07-2011 / 23:08:54 / cg"
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
    "Modified: / 23-09-2013 / 13:34:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
725
1654323dc2fd class: JavaScriptCompletionParser
Claus Gittinger <cg@exept.de>
parents: 708
diff changeset
   129
    "Modified: / 06-11-2013 / 17:26:22 / cg"
692
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
! !
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
!JavaScriptCompletionParser class methodsFor:'documentation'!
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
version
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
    ^ '$Header$'
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
!
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
version_CVS
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
    ^ '$Header$'
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
! !
bb649e9d94bc initial checkin
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141