src/lj_strscan.h - luajit-2.0-src

Data types defined

Functions defined

Macros defined

Source code

  1. /*
  2. ** String scanning.
  3. ** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
  4. */

  5. #ifndef _LJ_STRSCAN_H
  6. #define _LJ_STRSCAN_H

  7. #include "lj_obj.h"

  8. /* Options for accepted/returned formats. */
  9. #define STRSCAN_OPT_TOINT        0x01  /* Convert to int32_t, if possible. */
  10. #define STRSCAN_OPT_TONUM        0x02  /* Always convert to double. */
  11. #define STRSCAN_OPT_IMAG        0x04
  12. #define STRSCAN_OPT_LL                0x08
  13. #define STRSCAN_OPT_C                0x10

  14. /* Returned format. */
  15. typedef enum {
  16.   STRSCAN_ERROR,
  17.   STRSCAN_NUM, STRSCAN_IMAG,
  18.   STRSCAN_INT, STRSCAN_U32, STRSCAN_I64, STRSCAN_U64,
  19. } StrScanFmt;

  20. LJ_FUNC StrScanFmt lj_strscan_scan(const uint8_t *p, TValue *o, uint32_t opt);
  21. LJ_FUNC int LJ_FASTCALL lj_strscan_num(GCstr *str, TValue *o);
  22. #if LJ_DUALNUM
  23. LJ_FUNC int LJ_FASTCALL lj_strscan_number(GCstr *str, TValue *o);
  24. #else
  25. #define lj_strscan_number(s, o)                lj_strscan_num((s), (o))
  26. #endif

  27. /* Check for number or convert string to number/int in-place (!). */
  28. static LJ_AINLINE int lj_strscan_numberobj(TValue *o)
  29. {
  30.   return tvisnumber(o) || (tvisstr(o) && lj_strscan_number(strV(o), o));
  31. }

  32. #endif