Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
031278f6
Commit
031278f6
authored
Jun 04, 2015
by
Damien George
Browse files
unix: Allow to cat a script into stdin from the command line.
See issue #1306.
parent
9724a053
Changes
4
Hide whitespace changes
Inline
Side-by-side
py/lexer.h
View file @
031278f6
...
...
@@ -194,4 +194,8 @@ typedef enum {
mp_import_stat_t
mp_import_stat
(
const
char
*
path
);
mp_lexer_t
*
mp_lexer_new_from_file
(
const
char
*
filename
);
#if MICROPY_HELPER_LEXER_UNIX
mp_lexer_t
*
mp_lexer_new_from_fd
(
qstr
filename
,
int
fd
,
bool
close_fd
);
#endif
#endif // __MICROPY_INCLUDED_PY_LEXER_H__
py/lexerunix.c
View file @
031278f6
...
...
@@ -39,6 +39,7 @@
typedef
struct
_mp_lexer_file_buf_t
{
int
fd
;
bool
close_fd
;
byte
buf
[
20
];
mp_uint_t
len
;
mp_uint_t
pos
;
...
...
@@ -62,24 +63,34 @@ STATIC mp_uint_t file_buf_next_byte(mp_lexer_file_buf_t *fb) {
}
STATIC
void
file_buf_close
(
mp_lexer_file_buf_t
*
fb
)
{
close
(
fb
->
fd
);
if
(
fb
->
close_fd
)
{
close
(
fb
->
fd
);
}
m_del_obj
(
mp_lexer_file_buf_t
,
fb
);
}
mp_lexer_t
*
mp_lexer_new_from_f
ile
(
const
cha
r
*
filename
)
{
mp_lexer_t
*
mp_lexer_new_from_f
d
(
qst
r
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
=
open
(
filename
,
O_RDONLY
);
if
(
fb
->
fd
<
0
)
{
m_del_obj
(
mp_lexer_file_buf_t
,
fb
);
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
(
qstr_from_str
(
filename
),
fb
,
(
mp_lexer_stream_next_byte_t
)
file_buf_next_byte
,
(
mp_lexer_stream_close_t
)
file_buf_close
);
return
mp_lexer_new
(
filename
,
fb
,
(
mp_lexer_stream_next_byte_t
)
file_buf_next_byte
,
(
mp_lexer_stream_close_t
)
file_buf_close
);
}
mp_lexer_t
*
mp_lexer_new_from_file
(
const
char
*
filename
)
{
int
fd
=
open
(
filename
,
O_RDONLY
);
if
(
fd
<
0
)
{
return
NULL
;
}
return
mp_lexer_new_from_fd
(
qstr_from_str
(
filename
),
fd
,
true
);
}
#endif // MICROPY_HELPER_LEXER_UNIX
tests/run-tests
View file @
031278f6
...
...
@@ -133,6 +133,10 @@ def run_tests(pyb, tests, args):
if
native
==
b
'CRASH'
:
skip_native
=
True
# These tests no longer work; TODO change them or remove them
skip_tests
.
add
(
'cmdline/repl_basic.py'
)
skip_tests
.
add
(
'cmdline/repl_cont.py'
)
# Some tests shouldn't be run under Travis CI
if
os
.
getenv
(
'TRAVIS'
)
==
'true'
:
skip_tests
.
add
(
'basics/memoryerror.py'
)
...
...
unix/main.c
View file @
031278f6
...
...
@@ -30,6 +30,7 @@
#include
<string.h>
#include
<stdlib.h>
#include
<stdarg.h>
#include
<unistd.h>
#include
<ctype.h>
#include
<sys/stat.h>
#include
<sys/types.h>
...
...
@@ -447,9 +448,14 @@ int main(int argc, char **argv) {
}
if
(
ret
==
NOTHING_EXECUTED
)
{
prompt_read_history
();
ret
=
do_repl
();
prompt_write_history
();
if
(
isatty
(
0
))
{
prompt_read_history
();
ret
=
do_repl
();
prompt_write_history
();
}
else
{
mp_lexer_t
*
lex
=
mp_lexer_new_from_fd
(
MP_QSTR__lt_stdin_gt_
,
0
,
false
);
ret
=
execute_from_lexer
(
lex
,
MP_PARSE_FILE_INPUT
,
false
);
}
}
#if MICROPY_PY_MICROPYTHON_MEM_INFO
...
...
Write
Preview
Supports
Markdown
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