mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2024-12-25 14:22:27 +03:00
0154018363
* FBT: cdefines to env, libs order * API: strtod, modf, itoa, calloc * Apps: elk js * Apps: mjs * JS: scripts as assets * mjs: composite resolver * mjs: stack trace * ELK JS example removed * MJS thread, MJS lib modified to support script interruption * JS console UI * Module system, BadUSB bindings rework * JS notifications, simple dialog, BadUSB demo * Custom dialogs, dialog demo * MJS as system library, some dirty hacks to make it compile * Plugin-based js modules * js_uart(BadUART) module * js_uart: support for byte array arguments * Script icon and various fixes * File browser: multiple extensions filter, running js scripts from app loader * Running js scripts from archive browser * JS Runner as system app * Example scripts moved to /ext/apps/Scripts * JS bytecode listing generation * MJS builtin printf cleanup * JS examples cleanup * mbedtls version fix * Unused lib cleanup * Making PVS happy & TODOs cleanup * TODOs cleanup #2 * MJS: initial typed arrays support * JS: fix mem leak in uart destructor Co-authored-by: SG <who.just.the.doctor@gmail.com> Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
142 lines
2.9 KiB
C
142 lines
2.9 KiB
C
/*
|
|
* Copyright (c) 2016 Cesanta Software Limited
|
|
* All rights reserved
|
|
*/
|
|
|
|
#ifndef MJS_TOK_H_
|
|
#define MJS_TOK_H_
|
|
|
|
#include "mjs_internal.h"
|
|
|
|
#if defined(__cplusplus)
|
|
extern "C" {
|
|
#endif /* __cplusplus */
|
|
|
|
struct tok {
|
|
int tok;
|
|
int len;
|
|
const char* ptr;
|
|
};
|
|
|
|
struct pstate {
|
|
const char* file_name; /* Source code file name */
|
|
const char* buf; /* Nul-terminated source code buffer */
|
|
const char* pos; /* Current position */
|
|
int line_no; /* Line number */
|
|
int last_emitted_line_no;
|
|
struct mbuf offset_lineno_map;
|
|
int prev_tok; /* Previous token, for prefix increment / decrement */
|
|
struct tok tok; /* Parsed token */
|
|
struct mjs* mjs;
|
|
int start_bcode_idx; /* Index in mjs->bcode at which parsing was started */
|
|
int cur_idx; /* Index in mjs->bcode at which newly generated code is inserted
|
|
*/
|
|
int depth;
|
|
};
|
|
|
|
enum {
|
|
TOK_EOF,
|
|
TOK_INVALID,
|
|
|
|
TOK_COLON,
|
|
TOK_SEMICOLON,
|
|
TOK_COMMA,
|
|
TOK_ASSIGN,
|
|
TOK_OPEN_CURLY,
|
|
TOK_CLOSE_CURLY,
|
|
TOK_OPEN_PAREN,
|
|
TOK_CLOSE_PAREN,
|
|
TOK_OPEN_BRACKET,
|
|
TOK_CLOSE_BRACKET,
|
|
TOK_MUL,
|
|
TOK_PLUS,
|
|
TOK_MINUS,
|
|
TOK_DIV,
|
|
TOK_REM,
|
|
TOK_AND,
|
|
TOK_OR,
|
|
TOK_XOR,
|
|
TOK_DOT,
|
|
TOK_QUESTION,
|
|
TOK_NOT,
|
|
TOK_TILDA,
|
|
TOK_LT,
|
|
TOK_GT,
|
|
TOK_LSHIFT,
|
|
TOK_RSHIFT,
|
|
TOK_MINUS_MINUS,
|
|
TOK_PLUS_PLUS,
|
|
TOK_PLUS_ASSIGN,
|
|
TOK_MINUS_ASSIGN,
|
|
TOK_MUL_ASSIGN,
|
|
TOK_DIV_ASSIGN,
|
|
TOK_AND_ASSIGN,
|
|
TOK_OR_ASSIGN,
|
|
TOK_REM_ASSIGN,
|
|
TOK_XOR_ASSIGN,
|
|
TOK_EQ,
|
|
TOK_NE,
|
|
TOK_LE,
|
|
TOK_GE,
|
|
TOK_LOGICAL_AND,
|
|
TOK_LOGICAL_OR,
|
|
TOK_EQ_EQ,
|
|
TOK_NE_NE,
|
|
TOK_LSHIFT_ASSIGN,
|
|
TOK_RSHIFT_ASSIGN,
|
|
TOK_URSHIFT,
|
|
TOK_URSHIFT_ASSIGN,
|
|
|
|
TOK_UNARY_PLUS,
|
|
TOK_UNARY_MINUS,
|
|
TOK_POSTFIX_PLUS,
|
|
TOK_POSTFIX_MINUS,
|
|
|
|
TOK_NUM = 200, /* Make sure they don't clash with ascii '+', '{', etc */
|
|
TOK_STR,
|
|
TOK_IDENT,
|
|
TOK_KEYWORD_BREAK,
|
|
TOK_KEYWORD_CASE,
|
|
TOK_KEYWORD_CATCH,
|
|
TOK_KEYWORD_CONTINUE,
|
|
TOK_KEYWORD_DEBUGGER,
|
|
TOK_KEYWORD_DEFAULT,
|
|
TOK_KEYWORD_DELETE,
|
|
TOK_KEYWORD_DO,
|
|
TOK_KEYWORD_ELSE,
|
|
TOK_KEYWORD_FALSE,
|
|
TOK_KEYWORD_FINALLY,
|
|
TOK_KEYWORD_FOR,
|
|
TOK_KEYWORD_FUNCTION,
|
|
TOK_KEYWORD_IF,
|
|
TOK_KEYWORD_IN,
|
|
TOK_KEYWORD_INSTANCEOF,
|
|
TOK_KEYWORD_NEW,
|
|
TOK_KEYWORD_NULL,
|
|
TOK_KEYWORD_RETURN,
|
|
TOK_KEYWORD_SWITCH,
|
|
TOK_KEYWORD_THIS,
|
|
TOK_KEYWORD_THROW,
|
|
TOK_KEYWORD_TRUE,
|
|
TOK_KEYWORD_TRY,
|
|
TOK_KEYWORD_TYPEOF,
|
|
TOK_KEYWORD_VAR,
|
|
TOK_KEYWORD_VOID,
|
|
TOK_KEYWORD_WHILE,
|
|
TOK_KEYWORD_WITH,
|
|
TOK_KEYWORD_LET,
|
|
TOK_KEYWORD_UNDEFINED,
|
|
TOK_MAX
|
|
};
|
|
|
|
MJS_PRIVATE void pinit(const char* file_name, const char* buf, struct pstate*);
|
|
MJS_PRIVATE int pnext(struct pstate*);
|
|
MJS_PRIVATE int mjs_is_ident(int c);
|
|
MJS_PRIVATE int mjs_is_digit(int c);
|
|
|
|
#if defined(__cplusplus)
|
|
}
|
|
#endif /* __cplusplus */
|
|
|
|
#endif /* MJS_TOK_H_ */
|