void ir_free_pagenodes(struct pagenode_t*);\r
static inline\r
int bytes_identical(const uint8_t*,const uint8_t*);\r
+static inline\r
+int classnames_identical(const uint8_t*,const uint8_t*);\r
static\r
void* stack_alloc(size_t);\r
#define struct_alloc(_T) ((struct _T*) stack_alloc(sizeof(struct _T)))\r
static\r
uint8_t* name_alloc(const uint8_t*);\r
+static\r
+uint8_t* classname_alloc(const uint8_t*);\r
extern //apc.c\r
long sys_pagesize;\r
static\r
if (name == NULL)\r
eprintf("Null child added to class %s\n", iter->name);\r
check:\r
- if (bytes_identical(iter->name, name))\r
+ if (classnames_identical(iter->name, name))\r
return iter;\r
if (iter->nextsib != NULL)\r
{ iter = iter->nextsib;\r
alloc:\r
iter = struct_alloc(ir_class_t);\r
iter->nextsib = class->nextchild;\r
- iter->name = name_alloc(name);\r
+ iter->name = classname_alloc(name);\r
return class->nextchild = iter;\r
}\r
\r
return (ca == cb);\r
}\r
\r
+static inline\r
+int classnames_identical\r
+( const uint8_t* stra,\r
+ const uint8_t* strb\r
+)\r
+{ int ca, cb;\r
+ do {\r
+ ca = *stra++;\r
+ cb = *strb++;\r
+ } while (ca && ca == cb);\r
+ return (ca == cb);\r
+}\r
+\r
/* Assign Setdata to Set\r
\r
*/\r
*(namepages.head->header.head)++ = '\0';\r
return name;\r
}\r
+\r
+static\r
+uint8_t* classname_alloc\r
+( const uint8_t* name_src )\r
+{ const uint8_t* iter;\r
+ uint8_t* name;\r
+ int head_mem;\r
+ copy:\r
+ name = (uint8_t*)namepages.head->header.head;\r
+ iter = name_src;\r
+ for (head_mem = PL_HEADMEM(namepages); *iter && head_mem; head_mem--)\r
+ *(namepages.head->header.head)++ = *iter++;\r
+ if (head_mem == 0) //not enough room\r
+ { namepages.head->header.next = (struct pagenode_t*) calloc(namepages.pagesize,1);\r
+ if (namepages.head->header.next == NULL)\r
+ eprintf("Memory allocation error\n");\r
+ namepages.head = namepages.head->header.next;\r
+ namepages.head->header.head = namepages.head->root;\r
+ goto copy;\r
+ }\r
+ *(namepages.head->header.head)++ = '\0';\r
+ return name;\r
+}\r
{ uint8_t* p, * ts, * pe, * eof;
int cs, ntok;
YYSTYPE lval;
-
ntok = 0;
p = ts = str;
pe = eof = p + size + 1;
-
- dprintf("\n|---Begin lexstring on p = %U, pe = %p.---|\n",p, pe);
-
%%write init;
%%write exec;
-
- dprintf("\n|---Ending lexstring of file %U, pushed %d tokens.---|\n",str, ntok);
-
return ntok;
}
// Mark the end of the filename
filename_end = iter;
// Lex from either the last period, if present, or filename end
+ dprintf("%U\n\t",filename);
ntok = (last_period) ?
lexer_lexstring(filename, (int)(last_period - filename))
: lexer_lexstring(filename, (int)(iter - filename));
if (*iter == '\0')
*iter = '_';
PUSHPATH(filename);
+ dprintf("\n\t[%i Token%s]\n", ntok, (ntok > 1) ? "s" : "");
return ntok + 1;
}
( uint8_t* dirname )
{ int ntok;
ntok = 0;
+ if (DEBUG) putchar('\t');
PUSHNAME(dirname);
PUSHOP(CLOPEN);
+ if (DEBUG) putchar('\n');
return ntok;
}
int lexer_closedir
( void )
{ int ntok = 0;
+ if (DEBUG) putchar('\t');
PUSHOP(CLCLOSE);
+ if (DEBUG) putchar('\n');
return ntok;
}
NUM NUM { $$ = (struct frame_spec_t) {SFACE,$1,$2}; }
| FACING { $$ = (struct frame_spec_t) {$1,0,0}; }
| FACING NUM NUM { $$ = (struct frame_spec_t) {$1,$2,$3}; }
+| %empty { $$ = (struct frame_spec_t) {SFACE,0,0}; }
;
%%