Skip to content

Commit

Permalink
Define WUFFS_BASE__TOKEN__VBC__ETC macros
Browse files Browse the repository at this point in the history
  • Loading branch information
nigeltao committed Feb 22, 2020
1 parent 01bab82 commit 9f7a250
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 16 deletions.
32 changes: 20 additions & 12 deletions example/jsonptr/jsonptr.cc
Expand Up @@ -259,12 +259,15 @@ const char* handle_string(parsed_token pt) {
uint64_t vbc = pt.token.value_base_category();
uint64_t vbd = pt.token.value_base_detail();

if (vbc == 3) {
if (vbc == WUFFS_BASE__TOKEN__VBC__STRING) {
TRY(write_dst(pt.data.ptr, pt.data.len));
if ((vbd & 1) == 0) {
if ((vbd & WUFFS_BASE__TOKEN__VBD__STRING__INCOMPLETE) == 0) {
break;
}

} else if (vbc != WUFFS_BASE__TOKEN__VBC__UNICODE_CODE_POINT) {
return "main: unexpected token";

} else if (vbd < 0x0020) {
switch (vbd) {
case '\b':
Expand Down Expand Up @@ -362,7 +365,8 @@ const char* main2() {
uint64_t vbd = pt.token.value_base_detail();

// Handle ']' or '}'.
if ((vbc == 1) && ((vbd & 0x2) != 0)) {
if ((vbc == WUFFS_BASE__TOKEN__VBC__STRUCTURE) &&
((vbd & WUFFS_BASE__TOKEN__VBD__STRUCTURE__POP) != 0)) {
if (depth <= 0) {
return "main: internal error: inconsistent depth";
}
Expand All @@ -377,9 +381,11 @@ const char* main2() {
}
}

TRY(write_dst((vbd & 0x20) ? "]" : "}", 1));
ctx = (vbd & 0x2000) ? context::in_list_after_value
: context::in_dict_after_key;
TRY(write_dst(
(vbd & WUFFS_BASE__TOKEN__VBD__STRUCTURE__FROM_LIST) ? "]" : "}", 1));
ctx = (vbd & WUFFS_BASE__TOKEN__VBD__STRUCTURE__TO_LIST)
? context::in_list_after_value
: context::in_dict_after_key;
goto after_value;
}

Expand All @@ -400,18 +406,20 @@ const char* main2() {
// Handle the token itself: either a container ('[' or '{') or a simple
// value (number, string or literal).
switch (vbc) {
case 1:
TRY(write_dst((vbd & 0x2000) ? "[" : "{", 1));
case WUFFS_BASE__TOKEN__VBC__STRUCTURE:
TRY(write_dst(
(vbd & WUFFS_BASE__TOKEN__VBD__STRUCTURE__TO_LIST) ? "[" : "{", 1));
depth++;
ctx = (vbd & 0x2000) ? context::in_list_after_bracket
: context::in_dict_after_brace;
ctx = (vbd & WUFFS_BASE__TOKEN__VBD__STRUCTURE__TO_LIST)
? context::in_list_after_bracket
: context::in_dict_after_brace;
goto continue_loop;

case 2:
case WUFFS_BASE__TOKEN__VBC__NUMBER:
TRY(write_dst(pt.data.ptr, pt.data.len));
goto after_value;

case 3:
case WUFFS_BASE__TOKEN__VBC__STRING:
TRY(handle_string(pt));
goto after_value;
}
Expand Down
27 changes: 27 additions & 0 deletions internal/cgen/base/token-public.h
Expand Up @@ -30,6 +30,33 @@
#define WUFFS_BASE__TOKEN__VALUE_BASE_DETAIL__SHIFT 16
#define WUFFS_BASE__TOKEN__LENGTH__SHIFT 0

#define WUFFS_BASE__TOKEN__VBC__FILLER 0
#define WUFFS_BASE__TOKEN__VBC__STRUCTURE 1
#define WUFFS_BASE__TOKEN__VBC__NUMBER 2
#define WUFFS_BASE__TOKEN__VBC__STRING 3
#define WUFFS_BASE__TOKEN__VBC__UNICODE_CODE_POINT 4
#define WUFFS_BASE__TOKEN__VBC__BYTES 5

#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__PUSH 0x00001
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__POP 0x00002
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__FROM_NONE 0x00010
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__FROM_LIST 0x00020
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__FROM_DICT 0x00040
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__TO_NONE 0x01000
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__TO_LIST 0x02000
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__TO_DICT 0x04000

#define WUFFS_BASE__TOKEN__VBD__NUMBER__LITERAL 0x00001
#define WUFFS_BASE__TOKEN__VBD__NUMBER__LITERAL__UNDEFINED 0x00011
#define WUFFS_BASE__TOKEN__VBD__NUMBER__LITERAL__NULL 0x00021
#define WUFFS_BASE__TOKEN__VBD__NUMBER__LITERAL__FALSE 0x00041
#define WUFFS_BASE__TOKEN__VBD__NUMBER__LITERAL__TRUE 0x00081
#define WUFFS_BASE__TOKEN__VBD__NUMBER__INTEGER 0x00002
#define WUFFS_BASE__TOKEN__VBD__NUMBER__FLOATING_POINT 0x00004

#define WUFFS_BASE__TOKEN__VBD__STRING__INCOMPLETE 0x00001
#define WUFFS_BASE__TOKEN__VBD__STRING__ALL_ASCII 0x00002

typedef struct {
// Bits 63 .. 40 (24 bits) is the major value.
// Bits 39 .. 16 (24 bits) is the minor value.
Expand Down
9 changes: 5 additions & 4 deletions internal/cgen/data.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

27 changes: 27 additions & 0 deletions release/c/wuffs-unsupported-snapshot.c
Expand Up @@ -1492,6 +1492,33 @@ wuffs_base__io_buffer::writer_io_position() const {
#define WUFFS_BASE__TOKEN__VALUE_BASE_DETAIL__SHIFT 16
#define WUFFS_BASE__TOKEN__LENGTH__SHIFT 0

#define WUFFS_BASE__TOKEN__VBC__FILLER 0
#define WUFFS_BASE__TOKEN__VBC__STRUCTURE 1
#define WUFFS_BASE__TOKEN__VBC__NUMBER 2
#define WUFFS_BASE__TOKEN__VBC__STRING 3
#define WUFFS_BASE__TOKEN__VBC__UNICODE_CODE_POINT 4
#define WUFFS_BASE__TOKEN__VBC__BYTES 5

#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__PUSH 0x00001
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__POP 0x00002
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__FROM_NONE 0x00010
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__FROM_LIST 0x00020
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__FROM_DICT 0x00040
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__TO_NONE 0x01000
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__TO_LIST 0x02000
#define WUFFS_BASE__TOKEN__VBD__STRUCTURE__TO_DICT 0x04000

#define WUFFS_BASE__TOKEN__VBD__NUMBER__LITERAL 0x00001
#define WUFFS_BASE__TOKEN__VBD__NUMBER__LITERAL__UNDEFINED 0x00011
#define WUFFS_BASE__TOKEN__VBD__NUMBER__LITERAL__NULL 0x00021
#define WUFFS_BASE__TOKEN__VBD__NUMBER__LITERAL__FALSE 0x00041
#define WUFFS_BASE__TOKEN__VBD__NUMBER__LITERAL__TRUE 0x00081
#define WUFFS_BASE__TOKEN__VBD__NUMBER__INTEGER 0x00002
#define WUFFS_BASE__TOKEN__VBD__NUMBER__FLOATING_POINT 0x00004

#define WUFFS_BASE__TOKEN__VBD__STRING__INCOMPLETE 0x00001
#define WUFFS_BASE__TOKEN__VBD__STRING__ALL_ASCII 0x00002

typedef struct {
// Bits 63 .. 40 (24 bits) is the major value.
// Bits 39 .. 16 (24 bits) is the minor value.
Expand Down

0 comments on commit 9f7a250

Please sign in to comment.