Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
M
micropython
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
This is an archived project. Repository and other project resources are read-only.
Show more breadcrumbs
card10
micropython
Commits
54eb4e72
Commit
54eb4e72
authored
10 years ago
by
Damien George
Browse files
Options
Downloads
Patches
Plain Diff
lexer: Convert type (u)int to mp_(u)int_t.
parent
40f3c026
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
py/lexer.c
+28
-27
28 additions, 27 deletions
py/lexer.c
py/lexer.h
+5
-5
5 additions, 5 deletions
py/lexer.h
py/lexerstr.c
+2
-2
2 additions, 2 deletions
py/lexerstr.c
py/parsehelper.c
+1
-1
1 addition, 1 deletion
py/parsehelper.c
teensy/lexermemzip.c
+1
-1
1 addition, 1 deletion
teensy/lexermemzip.c
with
37 additions
and
36 deletions
py/lexer.c
+
28
−
27
View file @
54eb4e72
...
...
@@ -50,25 +50,25 @@ struct _mp_lexer_t {
unichar
chr0
,
chr1
,
chr2
;
// current cached characters from source
uint
line
;
// source line
uint
column
;
// source column
mp_
uint
_t
line
;
// source line
mp_
uint
_t
column
;
// source column
in
t
emit_dent
;
// non-zero when there are INDENT/DEDENT tokens to emit
in
t
nested_bracket_level
;
// >0 when there are nested brackets over multiple lines
mp_int_
t
emit_dent
;
// non-zero when there are INDENT/DEDENT tokens to emit
mp_int_
t
nested_bracket_level
;
// >0 when there are nested brackets over multiple lines
uint
alloc_indent_level
;
uint
num_indent_level
;
mp_
uint
_t
alloc_indent_level
;
mp_
uint
_t
num_indent_level
;
uint16_t
*
indent_level
;
vstr_t
vstr
;
mp_token_t
tok_cur
;
};
uint
mp_optimise_value
;
mp_
uint
_t
mp_optimise_value
;
// TODO replace with a call to a standard function
bool
str_strn_equal
(
const
char
*
str
,
const
char
*
strn
,
in
t
len
)
{
uint
i
=
0
;
bool
str_strn_equal
(
const
char
*
str
,
const
char
*
strn
,
mp_uint_
t
len
)
{
mp_
uint
_t
i
=
0
;
while
(
i
<
len
&&
*
str
==
*
strn
)
{
++
i
;
...
...
@@ -81,7 +81,7 @@ bool str_strn_equal(const char *str, const char *strn, int len) {
#ifdef MICROPY_DEBUG_PRINTERS
void
mp_token_show
(
const
mp_token_t
*
tok
)
{
printf
(
"(
%d:%d
) kind:%
d
str:%p len:
%d"
,
tok
->
src_line
,
tok
->
src_column
,
tok
->
kind
,
tok
->
str
,
tok
->
len
);
printf
(
"(
"
UINT_FMT
":"
UINT_FMT
"
) kind:%
u
str:%p len:
"
UINT_FMT
,
tok
->
src_line
,
tok
->
src_column
,
tok
->
kind
,
tok
->
str
,
tok
->
len
);
if
(
tok
->
str
!=
NULL
&&
tok
->
len
>
0
)
{
const
byte
*
i
=
(
const
byte
*
)
tok
->
str
;
const
byte
*
j
=
(
const
byte
*
)
i
+
tok
->
len
;
...
...
@@ -175,7 +175,7 @@ STATIC void next_char(mp_lexer_t *lex) {
return
;
}
in
t
advance
=
1
;
mp_uint_
t
advance
=
1
;
if
(
lex
->
chr0
==
'\n'
)
{
// LF is a new line
...
...
@@ -210,7 +210,7 @@ STATIC void next_char(mp_lexer_t *lex) {
}
}
void
indent_push
(
mp_lexer_t
*
lex
,
uint
indent
)
{
void
indent_push
(
mp_lexer_t
*
lex
,
mp_
uint
_t
indent
)
{
if
(
lex
->
num_indent_level
>=
lex
->
alloc_indent_level
)
{
// TODO use m_renew_maybe and somehow indicate an error if it fails... probably by using MP_TOKEN_MEMORY_ERROR
lex
->
indent_level
=
m_renew
(
uint16_t
,
lex
->
indent_level
,
lex
->
alloc_indent_level
,
lex
->
alloc_indent_level
+
MICROPY_ALLOC_LEXEL_INDENT_INC
);
...
...
@@ -219,7 +219,7 @@ void indent_push(mp_lexer_t *lex, uint indent) {
lex
->
indent_level
[
lex
->
num_indent_level
++
]
=
indent
;
}
uint
indent_top
(
mp_lexer_t
*
lex
)
{
mp_
uint
_t
indent_top
(
mp_lexer_t
*
lex
)
{
return
lex
->
indent_level
[
lex
->
num_indent_level
-
1
];
}
...
...
@@ -308,9 +308,9 @@ STATIC const char *tok_kw[] = {
"__debug__"
,
};
STATIC
in
t
hex_digit
(
unichar
c
)
{
STATIC
mp_uint_
t
hex_digit
(
unichar
c
)
{
// c is assumed to be hex digit
in
t
n
=
c
-
'0'
;
mp_uint_
t
n
=
c
-
'0'
;
if
(
n
>
9
)
{
n
&=
~
(
'a'
-
'A'
);
n
-=
(
'A'
-
(
'9'
+
1
));
...
...
@@ -320,8 +320,9 @@ STATIC int hex_digit(unichar c) {
// This is called with CUR_CHAR() before first hex digit, and should return with
// it pointing to last hex digit
STATIC
bool
get_hex
(
mp_lexer_t
*
lex
,
int
num_digits
,
uint
*
result
)
{
uint
num
=
0
;
// num_digits must be greater than zero
STATIC
bool
get_hex
(
mp_lexer_t
*
lex
,
mp_uint_t
num_digits
,
mp_uint_t
*
result
)
{
mp_uint_t
num
=
0
;
while
(
num_digits
--
!=
0
)
{
next_char
(
lex
);
unichar
c
=
CUR_CHAR
(
lex
);
...
...
@@ -394,7 +395,7 @@ STATIC void mp_lexer_next_token_into(mp_lexer_t *lex, mp_token_t *tok, bool firs
}
else
if
(
had_physical_newline
&&
lex
->
nested_bracket_level
==
0
)
{
tok
->
kind
=
MP_TOKEN_NEWLINE
;
uint
num_spaces
=
lex
->
column
-
1
;
mp_
uint
_t
num_spaces
=
lex
->
column
-
1
;
lex
->
emit_dent
=
0
;
if
(
num_spaces
==
indent_top
(
lex
))
{
}
else
if
(
num_spaces
>
indent_top
(
lex
))
{
...
...
@@ -463,7 +464,7 @@ STATIC void mp_lexer_next_token_into(mp_lexer_t *lex, mp_token_t *tok, bool firs
next_char
(
lex
);
// work out if it's a single or triple quoted literal
in
t
num_quotes
;
mp_uint_
t
num_quotes
;
if
(
is_char_and
(
lex
,
quote_char
,
quote_char
))
{
// triple quotes
next_char
(
lex
);
...
...
@@ -475,7 +476,7 @@ STATIC void mp_lexer_next_token_into(mp_lexer_t *lex, mp_token_t *tok, bool firs
}
// parse the literal
in
t
n_closing
=
0
;
mp_uint_
t
n_closing
=
0
;
while
(
!
is_end
(
lex
)
&&
(
num_quotes
>
1
||
!
is_char
(
lex
,
'\n'
))
&&
n_closing
<
num_quotes
)
{
if
(
is_char
(
lex
,
quote_char
))
{
n_closing
+=
1
;
...
...
@@ -512,7 +513,7 @@ STATIC void mp_lexer_next_token_into(mp_lexer_t *lex, mp_token_t *tok, bool firs
// Otherwise fall through.
case
'x'
:
{
uint
num
=
0
;
mp_
uint
_t
num
=
0
;
if
(
!
get_hex
(
lex
,
(
c
==
'x'
?
2
:
c
==
'u'
?
4
:
8
),
&
num
))
{
// TODO error message
assert
(
0
);
...
...
@@ -531,8 +532,8 @@ STATIC void mp_lexer_next_token_into(mp_lexer_t *lex, mp_token_t *tok, bool firs
default:
if
(
c
>=
'0'
&&
c
<=
'7'
)
{
// Octal sequence, 1-3 chars
in
t
digits
=
3
;
in
t
num
=
c
-
'0'
;
mp_uint_
t
digits
=
3
;
mp_uint_
t
num
=
c
-
'0'
;
while
(
is_following_odigit
(
lex
)
&&
--
digits
!=
0
)
{
next_char
(
lex
);
num
=
num
*
8
+
(
CUR_CHAR
(
lex
)
-
'0'
);
...
...
@@ -627,7 +628,7 @@ STATIC void mp_lexer_next_token_into(mp_lexer_t *lex, mp_token_t *tok, bool firs
// search for encoded delimiter or operator
const
char
*
t
=
tok_enc
;
uint
tok_enc_index
=
0
;
mp_
uint
_t
tok_enc_index
=
0
;
for
(;
*
t
!=
0
&&
!
is_char
(
lex
,
*
t
);
t
+=
1
)
{
if
(
*
t
==
'e'
||
*
t
==
'c'
)
{
t
+=
1
;
...
...
@@ -649,7 +650,7 @@ STATIC void mp_lexer_next_token_into(mp_lexer_t *lex, mp_token_t *tok, bool firs
// get the maximum characters for a valid token
t
+=
1
;
uint
t_index
=
tok_enc_index
;
mp_
uint
_t
t_index
=
tok_enc_index
;
for
(;;)
{
for
(;
*
t
==
'e'
;
t
+=
1
)
{
t
+=
1
;
...
...
@@ -712,8 +713,8 @@ STATIC void mp_lexer_next_token_into(mp_lexer_t *lex, mp_token_t *tok, bool firs
// the parser gives a syntax error on, eg, x.__debug__. Otherwise, we
// need to check for this special token in many places in the compiler.
// TODO improve speed of these string comparisons
//for (
in
t i = 0; tok_kw[i] != NULL; i++) {
for
(
in
t
i
=
0
;
i
<
MP_ARRAY_SIZE
(
tok_kw
);
i
++
)
{
//for (
mp_int_
t i = 0; tok_kw[i] != NULL; i++) {
for
(
mp_int_
t
i
=
0
;
i
<
MP_ARRAY_SIZE
(
tok_kw
);
i
++
)
{
if
(
str_strn_equal
(
tok_kw
[
i
],
tok
->
str
,
tok
->
len
))
{
if
(
i
==
MP_ARRAY_SIZE
(
tok_kw
)
-
1
)
{
// tok_kw[MP_ARRAY_SIZE(tok_kw) - 1] == "__debug__"
...
...
This diff is collapsed.
Click to expand it.
py/lexer.h
+
5
−
5
View file @
54eb4e72
...
...
@@ -131,12 +131,12 @@ typedef enum _mp_token_kind_t {
}
mp_token_kind_t
;
typedef
struct
_mp_token_t
{
uint
src_line
;
// source line
uint
src_column
;
// source column
mp_
uint
_t
src_line
;
// source line
mp_
uint
_t
src_column
;
// source column
mp_token_kind_t
kind
;
// kind of token
const
char
*
str
;
// string of token (valid only while this token is current token)
uint
len
;
// (byte) length of string of token
mp_
uint
_t
len
;
// (byte) length of string of token
}
mp_token_t
;
// the next-char function must return the next character in the stream
...
...
@@ -151,7 +151,7 @@ typedef struct _mp_lexer_t mp_lexer_t;
void
mp_token_show
(
const
mp_token_t
*
tok
);
mp_lexer_t
*
mp_lexer_new
(
qstr
src_name
,
void
*
stream_data
,
mp_lexer_stream_next_char_t
stream_next_char
,
mp_lexer_stream_close_t
stream_close
);
mp_lexer_t
*
mp_lexer_new_from_str_len
(
qstr
src_name
,
const
char
*
str
,
uint
len
,
uint
free_len
);
mp_lexer_t
*
mp_lexer_new_from_str_len
(
qstr
src_name
,
const
char
*
str
,
mp_
uint
_t
len
,
mp_
uint
_t
free_len
);
void
mp_lexer_free
(
mp_lexer_t
*
lex
);
qstr
mp_lexer_source_name
(
mp_lexer_t
*
lex
);
...
...
@@ -177,4 +177,4 @@ typedef enum {
mp_import_stat_t
mp_import_stat
(
const
char
*
path
);
mp_lexer_t
*
mp_lexer_new_from_file
(
const
char
*
filename
);
extern
uint
mp_optimise_value
;
extern
mp_
uint
_t
mp_optimise_value
;
This diff is collapsed.
Click to expand it.
py/lexerstr.c
+
2
−
2
View file @
54eb4e72
...
...
@@ -30,7 +30,7 @@
#include
"lexer.h"
typedef
struct
_mp_lexer_str_buf_t
{
uint
free_len
;
// if > 0, src_beg will be freed when done by: m_free(src_beg, free_len)
mp_
uint
_t
free_len
;
// if > 0, src_beg will be freed when done by: m_free(src_beg, free_len)
const
char
*
src_beg
;
// beginning of source
const
char
*
src_cur
;
// current location in source
const
char
*
src_end
;
// end (exclusive) of source
...
...
@@ -51,7 +51,7 @@ STATIC void str_buf_free(mp_lexer_str_buf_t *sb) {
m_del_obj
(
mp_lexer_str_buf_t
,
sb
);
}
mp_lexer_t
*
mp_lexer_new_from_str_len
(
qstr
src_name
,
const
char
*
str
,
uint
len
,
uint
free_len
)
{
mp_lexer_t
*
mp_lexer_new_from_str_len
(
qstr
src_name
,
const
char
*
str
,
mp_
uint
_t
len
,
mp_
uint
_t
free_len
)
{
mp_lexer_str_buf_t
*
sb
=
m_new_obj
(
mp_lexer_str_buf_t
);
sb
->
free_len
=
free_len
;
sb
->
src_beg
=
str
;
...
...
This diff is collapsed.
Click to expand it.
py/parsehelper.c
+
1
−
1
View file @
54eb4e72
...
...
@@ -43,7 +43,7 @@
#define STR_INVALID_SYNTAX "invalid syntax"
void
mp_parse_show_exception
(
mp_lexer_t
*
lex
,
mp_parse_error_kind_t
parse_error_kind
)
{
printf
(
" File
\"
%s
\"
, line
%d, column %d
\n
"
,
qstr_str
(
mp_lexer_source_name
(
lex
)),
mp_lexer_cur
(
lex
)
->
src_line
,
mp_lexer_cur
(
lex
)
->
src_column
);
printf
(
" File
\"
%s
\"
, line
"
UINT_FMT
", column "
UINT_FMT
"
\n
"
,
qstr_str
(
mp_lexer_source_name
(
lex
)),
mp_lexer_cur
(
lex
)
->
src_line
,
mp_lexer_cur
(
lex
)
->
src_column
);
switch
(
parse_error_kind
)
{
case
MP_PARSE_ERROR_MEMORY
:
printf
(
"MemoryError: %s
\n
"
,
STR_MEMORY
);
...
...
This diff is collapsed.
Click to expand it.
teensy/lexermemzip.c
+
1
−
1
View file @
54eb4e72
...
...
@@ -16,6 +16,6 @@ mp_lexer_t *mp_lexer_new_from_file(const char *filename)
return
NULL
;
}
return
mp_lexer_new_from_str_len
(
qstr_from_str
(
filename
),
(
const
char
*
)
data
,
(
uint
)
len
,
0
);
return
mp_lexer_new_from_str_len
(
qstr_from_str
(
filename
),
(
const
char
*
)
data
,
(
mp_
uint
_t
)
len
,
0
);
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
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!
Save comment
Cancel
Please
register
or
sign in
to comment