Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
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-winehq
Commits
720e8c62
Commit
720e8c62
authored
Sep 03, 2008
by
Jacek Caban
Committed by
Alexandre Julliard
Sep 04, 2008
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
jscript: Added parser memory managment.
parent
b51a156f
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
142 additions
and
2 deletions
+142
-2
Makefile.in
dlls/jscript/Makefile.in
+1
-0
engine.h
dlls/jscript/engine.h
+5
-2
jscript.h
dlls/jscript/jscript.h
+19
-0
jsutils.c
dlls/jscript/jsutils.c
+112
-0
parser.y
dlls/jscript/parser.y
+5
-0
No files found.
dlls/jscript/Makefile.in
View file @
720e8c62
...
...
@@ -12,6 +12,7 @@ C_SRCS = \
engine.c
\
jscript.c
\
jscript_main.c
\
jsutils.c
\
lex.c
IDL_TLB_SRCS
=
jsglobal.idl
...
...
dlls/jscript/engine.h
View file @
720e8c62
...
...
@@ -29,6 +29,9 @@ typedef struct _parser_ctx_t {
source_elements_t
*
source
;
BOOL
nl
;
HRESULT
hres
;
jsheap_t
tmp_heap
;
jsheap_t
heap
;
}
parser_ctx_t
;
HRESULT
script_parse
(
script_ctx_t
*
,
const
WCHAR
*
,
parser_ctx_t
**
);
...
...
@@ -43,12 +46,12 @@ static inline void parser_addref(parser_ctx_t *ctx)
static
inline
void
*
parser_alloc
(
parser_ctx_t
*
ctx
,
DWORD
size
)
{
return
heap_alloc
(
size
);
/* FIXME */
return
jsheap_alloc
(
&
ctx
->
heap
,
size
);
}
static
inline
void
*
parser_alloc_tmp
(
parser_ctx_t
*
ctx
,
DWORD
size
)
{
return
heap_alloc
(
size
);
/* FIXME */
return
jsheap_alloc
(
&
ctx
->
tmp_heap
,
size
);
}
typedef
struct
{
...
...
dlls/jscript/jscript.h
View file @
720e8c62
...
...
@@ -29,6 +29,7 @@
#include "activscp.h"
#include "wine/unicode.h"
#include "wine/list.h"
typedef
struct
_script_ctx_t
script_ctx_t
;
...
...
@@ -62,6 +63,19 @@ static void inline script_addref(script_ctx_t *ctx)
HRESULT
WINAPI
JScriptFactory_CreateInstance
(
IClassFactory
*
,
IUnknown
*
,
REFIID
,
void
**
);
typedef
struct
{
void
**
blocks
;
DWORD
block_cnt
;
DWORD
last_block
;
DWORD
offset
;
struct
list
custom_blocks
;
}
jsheap_t
;
void
jsheap_init
(
jsheap_t
*
);
void
*
jsheap_alloc
(
jsheap_t
*
,
DWORD
);
void
jsheap_clear
(
jsheap_t
*
);
void
jsheap_free
(
jsheap_t
*
);
extern
LONG
module_ref
;
static
inline
void
lock_module
(
void
)
...
...
@@ -84,6 +98,11 @@ static inline void *heap_alloc_zero(size_t len)
return
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
len
);
}
static
inline
void
*
heap_realloc
(
void
*
mem
,
size_t
len
)
{
return
HeapReAlloc
(
GetProcessHeap
(),
0
,
mem
,
len
);
}
static
inline
BOOL
heap_free
(
void
*
mem
)
{
return
HeapFree
(
GetProcessHeap
(),
0
,
mem
);
...
...
dlls/jscript/jsutils.c
0 → 100644
View file @
720e8c62
/*
* Copyright 2008 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
*/
#include "jscript.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL
(
jscript
);
#define MIN_BLOCK_SIZE 128
static
inline
DWORD
block_size
(
DWORD
block
)
{
return
MIN_BLOCK_SIZE
<<
block
;
}
void
jsheap_init
(
jsheap_t
*
heap
)
{
memset
(
heap
,
0
,
sizeof
(
*
heap
));
list_init
(
&
heap
->
custom_blocks
);
}
void
*
jsheap_alloc
(
jsheap_t
*
heap
,
DWORD
size
)
{
struct
list
*
list
;
void
*
tmp
;
if
(
!
heap
->
block_cnt
)
{
if
(
!
heap
->
blocks
)
{
heap
->
blocks
=
heap_alloc
(
sizeof
(
void
*
));
if
(
!
heap
->
blocks
)
return
NULL
;
}
tmp
=
heap_alloc
(
block_size
(
0
));
if
(
!
tmp
)
return
NULL
;
heap
->
blocks
[
0
]
=
tmp
;
heap
->
block_cnt
=
1
;
}
if
(
heap
->
offset
+
size
<
block_size
(
heap
->
last_block
))
{
tmp
=
((
BYTE
*
)
heap
->
blocks
[
heap
->
last_block
])
+
heap
->
offset
;
heap
->
offset
+=
size
;
return
tmp
;
}
if
(
size
<
block_size
(
heap
->
last_block
+
1
))
{
if
(
heap
->
last_block
+
1
==
heap
->
block_cnt
)
{
tmp
=
heap_realloc
(
heap
->
blocks
,
(
heap
->
block_cnt
+
1
)
*
sizeof
(
void
*
));
if
(
!
tmp
)
return
NULL
;
heap
->
blocks
=
tmp
;
}
tmp
=
heap_alloc
(
block_size
(
heap
->
block_cnt
+
1
));
if
(
!
tmp
)
return
NULL
;
heap
->
blocks
[
heap
->
block_cnt
++
]
=
tmp
;
heap
->
last_block
++
;
heap
->
offset
=
size
;
return
heap
->
blocks
[
heap
->
last_block
];
}
list
=
heap_alloc
(
size
+
sizeof
(
struct
list
));
if
(
!
list
)
return
NULL
;
list_add_head
(
&
heap
->
custom_blocks
,
list
);
return
list
+
1
;
}
void
jsheap_clear
(
jsheap_t
*
heap
)
{
struct
list
*
tmp
;
while
((
tmp
=
list_next
(
&
heap
->
custom_blocks
,
&
heap
->
custom_blocks
)))
{
list_remove
(
tmp
);
heap_free
(
tmp
);
}
}
void
jsheap_free
(
jsheap_t
*
heap
)
{
DWORD
i
;
jsheap_clear
(
heap
);
for
(
i
=
0
;
i
<
heap
->
block_cnt
;
i
++
)
heap_free
(
heap
->
blocks
[
i
]);
heap_free
(
heap
->
blocks
);
jsheap_init
(
heap
);
}
dlls/jscript/parser.y
View file @
720e8c62
...
...
@@ -1512,6 +1512,7 @@ void parser_release(parser_ctx_t *ctx)
if(--ctx->ref)
return;
jsheap_free(&ctx->heap);
heap_free(ctx);
}
...
...
@@ -1533,7 +1534,11 @@ HRESULT script_parse(script_ctx_t *ctx, const WCHAR *code, parser_ctx_t **ret)
script_addref(ctx);
parser_ctx->script = ctx;
jsheap_init(&parser_ctx->tmp_heap);
jsheap_init(&parser_ctx->heap);
parser_parse(parser_ctx);
jsheap_free(&parser_ctx->tmp_heap);
if(FAILED(parser_ctx->hres)) {
hres = parser_ctx->hres;
parser_release(parser_ctx);
...
...
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