add code_is_empty API to check for dummy bytecode and remove cs_private
parent
db98021883
commit
a0130089cf
4
Makefile
4
Makefile
|
@ -27,7 +27,7 @@ $(LIBCS_LIB): $(LIBCS_OBJ)
|
|||
clean:
|
||||
rm -f $(LIBCS_LIB) $(LIBCS_OBJ)
|
||||
|
||||
cubescript.o: cubescript.hh lib_list.hh cs_private.hh
|
||||
cubescript.o: cubescript.hh lib_list.hh
|
||||
lib_str.o: cubescript.hh
|
||||
lib_math.o: cubescript.hh
|
||||
lib_list.o: cubescript.hh lib_list.hh cs_private.hh
|
||||
lib_list.o: cubescript.hh lib_list.hh
|
||||
|
|
|
@ -1,56 +0,0 @@
|
|||
#ifndef CS_PRIVATE_HH
|
||||
#define CS_PRIVATE_HH
|
||||
|
||||
#include "cubescript.hh"
|
||||
|
||||
namespace cscript {
|
||||
|
||||
static constexpr int MaxArguments = 25;
|
||||
static constexpr int MaxResults = 7;
|
||||
static constexpr int MaxComargs = 12;
|
||||
|
||||
enum {
|
||||
CODE_START = 0,
|
||||
CODE_OFFSET,
|
||||
CODE_NULL, CODE_TRUE, CODE_FALSE, CODE_NOT,
|
||||
CODE_POP,
|
||||
CODE_ENTER, CODE_ENTER_RESULT,
|
||||
CODE_EXIT, CODE_RESULT_ARG,
|
||||
CODE_VAL, CODE_VALI,
|
||||
CODE_DUP,
|
||||
CODE_MACRO,
|
||||
CODE_BOOL,
|
||||
CODE_BLOCK, CODE_EMPTY,
|
||||
CODE_COMPILE, CODE_COND,
|
||||
CODE_FORCE,
|
||||
CODE_RESULT,
|
||||
CODE_IDENT, CODE_IDENTU, CODE_IDENTARG,
|
||||
CODE_COM, CODE_COMC, CODE_COMV,
|
||||
CODE_CONC, CODE_CONCW, CODE_CONCM, CODE_DOWN,
|
||||
CODE_SVAR, CODE_SVARM, CODE_SVAR1,
|
||||
CODE_IVAR, CODE_IVAR1, CODE_IVAR2, CODE_IVAR3,
|
||||
CODE_FVAR, CODE_FVAR1,
|
||||
CODE_LOOKUP, CODE_LOOKUPU, CODE_LOOKUPARG,
|
||||
CODE_LOOKUPM, CODE_LOOKUPMU, CODE_LOOKUPMARG,
|
||||
CODE_ALIAS, CODE_ALIASU, CODE_ALIASARG,
|
||||
CODE_CALL, CODE_CALLU, CODE_CALLARG,
|
||||
CODE_PRINT,
|
||||
CODE_LOCAL,
|
||||
CODE_DO, CODE_DOARGS,
|
||||
CODE_JUMP, CODE_JUMP_TRUE, CODE_JUMP_FALSE,
|
||||
CODE_JUMP_RESULT_TRUE, CODE_JUMP_RESULT_FALSE,
|
||||
|
||||
CODE_OP_MASK = 0x3F,
|
||||
CODE_RET = 6,
|
||||
CODE_RET_MASK = 0xC0,
|
||||
|
||||
/* return type flags */
|
||||
RET_NULL = VAL_NULL << CODE_RET,
|
||||
RET_STR = VAL_STR << CODE_RET,
|
||||
RET_INT = VAL_INT << CODE_RET,
|
||||
RET_FLOAT = VAL_FLOAT << CODE_RET,
|
||||
};
|
||||
|
||||
} /*namespace cscript */
|
||||
|
||||
#endif
|
|
@ -1,5 +1,4 @@
|
|||
#include "cubescript.hh"
|
||||
#include "cs_private.hh"
|
||||
#include "lib_list.hh"
|
||||
|
||||
#include <limits.h>
|
||||
|
@ -12,6 +11,52 @@
|
|||
|
||||
namespace cscript {
|
||||
|
||||
static constexpr int MaxArguments = 25;
|
||||
static constexpr int MaxResults = 7;
|
||||
static constexpr int MaxComargs = 12;
|
||||
|
||||
enum {
|
||||
CODE_START = 0,
|
||||
CODE_OFFSET,
|
||||
CODE_NULL, CODE_TRUE, CODE_FALSE, CODE_NOT,
|
||||
CODE_POP,
|
||||
CODE_ENTER, CODE_ENTER_RESULT,
|
||||
CODE_EXIT, CODE_RESULT_ARG,
|
||||
CODE_VAL, CODE_VALI,
|
||||
CODE_DUP,
|
||||
CODE_MACRO,
|
||||
CODE_BOOL,
|
||||
CODE_BLOCK, CODE_EMPTY,
|
||||
CODE_COMPILE, CODE_COND,
|
||||
CODE_FORCE,
|
||||
CODE_RESULT,
|
||||
CODE_IDENT, CODE_IDENTU, CODE_IDENTARG,
|
||||
CODE_COM, CODE_COMC, CODE_COMV,
|
||||
CODE_CONC, CODE_CONCW, CODE_CONCM, CODE_DOWN,
|
||||
CODE_SVAR, CODE_SVARM, CODE_SVAR1,
|
||||
CODE_IVAR, CODE_IVAR1, CODE_IVAR2, CODE_IVAR3,
|
||||
CODE_FVAR, CODE_FVAR1,
|
||||
CODE_LOOKUP, CODE_LOOKUPU, CODE_LOOKUPARG,
|
||||
CODE_LOOKUPM, CODE_LOOKUPMU, CODE_LOOKUPMARG,
|
||||
CODE_ALIAS, CODE_ALIASU, CODE_ALIASARG,
|
||||
CODE_CALL, CODE_CALLU, CODE_CALLARG,
|
||||
CODE_PRINT,
|
||||
CODE_LOCAL,
|
||||
CODE_DO, CODE_DOARGS,
|
||||
CODE_JUMP, CODE_JUMP_TRUE, CODE_JUMP_FALSE,
|
||||
CODE_JUMP_RESULT_TRUE, CODE_JUMP_RESULT_FALSE,
|
||||
|
||||
CODE_OP_MASK = 0x3F,
|
||||
CODE_RET = 6,
|
||||
CODE_RET_MASK = 0xC0,
|
||||
|
||||
/* return type flags */
|
||||
RET_NULL = VAL_NULL << CODE_RET,
|
||||
RET_STR = VAL_STR << CODE_RET,
|
||||
RET_INT = VAL_INT << CODE_RET,
|
||||
RET_FLOAT = VAL_FLOAT << CODE_RET,
|
||||
};
|
||||
|
||||
static inline int parseint(char const *s) {
|
||||
return int(strtoul(s, nullptr, 0));
|
||||
}
|
||||
|
@ -1451,6 +1496,20 @@ static ostd::Uint32 emptyblock[VAL_ANY][2] = {
|
|||
{ CODE_START + 0x100, CODE_EXIT | RET_STR }
|
||||
};
|
||||
|
||||
OSTD_EXPORT bool code_is_empty(ostd::Uint32 const *code) {
|
||||
if (!code) {
|
||||
return true;
|
||||
}
|
||||
return (*code & CODE_OP_MASK) == CODE_EXIT;
|
||||
}
|
||||
|
||||
bool TaggedValue::code_is_empty() const {
|
||||
if (get_type() != VAL_CODE) {
|
||||
return true;
|
||||
}
|
||||
return cscript::code_is_empty(code);
|
||||
}
|
||||
|
||||
static inline bool cs_get_bool(ostd::ConstCharRange s) {
|
||||
if (s.empty())
|
||||
return false;
|
||||
|
|
|
@ -56,6 +56,8 @@ private:
|
|||
ostd::Uint32 *p_code;
|
||||
};
|
||||
|
||||
OSTD_EXPORT bool code_is_empty(ostd::Uint32 const *code);
|
||||
|
||||
struct Ident;
|
||||
|
||||
struct IdentValue {
|
||||
|
@ -142,6 +144,8 @@ struct OSTD_EXPORT TaggedValue: IdentValue {
|
|||
int force_int();
|
||||
ostd::ConstCharRange force_str();
|
||||
|
||||
bool code_is_empty() const;
|
||||
|
||||
void cleanup();
|
||||
void copy_arg(TaggedValue &r) const;
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
#include "cubescript.hh"
|
||||
#include "cs_private.hh"
|
||||
#include "lib_list.hh"
|
||||
|
||||
namespace cscript {
|
||||
|
@ -494,7 +493,7 @@ static void cs_list_sort(
|
|||
if (body) {
|
||||
ListSortFun f = { cs, x, y, body };
|
||||
ostd::sort_cmp(items.iter(), f);
|
||||
if ((*unique & CODE_OP_MASK) != CODE_EXIT) {
|
||||
if (!code_is_empty(unique)) {
|
||||
f.body = unique;
|
||||
totaluniq = items[0].quote.size();
|
||||
nuniq = 1;
|
||||
|
|
Loading…
Reference in New Issue