added a new special word and and or. compiler yet to be enhanced
This commit is contained in:
		| @ -650,6 +650,17 @@ enum | |||||||
| }; | }; | ||||||
|  |  | ||||||
| /* ========================================================================= */ | /* ========================================================================= */ | ||||||
|  | static int compile_and (hcl_t* hcl, hcl_oop_t src) | ||||||
|  | { | ||||||
|  | 	hcl_seterrbfmt (hcl, HCL_ENOIMPL, "and not implemented"); | ||||||
|  | 	return -1; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static int compile_or (hcl_t* hcl, hcl_oop_t src) | ||||||
|  | { | ||||||
|  | 	hcl_seterrbfmt (hcl, HCL_ENOIMPL, "or not implemented"); | ||||||
|  | 	return -1; | ||||||
|  | } | ||||||
|  |  | ||||||
| static int compile_break (hcl_t* hcl, hcl_oop_t src) | static int compile_break (hcl_t* hcl, hcl_oop_t src) | ||||||
| { | { | ||||||
| @ -1301,6 +1312,10 @@ static int compile_cons_xlist_expression (hcl_t* hcl, hcl_oop_t obj) | |||||||
| 	{ | 	{ | ||||||
| 		switch (syncode) | 		switch (syncode) | ||||||
| 		{ | 		{ | ||||||
|  | 			case HCL_SYNCODE_AND: | ||||||
|  | 				if (compile_and(hcl, obj) <= -1) return -1; | ||||||
|  | 				break; | ||||||
|  |  | ||||||
| 			case HCL_SYNCODE_BREAK: | 			case HCL_SYNCODE_BREAK: | ||||||
| 				/* break */ | 				/* break */ | ||||||
| 				if (compile_break(hcl, obj) <= -1) return -1; | 				if (compile_break(hcl, obj) <= -1) return -1; | ||||||
| @ -1331,6 +1346,10 @@ static int compile_cons_xlist_expression (hcl_t* hcl, hcl_oop_t obj) | |||||||
| 				if (compile_lambda(hcl, obj, 0) <= -1) return -1; | 				if (compile_lambda(hcl, obj, 0) <= -1) return -1; | ||||||
| 				break; | 				break; | ||||||
|  |  | ||||||
|  | 			case HCL_SYNCODE_OR: | ||||||
|  | 				if (compile_or(hcl, obj) <= -1) return -1; | ||||||
|  | 				break; | ||||||
|  |  | ||||||
| 			case HCL_SYNCODE_SET: | 			case HCL_SYNCODE_SET: | ||||||
| 				/* (set x 10)  | 				/* (set x 10)  | ||||||
| 				 * (set x (lambda (x y) (+ x y)) */ | 				 * (set x (lambda (x y) (+ x y)) */ | ||||||
|  | |||||||
| @ -34,7 +34,7 @@ static struct | |||||||
| 	hcl_oow_t  offset; | 	hcl_oow_t  offset; | ||||||
| } syminfo[] = | } syminfo[] = | ||||||
| { | { | ||||||
| 	 | 	{  3, { 'a','n','d' },                 HCL_SYNCODE_AND,     HCL_OFFSETOF(hcl_t,_and)  }, | ||||||
| 	{  5, { 'b','r','e','a','k' },         HCL_SYNCODE_BREAK,   HCL_OFFSETOF(hcl_t,_break)  }, | 	{  5, { 'b','r','e','a','k' },         HCL_SYNCODE_BREAK,   HCL_OFFSETOF(hcl_t,_break)  }, | ||||||
| 	{  5, { 'd','e','f','u','n' },         HCL_SYNCODE_DEFUN,   HCL_OFFSETOF(hcl_t,_defun)  }, | 	{  5, { 'd','e','f','u','n' },         HCL_SYNCODE_DEFUN,   HCL_OFFSETOF(hcl_t,_defun)  }, | ||||||
| 	{  2, { 'd','o' },                     HCL_SYNCODE_DO,      HCL_OFFSETOF(hcl_t,_do)  }, | 	{  2, { 'd','o' },                     HCL_SYNCODE_DO,      HCL_OFFSETOF(hcl_t,_do)  }, | ||||||
| @ -42,6 +42,7 @@ static struct | |||||||
| 	{  4, { 'e','l','s','e' },             HCL_SYNCODE_ELSE,    HCL_OFFSETOF(hcl_t,_else)   }, | 	{  4, { 'e','l','s','e' },             HCL_SYNCODE_ELSE,    HCL_OFFSETOF(hcl_t,_else)   }, | ||||||
| 	{  2, { 'i','f' },                     HCL_SYNCODE_IF,      HCL_OFFSETOF(hcl_t,_if)     }, | 	{  2, { 'i','f' },                     HCL_SYNCODE_IF,      HCL_OFFSETOF(hcl_t,_if)     }, | ||||||
| 	{  6, { 'l','a','m','b','d','a' },     HCL_SYNCODE_LAMBDA,  HCL_OFFSETOF(hcl_t,_lambda) }, | 	{  6, { 'l','a','m','b','d','a' },     HCL_SYNCODE_LAMBDA,  HCL_OFFSETOF(hcl_t,_lambda) }, | ||||||
|  | 	{  2, { 'o','r' },                     HCL_SYNCODE_OR,      HCL_OFFSETOF(hcl_t,_or)  }, | ||||||
| 	{  6, { 'r','e','t','u','r','n'},      HCL_SYNCODE_RETURN,  HCL_OFFSETOF(hcl_t,_return) }, | 	{  6, { 'r','e','t','u','r','n'},      HCL_SYNCODE_RETURN,  HCL_OFFSETOF(hcl_t,_return) }, | ||||||
| 	{  3, { 's','e','t' },                 HCL_SYNCODE_SET,     HCL_OFFSETOF(hcl_t,_set)    }, | 	{  3, { 's','e','t' },                 HCL_SYNCODE_SET,     HCL_OFFSETOF(hcl_t,_set)    }, | ||||||
| 	{  5, { 'u','n','t','i','l' },         HCL_SYNCODE_UNTIL,   HCL_OFFSETOF(hcl_t,_until)  }, | 	{  5, { 'u','n','t','i','l' },         HCL_SYNCODE_UNTIL,   HCL_OFFSETOF(hcl_t,_until)  }, | ||||||
|  | |||||||
| @ -1004,13 +1004,15 @@ struct hcl_t | |||||||
| 	hcl_oop_t _true; | 	hcl_oop_t _true; | ||||||
| 	hcl_oop_t _false; | 	hcl_oop_t _false; | ||||||
|  |  | ||||||
|  | 	hcl_oop_t _and;    /* symbol */ | ||||||
| 	hcl_oop_t _break;  /* symbol */ | 	hcl_oop_t _break;  /* symbol */ | ||||||
| 	hcl_oop_t _defun;  /* symbol */ | 	hcl_oop_t _defun;  /* symbol */ | ||||||
| 	hcl_oop_t _do;  /* symbol */ | 	hcl_oop_t _do;     /* symbol */ | ||||||
| 	hcl_oop_t _elif;   /* symbol */ | 	hcl_oop_t _elif;   /* symbol */ | ||||||
| 	hcl_oop_t _else;   /* symbol */ | 	hcl_oop_t _else;   /* symbol */ | ||||||
| 	hcl_oop_t _if;     /* symbol */ | 	hcl_oop_t _if;     /* symbol */ | ||||||
| 	hcl_oop_t _lambda; /* symbol */ | 	hcl_oop_t _lambda; /* symbol */ | ||||||
|  | 	hcl_oop_t _or;     /* symbol */ | ||||||
| 	hcl_oop_t _return; /* symbol */ | 	hcl_oop_t _return; /* symbol */ | ||||||
| 	hcl_oop_t _set;    /* symbol */ | 	hcl_oop_t _set;    /* symbol */ | ||||||
| 	hcl_oop_t _until;  /* symbol */ | 	hcl_oop_t _until;  /* symbol */ | ||||||
| @ -1269,13 +1271,15 @@ typedef enum hcl_brand_t hcl_brand_t; | |||||||
| enum hcl_syncode_t | enum hcl_syncode_t | ||||||
| { | { | ||||||
| 	/* SYNCODE 0 means it's not a syncode object. so it begins with 1 */ | 	/* SYNCODE 0 means it's not a syncode object. so it begins with 1 */ | ||||||
| 	HCL_SYNCODE_BREAK = 1, | 	HCL_SYNCODE_AND = 1, | ||||||
|  | 	HCL_SYNCODE_BREAK, | ||||||
| 	HCL_SYNCODE_DEFUN, | 	HCL_SYNCODE_DEFUN, | ||||||
| 	HCL_SYNCODE_DO, | 	HCL_SYNCODE_DO, | ||||||
| 	HCL_SYNCODE_ELIF, | 	HCL_SYNCODE_ELIF, | ||||||
| 	HCL_SYNCODE_ELSE, | 	HCL_SYNCODE_ELSE, | ||||||
| 	HCL_SYNCODE_IF, | 	HCL_SYNCODE_IF, | ||||||
| 	HCL_SYNCODE_LAMBDA, | 	HCL_SYNCODE_LAMBDA, | ||||||
|  | 	HCL_SYNCODE_OR, | ||||||
| 	HCL_SYNCODE_RETURN, | 	HCL_SYNCODE_RETURN, | ||||||
| 	HCL_SYNCODE_SET, | 	HCL_SYNCODE_SET, | ||||||
| 	HCL_SYNCODE_UNTIL, | 	HCL_SYNCODE_UNTIL, | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user