Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
615f6a6e
Commit
615f6a6e
authored
Sep 30, 2014
by
Jacek Caban
Committed by
Alexandre Julliard
Sep 30, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
jscript: Move parser related declarations to separated header.
parent
9550189b
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
374 additions
and
353 deletions
+374
-353
compile.c
dlls/jscript/compile.c
+1
-0
engine.c
dlls/jscript/engine.c
+15
-0
engine.h
dlls/jscript/engine.h
+2
-353
lex.c
dlls/jscript/lex.c
+1
-0
parser.h
dlls/jscript/parser.h
+354
-0
parser.y
dlls/jscript/parser.y
+1
-0
No files found.
dlls/jscript/compile.c
View file @
615f6a6e
...
...
@@ -21,6 +21,7 @@
#include "jscript.h"
#include "engine.h"
#include "parser.h"
#include "wine/debug.h"
...
...
dlls/jscript/engine.c
View file @
615f6a6e
...
...
@@ -46,6 +46,21 @@ struct _except_frame_t {
except_frame_t
*
next
;
};
typedef
struct
{
enum
{
EXPRVAL_JSVAL
,
EXPRVAL_IDREF
,
EXPRVAL_INVALID
}
type
;
union
{
jsval_t
val
;
struct
{
IDispatch
*
disp
;
DISPID
id
;
}
idref
;
}
u
;
}
exprval_t
;
static
HRESULT
stack_push
(
exec_ctx_t
*
ctx
,
jsval_t
v
)
{
if
(
!
ctx
->
stack_size
)
{
...
...
dlls/jscript/engine.h
View file @
615f6a6e
...
...
@@ -16,26 +16,6 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
typedef
struct
_source_elements_t
source_elements_t
;
typedef
struct
_expression_t
expression_t
;
typedef
struct
_statement_t
statement_t
;
typedef
struct
{
const
WCHAR
*
begin
;
const
WCHAR
*
end
;
const
WCHAR
*
ptr
;
script_ctx_t
*
script
;
source_elements_t
*
source
;
BOOL
nl
;
BOOL
implicit_nl_semicolon
;
BOOL
is_html
;
BOOL
lexer_error
;
HRESULT
hres
;
heap_pool_t
heap
;
}
parser_ctx_t
;
#define OP_LIST \
X(add, 1, 0,0) \
X(and, 1, 0,0) \
...
...
@@ -191,21 +171,6 @@ static inline void bytecode_addref(bytecode_t *code)
code
->
ref
++
;
}
HRESULT
script_parse
(
script_ctx_t
*
,
const
WCHAR
*
,
const
WCHAR
*
,
BOOL
,
parser_ctx_t
**
)
DECLSPEC_HIDDEN
;
void
parser_release
(
parser_ctx_t
*
)
DECLSPEC_HIDDEN
;
int
parser_lex
(
void
*
,
parser_ctx_t
*
)
DECLSPEC_HIDDEN
;
static
inline
void
*
parser_alloc
(
parser_ctx_t
*
ctx
,
DWORD
size
)
{
return
heap_pool_alloc
(
&
ctx
->
heap
,
size
);
}
static
inline
void
*
parser_alloc_tmp
(
parser_ctx_t
*
ctx
,
DWORD
size
)
{
return
heap_pool_alloc
(
&
ctx
->
script
->
tmp_heap
,
size
);
}
typedef
struct
_scope_chain_t
{
LONG
ref
;
jsdisp_t
*
jsobj
;
...
...
@@ -222,11 +187,12 @@ static inline void scope_addref(scope_chain_t *scope)
}
typedef
struct
_except_frame_t
except_frame_t
;
struct
_parser_ctx_t
;
struct
_exec_ctx_t
{
LONG
ref
;
parser_ctx_t
*
parser
;
struct
_
parser_ctx_t
*
parser
;
bytecode_t
*
code
;
script_ctx_t
*
script
;
scope_chain_t
*
scope_chain
;
...
...
@@ -253,320 +219,3 @@ void exec_release(exec_ctx_t*) DECLSPEC_HIDDEN;
HRESULT
create_exec_ctx
(
script_ctx_t
*
,
IDispatch
*
,
jsdisp_t
*
,
scope_chain_t
*
,
BOOL
,
exec_ctx_t
**
)
DECLSPEC_HIDDEN
;
HRESULT
exec_source
(
exec_ctx_t
*
,
bytecode_t
*
,
function_code_t
*
,
BOOL
,
jsval_t
*
)
DECLSPEC_HIDDEN
;
HRESULT
create_source_function
(
script_ctx_t
*
,
bytecode_t
*
,
function_code_t
*
,
scope_chain_t
*
,
jsdisp_t
**
)
DECLSPEC_HIDDEN
;
typedef
enum
{
LT_DOUBLE
,
LT_STRING
,
LT_BOOL
,
LT_NULL
,
LT_REGEXP
}
literal_type_t
;
typedef
struct
{
literal_type_t
type
;
union
{
double
dval
;
const
WCHAR
*
wstr
;
BOOL
bval
;
struct
{
const
WCHAR
*
str
;
DWORD
str_len
;
DWORD
flags
;
}
regexp
;
}
u
;
}
literal_t
;
literal_t
*
parse_regexp
(
parser_ctx_t
*
)
DECLSPEC_HIDDEN
;
literal_t
*
new_boolean_literal
(
parser_ctx_t
*
,
BOOL
)
DECLSPEC_HIDDEN
;
typedef
struct
_variable_declaration_t
{
const
WCHAR
*
identifier
;
expression_t
*
expr
;
struct
_variable_declaration_t
*
next
;
struct
_variable_declaration_t
*
global_next
;
/* for compiler */
}
variable_declaration_t
;
typedef
enum
{
STAT_BLOCK
,
STAT_BREAK
,
STAT_CONTINUE
,
STAT_EMPTY
,
STAT_EXPR
,
STAT_FOR
,
STAT_FORIN
,
STAT_IF
,
STAT_LABEL
,
STAT_RETURN
,
STAT_SWITCH
,
STAT_THROW
,
STAT_TRY
,
STAT_VAR
,
STAT_WHILE
,
STAT_WITH
}
statement_type_t
;
struct
_statement_t
{
statement_type_t
type
;
statement_t
*
next
;
};
typedef
struct
{
statement_t
stat
;
statement_t
*
stat_list
;
}
block_statement_t
;
typedef
struct
{
statement_t
stat
;
variable_declaration_t
*
variable_list
;
}
var_statement_t
;
typedef
struct
{
statement_t
stat
;
expression_t
*
expr
;
}
expression_statement_t
;
typedef
struct
{
statement_t
stat
;
expression_t
*
expr
;
statement_t
*
if_stat
;
statement_t
*
else_stat
;
}
if_statement_t
;
typedef
struct
{
statement_t
stat
;
BOOL
do_while
;
expression_t
*
expr
;
statement_t
*
statement
;
}
while_statement_t
;
typedef
struct
{
statement_t
stat
;
variable_declaration_t
*
variable_list
;
expression_t
*
begin_expr
;
expression_t
*
expr
;
expression_t
*
end_expr
;
statement_t
*
statement
;
}
for_statement_t
;
typedef
struct
{
statement_t
stat
;
variable_declaration_t
*
variable
;
expression_t
*
expr
;
expression_t
*
in_expr
;
statement_t
*
statement
;
}
forin_statement_t
;
typedef
struct
{
statement_t
stat
;
const
WCHAR
*
identifier
;
}
branch_statement_t
;
typedef
struct
{
statement_t
stat
;
expression_t
*
expr
;
statement_t
*
statement
;
}
with_statement_t
;
typedef
struct
{
statement_t
stat
;
const
WCHAR
*
identifier
;
statement_t
*
statement
;
}
labelled_statement_t
;
typedef
struct
_case_clausule_t
{
expression_t
*
expr
;
statement_t
*
stat
;
struct
_case_clausule_t
*
next
;
}
case_clausule_t
;
typedef
struct
{
statement_t
stat
;
expression_t
*
expr
;
case_clausule_t
*
case_list
;
}
switch_statement_t
;
typedef
struct
{
const
WCHAR
*
identifier
;
statement_t
*
statement
;
}
catch_block_t
;
typedef
struct
{
statement_t
stat
;
statement_t
*
try_statement
;
catch_block_t
*
catch_block
;
statement_t
*
finally_statement
;
}
try_statement_t
;
typedef
struct
{
enum
{
EXPRVAL_JSVAL
,
EXPRVAL_IDREF
,
EXPRVAL_INVALID
}
type
;
union
{
jsval_t
val
;
struct
{
IDispatch
*
disp
;
DISPID
id
;
}
idref
;
}
u
;
}
exprval_t
;
typedef
enum
{
EXPR_COMMA
,
EXPR_OR
,
EXPR_AND
,
EXPR_BOR
,
EXPR_BXOR
,
EXPR_BAND
,
EXPR_INSTANCEOF
,
EXPR_IN
,
EXPR_ADD
,
EXPR_SUB
,
EXPR_MUL
,
EXPR_DIV
,
EXPR_MOD
,
EXPR_DELETE
,
EXPR_VOID
,
EXPR_TYPEOF
,
EXPR_MINUS
,
EXPR_PLUS
,
EXPR_POSTINC
,
EXPR_POSTDEC
,
EXPR_PREINC
,
EXPR_PREDEC
,
EXPR_EQ
,
EXPR_EQEQ
,
EXPR_NOTEQ
,
EXPR_NOTEQEQ
,
EXPR_LESS
,
EXPR_LESSEQ
,
EXPR_GREATER
,
EXPR_GREATEREQ
,
EXPR_BITNEG
,
EXPR_LOGNEG
,
EXPR_LSHIFT
,
EXPR_RSHIFT
,
EXPR_RRSHIFT
,
EXPR_ASSIGN
,
EXPR_ASSIGNLSHIFT
,
EXPR_ASSIGNRSHIFT
,
EXPR_ASSIGNRRSHIFT
,
EXPR_ASSIGNADD
,
EXPR_ASSIGNSUB
,
EXPR_ASSIGNMUL
,
EXPR_ASSIGNDIV
,
EXPR_ASSIGNMOD
,
EXPR_ASSIGNAND
,
EXPR_ASSIGNOR
,
EXPR_ASSIGNXOR
,
EXPR_COND
,
EXPR_ARRAY
,
EXPR_MEMBER
,
EXPR_NEW
,
EXPR_CALL
,
EXPR_THIS
,
EXPR_FUNC
,
EXPR_IDENT
,
EXPR_ARRAYLIT
,
EXPR_PROPVAL
,
EXPR_LITERAL
}
expression_type_t
;
struct
_expression_t
{
expression_type_t
type
;
};
typedef
struct
_parameter_t
{
const
WCHAR
*
identifier
;
struct
_parameter_t
*
next
;
}
parameter_t
;
struct
_source_elements_t
{
statement_t
*
statement
;
statement_t
*
statement_tail
;
};
typedef
struct
_function_expression_t
{
expression_t
expr
;
const
WCHAR
*
identifier
;
parameter_t
*
parameter_list
;
source_elements_t
*
source_elements
;
const
WCHAR
*
src_str
;
DWORD
src_len
;
struct
_function_expression_t
*
next
;
/* for compiler */
}
function_expression_t
;
typedef
struct
{
expression_t
expr
;
expression_t
*
expression1
;
expression_t
*
expression2
;
}
binary_expression_t
;
typedef
struct
{
expression_t
expr
;
expression_t
*
expression
;
}
unary_expression_t
;
typedef
struct
{
expression_t
expr
;
expression_t
*
expression
;
expression_t
*
true_expression
;
expression_t
*
false_expression
;
}
conditional_expression_t
;
typedef
struct
{
expression_t
expr
;
expression_t
*
expression
;
const
WCHAR
*
identifier
;
}
member_expression_t
;
typedef
struct
_argument_t
{
expression_t
*
expr
;
struct
_argument_t
*
next
;
}
argument_t
;
typedef
struct
{
expression_t
expr
;
expression_t
*
expression
;
argument_t
*
argument_list
;
}
call_expression_t
;
typedef
struct
{
expression_t
expr
;
const
WCHAR
*
identifier
;
}
identifier_expression_t
;
typedef
struct
{
expression_t
expr
;
literal_t
*
literal
;
}
literal_expression_t
;
typedef
struct
_array_element_t
{
int
elision
;
expression_t
*
expr
;
struct
_array_element_t
*
next
;
}
array_element_t
;
typedef
struct
{
expression_t
expr
;
array_element_t
*
element_list
;
int
length
;
}
array_literal_expression_t
;
typedef
struct
_prop_val_t
{
literal_t
*
name
;
expression_t
*
value
;
struct
_prop_val_t
*
next
;
}
prop_val_t
;
typedef
struct
{
expression_t
expr
;
prop_val_t
*
property_list
;
}
property_value_expression_t
;
dlls/jscript/lex.c
View file @
615f6a6e
...
...
@@ -25,6 +25,7 @@
#include "activscp.h"
#include "objsafe.h"
#include "engine.h"
#include "parser.h"
#include "parser.tab.h"
...
...
dlls/jscript/parser.h
0 → 100644
View file @
615f6a6e
/*
* Copyright 2014 Jacek Caban for CodeWeavers
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
typedef
struct
_source_elements_t
source_elements_t
;
typedef
struct
_expression_t
expression_t
;
typedef
struct
_statement_t
statement_t
;
typedef
struct
_parser_ctx_t
{
const
WCHAR
*
begin
;
const
WCHAR
*
end
;
const
WCHAR
*
ptr
;
script_ctx_t
*
script
;
source_elements_t
*
source
;
BOOL
nl
;
BOOL
implicit_nl_semicolon
;
BOOL
is_html
;
BOOL
lexer_error
;
HRESULT
hres
;
heap_pool_t
heap
;
}
parser_ctx_t
;
HRESULT
script_parse
(
script_ctx_t
*
,
const
WCHAR
*
,
const
WCHAR
*
,
BOOL
,
parser_ctx_t
**
)
DECLSPEC_HIDDEN
;
void
parser_release
(
parser_ctx_t
*
)
DECLSPEC_HIDDEN
;
int
parser_lex
(
void
*
,
parser_ctx_t
*
)
DECLSPEC_HIDDEN
;
static
inline
void
*
parser_alloc
(
parser_ctx_t
*
ctx
,
DWORD
size
)
{
return
heap_pool_alloc
(
&
ctx
->
heap
,
size
);
}
static
inline
void
*
parser_alloc_tmp
(
parser_ctx_t
*
ctx
,
DWORD
size
)
{
return
heap_pool_alloc
(
&
ctx
->
script
->
tmp_heap
,
size
);
}
typedef
enum
{
LT_DOUBLE
,
LT_STRING
,
LT_BOOL
,
LT_NULL
,
LT_REGEXP
}
literal_type_t
;
typedef
struct
{
literal_type_t
type
;
union
{
double
dval
;
const
WCHAR
*
wstr
;
BOOL
bval
;
struct
{
const
WCHAR
*
str
;
DWORD
str_len
;
DWORD
flags
;
}
regexp
;
}
u
;
}
literal_t
;
literal_t
*
parse_regexp
(
parser_ctx_t
*
)
DECLSPEC_HIDDEN
;
literal_t
*
new_boolean_literal
(
parser_ctx_t
*
,
BOOL
)
DECLSPEC_HIDDEN
;
typedef
struct
_variable_declaration_t
{
const
WCHAR
*
identifier
;
expression_t
*
expr
;
struct
_variable_declaration_t
*
next
;
struct
_variable_declaration_t
*
global_next
;
/* for compiler */
}
variable_declaration_t
;
typedef
enum
{
STAT_BLOCK
,
STAT_BREAK
,
STAT_CONTINUE
,
STAT_EMPTY
,
STAT_EXPR
,
STAT_FOR
,
STAT_FORIN
,
STAT_IF
,
STAT_LABEL
,
STAT_RETURN
,
STAT_SWITCH
,
STAT_THROW
,
STAT_TRY
,
STAT_VAR
,
STAT_WHILE
,
STAT_WITH
}
statement_type_t
;
struct
_statement_t
{
statement_type_t
type
;
statement_t
*
next
;
};
typedef
struct
{
statement_t
stat
;
statement_t
*
stat_list
;
}
block_statement_t
;
typedef
struct
{
statement_t
stat
;
variable_declaration_t
*
variable_list
;
}
var_statement_t
;
typedef
struct
{
statement_t
stat
;
expression_t
*
expr
;
}
expression_statement_t
;
typedef
struct
{
statement_t
stat
;
expression_t
*
expr
;
statement_t
*
if_stat
;
statement_t
*
else_stat
;
}
if_statement_t
;
typedef
struct
{
statement_t
stat
;
BOOL
do_while
;
expression_t
*
expr
;
statement_t
*
statement
;
}
while_statement_t
;
typedef
struct
{
statement_t
stat
;
variable_declaration_t
*
variable_list
;
expression_t
*
begin_expr
;
expression_t
*
expr
;
expression_t
*
end_expr
;
statement_t
*
statement
;
}
for_statement_t
;
typedef
struct
{
statement_t
stat
;
variable_declaration_t
*
variable
;
expression_t
*
expr
;
expression_t
*
in_expr
;
statement_t
*
statement
;
}
forin_statement_t
;
typedef
struct
{
statement_t
stat
;
const
WCHAR
*
identifier
;
}
branch_statement_t
;
typedef
struct
{
statement_t
stat
;
expression_t
*
expr
;
statement_t
*
statement
;
}
with_statement_t
;
typedef
struct
{
statement_t
stat
;
const
WCHAR
*
identifier
;
statement_t
*
statement
;
}
labelled_statement_t
;
typedef
struct
_case_clausule_t
{
expression_t
*
expr
;
statement_t
*
stat
;
struct
_case_clausule_t
*
next
;
}
case_clausule_t
;
typedef
struct
{
statement_t
stat
;
expression_t
*
expr
;
case_clausule_t
*
case_list
;
}
switch_statement_t
;
typedef
struct
{
const
WCHAR
*
identifier
;
statement_t
*
statement
;
}
catch_block_t
;
typedef
struct
{
statement_t
stat
;
statement_t
*
try_statement
;
catch_block_t
*
catch_block
;
statement_t
*
finally_statement
;
}
try_statement_t
;
typedef
enum
{
EXPR_COMMA
,
EXPR_OR
,
EXPR_AND
,
EXPR_BOR
,
EXPR_BXOR
,
EXPR_BAND
,
EXPR_INSTANCEOF
,
EXPR_IN
,
EXPR_ADD
,
EXPR_SUB
,
EXPR_MUL
,
EXPR_DIV
,
EXPR_MOD
,
EXPR_DELETE
,
EXPR_VOID
,
EXPR_TYPEOF
,
EXPR_MINUS
,
EXPR_PLUS
,
EXPR_POSTINC
,
EXPR_POSTDEC
,
EXPR_PREINC
,
EXPR_PREDEC
,
EXPR_EQ
,
EXPR_EQEQ
,
EXPR_NOTEQ
,
EXPR_NOTEQEQ
,
EXPR_LESS
,
EXPR_LESSEQ
,
EXPR_GREATER
,
EXPR_GREATEREQ
,
EXPR_BITNEG
,
EXPR_LOGNEG
,
EXPR_LSHIFT
,
EXPR_RSHIFT
,
EXPR_RRSHIFT
,
EXPR_ASSIGN
,
EXPR_ASSIGNLSHIFT
,
EXPR_ASSIGNRSHIFT
,
EXPR_ASSIGNRRSHIFT
,
EXPR_ASSIGNADD
,
EXPR_ASSIGNSUB
,
EXPR_ASSIGNMUL
,
EXPR_ASSIGNDIV
,
EXPR_ASSIGNMOD
,
EXPR_ASSIGNAND
,
EXPR_ASSIGNOR
,
EXPR_ASSIGNXOR
,
EXPR_COND
,
EXPR_ARRAY
,
EXPR_MEMBER
,
EXPR_NEW
,
EXPR_CALL
,
EXPR_THIS
,
EXPR_FUNC
,
EXPR_IDENT
,
EXPR_ARRAYLIT
,
EXPR_PROPVAL
,
EXPR_LITERAL
}
expression_type_t
;
struct
_expression_t
{
expression_type_t
type
;
};
typedef
struct
_parameter_t
{
const
WCHAR
*
identifier
;
struct
_parameter_t
*
next
;
}
parameter_t
;
struct
_source_elements_t
{
statement_t
*
statement
;
statement_t
*
statement_tail
;
};
typedef
struct
_function_expression_t
{
expression_t
expr
;
const
WCHAR
*
identifier
;
parameter_t
*
parameter_list
;
source_elements_t
*
source_elements
;
const
WCHAR
*
src_str
;
DWORD
src_len
;
struct
_function_expression_t
*
next
;
/* for compiler */
}
function_expression_t
;
typedef
struct
{
expression_t
expr
;
expression_t
*
expression1
;
expression_t
*
expression2
;
}
binary_expression_t
;
typedef
struct
{
expression_t
expr
;
expression_t
*
expression
;
}
unary_expression_t
;
typedef
struct
{
expression_t
expr
;
expression_t
*
expression
;
expression_t
*
true_expression
;
expression_t
*
false_expression
;
}
conditional_expression_t
;
typedef
struct
{
expression_t
expr
;
expression_t
*
expression
;
const
WCHAR
*
identifier
;
}
member_expression_t
;
typedef
struct
_argument_t
{
expression_t
*
expr
;
struct
_argument_t
*
next
;
}
argument_t
;
typedef
struct
{
expression_t
expr
;
expression_t
*
expression
;
argument_t
*
argument_list
;
}
call_expression_t
;
typedef
struct
{
expression_t
expr
;
const
WCHAR
*
identifier
;
}
identifier_expression_t
;
typedef
struct
{
expression_t
expr
;
literal_t
*
literal
;
}
literal_expression_t
;
typedef
struct
_array_element_t
{
int
elision
;
expression_t
*
expr
;
struct
_array_element_t
*
next
;
}
array_element_t
;
typedef
struct
{
expression_t
expr
;
array_element_t
*
element_list
;
int
length
;
}
array_literal_expression_t
;
typedef
struct
_prop_val_t
{
literal_t
*
name
;
expression_t
*
value
;
struct
_prop_val_t
*
next
;
}
prop_val_t
;
typedef
struct
{
expression_t
expr
;
prop_val_t
*
property_list
;
}
property_value_expression_t
;
dlls/jscript/parser.y
View file @
615f6a6e
...
...
@@ -20,6 +20,7 @@
#include "jscript.h"
#include "engine.h"
#include "parser.h"
#include "wine/debug.h"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment