Lines Matching refs:env

39 void (*crash_ptr)(fcode_env_t *env) = do_crash;
42 next_bytecode(fcode_env_t *env)
46 byte = *env->fcode_ptr;
47 env->fcode_ptr += env->fcode_incr;
52 get_next_token(fcode_env_t *env)
54 ushort_t token = next_bytecode(env);
56 token = (token << 8) | next_bytecode(env);
58 env->last_fcode = token;
63 get_short(fcode_env_t *env)
70 u = next_bytecode(env) << 8;
71 return (u | next_bytecode(env));
75 get_int(fcode_env_t *env)
82 u = get_short(env) << 16;
83 return (u | get_short(env));
87 expose_acf(fcode_env_t *env, char *name)
93 LINK_TO_ACF(env->lastlink), name, env->current);
97 do_code(fcode_env_t *env, int token, char *name, void (*fn)(fcode_env_t *))
99 env->table[token].name = name;
101 env->table[token].apf = NULL;
102 env->table[token].name = name;
104 header(env, name, strlen(name), 0);
105 env->table[token].apf = (acf_t)HERE;
107 expose_acf(env, name);
112 define_word(fcode_env_t *env, int flag, char *name, void (*fn)(fcode_env_t *))
114 header(env, name, strlen(name), flag);
116 expose_acf(env, name);
120 end0(fcode_env_t *env)
122 env->interpretting = 0;
126 end1(fcode_env_t *env)
128 env->interpretting = 0;
132 blit(fcode_env_t *env)
134 fstack_t d = (int)get_int(env);
136 literal(env);
139 void (*bbranch_ptrs[3])(fcode_env_t *env) = {
146 branch_common(fcode_env_t *env, short direction, fstack_t which, int doswap)
153 set_temporary_compile(env);
156 bmark(env);
158 swap(env);
160 compile_comma(env);
170 for (sp = env->ds; sp >= env->ds0; sp--) {
176 if (sp < env->ds0)
181 for (; sp < env->ds; sp++)
185 env->level--;
186 compile_comma(env);
187 temporary_execute(env);
192 bbranch(fcode_env_t *env)
194 short offset = (short)get_short(env);
196 branch_common(env, offset, 0, 1);
200 bqbranch(fcode_env_t *env)
202 short offset = (short)get_short(env);
204 branch_common(env, offset, 1, 0);
208 do_quote(fcode_env_t *env)
222 bquote(fcode_env_t *env)
228 count = len = next_bytecode(env);
229 if (env->state) {
234 *strptr++ = next_bytecode(env);
236 set_here(env, (uchar_t *)strptr, "bquote");
237 token_roundup(env, "bquote");
241 *strptr++ = next_bytecode(env);
243 push_string(env, stringbuff, len);
276 header(fcode_env_t *env, char *name, int len, flag_t flag)
284 token_roundup(env, "header");
301 *dptr = *((acf_t)env->current);
302 env->lastlink = dptr++;
303 set_here(env, (uchar_t *)dptr, "header");
305 if (name_is_debugged(env, name)) {
307 add_debug_acf(env, LINK_TO_ACF(env->lastlink));
313 token_common(fcode_env_t *env, int headered, int visible)
321 len = next_bytecode(env);
323 c = next_bytecode(env);
332 token = get_short(env);
333 env->last_token = token;
338 header(env, namebuff, len, 0);
339 env->table[token].flags = 0;
341 env->table[token].name = MALLOC(len+1);
342 strncpy(env->table[token].name, namebuff, len);
344 env->table[token].name = NULL;
346 env->last_token = token;
350 named_token(fcode_env_t *env)
352 token_common(env, 1, env->fcode_debug);
356 external_token(fcode_env_t *env)
358 token_common(env, 1, 1);
362 new_token(fcode_env_t *env)
364 token_common(env, 0, 0);
368 offset16(fcode_env_t *env)
370 env->offset_incr = 2;
374 minus_one(fcode_env_t *env)
380 zero(fcode_env_t *env)
386 one(fcode_env_t *env)
392 two(fcode_env_t *env)
398 three(fcode_env_t *env)
404 version1(fcode_env_t *env)
406 env->fcode_incr = 1;
410 start0(fcode_env_t *env)
412 env->fcode_incr = 1;
416 start1(fcode_env_t *env)
418 env->fcode_incr = 1;
422 start2(fcode_env_t *env)
424 env->fcode_incr = 2;
428 start4(fcode_env_t *env)
430 env->fcode_incr = 4;
464 byte_load(fcode_env_t *env)
478 fcode_buffer = env->fcode_buffer;
479 fcode_ptr = env->fcode_ptr;
480 fcode_incr = env->fcode_incr;
481 offset_incr = env->offset_incr;
482 interpretting = env->interpretting;
486 CHECK_DEPTH(env, 2, "byte-load");
488 env->fcode_ptr = env->fcode_buffer = (uchar_t *)POP(DS);
493 length = (env->fcode_buffer[4] << 24) | (env->fcode_buffer[5] << 16) |
494 (env->fcode_buffer[6] << 8) | env->fcode_buffer[7];
495 if (!check_fcode_header("byte-load", env->fcode_ptr, length))
498 env->fcode_incr = 1;
499 env->offset_incr = 1;
500 env->interpretting = 1;
501 env->level = 0;
505 debug_msg(db, "byte_load: %p, %d\n", env->fcode_buffer, fcode_xt);
507 env->fcode_buffer[0], env->fcode_buffer[1]);
509 (env->fcode_buffer[2]<<8)|(env->fcode_buffer[3]));
511 env->fcode_ptr += 8;
513 debug_msg(db, "Interpretting: %d\n", env->interpretting);
515 while (env->interpretting) {
520 if (!past_eob && env->fcode_ptr >= env->fcode_buffer + length) {
525 env->last_fcode_ptr = env->fcode_ptr;
526 token = get_next_token(env);
528 entry = &env->table[token];
531 DEBUGF(BYTELOAD_DS, output_data_stack(env, MSG_FC_DEBUG));
532 DEBUGF(BYTELOAD_RS, output_return_stack(env, 1, MSG_FC_DEBUG));
535 ((env->state && (entry->flags & IMMEDIATE) == 0)) ?
537 env->last_fcode_ptr - env->fcode_buffer, token,
544 if ((env->state) &&
547 compile_comma(env);
549 execute(env);
558 env->fcode_ptr = fcode_ptr;
559 env->fcode_buffer = fcode_buffer;
560 env->fcode_incr = fcode_incr;
561 env->offset_incr = offset_incr;
562 env->interpretting = interpretting;
566 btick(fcode_env_t *env)
568 int token = get_next_token(env);
570 PUSH(DS, (fstack_t)env->table[token].apf);
571 tick_literal(env);
575 show_fcode_def(fcode_env_t *env, char *type)
577 int i = env->last_token;
580 if (env->table[i].name)
582 env->table[i].name, i, env->table[i].apf);
585 env->table[i].apf);
590 bcolon(fcode_env_t *env)
592 if (env->state == 0) {
593 env->table[env->last_token].apf = (acf_t)HERE;
594 env->table[env->last_token].flags = 0;
595 show_fcode_def(env, "bcolon");
597 env->state |= 1;
602 bcreate(fcode_env_t *env)
604 env->table[env->last_token].apf = (acf_t)HERE;
605 show_fcode_def(env, "bcreate");
607 expose_acf(env, "<bcreate>");
611 get_token_name(fcode_env_t *env, int token, char **name, int *len)
613 *name = env->table[token].name;
621 bvalue(fcode_env_t *env)
623 env->table[env->last_token].apf = (acf_t)HERE;
624 show_fcode_def(env, "bvalue");
625 make_common_access(env, 0, 0, 1,
626 env->instance_mode, &noop, &noop, &set_value_actions);
630 bvariable(fcode_env_t *env)
632 env->table[env->last_token].apf = (acf_t)HERE;
633 show_fcode_def(env, "bvariable");
635 make_common_access(env, 0, 0, 1,
636 env->instance_mode, &instance_variable, &do_create, NULL);
640 bconstant(fcode_env_t *env)
642 env->table[env->last_token].apf = (acf_t)HERE;
643 show_fcode_def(env, "bconstant");
644 make_common_access(env, 0, 0, 1,
645 env->instance_mode, &do_constant, &do_constant, NULL);
649 bdefer(fcode_env_t *env)
651 env->table[env->last_token].apf = (acf_t)HERE;
652 show_fcode_def(env, "bdefer");
655 make_common_access(env, 0, 0, 1, env->instance_mode,
660 bbuffer_colon(fcode_env_t *env)
662 env->table[env->last_token].apf = (acf_t)HERE;
663 show_fcode_def(env, "buffer:");
665 make_common_access(env, 0, 0, 2, env->instance_mode,
670 do_field(fcode_env_t *env)
679 bfield(fcode_env_t *env)
681 env->table[env->last_token].apf = (acf_t)HERE;
682 show_fcode_def(env, "bfield");
684 over(env);
685 compile_comma(env);
686 add(env);
687 expose_acf(env, "<bfield>");
691 bto(fcode_env_t *env)
693 btick(env);
695 if (env->state) {
698 do_set_action(env);
703 get_token(fcode_env_t *env)
708 CHECK_DEPTH(env, 1, "get-token");
711 PUSH(DS, (fstack_t)env->table[tok].apf);
712 if (env->table[tok].flags & IMMEDIATE) immediate = 1;
717 set_token(fcode_env_t *env)
723 CHECK_DEPTH(env, 3, "set-token");
729 env->table[tok].flags |= IMMEDIATE;
731 env->table[tok].flags &= ~IMMEDIATE;
732 env->table[tok].apf = acf;
733 immediate = env->last_token;
734 env->last_token = tok;
735 show_fcode_def(env, "set_token");
736 env->last_token = immediate;
740 bof(fcode_env_t *env)
742 short offset = get_short(env);
743 branch_common(env, offset, 2, 0);
747 bcase(fcode_env_t *env)
749 env->level++;
750 set_temporary_compile(env);
755 bendcase(fcode_env_t *env)
757 COMPILE_TOKEN(env->table[0x46].apf); /* Hack for now... */
759 bresolve(env);
762 env->level--;
763 temporary_execute(env);
767 bendof(fcode_env_t *env)
769 short offset = get_short(env);
770 branch_common(env, offset, 0, 1);
771 bresolve(env);
775 fcode_revision(fcode_env_t *env)
782 alloc_mem(fcode_env_t *env)
784 CHECK_DEPTH(env, 1, "alloc-mem");
787 throw_from_fclib(env, 1, "alloc-mem failed");
792 free_mem(fcode_env_t *env)
796 CHECK_DEPTH(env, 2, "free-mem");
803 parse_two_int(fcode_env_t *env)
809 CHECK_DEPTH(env, 2, "parse-2int");
812 str = pop_a_string(env, &len);
815 throw_from_fclib(env, 1, "parse_2int");
823 left_parse_string(fcode_env_t *env)
828 CHECK_DEPTH(env, 3, "left-parse-string");
831 two_dup(env);
834 lstr = pop_a_string(env, &llen);
862 is_user_word(fcode_env_t *env)
868 CHECK_DEPTH(env, 3, "(is-user-word)");
870 name = pop_a_string(env, &len);
871 header(env, name, len, 0);
874 expose_acf(env, name);
878 f_error(fcode_env_t *env)
881 env->interpretting = 0;
883 env->last_fcode);
885 forth_abort(env, "Unimplemented FCODE token: 0x%x\n", env->last_fcode);
890 fcode_buffer_addr(fcode_env_t *env)
892 PUSH(DS, (fstack_t)(env->fcode_buffer));
900 fcode_env_t *env = initial_env;
902 ASSERT(env);