Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
66d955c2
Commit
66d955c2
authored
Nov 16, 2016
by
Damien George
Browse files
py/lexer: Rewrite mp_lexer_new_from_fd in terms of mp_reader.
parent
e5ef15a9
Changes
5
Hide whitespace changes
Inline
Side-by-side
py/lexer.c
View file @
66d955c2
...
...
@@ -770,6 +770,19 @@ mp_lexer_t *mp_lexer_new_from_file(const char *filename) {
return
mp_lexer_new
(
qstr_from_str
(
filename
),
reader
.
data
,
(
mp_lexer_stream_next_byte_t
)
reader
.
readbyte
,
(
mp_lexer_stream_close_t
)
reader
.
close
);
}
#if MICROPY_HELPER_LEXER_UNIX
mp_lexer_t
*
mp_lexer_new_from_fd
(
qstr
filename
,
int
fd
,
bool
close_fd
)
{
mp_reader_t
reader
;
int
ret
=
mp_reader_new_file_from_fd
(
&
reader
,
fd
,
close_fd
);
if
(
ret
!=
0
)
{
return
NULL
;
}
return
mp_lexer_new
(
filename
,
reader
.
data
,
(
mp_lexer_stream_next_byte_t
)
reader
.
readbyte
,
(
mp_lexer_stream_close_t
)
reader
.
close
);
}
#endif
#endif
void
mp_lexer_free
(
mp_lexer_t
*
lex
)
{
...
...
py/lexerunix.c
deleted
100644 → 0
View file @
e5ef15a9
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2013, 2014 Damien P. George
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include
"py/mpconfig.h"
#if MICROPY_HELPER_LEXER_UNIX
#include
<stdio.h>
#include
<stdint.h>
#include
<unistd.h>
#include
<fcntl.h>
#include
<sys/stat.h>
#include
<sys/types.h>
#include
"py/lexer.h"
typedef
struct
_mp_lexer_file_buf_t
{
int
fd
;
bool
close_fd
;
byte
buf
[
20
];
mp_uint_t
len
;
mp_uint_t
pos
;
}
mp_lexer_file_buf_t
;
STATIC
mp_uint_t
file_buf_next_byte
(
mp_lexer_file_buf_t
*
fb
)
{
if
(
fb
->
pos
>=
fb
->
len
)
{
if
(
fb
->
len
==
0
)
{
return
MP_LEXER_EOF
;
}
else
{
int
n
=
read
(
fb
->
fd
,
fb
->
buf
,
sizeof
(
fb
->
buf
));
if
(
n
<=
0
)
{
fb
->
len
=
0
;
return
MP_LEXER_EOF
;
}
fb
->
len
=
n
;
fb
->
pos
=
0
;
}
}
return
fb
->
buf
[
fb
->
pos
++
];
}
STATIC
void
file_buf_close
(
mp_lexer_file_buf_t
*
fb
)
{
if
(
fb
->
close_fd
)
{
close
(
fb
->
fd
);
}
m_del_obj
(
mp_lexer_file_buf_t
,
fb
);
}
mp_lexer_t
*
mp_lexer_new_from_fd
(
qstr
filename
,
int
fd
,
bool
close_fd
)
{
mp_lexer_file_buf_t
*
fb
=
m_new_obj_maybe
(
mp_lexer_file_buf_t
);
if
(
fb
==
NULL
)
{
if
(
close_fd
)
{
close
(
fd
);
}
return
NULL
;
}
fb
->
fd
=
fd
;
fb
->
close_fd
=
close_fd
;
int
n
=
read
(
fb
->
fd
,
fb
->
buf
,
sizeof
(
fb
->
buf
));
fb
->
len
=
n
;
fb
->
pos
=
0
;
return
mp_lexer_new
(
filename
,
fb
,
(
mp_lexer_stream_next_byte_t
)
file_buf_next_byte
,
(
mp_lexer_stream_close_t
)
file_buf_close
);
}
#endif // MICROPY_HELPER_LEXER_UNIX
py/py.mk
View file @
66d955c2
...
...
@@ -115,7 +115,6 @@ PY_O_BASENAME = \
mpz.o
\
reader.o
\
lexer.o
\
lexerunix.o
\
parse.o
\
scope.o
\
compile.o
\
...
...
py/reader.c
View file @
66d955c2
...
...
@@ -110,7 +110,7 @@ STATIC void mp_reader_posix_close(void *data) {
m_del_obj
(
mp_reader_posix_t
,
reader
);
}
STATIC
int
mp_reader_new_file_from_fd
(
mp_reader_t
*
reader
,
int
fd
,
bool
close_fd
)
{
int
mp_reader_new_file_from_fd
(
mp_reader_t
*
reader
,
int
fd
,
bool
close_fd
)
{
mp_reader_posix_t
*
rp
=
m_new_obj_maybe
(
mp_reader_posix_t
);
if
(
rp
==
NULL
)
{
if
(
close_fd
)
{
...
...
py/reader.h
View file @
66d955c2
...
...
@@ -41,5 +41,6 @@ typedef struct _mp_reader_t {
bool
mp_reader_new_mem
(
mp_reader_t
*
reader
,
const
byte
*
buf
,
size_t
len
,
size_t
free_len
);
int
mp_reader_new_file
(
mp_reader_t
*
reader
,
const
char
*
filename
);
int
mp_reader_new_file_from_fd
(
mp_reader_t
*
reader
,
int
fd
,
bool
close_fd
);
#endif // MICROPY_INCLUDED_PY_READER_H
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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